diff --git a/package-lock.json b/package-lock.json index a1ee8fb..3ebcd10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@playwright/test": "^1.36.1", "@sealcode/file-manager": "^1.0.2", "@sealcode/jdd": "^0.4.5", - "@sealcode/sealgen": "^0.15.6", + "@sealcode/sealgen": "^0.15.8", "@sealcode/ts-predicates": "^0.6.2", "@types/kill-port": "^2.0.0", "@types/leaflet": "^1.9.8", @@ -844,9 +844,9 @@ "integrity": "sha512-EZI7e8EY8gI1pw2bKdevjl+fBJbcSlpNkCZ8XoEOV3cHakPujiT6M4l775RDkfxJSbLX7jhOBkhgPNDfmCpZbg==" }, "node_modules/@sealcode/sealgen": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.15.6.tgz", - "integrity": "sha512-XVmgGwSjzxQXEscvvHiAT6CTcuIV9c4Klb0pDYqNRtXlvZsoJHbhTsp+1Uua9vQh0NRe6Y+V2airw8eLr+ZZpg==", + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.15.8.tgz", + "integrity": "sha512-+1V6xqDuvXs1aD2HuUjKj6UAnZ/HOajzENFv+y71nugs9F64/wT25kJxPeXf35sUIHLT9qU5af8q0XhiaIa4Ug==", "dependencies": { "@koa/router": "^12.0.1", "@sealcode/file-manager": "^1.0.2", diff --git a/package.json b/package.json index 2ba121f..3587ab9 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "tmux-scripts": { "watch": [ "npm run typecheck:back -- --watch", - "npm run build -- --watch", + "npx sealgen build --watch", "npm run typecheck:front -- --watch", "npm run start-watch" ] @@ -44,7 +44,7 @@ "@playwright/test": "^1.36.1", "@sealcode/file-manager": "^1.0.2", "@sealcode/jdd": "^0.4.5", - "@sealcode/sealgen": "^0.15.6", + "@sealcode/sealgen": "^0.15.8", "@sealcode/ts-predicates": "^0.6.2", "@types/kill-port": "^2.0.0", "@types/leaflet": "^1.9.8", diff --git a/src/back/declarations.d.ts b/src/back/declarations.d.ts new file mode 100644 index 0000000..24504e1 --- /dev/null +++ b/src/back/declarations.d.ts @@ -0,0 +1,7 @@ +import type { BaseContext } from "koa"; + +declare module "@sealcode/jdd" { + export interface JDDContext { + ctx: BaseContext; + } +} diff --git a/src/back/jdd-context.ts b/src/back/jdd-context.ts index 120abdc..750b338 100644 --- a/src/back/jdd-context.ts +++ b/src/back/jdd-context.ts @@ -1,16 +1,20 @@ +import type { BaseContext } from "koa"; import type { JDDContext } from "@sealcode/jdd"; import type { FilePointer } from "@sealcode/file-manager"; import { makeSimpleJDDContext } from "@sealcode/jdd"; import { TheFileManager } from "./file-manager.js"; import { imageRouter } from "./image-router.js"; -export const jdd_context: JDDContext = { - ...makeSimpleJDDContext(TheFileManager), - render_image: async (image: string | FilePointer | null, args) => { - if (!image) { - return ""; - } - const file = await TheFileManager.toPointer(image); - return imageRouter.image(await file.getPath(), args); - }, -}; +export function makeJDDContext(ctx: BaseContext): JDDContext { + return { + ...makeSimpleJDDContext(TheFileManager), + render_image: async (image: string | FilePointer | null, args) => { + if (!image) { + return ""; + } + const file = await TheFileManager.toPointer(image); + return imageRouter.image(await file.getPath(), args); + }, + ctx, + }; +} diff --git a/src/back/routes/all-components.page.tsx b/src/back/routes/all-components.page.tsx index 486acdb..cb93751 100644 --- a/src/back/routes/all-components.page.tsx +++ b/src/back/routes/all-components.page.tsx @@ -3,9 +3,9 @@ import { TempstreamJSX } from "tempstream"; import { Page } from "@sealcode/sealgen"; import html from "../html.js"; import { registry } from "../jdd-components/components.js"; -import { jdd_context } from "../jdd-context.js"; import { render } from "@sealcode/jdd"; import { shuffle } from "../util.js"; +import { makeJDDContext } from "../jdd-context.js"; export const actionName = "AllComponents"; @@ -17,6 +17,7 @@ export default new (class AllComponentsPage extends Page { async render(ctx: Context) { const components = registry.getAll(); + const jdd_context = makeJDDContext(ctx); const document = await Promise.all( shuffle(Object.entries(components)).map( async ([component_name, component]) => { diff --git a/src/back/routes/component-preview/component-input-image.tsx b/src/back/routes/component-preview/component-input-image.tsx index 930040c..2212b2e 100644 --- a/src/back/routes/component-preview/component-input-image.tsx +++ b/src/back/routes/component-preview/component-input-image.tsx @@ -1,24 +1,28 @@ import type { Image } from "@sealcode/jdd"; +import type { BaseContext } from "koa"; import type { StatefulPage } from "@sealcode/sealgen"; import { TempstreamJSX } from "tempstream"; -import { jdd_context } from "../../jdd-context.js"; import type { ComponentPreviewState } from "../components.sreact.js"; import type { ComponentPreviewActions } from "./component-preview-actions.js"; import { printArgPath } from "./print-arg-path.js"; import { htmlEscape } from "escape-goat"; import type { FilePointer } from "@sealcode/file-manager"; +import { makeJDDContext } from "../../jdd-context.js"; export function ComponentInputImage({ arg_path, arg, value, + ctx, }: { state: State; arg_path: string[]; arg: Image; value: FilePointer | null; page: StatefulPage; + ctx: BaseContext; }) { + const jdd_context = makeJDDContext(ctx); return (