diff --git a/framework/engine/ssr.ts b/framework/engine/ssr.ts index d417e92e61514ac0070a7e2d5f823403ded8e72f..4cb43c78ae8b0634b3f1b0ef45afce73b9d29cc8 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 6bfaa59bb989013184f0cce4223290e69028a583..bc7b3ab796a810892085733ffea0a3c48733ecc9 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 1b509c405fc6fa9593d29472397982d0687dd2f8..a8e6b1e6d7a4ec4a054e30c77def31afd50d8891 100644 --- a/run.js +++ b/run.js @@ -2,6 +2,7 @@ // all available plugins. Usage: "node run