From caf4da47e0b12e9a401894cba4e8909f354bd024 Mon Sep 17 00:00:00 2001 From: chloe caruso Date: Tue, 8 Jul 2025 23:10:41 -0700 Subject: [PATCH] add "source of truth" server to replace the old cache url --- framework/engine/ssr.ts | 17 +- framework/lib/sitegen.ts | 4 + run.js | 18 +- src/backend.ts | 10 - src/file-viewer/backend.tsx | 3 +- src/file-viewer/bin/list.ts | 8 - src/file-viewer/bin/scan.ts | 1015 ------------------------------- src/file-viewer/views/clofi.tsx | 2 +- src/site.ts | 5 + src/source-of-truth.ts | 107 ++++ 10 files changed, 140 insertions(+), 1049 deletions(-) delete mode 100644 src/file-viewer/bin/list.ts delete mode 100644 src/file-viewer/bin/scan.ts create mode 100644 src/source-of-truth.ts diff --git a/framework/engine/ssr.ts b/framework/engine/ssr.ts index d417e92..4cb43c7 100644 --- a/framework/engine/ssr.ts +++ b/framework/engine/ssr.ts @@ -8,20 +8,13 @@ // to track needed client scripts without introducing patches to the engine. export type Addons = Record; -export function ssrSync(node: Node): Result; -export function ssrSync(node: Node, addon: A): Result; -export function ssrSync(node: Node, addon: Addons = {}) { +export function ssrSync(node: Node, addon: A = {} as A) { const r = initRender(false, addon); const resolved = resolveNode(r, node); return { text: renderNode(resolved), addon }; } -export function ssrAsync(node: Node): Promise; -export function ssrAsync( - node: Node, - addon: A, -): Promise>; -export function ssrAsync(node: Node, addon: Addons = {}) { +export function ssrAsync(node: Node, addon: A = {} as A) { const r = initRender(true, addon); const resolved = resolveNode(r, node); if (r.async === 0) { @@ -142,13 +135,13 @@ export function resolveNode(r: Render, node: unknown): ResolvedNode { return resolveNode(r, tag(props)); } catch (e) { const { 4: src } = node; - if (e && typeof e === "object") { - } + if (e && typeof e === "object") (e as { src?: string }).src = src; + throw e; } finally { currentRender = null; } } - if (typeof tag !== "string") throw new Error("Unexpected " + typeof type); + if (typeof tag !== "string") throw new Error("Unexpected " + inspect(type)); const children = props?.children; if (children) return [kElement, tag, props, resolveNode(r, children)]; return node; diff --git a/framework/lib/sitegen.ts b/framework/lib/sitegen.ts index 6bfaa59..bc7b3ab 100644 --- a/framework/lib/sitegen.ts +++ b/framework/lib/sitegen.ts @@ -28,6 +28,10 @@ export function getRender() { }); } +export function inRender() { + return "sitegen" in ssr.getCurrentRender(); +} + /** Add a client-side script to the page. */ export function addScript(id: ScriptId | { value: ScriptId }) { getRender().scripts.add(typeof id === "string" ? id : id.value); diff --git a/run.js b/run.js index 1b509c4..a8e6b1e 100644 --- a/run.js +++ b/run.js @@ -2,6 +2,7 @@ // all available plugins. Usage: "node run