From 95074fc78de915bfcd71a559031fea83ce6a5c6a Mon Sep 17 00:00:00 2001 From: Gordon Smith Date: Wed, 10 Sep 2025 08:03:35 +0100 Subject: [PATCH] fix: improve runtime placeholder handling Fixes previous issues with update and remove Signed-off-by: Gordon Smith --- package-lock.json | 29 ++++++++++++++----- packages/observablehq-compiler/package.json | 2 +- .../observablehq-compiler/src/kit/compiler.ts | 20 ++++++++----- .../observablehq-compiler/src/kit/runtime.ts | 7 ++--- 4 files changed, 37 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 284600eeea..a90040a197 100644 --- a/package-lock.json +++ b/package-lock.json @@ -854,7 +854,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -3218,6 +3217,18 @@ "@lezer/highlight": "^1.0.0" } }, + "node_modules/@lezer/python": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.18.tgz", + "integrity": "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, "node_modules/@loaders.gl/core": { "version": "3.4.15", "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.15.tgz", @@ -4879,9 +4890,9 @@ } }, "node_modules/@observablehq/notebook-kit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@observablehq/notebook-kit/-/notebook-kit-1.2.0.tgz", - "integrity": "sha512-aliUdVyYrt7Y7Gkf3SiXKbtYUWkauWEhayiaiRaCoV3f9Mi9TZWBw3s6at49duwk6kMuK7vnA0klZT4fBEFWQg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@observablehq/notebook-kit/-/notebook-kit-1.4.1.tgz", + "integrity": "sha512-7aXE+zwerYB28c9ydgntkRmUDGm0l3VdYwHanN7FM5aXLHA58/ywNsGemUznF0bPteSIITUUqcsI2NLQM69UkQ==", "dev": true, "license": "ISC", "dependencies": { @@ -4894,6 +4905,7 @@ "@lezer/html": "^1.3.10", "@lezer/javascript": "^1.5.1", "@lezer/markdown": "^1.4.3", + "@lezer/python": "^1.1.18", "@observablehq/inspector": "^5.0.1", "@observablehq/parser": "^6.1.0", "@observablehq/runtime": "^6.0.0", @@ -4903,6 +4915,7 @@ "jsdom": "^26.1.0", "markdown-it": "^14.1.0", "markdown-it-anchor": "^9.2.0", + "typescript": "^5.8.3", "vite": "^7.0.0" }, "bin": { @@ -8252,9 +8265,9 @@ } }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "dev": true, "license": "MIT", "dependencies": { @@ -23205,7 +23218,7 @@ }, "devDependencies": { "@hpcc-js/esbuild-plugins": "^1.5.0", - "@observablehq/notebook-kit": "1.2.0", + "@observablehq/notebook-kit": "1.4.1", "@observablehq/parser": "6.1.0", "@observablehq/runtime": "5.9.9", "@types/jsdom": "21.1.7" diff --git a/packages/observablehq-compiler/package.json b/packages/observablehq-compiler/package.json index b31b8972fd..f34d720c48 100644 --- a/packages/observablehq-compiler/package.json +++ b/packages/observablehq-compiler/package.json @@ -53,7 +53,7 @@ }, "devDependencies": { "@hpcc-js/esbuild-plugins": "^1.5.0", - "@observablehq/notebook-kit": "1.2.0", + "@observablehq/notebook-kit": "1.4.1", "@observablehq/parser": "6.1.0", "@observablehq/runtime": "5.9.9", "@types/jsdom": "21.1.7" diff --git a/packages/observablehq-compiler/src/kit/compiler.ts b/packages/observablehq-compiler/src/kit/compiler.ts index 8a59402113..7c25f15021 100644 --- a/packages/observablehq-compiler/src/kit/compiler.ts +++ b/packages/observablehq-compiler/src/kit/compiler.ts @@ -3,21 +3,25 @@ import { type Notebook, type Cell, transpile } from "@observablehq/notebook-kit" import { type Definition } from "@observablehq/notebook-kit/runtime"; import { constructFunction } from "./util.ts"; -export interface CompileKitOptions { +export { Notebook, Cell }; + +export interface CompileCellOptions { inline?: boolean; + resolveLocalImports?: boolean; + includePinned?: boolean; } -export function compileCell(cell: Cell, options: CompileKitOptions = { inline: true }): Definition[] { +export function compileCell(cell: Cell, { inline = true, resolveLocalImports = false, includePinned = true }: CompileCellOptions = {}): Definition[] { const retVal: Definition[] = []; const sourceIDOffset = 1000000; try { - const compiled = transpile(cell); + const compiled = transpile(cell, { resolveLocalImports }); retVal.push({ id: cell.id, ...compiled, - body: options.inline ? constructFunction(compiled.body, `cell_${cell.id}`) : compiled.body, + body: inline ? constructFunction(compiled.body, `cell_${cell.id}`) : compiled.body, }); - if (cell.pinned) { + if (includePinned && cell.pinned) { const compiled = transpile({ ...cell, mode: "md", @@ -29,7 +33,7 @@ ${cell.value} retVal.push({ id: sourceIDOffset + cell.id, ...compiled, - body: options.inline ? constructFunction(compiled.body, `cell_source_${sourceIDOffset + cell.id}`) : compiled.body, + body: inline ? constructFunction(compiled.body, `cell_${sourceIDOffset + cell.id}`) : compiled.body, }); } } catch (error) { @@ -38,10 +42,10 @@ ${cell.value} return retVal; } -export function compileNotebook(notebook: Notebook, options: CompileKitOptions = { inline: true }): Definition[] { +export function compileNotebook(notebook: Notebook, { inline = true, resolveLocalImports = false, includePinned = true }: CompileCellOptions = {}): Definition[] { const retVal: Definition[] = []; for (const cell of notebook.cells) { - const cellDefs = compileCell(cell, options); + const cellDefs = compileCell(cell, { inline, resolveLocalImports, includePinned }); retVal.push(...cellDefs); } return retVal; diff --git a/packages/observablehq-compiler/src/kit/runtime.ts b/packages/observablehq-compiler/src/kit/runtime.ts index b96c48089a..3eef861a6a 100644 --- a/packages/observablehq-compiler/src/kit/runtime.ts +++ b/packages/observablehq-compiler/src/kit/runtime.ts @@ -1,10 +1,9 @@ -import { type DefineState, NotebookRuntime as NotebookRuntimeBase } from "@observablehq/notebook-kit/runtime"; -import { type Definition } from "./index.ts"; +import { type Definition, type DefineState, NotebookRuntime as NotebookRuntimeBase } from "@observablehq/notebook-kit/runtime"; import "@observablehq/notebook-kit/index.css"; import "@observablehq/notebook-kit/theme-air.css"; -export { DefineState }; +export { Definition, DefineState }; export class NotebookRuntime extends NotebookRuntimeBase { @@ -84,4 +83,4 @@ export class NotebookRuntime extends NotebookRuntimeBase { target.appendChild(observableDiv); } } -} +} \ No newline at end of file