From 51e44db7798bc638be68af8be7b02f162be68d35 Mon Sep 17 00:00:00 2001 From: Daniel Ledda Date: Sat, 20 Dec 2025 00:10:42 +0100 Subject: [PATCH] big updats --- app/{DJDonate.tsx => DjDonate.tsx} | 0 app/{DJEmail.tsx => DjEmail.tsx} | 0 app/{DJTooltip.tsx => DjTooltip.tsx} | 4 +- app/api.ts | 22 +- app/blog/DjBlogRoot.tsx | 39 ++ app/blog/client.ts | 7 + app/blog/server.ts | 7 + app/generative-energy/GEDeutsch.tsx | 24 +- app/generative-energy/GEDeutschArticle.tsx | 29 +- app/generative-energy/GEMain.tsx | 18 +- app/generative-energy/GERoot.tsx | 10 +- app/home/{DJHomeRoot.tsx => DjHomeRoot.tsx} | 48 +-- app/home/client.ts | 4 +- app/home/server.ts | 4 +- app/useAsyncState.ts | 9 +- ...{useDJSSRContext.ts => useDjSSRContext.ts} | 6 +- app/useHead.ts | 4 +- app/util.ts | 22 +- deno.json | 7 +- deno.lock | 408 +++++++++++++++--- deps.ts | 6 - main.ts | 22 +- public/blog/articles/19-12-2025.html | 51 +++ public/blog/index_template.html | 22 + public/{ => home}/index_old.html | 0 25 files changed, 570 insertions(+), 203 deletions(-) rename app/{DJDonate.tsx => DjDonate.tsx} (100%) rename app/{DJEmail.tsx => DjEmail.tsx} (100%) rename app/{DJTooltip.tsx => DjTooltip.tsx} (96%) create mode 100644 app/blog/DjBlogRoot.tsx create mode 100644 app/blog/client.ts create mode 100644 app/blog/server.ts rename app/home/{DJHomeRoot.tsx => DjHomeRoot.tsx} (77%) rename app/{useDJSSRContext.ts => useDjSSRContext.ts} (70%) delete mode 100644 deps.ts create mode 100644 public/blog/articles/19-12-2025.html create mode 100644 public/blog/index_template.html rename public/{ => home}/index_old.html (100%) diff --git a/app/DJDonate.tsx b/app/DjDonate.tsx similarity index 100% rename from app/DJDonate.tsx rename to app/DjDonate.tsx diff --git a/app/DJEmail.tsx b/app/DjEmail.tsx similarity index 100% rename from app/DJEmail.tsx rename to app/DjEmail.tsx diff --git a/app/DJTooltip.tsx b/app/DjTooltip.tsx similarity index 96% rename from app/DJTooltip.tsx rename to app/DjTooltip.tsx index 909d626..e5ee03d 100644 --- a/app/DJTooltip.tsx +++ b/app/DjTooltip.tsx @@ -1,4 +1,4 @@ -import { nextTick, inject, provide, watch, type InjectionKey, onBeforeUnmount, watchEffect, onMounted, type Ref, type CSSProperties, defineComponent, ref } from "vue"; +import { nextTick, inject, provide, watch, type InjectionKey, onBeforeUnmount, watchEffect, onMounted, type Ref, defineComponent, ref } from "vue"; import { addCSS, css, h as djh } from "@/util.ts"; type TooltipContext = { @@ -122,7 +122,7 @@ export default defineComponent({ {...attrs} onMouseenter={(e) => tooltip.show(props.tooltip, e.pageX, e.pageY)} onMouseleave={() => tooltip.hide()}> - {slots.default && } + {slots.default?.()} ; }, diff --git a/app/api.ts b/app/api.ts index 26606f6..df65d52 100644 --- a/app/api.ts +++ b/app/api.ts @@ -1,23 +1,23 @@ -export type DJAPIEndpoint = "/rp-articles"; +export type DjAPIEndpoint = "/rp-articles"; -type RPArticle = { - title: string, - slug: string; - titleDe: string, - titleEn: string, - author: string, +type RPArticle = { + title: string, + slug: string; + titleDe: string, + titleEn: string, + author: string, tags?: string[], }; -export interface DJAPIResultMap extends Record { +export interface DjAPIResultMap extends Record { "/rp-articles": RPArticle[]; } -export type DJAPIResult = DJAPIResultMap[DJAPIEndpoint]; +export type DjAPIResult = DjAPIResultMap[DjAPIEndpoint]; -export default async function getDJAPI( +export default async function getDjAPI( hostUrl: string, endpoint: T, -): Promise { +): Promise { return await (await fetch(`${hostUrl}/api${endpoint}`)).json(); } diff --git a/app/blog/DjBlogRoot.tsx b/app/blog/DjBlogRoot.tsx new file mode 100644 index 0000000..101c414 --- /dev/null +++ b/app/blog/DjBlogRoot.tsx @@ -0,0 +1,39 @@ +import { defineComponent, ref } from "vue"; +import useHead from "@/useHead.ts"; +import DjTooltip, { setupTooltip } from "@/DjTooltip.tsx"; +import { addCSS, css } from "@/util.ts"; + +const styles = css` +.supercontainer { + width: 100vw; + display: flex; + flex-direction: column; + align-items: center; +} +.container { + width: 800px; +} +`; + +export default defineComponent({ + name: "app-root", + setup() { + addCSS('dj-blog-root', styles); + + useHead({ title: "djblog Home" }); + + const tooltipCarrier = ref(null); + setupTooltip({ carrier: tooltipCarrier }); + + return () => <> +
+
+
+ +

dj blog

+
+
+
+ ; + }, +}); diff --git a/app/blog/client.ts b/app/blog/client.ts new file mode 100644 index 0000000..16cf57b --- /dev/null +++ b/app/blog/client.ts @@ -0,0 +1,7 @@ +import { createSSRApp } from "vue"; +import DjBlogRoot from "@/blog//DjBlogRoot.tsx"; +import { cssRegistry } from "@/util.ts"; + +createSSRApp(DjBlogRoot) + .provide(cssRegistry, new Set()) + .mount("#app-root"); diff --git a/app/blog/server.ts b/app/blog/server.ts new file mode 100644 index 0000000..bce4a86 --- /dev/null +++ b/app/blog/server.ts @@ -0,0 +1,7 @@ +import { createSSRApp } from "vue"; +import DjBlogRoot from "@/blog/DjBlogRoot.tsx"; + +export default function createApp() { + const app = createSSRApp(DjBlogRoot); + return { app, router: null }; +} diff --git a/app/generative-energy/GEDeutsch.tsx b/app/generative-energy/GEDeutsch.tsx index 7316691..9c9f29b 100644 --- a/app/generative-energy/GEDeutsch.tsx +++ b/app/generative-energy/GEDeutsch.tsx @@ -1,22 +1,20 @@ import { defineComponent } from "vue"; import { RouterLink } from "vue-router"; -import DJEmail from "@/DJEmail.tsx"; +import DjEmail from "@/DjEmail.tsx"; import useHead from "@/useHead.ts"; import useAsyncState from "@/useAsyncState.ts"; -import getDJAPI from "@/api.ts"; -import DJTooltip from "@/DJTooltip.tsx"; +import getDjAPI from "@/api.ts"; +import DjTooltip from "@/DjTooltip.tsx"; export default defineComponent({ name: "ge-deutsch", async setup() { useHead({ title: "Ray Peat Artikel auf Deutsch" }); - const { - result: rpArticles, - stateIsReady, - } = useAsyncState("rp-articles", ({ hostUrl }) => getDJAPI(hostUrl, "/rp-articles")); + const rpArticles = useAsyncState("rp-articles", ({ hostUrl }) => getDjAPI(hostUrl, "/rp-articles")); + + await rpArticles.done; - await stateIsReady; return () => <>

Ray Peat Deutsche Übersetzungen

@@ -29,9 +27,9 @@ export default defineComponent({

Artikelliste

    - {rpArticles.value && rpArticles.value.map((_) => ( + {rpArticles.result.value && rpArticles.result.value.map((_) => (
  • - »${ _.titleEn }«`}> + »${ _.titleEn }«`}> {_.tags?.includes('in-arbeit') ? _.titleDe : ( @@ -40,7 +38,7 @@ export default defineComponent({ )} {_.tags?.map(tag => {tag})} - +
  • ))}
@@ -56,7 +54,7 @@ export default defineComponent({
  • Gelatin, stress, longevity
  • Unsaturated fatty acids: Nutritionally essential, or toxic?
  • - Schick mir deine Vorschläge! + Schick mir deine Vorschläge!
    @@ -82,7 +80,7 @@ export default defineComponent({

    Helfen

    Falls was bei der Übersetzung auffällt oder besonders unidiomatisch klingt, bzw. der deutschen - Fachsprache der Medizin nicht gerecht sein sollte, kannst du mir unter {" "} + Fachsprache der Medizin nicht gerecht sein sollte, kannst du mir unter {" "} eine Mail senden. Meine Muttersprache ist schließlich Englisch und ich bin kein professioneller Übersetzer! Falls jemand Hilfe leisten möchte, sag gerne Bescheid! diff --git a/app/generative-energy/GEDeutschArticle.tsx b/app/generative-energy/GEDeutschArticle.tsx index 0189902..68e948c 100644 --- a/app/generative-energy/GEDeutschArticle.tsx +++ b/app/generative-energy/GEDeutschArticle.tsx @@ -1,9 +1,9 @@ -import { createTextVNode, computed, defineComponent, h, inject, onServerPrefetch, ref, type VNode, watchEffect } from "vue"; +import { createTextVNode, computed, defineComponent, h, inject, ref, type VNode } from "vue"; import { RouterLink } from "vue-router"; import useAsyncState from "@/useAsyncState.ts"; import useHead from "@/useHead.ts"; -import DJEmail from "@/DJEmail.tsx"; -import getDJAPI from "@/api.ts"; +import DjEmail from "@/DjEmail.tsx"; +import getDjAPI from "@/api.ts"; export default defineComponent({ name: "ge-deutsch-article", @@ -25,8 +25,8 @@ export default defineComponent({ (innerHTML: string) => Object.assign(document.createElement("div"), { innerHTML }), ); - const { result: articleContent, stateIsReady } = useAsyncState( - "ge-deutsch-article-data", + const articleContent = useAsyncState( + "ge-deutsch-article-content", async ({ hostUrl }) => { const articleResponse = await fetch(`${hostUrl}/generative-energy/content/${props.articleName}.html`); const result = await articleResponse.text(); @@ -34,15 +34,12 @@ export default defineComponent({ }, ); - const { - result: articleData, - stateIsReady: articleDataReady, - } = useAsyncState('article-data', ({hostUrl}) => getDJAPI(hostUrl, '/rp-articles')); + const articlesMetadata = useAsyncState('article-metadata', ({hostUrl}) => getDjAPI(hostUrl, '/rp-articles')); - const articleMetadata = computed(() => articleData.value?.find(_ => _.slug === props.articleName)); + const articleMetadata = computed(() => articlesMetadata.result.value?.find(_ => _.slug === props.articleName)); - useHead({ - title: () => articleMetadata.value?.title ?? '', + useHead({ + title: () => articleMetadata.value?.title ?? '', metatags: () => articleMetadata.value ? [ { name: 'title', content: articleMetadata.value.title }, { name: 'author', content: articleMetadata.value.author }, @@ -92,14 +89,14 @@ export default defineComponent({ } function ArticleContentTransformed() { - if (articleContent.value) { - const dom = parseDom(articleContent.value); + if (articleContent.result.value) { + const dom = parseDom(articleContent.result.value); return h("div", {}, [...dom.children].map((_) => transformArticleNode(_))); } return

    Artikel lädt...
    ; } - await Promise.all([stateIsReady, articleDataReady]); + await Promise.all([ articleContent.done, articlesMetadata.done ]); return () => (
    @@ -111,7 +108,7 @@ export default defineComponent({

    Bei dem untenstehenden Artikel handelt es sich um eine hobbymäßige, amateurhafte Übersetzung des - Artikels „{ articleMetadata.value?.titleEn }“ von Ray Peat. Bei Ungenauigkeiten oder Fehlübersetzungen freue ich mich über eine Mail! + Artikels „{ articleMetadata.value?.titleEn }“ von Ray Peat. Bei Ungenauigkeiten oder Fehlübersetzungen freue ich mich über eine Mail!

    { articleMetadata.value?.tags?.includes('in-arbeit') &&
    🚧 Bitte beachte, dass diese Übersetzung noch in Arbeit ist! 🚧
    }
    diff --git a/app/generative-energy/GEMain.tsx b/app/generative-energy/GEMain.tsx index 0b56e23..ebb6c3d 100644 --- a/app/generative-energy/GEMain.tsx +++ b/app/generative-energy/GEMain.tsx @@ -1,6 +1,6 @@ import { RouterLink } from "vue-router"; import useHead from "@/useHead.ts"; -import DJTooltip from "@/DJTooltip.tsx"; +import DjTooltip from "@/DjTooltip.tsx"; export default { name: "ge-main", @@ -21,14 +21,14 @@ export default {
    • - + Thyroid Calculator - +
    • - + Ray Peat Articles in German - +
    @@ -36,14 +36,14 @@ export default { diff --git a/app/generative-energy/GERoot.tsx b/app/generative-energy/GERoot.tsx index 0d7cf8a..f0600e2 100644 --- a/app/generative-energy/GERoot.tsx +++ b/app/generative-energy/GERoot.tsx @@ -1,12 +1,12 @@ import { defineComponent, ref, Suspense, type VNode } from "vue"; import { type RouteRecordRaw, RouterLink, RouterView, useRoute } from "vue-router"; import GEMain from "@/generative-energy/GEMain.tsx"; -import DJEmail from "@/DJEmail.tsx"; +import DjEmail from "@/DjEmail.tsx"; import GEDeutsch from "@/generative-energy/GEDeutsch.tsx"; import GEDeutschArticle from "@/generative-energy/GEDeutschArticle.tsx"; import GECalculator from "@/generative-energy/GECalculator.tsx"; -import DJDonate from "@/DJDonate.tsx"; -import { setupTooltip } from "@/DJTooltip.tsx"; +import DjDonate from "@/DjDonate.tsx"; +import { setupTooltip } from "@/DjTooltip.tsx"; export const routes: RouteRecordRaw[] = [ { @@ -67,9 +67,9 @@ export default defineComponent({
    - djledda.net {new Date().getFullYear()} - {() => "Contact"} + djledda.net {new Date().getFullYear()} - {() => "Contact"}
    - +
    diff --git a/app/home/DJHomeRoot.tsx b/app/home/DjHomeRoot.tsx similarity index 77% rename from app/home/DJHomeRoot.tsx rename to app/home/DjHomeRoot.tsx index 8f6288c..72ef97d 100644 --- a/app/home/DJHomeRoot.tsx +++ b/app/home/DjHomeRoot.tsx @@ -1,7 +1,7 @@ import { defineComponent, computed, ref, type Ref } from "vue"; import useHead from "@/useHead.ts"; -import DJTooltip, { setupTooltip } from "@/DJTooltip.tsx"; -import DJEmail from "@/DJEmail.tsx"; +import DjTooltip, { setupTooltip } from "@/DjTooltip.tsx"; +import DjEmail from "@/DjEmail.tsx"; export default defineComponent({ name: "app-root", @@ -33,64 +33,64 @@ export default defineComponent({
    - + dj legt krasse Mucke auf toggleDude(e, dude1Spinning)} /> - - + + DJ Ledda - - + + dj laying down some sick beats toggleDude(e, dude2Spinning) } /> - +
    diff --git a/app/home/client.ts b/app/home/client.ts index 178f133..a94a50c 100644 --- a/app/home/client.ts +++ b/app/home/client.ts @@ -1,7 +1,7 @@ import { createSSRApp } from "vue"; -import DJHomeRoot from "@/home/DJHomeRoot.tsx"; +import DjHomeRoot from "@/home/DjHomeRoot.tsx"; import { cssRegistry } from "@/util.ts"; -createSSRApp(DJHomeRoot) +createSSRApp(DjHomeRoot) .provide(cssRegistry, new Set()) .mount("#app-root"); diff --git a/app/home/server.ts b/app/home/server.ts index e218e76..f99f161 100644 --- a/app/home/server.ts +++ b/app/home/server.ts @@ -1,7 +1,7 @@ import { createSSRApp } from "vue"; -import DJHomeRoot from "@/home/DJHomeRoot.tsx"; +import DjHomeRoot from "@/home/DjHomeRoot.tsx"; export default function createApp() { - const app = createSSRApp(DJHomeRoot); + const app = createSSRApp(DjHomeRoot); return { app, router: null }; } diff --git a/app/useAsyncState.ts b/app/useAsyncState.ts index 08dfce6..1f6312b 100644 --- a/app/useAsyncState.ts +++ b/app/useAsyncState.ts @@ -1,8 +1,7 @@ import { onMounted, onServerPrefetch, type ShallowRef, shallowRef } from "vue"; -import useDJSSRContext from "@/useDJSSRContext.ts"; +import useDjSSRContext from "@/useDjSSRContext.ts"; declare global { - // deno-lint-ignore no-var var appstate: Partial>; } @@ -10,8 +9,8 @@ export default function useAsyncState( key: string, getter: (context: { hostUrl: string }) => Promise, options?: { suspensible: boolean }, -): { result: ShallowRef; stateIsReady: Promise } { - const ssrContext = useDJSSRContext(); +): { result: ShallowRef; done: Promise } { + const ssrContext = useDjSSRContext(); const isClient = typeof ssrContext === "undefined"; const registry = ssrContext?.registry ?? globalThis?.appstate; @@ -51,5 +50,5 @@ export default function useAsyncState( } } - return { result: state, stateIsReady: promise }; + return { result: state, done: promise }; } diff --git a/app/useDJSSRContext.ts b/app/useDjSSRContext.ts similarity index 70% rename from app/useDJSSRContext.ts rename to app/useDjSSRContext.ts index 10ae13b..3f980e6 100644 --- a/app/useDJSSRContext.ts +++ b/app/useDjSSRContext.ts @@ -1,6 +1,6 @@ import { type MaybeRefOrGetter, useSSRContext } from "vue"; -export type DJSSRContext = { +export type DjSSRContext = { head: { title: MaybeRefOrGetter; metatags: MaybeRefOrGetter>; @@ -9,6 +9,6 @@ export type DJSSRContext = { styles: Record; }; -export default function useDJSSRContext() { - return useSSRContext(); +export default function useDjSSRContext() { + return useSSRContext(); } diff --git a/app/useHead.ts b/app/useHead.ts index 2131dba..45afbcf 100644 --- a/app/useHead.ts +++ b/app/useHead.ts @@ -1,12 +1,12 @@ import { watch, toValue, type MaybeRefOrGetter } from 'vue'; -import useDJSSRContext from "@/useDJSSRContext.ts"; +import useDjSSRContext from "@/useDjSSRContext.ts"; import { h } from "@/util.ts"; export default function useHead(params: { title: MaybeRefOrGetter, metatags?: MaybeRefOrGetter> }) { - const context = useDJSSRContext(); + const context = useDjSSRContext(); if (context) { context.head.title = params.title; diff --git a/app/util.ts b/app/util.ts index 6c1ebb2..d3ee707 100644 --- a/app/util.ts +++ b/app/util.ts @@ -1,5 +1,5 @@ import { type InjectionKey, inject } from 'vue'; -import useDJSSRContext from "@/useDJSSRContext.ts"; +import useDjSSRContext from "@/useDjSSRContext.ts"; export function gid(id: string, doc: (Document | ShadowRoot) | undefined) { return ((doc ?? document).getElementById(id)); @@ -46,7 +46,7 @@ export function css(strs: TemplateStringsArray, ...vals: string[]) { export const cssRegistry = Symbol('css-registry') as InjectionKey>; export function addCSS(key: string, css: string) { - const context = useDJSSRContext(); + const context = useDjSSRContext(); if (context && !context.styles[key]) { context.styles[key] = css; } else { @@ -58,21 +58,3 @@ export function addCSS(key: string, css: string) { } } } - -/* -export class DJElement extends HTMLElement { - static styles: CSSStyleSheet; - - static template: HTMLTemplateElement; - - root: ShadowRoot; - - constructor() { - super(); - const statics = this.constructor as typeof DJElement; - this.root = this.attachShadow({ mode: "open" }); - this.root.appendChild(statics.template.content.cloneNode(true)); - this.root.adoptedStyleSheets = statics.styles ? [statics.styles] : []; - } -} -*/ diff --git a/deno.json b/deno.json index c816065..260caea 100644 --- a/deno.json +++ b/deno.json @@ -9,7 +9,12 @@ "indentWidth": 4 }, "imports": { - "vue": "npm:vue@^3.5.12", + "@b-fuze/deno-dom": "jsr:@b-fuze/deno-dom@^0.1.56", + "@deno/emit": "jsr:@deno/emit@^0.46.0", + "@std/fs": "jsr:@std/fs@^1.0.20", + "@std/http": "jsr:@std/http@^1.0.22", + "@std/path": "jsr:@std/path@^1.1.3", + "vue": "npm:vue@^3.5.26", "vue-router": "npm:vue-router@4.4.5", "vue/jsx-runtime": "npm:vue/jsx-runtime", "@vue/devtools-api": "npm:@vue/devtools-api", diff --git a/deno.lock b/deno.lock index af46a80..27f4a13 100644 --- a/deno.lock +++ b/deno.lock @@ -1,36 +1,60 @@ { - "version": "4", + "version": "5", "specifiers": { "jsr:@b-fuze/deno-dom@*": "0.1.48", + "jsr:@b-fuze/deno-dom@~0.1.56": "0.1.56", "jsr:@deno/cache-dir@0.13.2": "0.13.2", "jsr:@deno/emit@*": "0.46.0", + "jsr:@deno/emit@0.46": "0.46.0", "jsr:@deno/graph@~0.73.1": "0.73.1", + "jsr:@denosaurs/plug@1.1.0": "1.1.0", "jsr:@std/assert@0.223": "0.223.0", "jsr:@std/bytes@0.223": "0.223.0", + "jsr:@std/cli@^1.0.24": "1.0.24", "jsr:@std/cli@^1.0.6": "1.0.6", + "jsr:@std/encoding@1": "1.0.10", + "jsr:@std/encoding@^1.0.10": "1.0.10", "jsr:@std/encoding@^1.0.5": "1.0.5", "jsr:@std/fmt@0.223": "0.223.0", + "jsr:@std/fmt@1": "1.0.8", "jsr:@std/fmt@^1.0.3": "1.0.3", + "jsr:@std/fmt@^1.0.8": "1.0.8", "jsr:@std/fs@*": "0.223.0", "jsr:@std/fs@0.223": "0.223.0", + "jsr:@std/fs@1": "1.0.20", + "jsr:@std/fs@^1.0.20": "1.0.20", + "jsr:@std/html@^1.0.5": "1.0.5", "jsr:@std/http@*": "1.0.9", + "jsr:@std/http@^1.0.22": "1.0.22", + "jsr:@std/internal@^1.0.12": "1.0.12", "jsr:@std/io@0.223": "0.223.0", "jsr:@std/media-types@^1.0.3": "1.0.3", + "jsr:@std/media-types@^1.1.0": "1.1.0", "jsr:@std/net@^1.0.4": "1.0.4", + "jsr:@std/net@^1.0.6": "1.0.6", "jsr:@std/path@*": "1.0.7", "jsr:@std/path@0.223": "0.223.0", + "jsr:@std/path@1": "1.1.3", "jsr:@std/path@^1.0.7": "1.0.7", + "jsr:@std/path@^1.1.3": "1.1.3", + "jsr:@std/streams@^1.0.14": "1.0.14", "jsr:@std/streams@^1.0.7": "1.0.7", "npm:@types/node@*": "22.5.4", "npm:@vue/devtools-api@*": "6.6.4", "npm:vue-router@4.4.5": "4.4.5_vue@3.5.12", - "npm:vue@*": "3.5.12", - "npm:vue@^3.5.12": "3.5.12" + "npm:vue@*": "3.5.26", + "npm:vue@^3.5.26": "3.5.26" }, "jsr": { "@b-fuze/deno-dom@0.1.48": { "integrity": "bf5b591aef2e9e9c59adfcbb93a9ecd45bab5b7c8263625beafa5c8f1662e7da" }, + "@b-fuze/deno-dom@0.1.56": { + "integrity": "8030e2dc1d8750f1682b53462ab893d9c3470f2287feecbe22f44a88c54ab148", + "dependencies": [ + "jsr:@denosaurs/plug" + ] + }, "@deno/cache-dir@0.13.2": { "integrity": "c22419dfe27ab85f345bee487aaaadba498b005cce3644e9d2528db035c5454d", "dependencies": [ @@ -51,6 +75,15 @@ "@deno/graph@0.73.1": { "integrity": "cd69639d2709d479037d5ce191a422eabe8d71bb68b0098344f6b07411c84d41" }, + "@denosaurs/plug@1.1.0": { + "integrity": "eb2f0b7546c7bca2000d8b0282c54d50d91cf6d75cb26a80df25a6de8c4bc044", + "dependencies": [ + "jsr:@std/encoding@1", + "jsr:@std/fmt@1", + "jsr:@std/fs@1", + "jsr:@std/path@1" + ] + }, "@std/assert@0.223.0": { "integrity": "eb8d6d879d76e1cc431205bd346ed4d88dc051c6366365b1af47034b0670be24" }, @@ -60,15 +93,24 @@ "@std/cli@1.0.6": { "integrity": "d22d8b38c66c666d7ad1f2a66c5b122da1704f985d3c47f01129f05abb6c5d3d" }, + "@std/cli@1.0.24": { + "integrity": "b655a5beb26aa94f98add6bc8889f5fb9bc3ee2cc3fc954e151201f4c4200a5e" + }, "@std/encoding@1.0.5": { "integrity": "ecf363d4fc25bd85bd915ff6733a7e79b67e0e7806334af15f4645c569fefc04" }, + "@std/encoding@1.0.10": { + "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" + }, "@std/fmt@0.223.0": { "integrity": "6deb37794127dfc7d7bded2586b9fc6f5d50e62a8134846608baf71ffc1a5208" }, "@std/fmt@1.0.3": { "integrity": "97765c16aa32245ff4e2204ecf7d8562496a3cb8592340a80e7e554e0bb9149f" }, + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + }, "@std/fs@0.223.0": { "integrity": "3b4b0550b2c524cbaaa5a9170c90e96cbb7354e837ad1bdaf15fc9df1ae9c31c", "dependencies": [ @@ -76,18 +118,45 @@ "jsr:@std/path@0.223" ] }, + "@std/fs@1.0.20": { + "integrity": "e953206aae48d46ee65e8783ded459f23bec7dd1f3879512911c35e5484ea187", + "dependencies": [ + "jsr:@std/internal", + "jsr:@std/path@^1.1.3" + ] + }, + "@std/html@1.0.5": { + "integrity": "4e2d693f474cae8c16a920fa5e15a3b72267b94b84667f11a50c6dd1cb18d35e" + }, "@std/http@1.0.9": { "integrity": "d409fc319a5e8d4a154e576c758752e9700282d74f31357a12fec6420f9ecb6c", "dependencies": [ - "jsr:@std/cli", - "jsr:@std/encoding", + "jsr:@std/cli@^1.0.6", + "jsr:@std/encoding@^1.0.5", "jsr:@std/fmt@^1.0.3", - "jsr:@std/media-types", - "jsr:@std/net", + "jsr:@std/media-types@^1.0.3", + "jsr:@std/net@^1.0.4", "jsr:@std/path@^1.0.7", - "jsr:@std/streams" + "jsr:@std/streams@^1.0.7" ] }, + "@std/http@1.0.22": { + "integrity": "53f0bb70e23a2eec3e17c4240a85bb23d185b2e20635adb37ce0f03cc4ca012a", + "dependencies": [ + "jsr:@std/cli@^1.0.24", + "jsr:@std/encoding@^1.0.10", + "jsr:@std/fmt@^1.0.8", + "jsr:@std/fs@^1.0.20", + "jsr:@std/html", + "jsr:@std/media-types@^1.1.0", + "jsr:@std/net@^1.0.6", + "jsr:@std/path@^1.1.3", + "jsr:@std/streams@^1.0.14" + ] + }, + "@std/internal@1.0.12": { + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, "@std/io@0.223.0": { "integrity": "2d8c3c2ab3a515619b90da2c6ff5ea7b75a94383259ef4d02116b228393f84f1", "dependencies": [ @@ -98,9 +167,15 @@ "@std/media-types@1.0.3": { "integrity": "b12d30a7852f7578f4d210622df713bbfd1cbdd9b4ec2eaf5c1845ab70bab159" }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, "@std/net@1.0.4": { "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" }, + "@std/net@1.0.6": { + "integrity": "110735f93e95bb9feb95790a8b1d1bf69ec0dc74f3f97a00a76ea5efea25500c" + }, "@std/path@0.223.0": { "integrity": "593963402d7e6597f5a6e620931661053572c982fc014000459edc1f93cc3989", "dependencies": [ @@ -110,172 +185,363 @@ "@std/path@1.0.7": { "integrity": "76a689e07f0e15dcc6002ec39d0866797e7156629212b28f27179b8a5c3b33a1" }, + "@std/path@1.1.3": { + "integrity": "b015962d82a5e6daea980c32b82d2c40142149639968549c649031a230b1afb3", + "dependencies": [ + "jsr:@std/internal" + ] + }, "@std/streams@1.0.7": { "integrity": "1a93917ca0c58c01b2bfb93647189229b1702677f169b6fb61ad6241cd2e499b" + }, + "@std/streams@1.0.14": { + "integrity": "c0df6cdd73bd4bbcbe4baa89e323b88418c90ceb2d926f95aa99bdcdbfca2411" } }, "npm": { "@babel/helper-string-parser@7.25.9": { - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2fhelper-string-parser/-/helper-string-parser-7.25.9.tgz" + }, + "@babel/helper-string-parser@7.27.1": { + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2fhelper-string-parser/-/helper-string-parser-7.27.1.tgz" }, "@babel/helper-validator-identifier@7.25.9": { - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" + }, + "@babel/helper-validator-identifier@7.28.5": { + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" }, "@babel/parser@7.26.2": { "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dependencies": [ - "@babel/types" - ] + "@babel/types@7.26.0" + ], + "bin": true, + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2fparser/-/parser-7.26.2.tgz" + }, + "@babel/parser@7.28.5": { + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dependencies": [ + "@babel/types@7.28.5" + ], + "bin": true, + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2fparser/-/parser-7.28.5.tgz" }, "@babel/types@7.26.0": { "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", "dependencies": [ - "@babel/helper-string-parser", - "@babel/helper-validator-identifier" - ] + "@babel/helper-string-parser@7.25.9", + "@babel/helper-validator-identifier@7.25.9" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2ftypes/-/types-7.26.0.tgz" + }, + "@babel/types@7.28.5": { + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dependencies": [ + "@babel/helper-string-parser@7.27.1", + "@babel/helper-validator-identifier@7.28.5" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@babel%2ftypes/-/types-7.28.5.tgz" }, "@jridgewell/sourcemap-codec@1.5.0": { - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + }, + "@jridgewell/sourcemap-codec@1.5.5": { + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@jridgewell%2fsourcemap-codec/-/sourcemap-codec-1.5.5.tgz" }, "@types/node@22.5.4": { "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", "dependencies": [ "undici-types" - ] + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@types%2fnode/-/node-22.5.4.tgz" }, "@vue/compiler-core@3.5.12": { "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", "dependencies": [ - "@babel/parser", - "@vue/shared", - "entities", + "@babel/parser@7.26.2", + "@vue/shared@3.5.12", + "entities@4.5.0", "estree-walker", "source-map-js" - ] + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-core/-/compiler-core-3.5.12.tgz" + }, + "@vue/compiler-core@3.5.26": { + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "dependencies": [ + "@babel/parser@7.28.5", + "@vue/shared@3.5.26", + "entities@7.0.0", + "estree-walker", + "source-map-js" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-core/-/compiler-core-3.5.26.tgz" }, "@vue/compiler-dom@3.5.12": { "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", "dependencies": [ - "@vue/compiler-core", - "@vue/shared" - ] + "@vue/compiler-core@3.5.12", + "@vue/shared@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-dom/-/compiler-dom-3.5.12.tgz" + }, + "@vue/compiler-dom@3.5.26": { + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "dependencies": [ + "@vue/compiler-core@3.5.26", + "@vue/shared@3.5.26" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-dom/-/compiler-dom-3.5.26.tgz" }, "@vue/compiler-sfc@3.5.12": { "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", "dependencies": [ - "@babel/parser", - "@vue/compiler-core", - "@vue/compiler-dom", - "@vue/compiler-ssr", - "@vue/shared", + "@babel/parser@7.26.2", + "@vue/compiler-core@3.5.12", + "@vue/compiler-dom@3.5.12", + "@vue/compiler-ssr@3.5.12", + "@vue/shared@3.5.12", "estree-walker", - "magic-string", - "postcss", + "magic-string@0.30.12", + "postcss@8.4.47", "source-map-js" - ] + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-sfc/-/compiler-sfc-3.5.12.tgz" + }, + "@vue/compiler-sfc@3.5.26": { + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "dependencies": [ + "@babel/parser@7.28.5", + "@vue/compiler-core@3.5.26", + "@vue/compiler-dom@3.5.26", + "@vue/compiler-ssr@3.5.26", + "@vue/shared@3.5.26", + "estree-walker", + "magic-string@0.30.21", + "postcss@8.5.6", + "source-map-js" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-sfc/-/compiler-sfc-3.5.26.tgz" }, "@vue/compiler-ssr@3.5.12": { "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", "dependencies": [ - "@vue/compiler-dom", - "@vue/shared" - ] + "@vue/compiler-dom@3.5.12", + "@vue/shared@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-ssr/-/compiler-ssr-3.5.12.tgz" + }, + "@vue/compiler-ssr@3.5.26": { + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "dependencies": [ + "@vue/compiler-dom@3.5.26", + "@vue/shared@3.5.26" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fcompiler-ssr/-/compiler-ssr-3.5.26.tgz" }, "@vue/devtools-api@6.6.4": { - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fdevtools-api/-/devtools-api-6.6.4.tgz" }, "@vue/reactivity@3.5.12": { "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==", "dependencies": [ - "@vue/shared" - ] + "@vue/shared@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2freactivity/-/reactivity-3.5.12.tgz" + }, + "@vue/reactivity@3.5.26": { + "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", + "dependencies": [ + "@vue/shared@3.5.26" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2freactivity/-/reactivity-3.5.26.tgz" }, "@vue/runtime-core@3.5.12": { "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==", "dependencies": [ - "@vue/reactivity", - "@vue/shared" - ] + "@vue/reactivity@3.5.12", + "@vue/shared@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fruntime-core/-/runtime-core-3.5.12.tgz" + }, + "@vue/runtime-core@3.5.26": { + "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", + "dependencies": [ + "@vue/reactivity@3.5.26", + "@vue/shared@3.5.26" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fruntime-core/-/runtime-core-3.5.26.tgz" }, "@vue/runtime-dom@3.5.12": { "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==", "dependencies": [ - "@vue/reactivity", - "@vue/runtime-core", - "@vue/shared", - "csstype" - ] + "@vue/reactivity@3.5.12", + "@vue/runtime-core@3.5.12", + "@vue/shared@3.5.12", + "csstype@3.1.3" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fruntime-dom/-/runtime-dom-3.5.12.tgz" + }, + "@vue/runtime-dom@3.5.26": { + "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", + "dependencies": [ + "@vue/reactivity@3.5.26", + "@vue/runtime-core@3.5.26", + "@vue/shared@3.5.26", + "csstype@3.2.3" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fruntime-dom/-/runtime-dom-3.5.26.tgz" }, "@vue/server-renderer@3.5.12_vue@3.5.12": { "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==", "dependencies": [ - "@vue/compiler-ssr", - "@vue/shared", - "vue" - ] + "@vue/compiler-ssr@3.5.12", + "@vue/shared@3.5.12", + "vue@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fserver-renderer/-/server-renderer-3.5.12.tgz" + }, + "@vue/server-renderer@3.5.26_vue@3.5.26": { + "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", + "dependencies": [ + "@vue/compiler-ssr@3.5.26", + "@vue/shared@3.5.26", + "vue@3.5.26" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fserver-renderer/-/server-renderer-3.5.26.tgz" }, "@vue/shared@3.5.12": { - "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==" + "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fshared/-/shared-3.5.12.tgz" + }, + "@vue/shared@3.5.26": { + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/@vue%2fshared/-/shared-3.5.26.tgz" }, "csstype@3.1.3": { - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/csstype/-/csstype-3.1.3.tgz" + }, + "csstype@3.2.3": { + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/csstype/-/csstype-3.2.3.tgz" }, "entities@4.5.0": { - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/entities/-/entities-4.5.0.tgz" + }, + "entities@7.0.0": { + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/entities/-/entities-7.0.0.tgz" }, "estree-walker@2.0.2": { - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/estree-walker/-/estree-walker-2.0.2.tgz" }, "magic-string@0.30.12": { "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dependencies": [ - "@jridgewell/sourcemap-codec" - ] + "@jridgewell/sourcemap-codec@1.5.0" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/magic-string/-/magic-string-0.30.12.tgz" + }, + "magic-string@0.30.21": { + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": [ + "@jridgewell/sourcemap-codec@1.5.5" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/magic-string/-/magic-string-0.30.21.tgz" + }, + "nanoid@3.3.11": { + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "bin": true, + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/nanoid/-/nanoid-3.3.11.tgz" }, "nanoid@3.3.7": { - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "bin": true, + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/nanoid/-/nanoid-3.3.7.tgz" }, "picocolors@1.1.1": { - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/picocolors/-/picocolors-1.1.1.tgz" }, "postcss@8.4.47": { "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dependencies": [ - "nanoid", + "nanoid@3.3.7", "picocolors", "source-map-js" - ] + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/postcss/-/postcss-8.4.47.tgz" + }, + "postcss@8.5.6": { + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dependencies": [ + "nanoid@3.3.11", + "picocolors", + "source-map-js" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/postcss/-/postcss-8.5.6.tgz" }, "source-map-js@1.2.1": { - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/source-map-js/-/source-map-js-1.2.1.tgz" }, "undici-types@6.19.8": { - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/undici-types/-/undici-types-6.19.8.tgz" }, "vue-router@4.4.5_vue@3.5.12": { "integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==", "dependencies": [ "@vue/devtools-api", - "vue" - ] + "vue@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/vue-router/-/vue-router-4.4.5.tgz" }, "vue@3.5.12": { "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==", "dependencies": [ - "@vue/compiler-dom", - "@vue/compiler-sfc", - "@vue/runtime-dom", - "@vue/server-renderer", - "@vue/shared" - ] + "@vue/compiler-dom@3.5.12", + "@vue/compiler-sfc@3.5.12", + "@vue/runtime-dom@3.5.12", + "@vue/server-renderer@3.5.12_vue@3.5.12", + "@vue/shared@3.5.12" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/vue/-/vue-3.5.12.tgz" + }, + "vue@3.5.26": { + "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", + "dependencies": [ + "@vue/compiler-dom@3.5.26", + "@vue/compiler-sfc@3.5.26", + "@vue/runtime-dom@3.5.26", + "@vue/server-renderer@3.5.26_vue@3.5.26", + "@vue/shared@3.5.26" + ], + "tarball": "http://npm.srv.dc1.boerse-go.de:4873/vue/-/vue-3.5.26.tgz" } }, "workspace": { "dependencies": [ + "jsr:@b-fuze/deno-dom@~0.1.56", + "jsr:@deno/emit@0.46", + "jsr:@std/fs@^1.0.20", + "jsr:@std/http@^1.0.22", + "jsr:@std/path@^1.1.3", "npm:@vue/devtools-api@*", "npm:vue-router@4.4.5", "npm:vue@*", - "npm:vue@^3.5.12" + "npm:vue@^3.5.26" ] } } diff --git a/deps.ts b/deps.ts deleted file mode 100644 index 86c6a75..0000000 --- a/deps.ts +++ /dev/null @@ -1,6 +0,0 @@ -import "jsr:@deno/emit"; -import "jsr:@std/http"; -import "vue"; -import "jsr:@b-fuze/deno-dom"; -import "jsr:@std/fs"; -import "jsr:@std/path"; diff --git a/main.ts b/main.ts index 72c1c0b..84ef3bd 100644 --- a/main.ts +++ b/main.ts @@ -1,20 +1,20 @@ -import { serveFile } from "jsr:@std/http/file-server"; -import { STATUS_TEXT } from "jsr:@std/http/status"; +import { serveFile } from "@std/http/file-server"; +import { STATUS_TEXT } from "@std/http/status"; import { type App, toValue } from "vue"; import { type Router } from "vue-router"; import { renderToString } from "vue/server-renderer"; import transpileResponse from "./transpile.ts"; -import { DOMParser } from "jsr:@b-fuze/deno-dom"; -import { join } from "jsr:@std/path/join"; -import { exists } from "jsr:@std/fs"; -import { type DJSSRContext } from "@/useDJSSRContext.ts"; -import { type DJAPIResult, type DJAPIResultMap } from "@/api.ts"; +import { DOMParser } from "@b-fuze/deno-dom"; +import { join } from "@std/path/join"; +import { exists } from "@std/fs"; +import { type DjSSRContext } from "@/useDjSSRContext.ts"; +import { type DjAPIResult, type DjAPIResultMap } from "@/api.ts"; const utf8Decoder = new TextDecoder("utf-8"); const parser = new DOMParser(); -function appHeaderScript(params: { ssrContext: DJSSRContext, entryPath: string }) { +function appHeaderScript(params: { ssrContext: DjSSRContext, entryPath: string }) { return ` ${ toValue(params.ssrContext.head.title) } ${ toValue(params.ssrContext.head.metatags).map(_ => ``).join('\n\t') } @@ -55,7 +55,7 @@ for await (const path of publicFiles) { } async function getAPIResponse(apiReq: Request): Promise { - let jsonResponse: DJAPIResult | { error: string } | null = null; + let jsonResponse: DjAPIResult | { error: string } | null = null; let status = 200; const pathname = URL.parse(apiReq.url)?.pathname; @@ -76,7 +76,7 @@ async function getAPIResponse(apiReq: Request): Promise { paths.push(`${contentDir}${dirEnt.name}`); } } - const result: DJAPIResultMap['/rp-articles'] = []; + const result: DjAPIResultMap['/rp-articles'] = []; for (const filePath of paths) { const content = await Deno.readTextFile(filePath); const dom = parser.parseFromString(content, 'text/html'); @@ -197,7 +197,7 @@ Deno.serve({ app.provide("dom-parse", (innerHTML: string) => { return parser.parseFromString(innerHTML, "text/html").documentElement; }); - const ssrContext: DJSSRContext = { styles: {}, registry: {}, head: { title: "", metatags: [] } }; + const ssrContext: DjSSRContext = { styles: {}, registry: {}, head: { title: "", metatags: [] } }; if (router) { await router.replace(pathname.split('/' + baseDirectoryName)[1]); await router.isReady(); diff --git a/public/blog/articles/19-12-2025.html b/public/blog/articles/19-12-2025.html new file mode 100644 index 0000000..9b53093 --- /dev/null +++ b/public/blog/articles/19-12-2025.html @@ -0,0 +1,51 @@ +Poof, and it's gone + +
    +

    + Since reading Ray Peat's work and drastically improving my wellbeing, something that had been declining for years, I've + been thinking more and more often about the phenomenon of learned helpless and its relevance to my life. Sometimes, + looking back to past times is useful to help reorient yourself in the present and aim towards a more desirable future. + Sometimes, a new perspective or experience might instantly obliterate previous behaviour without any sort of concerted + mental or physical grunt to eradicate it. +

    +

    + On the flipside, I have sometimes hopelessly tried to forcefully change my behaviour, employing all the en vogue self-help tricks + to form long-term habits, only to practically immediately lose them not long afterwards. These kinds of experiences remind me of those + hypnosis advertisements that claim to have you give up smoking after just a few sessions; sometimes it's even after just one visit. There's no short + supply of stories of miracle cures or sudden, permanent breaks of addiction. Cold-turkey clean cuts that seem to arise with no obvious + effort on the part of the addict, no signs of worn willpower. +

    +

    + When I was sixteen I spent six weeks abroad in a small town called Marburg in Hesse, Germany. Those six weeks were spent + living with a new family along with my exchange student, who had lived six weeks with me and my family just prior to my + arrival in Germany. Six weeks of school, new acquaintances, a new language (albeit one I had been "studying" in the + Australian school system) and unfamiliar cultural quirks. +

    +

    + It was a barrage of stimulation, I came home every day from school and would collapse, totally exhausted, onto my + exchange student's bed, which was mine for the duration of the stay. It's not like I was actually expected to + learn anything or do any homework whilst I was at school here—I was basically on holidays and could really + have just treated it as such. Plenty of my own friends who had taken a similar trip certainly did. I'm not manyt of them + learnt or used much German beyond Wo ist McDonalds?. But I had been gradually becoming more fascinated with the + structure of German before arriving. Once there, especially at that age I presume, the Deutsch on the blackboard in + biology class looked more like a sophisticated puzzle game than a complete drag of a memorisation task. Each day was a + new game of deductive guesswork, and better still, I got to play with new ideas about how the language works every day + in the schoolyard with new friends I was making. New ways to describe how things are situated and move in relation to + one another, mysterious new prefixes and other linguistic building blocks, and the insane backwards word order of German + provided unlimited entertainment to see if I was up to the challenge. +

    +

    + On top of this, I was in the grade just above mine back home in Australia. Whilst that really shouldn't have made much + difference, the amount of responsibility and independece these kids were allowed to exercise at sixteen or seventeen was + nothing short of amazing to my adolescent self. I had never seen anything like it. Some of my classmates would stand out + the front of school during lunchtime and smoke a couple of cigarettes with their own teachers, something that still to + this day I find kind of insane. It certainly would never have been acceptable back at home. Starting in the senior + school, you were allowed to just leave and go home if you didn't have class on, as long as you were back in time. And we + did. School uniforms simply weren't part of the culture either. For everyone else perhaps stressful and another target + of the cruel status games of teenagerhood, but for me it was like every day was casual dress day back home. To top it + all off, the legal drinking age in Germany is sixteen, at least for wine, beer, and other weaker drinks. +

    +

    + These classmates of mine were running their own meetings headed by the Klassensprecher, the class representatives, and they actually seemed cool, like people I would like to hang out and befriend. They were + +

    diff --git a/public/blog/index_template.html b/public/blog/index_template.html new file mode 100644 index 0000000..5efc975 --- /dev/null +++ b/public/blog/index_template.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + +
    + + diff --git a/public/index_old.html b/public/home/index_old.html similarity index 100% rename from public/index_old.html rename to public/home/index_old.html