@tlockney/cdp-kernel 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/browser/kernel.js +150 -13
- package/dist/browser/kernel.js.map +2 -2
- package/dist/browser/mod.d.ts +6 -1
- package/dist/browser/mod.js +4 -1
- package/dist/browser/target.d.ts +27 -3
- package/dist/browser/target.js +76 -7
- package/dist/browser/worker.js +83 -12
- package/dist/browser/worker.js.map +3 -3
- package/dist/bun-target.d.ts +2 -0
- package/dist/bun-target.js +15 -2
- package/dist/cdp.d.ts +2 -0
- package/dist/cdp.js +34 -7
- package/dist/celld-target.js +3 -2
- package/dist/debugger.js +51 -5
- package/dist/kernel-core.d.ts +9 -0
- package/dist/kernel-core.js +73 -3
- package/dist/kernel.js +12 -0
- package/dist/main.js +11 -4
- package/dist/package.d.ts +2 -2
- package/dist/package.js +2 -2
- package/dist/target-api.d.ts +12 -0
- package/dist/target-api.js +26 -0
- package/dist/target.d.ts +3 -2
- package/dist/target.js +25 -13
- package/dist/workerd-target.d.ts +16 -1
- package/dist/workerd-target.js +103 -15
- package/dist/workers-project.d.ts +1 -1
- package/dist/workers-project.js +4 -3
- package/package.json +3 -1
- package/runtime/bootstrap.mjs +2 -0
- package/runtime/browser-worker.mjs +83 -0
- package/runtime/evaluator.mjs +2 -0
- package/runtime/workerd-worker.mjs +2 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../runtime/comm.mjs", "../../runtime/widget.mjs", "../../runtime/display.mjs", "../../runtime/evaluator.mjs", "../../runtime/format.mjs", "../../runtime/introspect.mjs", "../../runtime/cdn.mjs", "../../runtime/browser-worker.mjs"],
|
|
4
|
-
"sourcesContent": ["// @ts-self-types=\"./comm.d.mts\"\n// Jupyter comms: bidirectional channels between kernel and frontend, the\n// transport ipywidgets and anywidget are built on (#9). Runs inside the\n// target runtime.\n//\n// Kernel-to-frontend messages (comm_open, comm_msg, comm_close) go out\n// through `send`, the same ordered path as display messages. Frontend\n// messages arrive from the host through `dispatch`, which returns whether\n// anything in the kernel handled them, so the host can answer an unknown\n// target's comm_open with a comm_close, as the protocol asks.\n\nclass Comm {\n #send;\n #onClosed;\n #msgHandlers = [];\n #closeHandlers = [];\n closed = false;\n\n constructor(id, targetName, send, onClosed) {\n this.id = id;\n this.targetName = targetName;\n this.#send = send;\n this.#onClosed = onClosed;\n }\n\n send(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_msg\", { comm_id: this.id, data }, metadata, buffers);\n }\n\n close(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_close\", { comm_id: this.id, data }, metadata, buffers);\n // close() is synchronous for callers; its close handlers run detached.\n void this._closed({ data, metadata, buffers });\n }\n\n onMsg(handler) {\n this.#msgHandlers.push(handler);\n }\n\n onClose(handler) {\n this.#closeHandlers.push(handler);\n }\n\n async _receive(msg) {\n for (const handler of this.#msgHandlers) await handler(msg);\n }\n\n async _closed(msg) {\n if (this.closed) return;\n this.closed = true;\n this.#onClosed(this.id);\n for (const handler of this.#closeHandlers) await handler(msg);\n }\n}\n\n/**\n * @param {(msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void} send\n * @param {() => string} [newId]\n */\nexport function createComms(send, newId = () => crypto.randomUUID()) {\n const comms = new Map(); // comm_id -> Comm\n const targets = new Map(); // target_name -> handler\n const forget = (id) => comms.delete(id);\n\n function track(id, targetName) {\n const comm = new Comm(id, targetName, send, forget);\n comms.set(id, comm);\n return comm;\n }\n\n const api = {\n open(targetName, data = {}, { metadata = {}, buffers = [] } = {}) {\n const comm = track(newId(), targetName);\n send(\"comm_open\", { comm_id: comm.id, target_name: targetName, data }, metadata, buffers);\n return comm;\n },\n registerTarget(targetName, handler) {\n targets.set(targetName, handler);\n },\n unregisterTarget(targetName) {\n targets.delete(targetName);\n },\n };\n\n async function dispatch(msgType, content, metadata, buffers) {\n const msg = { data: content.data ?? {}, metadata: metadata ?? {}, buffers: buffers ?? [] };\n if (msgType === \"comm_open\") {\n const handler = targets.get(content.target_name);\n if (!handler) return false;\n const comm = track(content.comm_id, content.target_name);\n try {\n await handler(comm, msg);\n } catch (err) {\n // The host answers a failed comm_open with comm_close, so the comm\n // is gone on the frontend: drop it here too, without running close\n // handlers or sending anything (#137).\n comm.closed = true;\n forget(comm.id);\n throw err;\n }\n return true;\n }\n const comm = comms.get(content.comm_id);\n if (!comm) return false;\n if (msgType === \"comm_msg\") await comm._receive(msg);\n else if (msgType === \"comm_close\") await comm._closed(msg);\n else return false;\n return true;\n }\n\n function list() {\n return [...comms.values()].map((comm) => ({ commId: comm.id, targetName: comm.targetName }));\n }\n\n return { api, dispatch, list };\n}\n", "// @ts-self-types=\"./widget.d.mts\"\n// anywidget-compatible widgets over Jupyter comms (#9): the kernel half of\n// the ipywidgets model protocol (version 2.1.0) for anywidget's AnyModel,\n// whose frontend is the `anywidget` JupyterLab/Notebook/VS Code extension.\n//\n// const counter = jupyter.widget({ esm, state: { count: 0 } });\n// counter // display it\n// counter.get(\"count\"); counter.set(\"count\", 1);\n// counter.on(\"change:count\", (value, old) => ...);\n//\n// State is synced as in ipywidgets: `update` messages carry changed keys,\n// with binary values lifted out into message buffers at `buffer_paths`\n// (ipywidgets' _remove_buffers/_put_buffers).\n\nexport const WIDGET_PROTOCOL_VERSION = \"2.1.0\";\nconst WIDGET_TARGET = \"jupyter.widget\";\nconst CONTROL_TARGET = \"jupyter.widget.control\";\nconst VIEW_MIME = \"application/vnd.jupyter.widget-view+json\";\n\n// The anywidget model the frontend instantiates. The module version is a\n// semver range for the frontend's registry; anywidget sends \"~major.minor.*\"\n// of its own version, and \"*\" accepts whichever release is installed.\nconst ANYWIDGET_MODEL = {\n _model_name: \"AnyModel\",\n _model_module: \"anywidget\",\n _model_module_version: \"*\",\n _view_name: \"AnyView\",\n _view_module: \"anywidget\",\n _view_module_version: \"*\",\n _view_count: null,\n};\n\nfunction isBinary(value) {\n return value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value);\n}\n\nfunction toBytes(value) {\n if (value instanceof Uint8Array) return value;\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\n/** Copies `state` with binary values replaced by null, collecting them. */\nexport function removeBuffers(state) {\n const bufferPaths = [];\n const buffers = [];\n function walk(value, path) {\n if (isBinary(value)) {\n bufferPaths.push(path);\n buffers.push(toBytes(value));\n return null;\n }\n if (Array.isArray(value)) return value.map((item, i) => walk(item, [...path, i]));\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, walk(v, [...path, k])]));\n }\n return value;\n }\n return { state: walk(state, []), bufferPaths, buffers };\n}\n\n/** Puts received buffers back into `state` at `bufferPaths` (in place). */\nexport function putBuffers(state, bufferPaths = [], buffers = []) {\n bufferPaths.forEach((path, i) => {\n let obj = state;\n for (const key of path.slice(0, -1)) obj = obj[key];\n obj[path[path.length - 1]] = buffers[i];\n });\n return state;\n}\n\nclass Widget {\n #comm;\n #state;\n #listeners = new Map(); // event -> Set<listener>\n\n constructor(comm, state, $display) {\n this.#comm = comm;\n this.#state = state;\n this[$display] = () => ({\n [VIEW_MIME]: { version_major: 2, version_minor: 1, model_id: this.id },\n \"text/plain\": `Widget(${this.id})`,\n });\n }\n\n get id() {\n return this.#comm.id;\n }\n\n get closed() {\n return this.#comm.closed;\n }\n\n get(key) {\n return this.#state[key];\n }\n\n /** set(\"key\", value) or set({ key: value, ... }); syncs to the frontend. */\n set(keyOrChanges, value) {\n const changes = typeof keyOrChanges === \"string\" ? { [keyOrChanges]: value } : keyOrChanges;\n this.#apply(changes);\n if (this.closed) return;\n const { state, bufferPaths, buffers } = removeBuffers(changes);\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n }\n\n on(event, listener) {\n if (!this.#listeners.has(event)) this.#listeners.set(event, new Set());\n this.#listeners.get(event).add(listener);\n }\n\n off(event, listener) {\n this.#listeners.get(event)?.delete(listener);\n }\n\n /** A custom message, delivered to the view's model.on(\"msg:custom\"). */\n send(content, buffers = []) {\n this.#comm.send({ method: \"custom\", content }, { buffers });\n }\n\n close() {\n this.#comm.close();\n }\n\n /** The full state, as the frontend sees it (for request_state). */\n fullState() {\n return { ...ANYWIDGET_MODEL, ...this.#state };\n }\n\n async #emit(event, ...args) {\n for (const listener of this.#listeners.get(event) ?? []) await listener(...args);\n }\n\n async #apply(changes) {\n const previous = {};\n for (const [key, value] of Object.entries(changes)) {\n previous[key] = this.#state[key];\n this.#state[key] = value;\n }\n for (const key of Object.keys(changes)) await this.#emit(`change:${key}`, changes[key], previous[key]);\n await this.#emit(\"change\", changes);\n }\n\n async _receive(msg) {\n const { method } = msg.data;\n if (method === \"update\") {\n const changes = putBuffers(msg.data.state ?? {}, msg.data.buffer_paths, msg.buffers);\n await this.#apply(changes);\n } else if (method === \"request_state\") {\n const { state, bufferPaths, buffers } = removeBuffers(this.fullState());\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n } else if (method === \"custom\") {\n await this.#emit(\"msg:custom\", msg.data.content, msg.buffers);\n }\n }\n}\n\n/**\n * @param {import(\"./comm.d.mts\").CommApi} commApi\n * @param {symbol} $display\n */\nexport function createWidgetFactory(commApi, $display) {\n const live = new Map(); // model id -> Widget\n\n // The frontend opens this comm to restore every widget's state, e.g.\n // after the page reloads.\n commApi.registerTarget(CONTROL_TARGET, (control) => {\n control.onMsg((msg) => {\n if (msg.data.method !== \"request_states\") return;\n const states = {};\n for (const widget of live.values()) {\n const full = widget.fullState();\n states[widget.id] = {\n model_name: full._model_name,\n model_module: full._model_module,\n model_module_version: full._model_module_version,\n state: full,\n };\n }\n const { state, bufferPaths, buffers } = removeBuffers(states);\n control.send({ method: \"update_states\", states: state, buffer_paths: bufferPaths }, { buffers });\n });\n });\n\n return function widget({ esm, css, state = {} } = {}) {\n if (typeof esm !== \"string\") throw new TypeError(\"jupyter.widget needs an `esm` module string\");\n const initial = { ...state };\n const full = {\n ...ANYWIDGET_MODEL,\n _esm: esm,\n ...(css === undefined ? {} : { _css: css }),\n _anywidget_id: \"cdp-kernel.widget\",\n ...initial,\n };\n const { state: wire, bufferPaths, buffers } = removeBuffers(full);\n const comm = commApi.open(WIDGET_TARGET, { state: wire, buffer_paths: bufferPaths }, {\n metadata: { version: WIDGET_PROTOCOL_VERSION },\n buffers,\n });\n const instance = new Widget(comm, { ...full }, $display);\n live.set(comm.id, instance);\n comm.onMsg((msg) => instance._receive(msg));\n comm.onClose(() => {\n live.delete(comm.id);\n });\n return instance;\n };\n}\n", "// @ts-self-types=\"./display.d.mts\"\n// The Jupyter display API that Deno exposes as `Deno.jupyter`, made\n// runtime-neutral. Runs inside the target runtime (Node or Deno).\n//\n// Ported from Deno's cli/js/40_jupyter.js (v2.9.6), which is\n// Copyright 2018-2026 the Deno authors, MIT license. The formatting rules\n// (display symbol, canvas, Vega, Polars-style DataFrames, JPEG/PNG bytes,\n// HTML/SVG elements) are unchanged; the Deno internals it used are injected:\n// Deno[Deno.internal].inspectArgs -> host.inspect\n// op_base64_encode_from_buffer -> host.base64\n// Deno.readFileSync -> host.readFile\n// op_jupyter_broadcast -> host.send\n// WebGPU texture/buffer display depends on Deno's wgpu bindings and is\n// omitted. Comms and widgets (jupyter.comm, jupyter.widget) are additions\n// Deno doesn't have; see comm.mjs and widget.mjs.\n\nimport { createComms } from \"./comm.mjs\";\nimport { createWidgetFactory } from \"./widget.mjs\";\n\nexport const $display = Symbol.for(\"Jupyter.display\");\n\nconst rawToEntity = new Map([\n [\"&\", \"&\"],\n [\"<\", \"<\"],\n [\">\", \">\"],\n ['\"', \""\"],\n [\"'\", \"'\"],\n]);\nconst rawRe = new RegExp(`[${[...rawToEntity.keys()].join(\"\")}]`, \"g\");\n\nexport function escapeHTML(str) {\n return str.replaceAll(rawRe, (m) => rawToEntity.get(m) ?? m);\n}\n\nfunction isVegaLike(obj) {\n return obj !== null && typeof obj === \"object\" && \"toSpec\" in obj;\n}\n\nfunction extractVega(obj) {\n const spec = obj.toSpec();\n if (typeof spec !== \"object\" || spec === null || !(\"$schema\" in spec)) return null;\n let mediaType = \"application/vnd.vega.v5+json\";\n if (spec.$schema === \"https://vega.github.io/schema/vega-lite/v4.json\") {\n mediaType = \"application/vnd.vegalite.v4+json\";\n } else if (spec.$schema === \"https://vega.github.io/schema/vega-lite/v5.json\") {\n mediaType = \"application/vnd.vegalite.v5+json\";\n }\n const summary = summarizeChart(spec);\n return summary === undefined ? { [mediaType]: spec } : { [mediaType]: spec, \"text/plain\": summary };\n}\n\n// A few lines of text/plain next to a chart, for frontends that can't draw\n// it (jupyter console, nbconvert to text, agents reading the notebook):\n// mark, encodings with value ranges, title and row count (#321). The\n// approach follows nteract's repr-llm summarize_viz (BSD-3).\nconst VL_TYPES = { Q: \"quantitative\", N: \"nominal\", O: \"ordinal\", T: \"temporal\", G: \"geojson\" };\nconst MAX_CHILDREN = 6;\n\nfunction clip(str, max = 60) {\n return str.length > max ? `${str.slice(0, max - 1)}\u2026` : str;\n}\n\nfunction formatNumber(n) {\n return Number.isInteger(n) ? String(n) : String(Number(n.toPrecision(4)));\n}\n\nfunction titleText(title) {\n const text = typeof title === \"object\" && title !== null && !Array.isArray(title) ? title.text : title;\n const str = Array.isArray(text) ? text.join(\" \") : typeof text === \"string\" ? text : \"\";\n return str ? ` \"${clip(str, 80)}\"` : \"\";\n}\n\nfunction getField(row, field) {\n if (row === null || typeof row !== \"object\") return undefined;\n if (field in row) return row[field];\n // Vega-Lite reads \"a.b\" as a nested path and \"a\\.b\" as a key with a dot.\n if (field.includes(\"\\\\\")) return row[field.replace(/\\\\(.)/g, \"$1\")];\n return field.split(\".\").reduce((obj, key) => (obj === null || typeof obj !== \"object\" ? undefined : obj[key]), row);\n}\n\nfunction fieldStats(rows, field, type) {\n const values = [];\n for (const row of rows) {\n const value = getField(row, field);\n if (value !== undefined && value !== null && value !== \"\") values.push(value);\n }\n if (values.length === 0) return \"\";\n if (type === \"quantitative\") {\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n const n = Number(value);\n if (!Number.isFinite(n)) continue;\n if (n < min) min = n;\n if (n > max) max = n;\n }\n if (min > max) return \"\";\n return min === max ? formatNumber(min) : `${formatNumber(min)} to ${formatNumber(max)}`;\n }\n if (type === \"temporal\") {\n let min;\n let max;\n for (const value of values) {\n const t = value instanceof Date ? value.getTime() : typeof value === \"number\" ? value : Date.parse(String(value));\n if (!Number.isFinite(t)) continue;\n if (min === undefined || t < min.t) min = { t, value };\n if (max === undefined || t > max.t) max = { t, value };\n }\n if (min === undefined) return \"\";\n const show = ({ value }) =>\n typeof value === \"string\" ? clip(value, 30) : new Date(value instanceof Date ? value.getTime() : value).toISOString();\n return min.t === max.t ? show(min) : `${show(min)} to ${show(max)}`;\n }\n const distinct = new Set(values.map((value) => typeof value === \"object\" ? JSON.stringify(value) : String(value)));\n return `${distinct.size} ${distinct.size === 1 ? \"value\" : \"values\"}`;\n}\n\nfunction encodingSummary(encoding, rows) {\n const parts = [];\n for (const [channel, def] of Object.entries(encoding)) {\n if (channel === \"tooltip\" || def === null || typeof def !== \"object\" || Array.isArray(def)) continue;\n if (def.field === undefined && def.aggregate === undefined) continue;\n let name = typeof def.field === \"string\" ? def.field : def.field?.repeat ? `repeat ${def.field.repeat}` : \"\";\n if (def.aggregate !== undefined) name = `${def.aggregate}(${name})`;\n else if (def.timeUnit !== undefined) name = `${typeof def.timeUnit === \"string\" ? def.timeUnit : \"time\"}(${name})`;\n const type = VL_TYPES[def.type] ?? def.type;\n const details = [];\n if (typeof type === \"string\") details.push(type);\n if (rows && typeof def.field === \"string\" && def.aggregate === undefined) {\n const stats = fieldStats(rows, def.field, type);\n if (stats) details.push(stats);\n }\n parts.push(`${channel}=${clip(name, 40)}${details.length ? ` (${details.join(\", \")})` : \"\"}`);\n }\n return parts;\n}\n\nfunction vlRows(data, datasets) {\n if (data === null || typeof data !== \"object\") return undefined;\n if (Array.isArray(data.values)) return data.values;\n if (typeof data.name === \"string\" && Array.isArray(datasets?.[data.name])) return datasets[data.name];\n return undefined;\n}\n\nfunction vlDataNote(data, rows) {\n if (rows) return `${rows.length} ${rows.length === 1 ? \"row\" : \"rows\"}`;\n if (typeof data?.url === \"string\") return `data from ${clip(data.url)}`;\n return \"\";\n}\n\nfunction fieldList(def) {\n if (Array.isArray(def)) return def.join(\", \");\n if (def === null || typeof def !== \"object\") return \"\";\n if (typeof def.field === \"string\") return def.field;\n return Object.values(def).map(fieldList).filter(Boolean).join(\", \");\n}\n\nfunction summarizeVegaLiteView(spec, label, inherited, datasets, depth, lines) {\n const indent = \" \".repeat(depth);\n const data = spec.data ?? inherited.data;\n const rows = vlRows(data, datasets);\n const head = `${indent}${label}`;\n const title = titleText(spec.title);\n const children = spec.layer ?? spec.concat ?? spec.hconcat ?? spec.vconcat;\n if (Array.isArray(children)) {\n const noun = spec.layer ? \"layer\" : \"view\";\n const note = [`${children.length} ${children.length === 1 ? noun : `${noun}s`}`, vlDataNote(data, rows)].filter(Boolean);\n lines.push(`${head}${spec.layer ? \"layered\" : \"concatenated\"} chart${title}: ${note.join(\", \")}`);\n const encoding = spec.layer ? { ...inherited.encoding, ...spec.encoding } : {};\n children.slice(0, MAX_CHILDREN).forEach((child, i) => {\n if (child !== null && typeof child === \"object\") {\n summarizeVegaLiteView(child, `${noun} ${i + 1}: `, { data, encoding }, datasets, depth + 1, lines);\n }\n });\n if (children.length > MAX_CHILDREN) lines.push(`${indent} \u2026 ${children.length - MAX_CHILDREN} more`);\n return;\n }\n if ((spec.facet !== undefined || spec.repeat !== undefined) && spec.spec !== null && typeof spec.spec === \"object\") {\n const what = spec.facet !== undefined ? `faceted by ${fieldList(spec.facet)}` : `repeated over ${fieldList(spec.repeat)}`;\n const note = vlDataNote(data, rows);\n lines.push(`${head}chart${title} ${what}${note ? `, ${note}` : \"\"}`);\n summarizeVegaLiteView(spec.spec, \"each panel: \", { data, encoding: {} }, datasets, depth + 1, lines);\n return;\n }\n const mark = typeof spec.mark === \"string\" ? spec.mark : spec.mark?.type;\n const encoding = { ...inherited.encoding, ...spec.encoding };\n const parts = encodingSummary(encoding, rows);\n // A layer's rows were already counted on the layered chart's line.\n if (spec.data !== undefined || depth === 0) {\n const note = vlDataNote(data, rows);\n if (note) parts.push(note);\n }\n lines.push(`${head}${typeof mark === \"string\" ? `${mark} ` : \"\"}chart${title}${parts.length ? `: ${parts.join(\", \")}` : \"\"}`);\n}\n\nfunction vegaMarkTypes(marks, types) {\n if (!Array.isArray(marks)) return types;\n for (const mark of marks) {\n if (typeof mark?.type === \"string\") types.add(mark.type);\n vegaMarkTypes(mark?.marks, types);\n }\n return types;\n}\n\nfunction summarizeVega(spec) {\n const sections = [];\n const marks = [...vegaMarkTypes(spec.marks, new Set())];\n if (marks.length) sections.push(`marks ${marks.join(\", \")}`);\n const list = (items, describe) => {\n const shown = items.slice(0, MAX_CHILDREN).map(describe);\n if (items.length > MAX_CHILDREN) shown.push(`\u2026 ${items.length - MAX_CHILDREN} more`);\n return shown.join(\", \");\n };\n const data = Array.isArray(spec.data) ? spec.data.filter((d) => d !== null && typeof d === \"object\") : [];\n if (data.length) {\n sections.push(`data ${list(data, (d) => {\n const name = clip(String(d.name ?? \"?\"), 30);\n if (Array.isArray(d.values)) return `${name} (${d.values.length} ${d.values.length === 1 ? \"row\" : \"rows\"})`;\n if (typeof d.url === \"string\") return `${name} (from ${clip(d.url)})`;\n if (d.source !== undefined) return `${name} (from ${clip(String(d.source), 30)})`;\n return name;\n })}`);\n }\n const scales = Array.isArray(spec.scales) ? spec.scales.filter((s) => s !== null && typeof s === \"object\") : [];\n if (scales.length) {\n sections.push(`scales ${list(scales, (s) => `${clip(String(s.name ?? \"?\"), 30)} (${s.type ?? \"linear\"})`)}`);\n }\n return `Vega chart${titleText(spec.title)}${sections.length ? `: ${sections.join(\"; \")}` : \"\"}`;\n}\n\nfunction summarizeChart(spec) {\n try {\n if (typeof spec.$schema === \"string\" && spec.$schema.includes(\"/vega-lite/\")) {\n const lines = [];\n summarizeVegaLiteView(spec, \"Vega-Lite \", { encoding: {} }, spec.datasets, 0, lines);\n return lines.join(\"\\n\");\n }\n return summarizeVega(spec);\n } catch {\n // A summary is a fallback; a spec it doesn't understand still renders.\n return undefined;\n }\n}\n\nfunction isDataFrameLike(obj) {\n return obj !== null && typeof obj === \"object\" &&\n obj.schema !== undefined && typeof obj.schema === \"object\" &&\n typeof obj.head === \"function\" && typeof obj.toRecords === \"function\";\n}\n\nfunction mapPolarsTypeToJSONSchema(colType) {\n const typeMapping = {\n Null: \"null\",\n Bool: \"boolean\",\n Int8: \"integer\",\n Int16: \"integer\",\n Int32: \"integer\",\n Int64: \"integer\",\n UInt8: \"integer\",\n UInt16: \"integer\",\n UInt32: \"integer\",\n UInt64: \"integer\",\n Float32: \"number\",\n Float64: \"number\",\n Date: \"string\",\n Datetime: \"string\",\n Utf8: \"string\",\n Categorical: \"string\",\n List: \"array\",\n Struct: \"object\",\n };\n // Polars DataTypes only expose their name through toJSON().\n const dataType = typeof colType?.toJSON === \"function\" ? colType.toJSON()[\"DataType\"] : undefined;\n return typeMapping[dataType] || \"string\";\n}\n\nfunction extractDataFrame(df) {\n const fields = [];\n for (const [name, colType] of Object.entries(df.schema)) {\n fields.push({ name, type: mapPolarsTypeToJSONSchema(colType) });\n }\n const data = df.head(50).toRecords();\n let html = \"<table><thead><tr>\";\n for (const field of fields) html += `<th>${escapeHTML(String(field.name))}</th>`;\n html += \"</tr></thead><tbody>\";\n for (const row of df.head(10).toRecords()) {\n html += \"<tr>\";\n for (const field of fields) html += `<td>${escapeHTML(String(row[field.name]))}</td>`;\n html += \"</tr>\";\n }\n html += \"</tbody></table>\";\n // Polars has `height`; the row count is left out when there isn't one.\n const size = [];\n if (Number.isInteger(df.height)) size.push(`${df.height} ${df.height === 1 ? \"row\" : \"rows\"}`);\n size.push(`${fields.length} ${fields.length === 1 ? \"column\" : \"columns\"}`);\n const columns = fields.slice(0, 20).map((field) => `${clip(String(field.name), 40)} (${field.type})`);\n if (fields.length > 20) columns.push(`\u2026 ${fields.length - 20} more`);\n return {\n \"application/vnd.dataresource+json\": { data, schema: { fields } },\n \"text/html\": html,\n \"text/plain\": `DataFrame (${size.join(\", \")})${columns.length ? `: ${columns.join(\", \")}` : \"\"}`,\n };\n}\n\nfunction isCanvasLike(obj) {\n return obj !== null && typeof obj === \"object\" && \"toDataURL\" in obj;\n}\n\nexport function isJpg(obj) {\n return obj instanceof Uint8Array && obj.length >= 4 &&\n obj[0] === 0xff && obj[1] === 0xd8 &&\n obj[obj.length - 2] === 0xff && obj[obj.length - 1] === 0xd9;\n}\n\nconst PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];\n\nexport function isPng(obj) {\n return obj instanceof Uint8Array && obj.length >= PNG_SIGNATURE.length &&\n PNG_SIGNATURE.every((byte, i) => obj[i] === byte);\n}\n\nfunction isSVGElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\" &&\n obj.outerHTML.startsWith(\"<svg\");\n}\n\nfunction isHTMLElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\";\n}\n\nfunction hasDisplaySymbol(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj[$display] === \"function\";\n}\n\nfunction isMediaBundle(obj) {\n return obj !== null && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * @param {{\n * inspect: (value: unknown) => string,\n * base64: (bytes: Uint8Array) => string,\n * readFile: (path: string) => Uint8Array,\n * send: (msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void,\n * input: (prompt: string, password: boolean) => string | null,\n * }} host\n */\nexport function createJupyter(host) {\n async function format(obj) {\n return await formatNow(obj);\n }\n\n // format without awaiting: the debugger's variable viewer formats values\n // while the target is paused, when no promise settles (#18). A $display\n // method's promise is the caller's to handle.\n function formatNow(obj) {\n if (hasDisplaySymbol(obj)) return obj[$display]();\n if (typeof obj !== \"object\" || obj === null) return { \"text/plain\": host.inspect(obj) };\n if (isCanvasLike(obj)) {\n const [prefix, data] = obj.toDataURL().split(\",\");\n return { [prefix.split(\":\")[1].split(\";\")[0]]: data };\n }\n if (isVegaLike(obj)) {\n const vega = extractVega(obj);\n if (vega) return vega;\n }\n if (isDataFrameLike(obj)) return extractDataFrame(obj);\n if (isJpg(obj)) return { \"image/jpeg\": host.base64(obj) };\n if (isPng(obj)) return { \"image/png\": host.base64(obj) };\n if (isSVGElementLike(obj)) return { \"image/svg+xml\": obj.outerHTML };\n if (isHTMLElementLike(obj)) return { \"text/html\": obj.outerHTML };\n return { \"text/plain\": host.inspect(obj) };\n }\n\n function taggedTemplate(mediatype) {\n return (strings, ...values) => {\n const payload = strings.reduce((acc, string, i) =>\n acc + string + (values[i] !== undefined ? values[i] : \"\"), \"\");\n return { [$display]: () => ({ [mediatype]: payload }) };\n };\n }\n\n function image(obj) {\n if (typeof obj === \"string\") {\n // As Deno does: a path that can't be read gets the TypeError below.\n try {\n obj = host.readFile(obj);\n } catch {\n // fall through\n }\n }\n if (isJpg(obj)) return { [$display]: () => ({ \"image/jpeg\": host.base64(obj) }) };\n if (isPng(obj)) return { [$display]: () => ({ \"image/png\": host.base64(obj) }) };\n throw new TypeError(\n \"Object is not a valid image or a path to an image. `jupyter.image` supports displaying JPG or PNG images.\",\n );\n }\n\n function broadcast(msgType, content, { metadata = {}, buffers = [] } = {}) {\n host.send(msgType, content, metadata, buffers);\n }\n\n async function display(obj, options = { raw: false, update: false }) {\n const bundle = options.raw && isMediaBundle(obj) ? obj : await format(obj);\n broadcast(options.update ? \"update_display_data\" : \"display_data\", {\n data: bundle,\n metadata: {},\n transient: options.display_id ? { display_id: options.display_id } : {},\n });\n }\n\n async function broadcastResult(executionCount, result) {\n if (result === undefined) return;\n try {\n broadcast(\"execute_result\", {\n execution_count: executionCount,\n data: await format(result),\n metadata: {},\n // nbclient crashes on a null `transient`; Deno learned this too.\n transient: {},\n });\n } catch (err) {\n broadcast(\"error\", {\n ename: err instanceof Error ? err.name : \"Error\",\n evalue: err instanceof Error ? err.message : String(err),\n traceback: err instanceof Error && err.stack ? err.stack.split(\"\\n\") : [],\n });\n }\n }\n\n function confirm(message = \"Confirm\") {\n const answer = host.input(`${message} [y/N] `, false);\n return answer === \"Y\" || answer === \"y\";\n }\n\n function prompt(message = \"Prompt\", defaultValue = \"\", { password = false } = {}) {\n if (defaultValue != \"\") message += ` [${defaultValue}]`;\n const answer = host.input(message, password);\n return answer === \"\" ? defaultValue : answer;\n }\n\n const comms = createComms((msgType, content, metadata, buffers) => host.send(msgType, content, metadata, buffers));\n\n return {\n namespace: {\n broadcast,\n display,\n format,\n md: taggedTemplate(\"text/markdown\"),\n html: taggedTemplate(\"text/html\"),\n svg: taggedTemplate(\"image/svg+xml\"),\n image,\n $display,\n comm: comms.api,\n widget: createWidgetFactory(comms.api, $display),\n },\n broadcastResult,\n formatNow,\n confirm,\n prompt,\n commDispatch: comms.dispatch,\n };\n}\n", "// The in-process evaluator behind the targets that don't use CDP: Bun (#7),\n// over a pipe (bun-channel.mjs), and workerd (#8), inside a request\n// (workerd-worker.mjs). Cells arrive as global code from\n// src/transform.ts's transformCellForEval, whose value is a promise of the\n// boxed result. Requests and replies mirror the CDP calls the kernel makes\n// of the other targets.\n//\n// No imports: this file must load in every target.\n\n/** Own and inherited property names, as Runtime.getProperties lists them. */\nexport function propertyNames(value) {\n if (value === null || value === undefined) return [];\n const names = new Set();\n for (let o = Object(value); o !== null; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) names.add(name);\n }\n return [...names];\n}\n\n/**\n * Answers the host's requests. `shim` is globalThis.__cdpk; `evaluate` runs\n * global code. Values the host refers to later (a result to display, an\n * error to describe) stay here under a handle, the stand-in for a CDP\n * objectId.\n */\nexport function createHandler(shim, evaluate = (code) => (0, eval)(code)) {\n const handles = new Map();\n let nextHandle = 0;\n const remote = (value) => {\n const objectId = `h${++nextHandle}`;\n handles.set(objectId, value);\n return { type: value === null ? \"object\" : typeof value, objectId };\n };\n const take = (objectId) => {\n const value = handles.get(objectId);\n handles.delete(objectId);\n return value;\n };\n\n return async function handle(request) {\n switch (request.op) {\n case \"ping\":\n return {};\n case \"eval\": {\n // The host uses a result's handle before its next cell.\n handles.clear();\n try {\n const box = await evaluate(request.code);\n return { result: box === undefined ? { type: \"undefined\" } : remote(box[0]) };\n } catch (err) {\n return {\n exceptionDetails: { text: \"Uncaught\", lineNumber: 0, columnNumber: 0, exception: remote(err) },\n };\n }\n }\n case \"broadcast\":\n await shim.broadcastResult(request.count, take(request.handle));\n return {};\n case \"describe\":\n return { value: shim.describeError(take(request.handle)) };\n case \"comm\":\n try {\n const handled = await shim.commDispatch(request.msgType, request.content, request.metadata, request.buffers);\n return { handled: handled === true };\n } catch (err) {\n return { error: JSON.parse(shim.describeError(err)) };\n }\n case \"props\": {\n // Completion's expression is a dotted path; resolved by descriptor\n // where the shim can, so completing `obj.` never runs a getter (#10).\n if (typeof shim.resolvePath === \"function\") {\n const resolved = shim.resolvePath(request.expr);\n return { names: resolved.found && !resolved.accessor ? propertyNames(resolved.value) : [] };\n }\n let value;\n try {\n value = evaluate(`(${request.expr})`);\n } catch {\n return { names: [] };\n }\n return { names: propertyNames(value) };\n }\n case \"inspect\":\n return { text: shim.inspectPath(request.path, request.detail ?? 0) };\n case \"barrier\":\n return { value: shim.barrier() };\n default:\n throw new Error(`unknown request ${JSON.stringify(request.op)}`);\n }\n };\n}\n", "// A small stand-in for util.inspect and util.format, for targets that have\n// neither: the browser Worker (runtime/browser-worker.mjs). Output follows\n// Node's for the common cases (strings quoted when nested, objects and\n// arrays on one line, Map, Set, Date, Error, class names, circular\n// references), without colours.\n//\n// No imports: this file must load in every target.\n\nconst MAX_ITEMS = 100;\n\n// Single quotes, unless the string has some and double quotes or\n// backticks would need no escapes, as util.inspect picks.\nfunction quote(s) {\n const q = !s.includes(\"'\") ? \"'\" : !s.includes('\"') ? '\"' : !s.includes(\"`\") && !s.includes(\"${\") ? \"`\" : \"'\";\n const escaped = s.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"\\n\", \"\\\\n\").replaceAll(q, `\\\\${q}`);\n return `${q}${escaped}${q}`;\n}\n\nfunction key(k) {\n return typeof k === \"symbol\" ? `[${k.toString()}]` : /^[A-Za-z_$][\\w$]*$/.test(k) ? k : quote(k);\n}\n\nfunction className(value) {\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return \"[Object: null prototype]\";\n const name = proto.constructor?.name;\n return name && name !== \"Object\" ? name : \"\";\n}\n\nfunction list(open, items, close, more) {\n if (more > 0) items.push(`... ${more} more item${more === 1 ? \"\" : \"s\"}`);\n return items.length === 0 ? `${open}${close}` : `${open} ${items.join(\", \")} ${close}`;\n}\n\n/** `value` as Node's util.inspect would show it, to `depth` levels. */\nexport function inspect(value, { depth = 2 } = {}) {\n const seen = [];\n const show = (v, level) => {\n switch (typeof v) {\n case \"string\":\n return quote(v);\n case \"bigint\":\n return `${v}n`;\n case \"symbol\":\n return v.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\": {\n const isClass = /^class\\b/.test(Function.prototype.toString.call(v));\n return isClass ? `[class ${v.name || \"(anonymous)\"}]` : `[Function${v.name ? `: ${v.name}` : \" (anonymous)\"}]`;\n }\n case \"number\":\n return Object.is(v, -0) ? \"-0\" : String(v);\n case \"boolean\":\n return String(v);\n }\n if (v === null) return \"null\";\n if (seen.includes(v)) return \"[Circular *1]\";\n if (v instanceof Date) return Number.isNaN(v.getTime()) ? \"Invalid Date\" : v.toISOString();\n if (v instanceof RegExp) return String(v);\n if (v instanceof Error) return v.stack ?? `${v.name}: ${v.message}`;\n if (v instanceof Promise) return \"Promise { <unknown> }\";\n if (level > depth) return Array.isArray(v) ? \"[Array]\" : `[${className(v) || \"Object\"}]`;\n seen.push(v);\n try {\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n const items = Array.from(v).slice(0, MAX_ITEMS).map((x) => show(x, level + 1));\n const prefix = Array.isArray(v) ? \"\" : `${v.constructor.name}(${v.length}) `;\n return prefix + list(\"[\", items, \"]\", v.length - items.length);\n }\n if (v instanceof Map) {\n const items = [...v].slice(0, MAX_ITEMS).map(([k, x]) => `${show(k, level + 1)} => ${show(x, level + 1)}`);\n return `Map(${v.size}) ` + list(\"{\", items, \"}\", v.size - items.length);\n }\n if (v instanceof Set) {\n const items = [...v].slice(0, MAX_ITEMS).map((x) => show(x, level + 1));\n return `Set(${v.size}) ` + list(\"{\", items, \"}\", v.size - items.length);\n }\n const keys = Reflect.ownKeys(v).filter((k) => Object.getOwnPropertyDescriptor(v, k)?.enumerable);\n const items = keys.slice(0, MAX_ITEMS).map((k) => {\n const d = Object.getOwnPropertyDescriptor(v, k);\n const shown = d.get || d.set ? `[${d.get ? \"Getter\" : \"\"}${d.get && d.set ? \"/\" : \"\"}${d.set ? \"Setter\" : \"\"}]` : show(d.value, level + 1);\n return `${key(k)}: ${shown}`;\n });\n const name = className(v);\n return (name ? `${name} ` : \"\") + list(\"{\", items, \"}\", keys.length - items.length);\n } finally {\n seen.pop();\n }\n };\n return show(value, 0);\n}\n\n/** console.log's formatting: strings as they are, everything else inspected, %s/%d/%i/%f/%o/%O/%j substituted. */\nexport function format(...args) {\n let out = [];\n let rest = args;\n if (typeof args[0] === \"string\" && args.length > 1 && args[0].includes(\"%\")) {\n let i = 1;\n const text = args[0].replace(/%[sdifoOjc%]/g, (spec) => {\n if (spec === \"%%\") return \"%\";\n if (i >= args.length) return spec;\n const a = args[i++];\n switch (spec) {\n case \"%s\":\n return typeof a === \"string\" ? a : inspect(a, { depth: 1 });\n case \"%d\":\n case \"%i\":\n return typeof a === \"bigint\" ? `${a}n` : String(spec === \"%i\" ? Math.trunc(Number(a)) : Number(a));\n case \"%f\":\n return String(Number(a));\n case \"%j\":\n return JSON.stringify(a);\n case \"%c\":\n return \"\";\n default:\n return inspect(a, { depth: 4 });\n }\n });\n out = [text];\n rest = args.slice(i);\n }\n for (const a of rest) out.push(typeof a === \"string\" ? a : inspect(a));\n return out.join(\" \");\n}\n", "// What inspect_request (#10) shows for a value: the text of a JupyterLab\n// tooltip (Shift-Tab) or inspector panel. Shared by every target; the host\n// decides how the value is found (src/target.ts: CDP's throwOnSideEffect;\n// in-process targets: resolvePath, below).\n//\n// No imports: this file must load in every target. `inspect` (util.inspect\n// or Deno.inspect) is passed in.\n\nconst PREVIEW_CHARS = 1500;\nconst SOURCE_CHARS = 4000;\nconst MAX_PROPERTIES = 40;\n\nconst IDENTIFIER_PATH = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)*$/;\n\n/**\n * Looks up a dotted path such as \"a.b.c\" from globalThis, by property\n * descriptor, so nothing runs: a getter along the way is reported rather\n * than called. In-process targets (Bun, workerd, celld) have no way to\n * evaluate without side effects, so inspection and completion use this.\n */\nexport function resolvePath(path, root = globalThis) {\n if (!IDENTIFIER_PATH.test(path)) return { found: false };\n let value = root;\n for (const name of path.split(\".\")) {\n if (value === null || value === undefined) return { found: false };\n let descriptor;\n for (let o = Object(value); o !== null && descriptor === undefined; o = Object.getPrototypeOf(o)) {\n descriptor = Object.getOwnPropertyDescriptor(o, name);\n }\n if (descriptor === undefined) return { found: false };\n if (!(\"value\" in descriptor)) return { found: true, accessor: true, name };\n value = descriptor.value;\n }\n return { found: true, value };\n}\n\nfunction truncate(text, limit) {\n return text.length > limit ? `${text.slice(0, limit)}\u2026 (${text.length - limit} more characters)` : text;\n}\n\n/** \"function add(a, b) {...}\" -> \"add(a, b)\"; \"class K {...}\" -> \"class K\". */\nexport function signatureOf(fn) {\n let source;\n try {\n source = Function.prototype.toString.call(fn);\n } catch {\n return `${fn.name || \"anonymous\"}(\u2026)`;\n }\n if (/^class\\b/.test(source)) return `class ${fn.name || \"(anonymous)\"}`;\n const params = /^[^(]*\\(([^)]*)\\)/.exec(source)?.[1];\n const native = /\\{\\s*\\[native code\\]\\s*\\}$/.test(source);\n // One line, however the parameters were spread over the source.\n const written = (params ?? \"\").replace(/\\s+/g, \" \").replace(/\\s*,\\s*/g, \", \").trim();\n const args = native ? Array.from({ length: fn.length }, (_, i) => `arg${i}`).join(\", \") : written;\n const arrow = !/^(?:async\\s+)?function\\b/.test(source) && /=>/.test(source.split(\"{\")[0] ?? \"\");\n const name = fn.name || (arrow ? \"(arrow function)\" : \"anonymous\");\n const prefix = /^async\\b/.test(source) ? \"async \" : \"\";\n return `${prefix}${name}(${args})`;\n}\n\nfunction typeOf(value) {\n if (value === null) return \"null\";\n if (typeof value !== \"object\" && typeof value !== \"function\") return typeof value;\n const name = Object.getPrototypeOf(value)?.constructor?.name;\n if (typeof value === \"function\") return /^class\\b/.test(safeSource(value)) ? \"class\" : \"function\";\n return name && name !== \"Object\" ? `object (${name})` : \"object\";\n}\n\nfunction safeSource(fn) {\n try {\n return Function.prototype.toString.call(fn);\n } catch {\n return \"\";\n }\n}\n\nfunction propertyNames(value) {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) return [];\n try {\n // A function's own internals aren't worth listing; older V8 (Node 22 and 24)\n // also gives sloppy-mode functions own `arguments` and `caller`.\n const internal = [\"length\", \"name\", \"prototype\", \"arguments\", \"caller\"];\n return Object.getOwnPropertyNames(value).filter((n) => !(typeof value === \"function\" && internal.includes(n)));\n } catch {\n return [];\n }\n}\n\n/**\n * The tooltip text for a value. `detail` 1 (Shift-Tab twice, or the\n * inspector panel) adds a function's source.\n */\nexport function describeValue(value, { inspect, detail = 0 }) {\n const lines = [`Type: ${typeOf(value)}`];\n if (typeof value === \"function\") lines.push(`Signature: ${signatureOf(value)}`);\n let preview;\n try {\n preview = inspect(value);\n } catch (err) {\n preview = `(inspect failed: ${err instanceof Error ? err.message : String(err)})`;\n }\n lines.push(`Value: ${truncate(preview, PREVIEW_CHARS)}`);\n const names = propertyNames(value);\n if (names.length > 0) {\n const shown = names.slice(0, MAX_PROPERTIES).join(\", \");\n lines.push(`Properties: ${shown}${names.length > MAX_PROPERTIES ? `, \u2026 (${names.length - MAX_PROPERTIES} more)` : \"\"}`);\n }\n if (detail > 0 && typeof value === \"function\") lines.push(`Source:\\n${truncate(safeSource(value), SOURCE_CHARS)}`);\n return lines.join(\"\\n\");\n}\n\n/** inspect_request for in-process targets: resolvePath, then describeValue. */\nexport function inspectPath(path, { inspect, detail = 0, root = globalThis }) {\n const resolved = resolvePath(path, root);\n if (!resolved.found) return null;\n if (resolved.accessor) {\n return `Type: accessor property\\n${resolved.name} has a getter, which isn't called for inspection: it could have side effects.`;\n }\n return describeValue(resolved.value, { inspect, detail });\n}\n", "// Where a browser cell's imports load from. A Worker resolves only URLs, so\n// packages come from a CDN that serves npm and jsr as ES modules: esm.sh by\n// default, with its jsr/ prefix for jsr packages.\n//\n// No imports: this file must load in every target.\n\nexport const DEFAULT_CDN = \"https://esm.sh/\";\n\n/** The URL `specifier`, imported from `base`, loads from. */\nexport function resolveSpecifier(specifier, base, cdn = DEFAULT_CDN) {\n if (/^(?:https?|data|blob):/.test(specifier)) return specifier;\n if (/^\\.{0,2}\\//.test(specifier)) return new URL(specifier, base).href;\n if (specifier.startsWith(\"npm:\")) return cdn + specifier.slice(4);\n if (specifier.startsWith(\"jsr:\")) return `${cdn}jsr/${specifier.slice(4).replace(/^\\//, \"\")}`;\n // esm.sh serves polyfills for Node's builtins under node:.\n return cdn + specifier;\n}\n", "// The driver for the browser target: a module Web Worker that runs cells.\n//\n// The page's kernel (src/browser/target.ts) sends each request as a\n// message and gets a reply message back, as over the workerd driver's\n// WebSocket (runtime/workerd-worker.mjs), whose shape this follows. Cells\n// come from transformCellForEval and run as global code with indirect\n// eval, so their declarations persist from cell to cell.\n//\n// A Worker has no module resolution beyond URLs, so `npm:` and `jsr:`\n// specifiers, and bare package names, load from a CDN (esm.sh by default).\n\nimport { createJupyter } from \"./display.mjs\";\nimport { createHandler } from \"./evaluator.mjs\";\nimport { format, inspect } from \"./format.mjs\";\nimport { describeValue, inspectPath, resolvePath } from \"./introspect.mjs\";\nimport { DEFAULT_CDN, resolveSpecifier } from \"./cdn.mjs\";\n\nfunction base64(bytes) {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(binary);\n}\n\nconst post = (message) => globalThis.postMessage(message);\n\n// --- Output -----------------------------------------------------------------\nconst stream = (name) => (...args) => post({ kind: \"stream\", name, text: format(...args) + \"\\n\" });\nObject.assign(console, {\n log: stream(\"stdout\"),\n info: stream(\"stdout\"),\n debug: stream(\"stdout\"),\n dir: (value) => post({ kind: \"stream\", name: \"stdout\", text: inspect(value, { depth: 4 }) + \"\\n\" }),\n warn: stream(\"stderr\"),\n error: stream(\"stderr\"),\n});\n\n// An error thrown later by a cell's timer or promise goes to stderr, as on\n// the other targets.\nfunction reportUncaught(kind, err) {\n post({ kind: \"stream\", name: \"stderr\", text: `${kind}: ${err instanceof Error ? (err.stack ?? err.message) : inspect(err)}\\n` });\n}\nglobalThis.addEventListener(\"unhandledrejection\", (event) => {\n event.preventDefault();\n reportUncaught(\"Uncaught (in promise)\", event.reason);\n});\nglobalThis.addEventListener(\"error\", (event) => {\n event.preventDefault();\n reportUncaught(\"Uncaught\", event.error ?? event.message);\n});\n\nconst jupyter = createJupyter({\n inspect: (value) => inspect(value, { depth: 4 }),\n base64,\n readFile() {\n throw new Error(\"the browser target has no file system to read from; pass the image bytes instead\");\n },\n send(msgType, content, metadata, buffers) {\n post({ kind: \"iopub\", msg_type: msgType, content, metadata, buffers: buffers.map(base64), barrier: 0 });\n },\n // A synchronous prompt would need SharedArrayBuffer and Atomics.wait, so\n // a cross-origin isolated page; until then, as with no stdin.\n input: () => null,\n});\n\n// --- Modules ----------------------------------------------------------------\nlet cdn = DEFAULT_CDN;\n\n\n// --- The shim cells and the evaluator use -----------------------------------\nlet handle = null;\n\nfunction install({ base, cdn: cdnBase }) {\n if (typeof cdnBase === \"string\") cdn = cdnBase.endsWith(\"/\") ? cdnBase : cdnBase + \"/\";\n const url = new URL(\"$cdpk$repl.mjs\", base).href;\n globalThis.__cdpk = {\n import: (specifier, options) => import(resolveSpecifier(specifier, url, cdn), options),\n meta: { url, resolve: (specifier) => resolveSpecifier(specifier, url, cdn) },\n // inspect_request (#10): by descriptor, so nothing runs.\n describeForInspect: (value, detail) => describeValue(value, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n inspectPath: (path, detail) => inspectPath(path, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n resolvePath,\n barrier: () => 0,\n broadcastResult: jupyter.broadcastResult,\n async commDispatch(msgType, content, metadata, buffers64) {\n const buffers = buffers64.map((b) => Uint8Array.from(atob(b), (c) => c.charCodeAt(0)));\n return await jupyter.commDispatch(msgType, content, metadata, buffers);\n },\n describeError(value) {\n if (value instanceof Error) {\n return JSON.stringify({ name: value.name, message: value.message, stack: value.stack ?? \"\" });\n }\n return JSON.stringify({ name: \"Error\", message: inspect(value), stack: \"\" });\n },\n };\n Object.defineProperty(globalThis, \"__cdpk\", { enumerable: false });\n globalThis.jupyter = jupyter.namespace;\n globalThis.prompt = jupyter.prompt;\n globalThis.confirm = jupyter.confirm;\n handle = createHandler(globalThis.__cdpk, (code) => (0, eval)(code));\n}\n\nasync function answer(req) {\n if (req.op === \"info\") {\n install(req);\n return { userAgent: globalThis.navigator?.userAgent ?? \"\" };\n }\n if (handle === null) throw new Error(\"the driver wasn't sent info first\");\n return await handle(req);\n}\n\nglobalThis.addEventListener(\"message\", (event) => {\n const req = event.data;\n answer(req).then(\n (reply) => post({ kind: \"reply\", id: req.id, ...reply }),\n (err) => post({ kind: \"reply\", id: req.id, failure: String(err?.stack ?? err) }),\n );\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["comm", "list", "key", "$display", "key", "encoding", "list", "format", "answer", "handle", "items", "propertyNames", "inspect", "cdn"]
|
|
4
|
+
"sourcesContent": ["// @ts-self-types=\"./comm.d.mts\"\n// Jupyter comms: bidirectional channels between kernel and frontend, the\n// transport ipywidgets and anywidget are built on (#9). Runs inside the\n// target runtime.\n//\n// Kernel-to-frontend messages (comm_open, comm_msg, comm_close) go out\n// through `send`, the same ordered path as display messages. Frontend\n// messages arrive from the host through `dispatch`, which returns whether\n// anything in the kernel handled them, so the host can answer an unknown\n// target's comm_open with a comm_close, as the protocol asks.\n\nclass Comm {\n #send;\n #onClosed;\n #msgHandlers = [];\n #closeHandlers = [];\n closed = false;\n\n constructor(id, targetName, send, onClosed) {\n this.id = id;\n this.targetName = targetName;\n this.#send = send;\n this.#onClosed = onClosed;\n }\n\n send(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_msg\", { comm_id: this.id, data }, metadata, buffers);\n }\n\n close(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_close\", { comm_id: this.id, data }, metadata, buffers);\n // close() is synchronous for callers; its close handlers run detached.\n void this._closed({ data, metadata, buffers });\n }\n\n onMsg(handler) {\n this.#msgHandlers.push(handler);\n }\n\n onClose(handler) {\n this.#closeHandlers.push(handler);\n }\n\n async _receive(msg) {\n for (const handler of this.#msgHandlers) await handler(msg);\n }\n\n async _closed(msg) {\n if (this.closed) return;\n this.closed = true;\n this.#onClosed(this.id);\n for (const handler of this.#closeHandlers) await handler(msg);\n }\n}\n\n/**\n * @param {(msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void} send\n * @param {() => string} [newId]\n */\nexport function createComms(send, newId = () => crypto.randomUUID()) {\n const comms = new Map(); // comm_id -> Comm\n const targets = new Map(); // target_name -> handler\n const forget = (id) => comms.delete(id);\n\n function track(id, targetName) {\n const comm = new Comm(id, targetName, send, forget);\n comms.set(id, comm);\n return comm;\n }\n\n const api = {\n open(targetName, data = {}, { metadata = {}, buffers = [] } = {}) {\n const comm = track(newId(), targetName);\n send(\"comm_open\", { comm_id: comm.id, target_name: targetName, data }, metadata, buffers);\n return comm;\n },\n registerTarget(targetName, handler) {\n targets.set(targetName, handler);\n },\n unregisterTarget(targetName) {\n targets.delete(targetName);\n },\n };\n\n async function dispatch(msgType, content, metadata, buffers) {\n const msg = { data: content.data ?? {}, metadata: metadata ?? {}, buffers: buffers ?? [] };\n if (msgType === \"comm_open\") {\n const handler = targets.get(content.target_name);\n if (!handler) return false;\n const comm = track(content.comm_id, content.target_name);\n try {\n await handler(comm, msg);\n } catch (err) {\n // The host answers a failed comm_open with comm_close, so the comm\n // is gone on the frontend: drop it here too, without running close\n // handlers or sending anything (#137).\n comm.closed = true;\n forget(comm.id);\n throw err;\n }\n return true;\n }\n const comm = comms.get(content.comm_id);\n if (!comm) return false;\n if (msgType === \"comm_msg\") await comm._receive(msg);\n else if (msgType === \"comm_close\") await comm._closed(msg);\n else return false;\n return true;\n }\n\n function list() {\n return [...comms.values()].map((comm) => ({ commId: comm.id, targetName: comm.targetName }));\n }\n\n return { api, dispatch, list };\n}\n", "// @ts-self-types=\"./widget.d.mts\"\n// anywidget-compatible widgets over Jupyter comms (#9): the kernel half of\n// the ipywidgets model protocol (version 2.1.0) for anywidget's AnyModel,\n// whose frontend is the `anywidget` JupyterLab/Notebook/VS Code extension.\n//\n// const counter = jupyter.widget({ esm, state: { count: 0 } });\n// counter // display it\n// counter.get(\"count\"); counter.set(\"count\", 1);\n// counter.on(\"change:count\", (value, old) => ...);\n//\n// State is synced as in ipywidgets: `update` messages carry changed keys,\n// with binary values lifted out into message buffers at `buffer_paths`\n// (ipywidgets' _remove_buffers/_put_buffers).\n\nexport const WIDGET_PROTOCOL_VERSION = \"2.1.0\";\nconst WIDGET_TARGET = \"jupyter.widget\";\nconst CONTROL_TARGET = \"jupyter.widget.control\";\nconst VIEW_MIME = \"application/vnd.jupyter.widget-view+json\";\n\n// The anywidget model the frontend instantiates. The module version is a\n// semver range for the frontend's registry; anywidget sends \"~major.minor.*\"\n// of its own version, and \"*\" accepts whichever release is installed.\nconst ANYWIDGET_MODEL = {\n _model_name: \"AnyModel\",\n _model_module: \"anywidget\",\n _model_module_version: \"*\",\n _view_name: \"AnyView\",\n _view_module: \"anywidget\",\n _view_module_version: \"*\",\n _view_count: null,\n};\n\nfunction isBinary(value) {\n return value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value);\n}\n\nfunction toBytes(value) {\n if (value instanceof Uint8Array) return value;\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\n/** Copies `state` with binary values replaced by null, collecting them. */\nexport function removeBuffers(state) {\n const bufferPaths = [];\n const buffers = [];\n function walk(value, path) {\n if (isBinary(value)) {\n bufferPaths.push(path);\n buffers.push(toBytes(value));\n return null;\n }\n if (Array.isArray(value)) return value.map((item, i) => walk(item, [...path, i]));\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, walk(v, [...path, k])]));\n }\n return value;\n }\n return { state: walk(state, []), bufferPaths, buffers };\n}\n\n/** Puts received buffers back into `state` at `bufferPaths` (in place). */\nexport function putBuffers(state, bufferPaths = [], buffers = []) {\n bufferPaths.forEach((path, i) => {\n let obj = state;\n for (const key of path.slice(0, -1)) obj = obj[key];\n obj[path[path.length - 1]] = buffers[i];\n });\n return state;\n}\n\nclass Widget {\n #comm;\n #state;\n #listeners = new Map(); // event -> Set<listener>\n\n constructor(comm, state, $display) {\n this.#comm = comm;\n this.#state = state;\n this[$display] = () => ({\n [VIEW_MIME]: { version_major: 2, version_minor: 1, model_id: this.id },\n \"text/plain\": `Widget(${this.id})`,\n });\n }\n\n get id() {\n return this.#comm.id;\n }\n\n get closed() {\n return this.#comm.closed;\n }\n\n get(key) {\n return this.#state[key];\n }\n\n /** set(\"key\", value) or set({ key: value, ... }); syncs to the frontend. */\n set(keyOrChanges, value) {\n const changes = typeof keyOrChanges === \"string\" ? { [keyOrChanges]: value } : keyOrChanges;\n this.#apply(changes);\n if (this.closed) return;\n const { state, bufferPaths, buffers } = removeBuffers(changes);\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n }\n\n on(event, listener) {\n if (!this.#listeners.has(event)) this.#listeners.set(event, new Set());\n this.#listeners.get(event).add(listener);\n }\n\n off(event, listener) {\n this.#listeners.get(event)?.delete(listener);\n }\n\n /** A custom message, delivered to the view's model.on(\"msg:custom\"). */\n send(content, buffers = []) {\n this.#comm.send({ method: \"custom\", content }, { buffers });\n }\n\n close() {\n this.#comm.close();\n }\n\n /** The full state, as the frontend sees it (for request_state). */\n fullState() {\n return { ...ANYWIDGET_MODEL, ...this.#state };\n }\n\n async #emit(event, ...args) {\n for (const listener of this.#listeners.get(event) ?? []) await listener(...args);\n }\n\n async #apply(changes) {\n const previous = {};\n for (const [key, value] of Object.entries(changes)) {\n previous[key] = this.#state[key];\n this.#state[key] = value;\n }\n for (const key of Object.keys(changes)) await this.#emit(`change:${key}`, changes[key], previous[key]);\n await this.#emit(\"change\", changes);\n }\n\n async _receive(msg) {\n const { method } = msg.data;\n if (method === \"update\") {\n const changes = putBuffers(msg.data.state ?? {}, msg.data.buffer_paths, msg.buffers);\n await this.#apply(changes);\n } else if (method === \"request_state\") {\n const { state, bufferPaths, buffers } = removeBuffers(this.fullState());\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n } else if (method === \"custom\") {\n await this.#emit(\"msg:custom\", msg.data.content, msg.buffers);\n }\n }\n}\n\n/**\n * @param {import(\"./comm.d.mts\").CommApi} commApi\n * @param {symbol} $display\n */\nexport function createWidgetFactory(commApi, $display) {\n const live = new Map(); // model id -> Widget\n\n // The frontend opens this comm to restore every widget's state, e.g.\n // after the page reloads.\n commApi.registerTarget(CONTROL_TARGET, (control) => {\n control.onMsg((msg) => {\n if (msg.data.method !== \"request_states\") return;\n const states = {};\n for (const widget of live.values()) {\n const full = widget.fullState();\n states[widget.id] = {\n model_name: full._model_name,\n model_module: full._model_module,\n model_module_version: full._model_module_version,\n state: full,\n };\n }\n const { state, bufferPaths, buffers } = removeBuffers(states);\n control.send({ method: \"update_states\", states: state, buffer_paths: bufferPaths }, { buffers });\n });\n });\n\n return function widget({ esm, css, state = {} } = {}) {\n if (typeof esm !== \"string\") throw new TypeError(\"jupyter.widget needs an `esm` module string\");\n const initial = { ...state };\n const full = {\n ...ANYWIDGET_MODEL,\n _esm: esm,\n ...(css === undefined ? {} : { _css: css }),\n _anywidget_id: \"cdp-kernel.widget\",\n ...initial,\n };\n const { state: wire, bufferPaths, buffers } = removeBuffers(full);\n const comm = commApi.open(WIDGET_TARGET, { state: wire, buffer_paths: bufferPaths }, {\n metadata: { version: WIDGET_PROTOCOL_VERSION },\n buffers,\n });\n const instance = new Widget(comm, { ...full }, $display);\n live.set(comm.id, instance);\n comm.onMsg((msg) => instance._receive(msg));\n comm.onClose(() => {\n live.delete(comm.id);\n });\n return instance;\n };\n}\n", "// @ts-self-types=\"./display.d.mts\"\n// The Jupyter display API that Deno exposes as `Deno.jupyter`, made\n// runtime-neutral. Runs inside the target runtime (Node or Deno).\n//\n// Ported from Deno's cli/js/40_jupyter.js (v2.9.6), which is\n// Copyright 2018-2026 the Deno authors, MIT license. The formatting rules\n// (display symbol, canvas, Vega, Polars-style DataFrames, JPEG/PNG bytes,\n// HTML/SVG elements) are unchanged; the Deno internals it used are injected:\n// Deno[Deno.internal].inspectArgs -> host.inspect\n// op_base64_encode_from_buffer -> host.base64\n// Deno.readFileSync -> host.readFile\n// op_jupyter_broadcast -> host.send\n// WebGPU texture/buffer display depends on Deno's wgpu bindings and is\n// omitted. Comms and widgets (jupyter.comm, jupyter.widget) are additions\n// Deno doesn't have; see comm.mjs and widget.mjs.\n\nimport { createComms } from \"./comm.mjs\";\nimport { createWidgetFactory } from \"./widget.mjs\";\n\nexport const $display = Symbol.for(\"Jupyter.display\");\n\nconst rawToEntity = new Map([\n [\"&\", \"&\"],\n [\"<\", \"<\"],\n [\">\", \">\"],\n ['\"', \""\"],\n [\"'\", \"'\"],\n]);\nconst rawRe = new RegExp(`[${[...rawToEntity.keys()].join(\"\")}]`, \"g\");\n\nexport function escapeHTML(str) {\n return str.replaceAll(rawRe, (m) => rawToEntity.get(m) ?? m);\n}\n\nfunction isVegaLike(obj) {\n return obj !== null && typeof obj === \"object\" && \"toSpec\" in obj;\n}\n\nfunction extractVega(obj) {\n const spec = obj.toSpec();\n if (typeof spec !== \"object\" || spec === null || !(\"$schema\" in spec)) return null;\n let mediaType = \"application/vnd.vega.v5+json\";\n if (spec.$schema === \"https://vega.github.io/schema/vega-lite/v4.json\") {\n mediaType = \"application/vnd.vegalite.v4+json\";\n } else if (spec.$schema === \"https://vega.github.io/schema/vega-lite/v5.json\") {\n mediaType = \"application/vnd.vegalite.v5+json\";\n }\n const summary = summarizeChart(spec);\n return summary === undefined ? { [mediaType]: spec } : { [mediaType]: spec, \"text/plain\": summary };\n}\n\n// A few lines of text/plain next to a chart, for frontends that can't draw\n// it (jupyter console, nbconvert to text, agents reading the notebook):\n// mark, encodings with value ranges, title and row count (#321). The\n// approach follows nteract's repr-llm summarize_viz (BSD-3).\nconst VL_TYPES = { Q: \"quantitative\", N: \"nominal\", O: \"ordinal\", T: \"temporal\", G: \"geojson\" };\nconst MAX_CHILDREN = 6;\n\nfunction clip(str, max = 60) {\n return str.length > max ? `${str.slice(0, max - 1)}\u2026` : str;\n}\n\nfunction formatNumber(n) {\n return Number.isInteger(n) ? String(n) : String(Number(n.toPrecision(4)));\n}\n\nfunction titleText(title) {\n const text = typeof title === \"object\" && title !== null && !Array.isArray(title) ? title.text : title;\n const str = Array.isArray(text) ? text.join(\" \") : typeof text === \"string\" ? text : \"\";\n return str ? ` \"${clip(str, 80)}\"` : \"\";\n}\n\nfunction getField(row, field) {\n if (row === null || typeof row !== \"object\") return undefined;\n if (field in row) return row[field];\n // Vega-Lite reads \"a.b\" as a nested path and \"a\\.b\" as a key with a dot.\n if (field.includes(\"\\\\\")) return row[field.replace(/\\\\(.)/g, \"$1\")];\n return field.split(\".\").reduce((obj, key) => (obj === null || typeof obj !== \"object\" ? undefined : obj[key]), row);\n}\n\nfunction fieldStats(rows, field, type) {\n const values = [];\n for (const row of rows) {\n const value = getField(row, field);\n if (value !== undefined && value !== null && value !== \"\") values.push(value);\n }\n if (values.length === 0) return \"\";\n if (type === \"quantitative\") {\n let min = Infinity;\n let max = -Infinity;\n for (const value of values) {\n const n = Number(value);\n if (!Number.isFinite(n)) continue;\n if (n < min) min = n;\n if (n > max) max = n;\n }\n if (min > max) return \"\";\n return min === max ? formatNumber(min) : `${formatNumber(min)} to ${formatNumber(max)}`;\n }\n if (type === \"temporal\") {\n let min;\n let max;\n for (const value of values) {\n const t = value instanceof Date ? value.getTime() : typeof value === \"number\" ? value : Date.parse(String(value));\n if (!Number.isFinite(t)) continue;\n if (min === undefined || t < min.t) min = { t, value };\n if (max === undefined || t > max.t) max = { t, value };\n }\n if (min === undefined) return \"\";\n const show = ({ value }) =>\n typeof value === \"string\" ? clip(value, 30) : new Date(value instanceof Date ? value.getTime() : value).toISOString();\n return min.t === max.t ? show(min) : `${show(min)} to ${show(max)}`;\n }\n const distinct = new Set(values.map((value) => typeof value === \"object\" ? JSON.stringify(value) : String(value)));\n return `${distinct.size} ${distinct.size === 1 ? \"value\" : \"values\"}`;\n}\n\nfunction encodingSummary(encoding, rows) {\n const parts = [];\n for (const [channel, def] of Object.entries(encoding)) {\n if (channel === \"tooltip\" || def === null || typeof def !== \"object\" || Array.isArray(def)) continue;\n if (def.field === undefined && def.aggregate === undefined) continue;\n let name = typeof def.field === \"string\" ? def.field : def.field?.repeat ? `repeat ${def.field.repeat}` : \"\";\n if (def.aggregate !== undefined) name = `${def.aggregate}(${name})`;\n else if (def.timeUnit !== undefined) name = `${typeof def.timeUnit === \"string\" ? def.timeUnit : \"time\"}(${name})`;\n const type = VL_TYPES[def.type] ?? def.type;\n const details = [];\n if (typeof type === \"string\") details.push(type);\n if (rows && typeof def.field === \"string\" && def.aggregate === undefined) {\n const stats = fieldStats(rows, def.field, type);\n if (stats) details.push(stats);\n }\n parts.push(`${channel}=${clip(name, 40)}${details.length ? ` (${details.join(\", \")})` : \"\"}`);\n }\n return parts;\n}\n\nfunction vlRows(data, datasets) {\n if (data === null || typeof data !== \"object\") return undefined;\n if (Array.isArray(data.values)) return data.values;\n if (typeof data.name === \"string\" && Array.isArray(datasets?.[data.name])) return datasets[data.name];\n return undefined;\n}\n\nfunction vlDataNote(data, rows) {\n if (rows) return `${rows.length} ${rows.length === 1 ? \"row\" : \"rows\"}`;\n if (typeof data?.url === \"string\") return `data from ${clip(data.url)}`;\n return \"\";\n}\n\nfunction fieldList(def) {\n if (Array.isArray(def)) return def.join(\", \");\n if (def === null || typeof def !== \"object\") return \"\";\n if (typeof def.field === \"string\") return def.field;\n return Object.values(def).map(fieldList).filter(Boolean).join(\", \");\n}\n\nfunction summarizeVegaLiteView(spec, label, inherited, datasets, depth, lines) {\n const indent = \" \".repeat(depth);\n const data = spec.data ?? inherited.data;\n const rows = vlRows(data, datasets);\n const head = `${indent}${label}`;\n const title = titleText(spec.title);\n const children = spec.layer ?? spec.concat ?? spec.hconcat ?? spec.vconcat;\n if (Array.isArray(children)) {\n const noun = spec.layer ? \"layer\" : \"view\";\n const note = [`${children.length} ${children.length === 1 ? noun : `${noun}s`}`, vlDataNote(data, rows)].filter(Boolean);\n lines.push(`${head}${spec.layer ? \"layered\" : \"concatenated\"} chart${title}: ${note.join(\", \")}`);\n const encoding = spec.layer ? { ...inherited.encoding, ...spec.encoding } : {};\n children.slice(0, MAX_CHILDREN).forEach((child, i) => {\n if (child !== null && typeof child === \"object\") {\n summarizeVegaLiteView(child, `${noun} ${i + 1}: `, { data, encoding }, datasets, depth + 1, lines);\n }\n });\n if (children.length > MAX_CHILDREN) lines.push(`${indent} \u2026 ${children.length - MAX_CHILDREN} more`);\n return;\n }\n if ((spec.facet !== undefined || spec.repeat !== undefined) && spec.spec !== null && typeof spec.spec === \"object\") {\n const what = spec.facet !== undefined ? `faceted by ${fieldList(spec.facet)}` : `repeated over ${fieldList(spec.repeat)}`;\n const note = vlDataNote(data, rows);\n lines.push(`${head}chart${title} ${what}${note ? `, ${note}` : \"\"}`);\n summarizeVegaLiteView(spec.spec, \"each panel: \", { data, encoding: {} }, datasets, depth + 1, lines);\n return;\n }\n const mark = typeof spec.mark === \"string\" ? spec.mark : spec.mark?.type;\n const encoding = { ...inherited.encoding, ...spec.encoding };\n const parts = encodingSummary(encoding, rows);\n // A layer's rows were already counted on the layered chart's line.\n if (spec.data !== undefined || depth === 0) {\n const note = vlDataNote(data, rows);\n if (note) parts.push(note);\n }\n lines.push(`${head}${typeof mark === \"string\" ? `${mark} ` : \"\"}chart${title}${parts.length ? `: ${parts.join(\", \")}` : \"\"}`);\n}\n\nfunction vegaMarkTypes(marks, types) {\n if (!Array.isArray(marks)) return types;\n for (const mark of marks) {\n if (typeof mark?.type === \"string\") types.add(mark.type);\n vegaMarkTypes(mark?.marks, types);\n }\n return types;\n}\n\nfunction summarizeVega(spec) {\n const sections = [];\n const marks = [...vegaMarkTypes(spec.marks, new Set())];\n if (marks.length) sections.push(`marks ${marks.join(\", \")}`);\n const list = (items, describe) => {\n const shown = items.slice(0, MAX_CHILDREN).map(describe);\n if (items.length > MAX_CHILDREN) shown.push(`\u2026 ${items.length - MAX_CHILDREN} more`);\n return shown.join(\", \");\n };\n const data = Array.isArray(spec.data) ? spec.data.filter((d) => d !== null && typeof d === \"object\") : [];\n if (data.length) {\n sections.push(`data ${list(data, (d) => {\n const name = clip(String(d.name ?? \"?\"), 30);\n if (Array.isArray(d.values)) return `${name} (${d.values.length} ${d.values.length === 1 ? \"row\" : \"rows\"})`;\n if (typeof d.url === \"string\") return `${name} (from ${clip(d.url)})`;\n if (d.source !== undefined) return `${name} (from ${clip(String(d.source), 30)})`;\n return name;\n })}`);\n }\n const scales = Array.isArray(spec.scales) ? spec.scales.filter((s) => s !== null && typeof s === \"object\") : [];\n if (scales.length) {\n sections.push(`scales ${list(scales, (s) => `${clip(String(s.name ?? \"?\"), 30)} (${s.type ?? \"linear\"})`)}`);\n }\n return `Vega chart${titleText(spec.title)}${sections.length ? `: ${sections.join(\"; \")}` : \"\"}`;\n}\n\nfunction summarizeChart(spec) {\n try {\n if (typeof spec.$schema === \"string\" && spec.$schema.includes(\"/vega-lite/\")) {\n const lines = [];\n summarizeVegaLiteView(spec, \"Vega-Lite \", { encoding: {} }, spec.datasets, 0, lines);\n return lines.join(\"\\n\");\n }\n return summarizeVega(spec);\n } catch {\n // A summary is a fallback; a spec it doesn't understand still renders.\n return undefined;\n }\n}\n\nfunction isDataFrameLike(obj) {\n return obj !== null && typeof obj === \"object\" &&\n obj.schema !== undefined && typeof obj.schema === \"object\" &&\n typeof obj.head === \"function\" && typeof obj.toRecords === \"function\";\n}\n\nfunction mapPolarsTypeToJSONSchema(colType) {\n const typeMapping = {\n Null: \"null\",\n Bool: \"boolean\",\n Int8: \"integer\",\n Int16: \"integer\",\n Int32: \"integer\",\n Int64: \"integer\",\n UInt8: \"integer\",\n UInt16: \"integer\",\n UInt32: \"integer\",\n UInt64: \"integer\",\n Float32: \"number\",\n Float64: \"number\",\n Date: \"string\",\n Datetime: \"string\",\n Utf8: \"string\",\n Categorical: \"string\",\n List: \"array\",\n Struct: \"object\",\n };\n // Polars DataTypes only expose their name through toJSON().\n const dataType = typeof colType?.toJSON === \"function\" ? colType.toJSON()[\"DataType\"] : undefined;\n return typeMapping[dataType] || \"string\";\n}\n\nfunction extractDataFrame(df) {\n const fields = [];\n for (const [name, colType] of Object.entries(df.schema)) {\n fields.push({ name, type: mapPolarsTypeToJSONSchema(colType) });\n }\n const data = df.head(50).toRecords();\n let html = \"<table><thead><tr>\";\n for (const field of fields) html += `<th>${escapeHTML(String(field.name))}</th>`;\n html += \"</tr></thead><tbody>\";\n for (const row of df.head(10).toRecords()) {\n html += \"<tr>\";\n for (const field of fields) html += `<td>${escapeHTML(String(row[field.name]))}</td>`;\n html += \"</tr>\";\n }\n html += \"</tbody></table>\";\n // Polars has `height`; the row count is left out when there isn't one.\n const size = [];\n if (Number.isInteger(df.height)) size.push(`${df.height} ${df.height === 1 ? \"row\" : \"rows\"}`);\n size.push(`${fields.length} ${fields.length === 1 ? \"column\" : \"columns\"}`);\n const columns = fields.slice(0, 20).map((field) => `${clip(String(field.name), 40)} (${field.type})`);\n if (fields.length > 20) columns.push(`\u2026 ${fields.length - 20} more`);\n return {\n \"application/vnd.dataresource+json\": { data, schema: { fields } },\n \"text/html\": html,\n \"text/plain\": `DataFrame (${size.join(\", \")})${columns.length ? `: ${columns.join(\", \")}` : \"\"}`,\n };\n}\n\nfunction isCanvasLike(obj) {\n return obj !== null && typeof obj === \"object\" && \"toDataURL\" in obj;\n}\n\nexport function isJpg(obj) {\n return obj instanceof Uint8Array && obj.length >= 4 &&\n obj[0] === 0xff && obj[1] === 0xd8 &&\n obj[obj.length - 2] === 0xff && obj[obj.length - 1] === 0xd9;\n}\n\nconst PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];\n\nexport function isPng(obj) {\n return obj instanceof Uint8Array && obj.length >= PNG_SIGNATURE.length &&\n PNG_SIGNATURE.every((byte, i) => obj[i] === byte);\n}\n\nfunction isSVGElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\" &&\n obj.outerHTML.startsWith(\"<svg\");\n}\n\nfunction isHTMLElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\";\n}\n\nfunction hasDisplaySymbol(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj[$display] === \"function\";\n}\n\nfunction isMediaBundle(obj) {\n return obj !== null && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * @param {{\n * inspect: (value: unknown) => string,\n * base64: (bytes: Uint8Array) => string,\n * readFile: (path: string) => Uint8Array,\n * send: (msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void,\n * input: (prompt: string, password: boolean) => string | null,\n * }} host\n */\nexport function createJupyter(host) {\n async function format(obj) {\n return await formatNow(obj);\n }\n\n // format without awaiting: the debugger's variable viewer formats values\n // while the target is paused, when no promise settles (#18). A $display\n // method's promise is the caller's to handle.\n function formatNow(obj) {\n if (hasDisplaySymbol(obj)) return obj[$display]();\n if (typeof obj !== \"object\" || obj === null) return { \"text/plain\": host.inspect(obj) };\n if (isCanvasLike(obj)) {\n const [prefix, data] = obj.toDataURL().split(\",\");\n return { [prefix.split(\":\")[1].split(\";\")[0]]: data };\n }\n if (isVegaLike(obj)) {\n const vega = extractVega(obj);\n if (vega) return vega;\n }\n if (isDataFrameLike(obj)) return extractDataFrame(obj);\n if (isJpg(obj)) return { \"image/jpeg\": host.base64(obj) };\n if (isPng(obj)) return { \"image/png\": host.base64(obj) };\n if (isSVGElementLike(obj)) return { \"image/svg+xml\": obj.outerHTML };\n if (isHTMLElementLike(obj)) return { \"text/html\": obj.outerHTML };\n return { \"text/plain\": host.inspect(obj) };\n }\n\n function taggedTemplate(mediatype) {\n return (strings, ...values) => {\n const payload = strings.reduce((acc, string, i) =>\n acc + string + (values[i] !== undefined ? values[i] : \"\"), \"\");\n return { [$display]: () => ({ [mediatype]: payload }) };\n };\n }\n\n function image(obj) {\n if (typeof obj === \"string\") {\n // As Deno does: a path that can't be read gets the TypeError below.\n try {\n obj = host.readFile(obj);\n } catch {\n // fall through\n }\n }\n if (isJpg(obj)) return { [$display]: () => ({ \"image/jpeg\": host.base64(obj) }) };\n if (isPng(obj)) return { [$display]: () => ({ \"image/png\": host.base64(obj) }) };\n throw new TypeError(\n \"Object is not a valid image or a path to an image. `jupyter.image` supports displaying JPG or PNG images.\",\n );\n }\n\n function broadcast(msgType, content, { metadata = {}, buffers = [] } = {}) {\n host.send(msgType, content, metadata, buffers);\n }\n\n async function display(obj, options = { raw: false, update: false }) {\n const bundle = options.raw && isMediaBundle(obj) ? obj : await format(obj);\n broadcast(options.update ? \"update_display_data\" : \"display_data\", {\n data: bundle,\n metadata: {},\n transient: options.display_id ? { display_id: options.display_id } : {},\n });\n }\n\n async function broadcastResult(executionCount, result) {\n if (result === undefined) return;\n try {\n broadcast(\"execute_result\", {\n execution_count: executionCount,\n data: await format(result),\n metadata: {},\n // nbclient crashes on a null `transient`; Deno learned this too.\n transient: {},\n });\n } catch (err) {\n broadcast(\"error\", {\n ename: err instanceof Error ? err.name : \"Error\",\n evalue: err instanceof Error ? err.message : String(err),\n traceback: err instanceof Error && err.stack ? err.stack.split(\"\\n\") : [],\n });\n }\n }\n\n function confirm(message = \"Confirm\") {\n const answer = host.input(`${message} [y/N] `, false);\n return answer === \"Y\" || answer === \"y\";\n }\n\n function prompt(message = \"Prompt\", defaultValue = \"\", { password = false } = {}) {\n if (defaultValue != \"\") message += ` [${defaultValue}]`;\n const answer = host.input(message, password);\n return answer === \"\" ? defaultValue : answer;\n }\n\n const comms = createComms((msgType, content, metadata, buffers) => host.send(msgType, content, metadata, buffers));\n\n return {\n namespace: {\n broadcast,\n display,\n format,\n md: taggedTemplate(\"text/markdown\"),\n html: taggedTemplate(\"text/html\"),\n svg: taggedTemplate(\"image/svg+xml\"),\n image,\n $display,\n comm: comms.api,\n widget: createWidgetFactory(comms.api, $display),\n },\n broadcastResult,\n formatNow,\n confirm,\n prompt,\n commDispatch: comms.dispatch,\n };\n}\n", "// The in-process evaluator behind the targets that don't use CDP: Bun (#7),\n// over a pipe (bun-channel.mjs), and workerd (#8), inside a request\n// (workerd-worker.mjs). Cells arrive as global code from\n// src/transform.ts's transformCellForEval, whose value is a promise of the\n// boxed result. Requests and replies mirror the CDP calls the kernel makes\n// of the other targets.\n//\n// No imports: this file must load in every target.\n\n/** Own and inherited property names, as Runtime.getProperties lists them. */\nexport function propertyNames(value) {\n if (value === null || value === undefined) return [];\n const names = new Set();\n for (let o = Object(value); o !== null; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) names.add(name);\n }\n return [...names];\n}\n\n/**\n * Answers the host's requests. `shim` is globalThis.__cdpk; `evaluate` runs\n * global code. Values the host refers to later (a result to display, an\n * error to describe) stay here under a handle, the stand-in for a CDP\n * objectId.\n */\nexport function createHandler(shim, evaluate = (code) => (0, eval)(code)) {\n const handles = new Map();\n let nextHandle = 0;\n const remote = (value) => {\n const objectId = `h${++nextHandle}`;\n handles.set(objectId, value);\n return { type: value === null ? \"object\" : typeof value, objectId };\n };\n const take = (objectId) => {\n const value = handles.get(objectId);\n handles.delete(objectId);\n return value;\n };\n\n return async function handle(request) {\n switch (request.op) {\n case \"ping\":\n return {};\n case \"eval\": {\n // The host uses a result's handle before its next cell.\n handles.clear();\n try {\n const box = await evaluate(request.code);\n return { result: box === undefined ? { type: \"undefined\" } : remote(box[0]) };\n } catch (err) {\n return {\n exceptionDetails: { text: \"Uncaught\", lineNumber: 0, columnNumber: 0, exception: remote(err) },\n };\n }\n }\n case \"broadcast\":\n await shim.broadcastResult(request.count, take(request.handle));\n return {};\n case \"format\":\n return { value: await shim.formatJson(request.handle === undefined ? undefined : take(request.handle)) };\n case \"describe\":\n return { value: shim.describeError(take(request.handle)) };\n case \"comm\":\n try {\n const handled = await shim.commDispatch(request.msgType, request.content, request.metadata, request.buffers);\n return { handled: handled === true };\n } catch (err) {\n return { error: JSON.parse(shim.describeError(err)) };\n }\n case \"props\": {\n // Completion's expression is a dotted path; resolved by descriptor\n // where the shim can, so completing `obj.` never runs a getter (#10).\n if (typeof shim.resolvePath === \"function\") {\n const resolved = shim.resolvePath(request.expr);\n return { names: resolved.found && !resolved.accessor ? propertyNames(resolved.value) : [] };\n }\n let value;\n try {\n value = evaluate(`(${request.expr})`);\n } catch {\n return { names: [] };\n }\n return { names: propertyNames(value) };\n }\n case \"inspect\":\n return { text: shim.inspectPath(request.path, request.detail ?? 0) };\n case \"barrier\":\n return { value: shim.barrier() };\n default:\n throw new Error(`unknown request ${JSON.stringify(request.op)}`);\n }\n };\n}\n", "// A small stand-in for util.inspect and util.format, for targets that have\n// neither: the browser Worker (runtime/browser-worker.mjs). Output follows\n// Node's for the common cases (strings quoted when nested, objects and\n// arrays on one line, Map, Set, Date, Error, class names, circular\n// references), without colours.\n//\n// No imports: this file must load in every target.\n\nconst MAX_ITEMS = 100;\n\n// Single quotes, unless the string has some and double quotes or\n// backticks would need no escapes, as util.inspect picks.\nfunction quote(s) {\n const q = !s.includes(\"'\") ? \"'\" : !s.includes('\"') ? '\"' : !s.includes(\"`\") && !s.includes(\"${\") ? \"`\" : \"'\";\n const escaped = s.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"\\n\", \"\\\\n\").replaceAll(q, `\\\\${q}`);\n return `${q}${escaped}${q}`;\n}\n\nfunction key(k) {\n return typeof k === \"symbol\" ? `[${k.toString()}]` : /^[A-Za-z_$][\\w$]*$/.test(k) ? k : quote(k);\n}\n\nfunction className(value) {\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return \"[Object: null prototype]\";\n const name = proto.constructor?.name;\n return name && name !== \"Object\" ? name : \"\";\n}\n\nfunction list(open, items, close, more) {\n if (more > 0) items.push(`... ${more} more item${more === 1 ? \"\" : \"s\"}`);\n return items.length === 0 ? `${open}${close}` : `${open} ${items.join(\", \")} ${close}`;\n}\n\n/** `value` as Node's util.inspect would show it, to `depth` levels. */\nexport function inspect(value, { depth = 2 } = {}) {\n const seen = [];\n const show = (v, level) => {\n switch (typeof v) {\n case \"string\":\n return quote(v);\n case \"bigint\":\n return `${v}n`;\n case \"symbol\":\n return v.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\": {\n const isClass = /^class\\b/.test(Function.prototype.toString.call(v));\n return isClass ? `[class ${v.name || \"(anonymous)\"}]` : `[Function${v.name ? `: ${v.name}` : \" (anonymous)\"}]`;\n }\n case \"number\":\n return Object.is(v, -0) ? \"-0\" : String(v);\n case \"boolean\":\n return String(v);\n }\n if (v === null) return \"null\";\n if (seen.includes(v)) return \"[Circular *1]\";\n if (v instanceof Date) return Number.isNaN(v.getTime()) ? \"Invalid Date\" : v.toISOString();\n if (v instanceof RegExp) return String(v);\n if (v instanceof Error) return v.stack ?? `${v.name}: ${v.message}`;\n if (v instanceof Promise) return \"Promise { <unknown> }\";\n if (level > depth) return Array.isArray(v) ? \"[Array]\" : `[${className(v) || \"Object\"}]`;\n seen.push(v);\n try {\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n const items = Array.from(v).slice(0, MAX_ITEMS).map((x) => show(x, level + 1));\n const prefix = Array.isArray(v) ? \"\" : `${v.constructor.name}(${v.length}) `;\n return prefix + list(\"[\", items, \"]\", v.length - items.length);\n }\n if (v instanceof Map) {\n const items = [...v].slice(0, MAX_ITEMS).map(([k, x]) => `${show(k, level + 1)} => ${show(x, level + 1)}`);\n return `Map(${v.size}) ` + list(\"{\", items, \"}\", v.size - items.length);\n }\n if (v instanceof Set) {\n const items = [...v].slice(0, MAX_ITEMS).map((x) => show(x, level + 1));\n return `Set(${v.size}) ` + list(\"{\", items, \"}\", v.size - items.length);\n }\n const keys = Reflect.ownKeys(v).filter((k) => Object.getOwnPropertyDescriptor(v, k)?.enumerable);\n const items = keys.slice(0, MAX_ITEMS).map((k) => {\n const d = Object.getOwnPropertyDescriptor(v, k);\n const shown = d.get || d.set ? `[${d.get ? \"Getter\" : \"\"}${d.get && d.set ? \"/\" : \"\"}${d.set ? \"Setter\" : \"\"}]` : show(d.value, level + 1);\n return `${key(k)}: ${shown}`;\n });\n const name = className(v);\n return (name ? `${name} ` : \"\") + list(\"{\", items, \"}\", keys.length - items.length);\n } finally {\n seen.pop();\n }\n };\n return show(value, 0);\n}\n\n/** console.log's formatting: strings as they are, everything else inspected, %s/%d/%i/%f/%o/%O/%j substituted. */\nexport function format(...args) {\n let out = [];\n let rest = args;\n if (typeof args[0] === \"string\" && args.length > 1 && args[0].includes(\"%\")) {\n let i = 1;\n const text = args[0].replace(/%[sdifoOjc%]/g, (spec) => {\n if (spec === \"%%\") return \"%\";\n if (i >= args.length) return spec;\n const a = args[i++];\n switch (spec) {\n case \"%s\":\n return typeof a === \"string\" ? a : inspect(a, { depth: 1 });\n case \"%d\":\n case \"%i\":\n return typeof a === \"bigint\" ? `${a}n` : String(spec === \"%i\" ? Math.trunc(Number(a)) : Number(a));\n case \"%f\":\n return String(Number(a));\n case \"%j\":\n return JSON.stringify(a);\n case \"%c\":\n return \"\";\n default:\n return inspect(a, { depth: 4 });\n }\n });\n out = [text];\n rest = args.slice(i);\n }\n for (const a of rest) out.push(typeof a === \"string\" ? a : inspect(a));\n return out.join(\" \");\n}\n", "// What inspect_request (#10) shows for a value: the text of a JupyterLab\n// tooltip (Shift-Tab) or inspector panel. Shared by every target; the host\n// decides how the value is found (src/target.ts: CDP's throwOnSideEffect;\n// in-process targets: resolvePath, below).\n//\n// No imports: this file must load in every target. `inspect` (util.inspect\n// or Deno.inspect) is passed in.\n\nconst PREVIEW_CHARS = 1500;\nconst SOURCE_CHARS = 4000;\nconst MAX_PROPERTIES = 40;\n\nconst IDENTIFIER_PATH = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)*$/;\n\n/**\n * Looks up a dotted path such as \"a.b.c\" from globalThis, by property\n * descriptor, so nothing runs: a getter along the way is reported rather\n * than called. In-process targets (Bun, workerd, celld) have no way to\n * evaluate without side effects, so inspection and completion use this.\n */\nexport function resolvePath(path, root = globalThis) {\n if (!IDENTIFIER_PATH.test(path)) return { found: false };\n let value = root;\n for (const name of path.split(\".\")) {\n if (value === null || value === undefined) return { found: false };\n let descriptor;\n for (let o = Object(value); o !== null && descriptor === undefined; o = Object.getPrototypeOf(o)) {\n descriptor = Object.getOwnPropertyDescriptor(o, name);\n }\n if (descriptor === undefined) return { found: false };\n if (!(\"value\" in descriptor)) return { found: true, accessor: true, name };\n value = descriptor.value;\n }\n return { found: true, value };\n}\n\nfunction truncate(text, limit) {\n return text.length > limit ? `${text.slice(0, limit)}\u2026 (${text.length - limit} more characters)` : text;\n}\n\n/** \"function add(a, b) {...}\" -> \"add(a, b)\"; \"class K {...}\" -> \"class K\". */\nexport function signatureOf(fn) {\n let source;\n try {\n source = Function.prototype.toString.call(fn);\n } catch {\n return `${fn.name || \"anonymous\"}(\u2026)`;\n }\n if (/^class\\b/.test(source)) return `class ${fn.name || \"(anonymous)\"}`;\n const params = /^[^(]*\\(([^)]*)\\)/.exec(source)?.[1];\n const native = /\\{\\s*\\[native code\\]\\s*\\}$/.test(source);\n // One line, however the parameters were spread over the source.\n const written = (params ?? \"\").replace(/\\s+/g, \" \").replace(/\\s*,\\s*/g, \", \").trim();\n const args = native ? Array.from({ length: fn.length }, (_, i) => `arg${i}`).join(\", \") : written;\n const arrow = !/^(?:async\\s+)?function\\b/.test(source) && /=>/.test(source.split(\"{\")[0] ?? \"\");\n const name = fn.name || (arrow ? \"(arrow function)\" : \"anonymous\");\n const prefix = /^async\\b/.test(source) ? \"async \" : \"\";\n return `${prefix}${name}(${args})`;\n}\n\nfunction typeOf(value) {\n if (value === null) return \"null\";\n if (typeof value !== \"object\" && typeof value !== \"function\") return typeof value;\n const name = Object.getPrototypeOf(value)?.constructor?.name;\n if (typeof value === \"function\") return /^class\\b/.test(safeSource(value)) ? \"class\" : \"function\";\n return name && name !== \"Object\" ? `object (${name})` : \"object\";\n}\n\nfunction safeSource(fn) {\n try {\n return Function.prototype.toString.call(fn);\n } catch {\n return \"\";\n }\n}\n\nfunction propertyNames(value) {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) return [];\n try {\n // A function's own internals aren't worth listing; older V8 (Node 22 and 24)\n // also gives sloppy-mode functions own `arguments` and `caller`.\n const internal = [\"length\", \"name\", \"prototype\", \"arguments\", \"caller\"];\n return Object.getOwnPropertyNames(value).filter((n) => !(typeof value === \"function\" && internal.includes(n)));\n } catch {\n return [];\n }\n}\n\n/**\n * The tooltip text for a value. `detail` 1 (Shift-Tab twice, or the\n * inspector panel) adds a function's source.\n */\nexport function describeValue(value, { inspect, detail = 0 }) {\n const lines = [`Type: ${typeOf(value)}`];\n if (typeof value === \"function\") lines.push(`Signature: ${signatureOf(value)}`);\n let preview;\n try {\n preview = inspect(value);\n } catch (err) {\n preview = `(inspect failed: ${err instanceof Error ? err.message : String(err)})`;\n }\n lines.push(`Value: ${truncate(preview, PREVIEW_CHARS)}`);\n const names = propertyNames(value);\n if (names.length > 0) {\n const shown = names.slice(0, MAX_PROPERTIES).join(\", \");\n lines.push(`Properties: ${shown}${names.length > MAX_PROPERTIES ? `, \u2026 (${names.length - MAX_PROPERTIES} more)` : \"\"}`);\n }\n if (detail > 0 && typeof value === \"function\") lines.push(`Source:\\n${truncate(safeSource(value), SOURCE_CHARS)}`);\n return lines.join(\"\\n\");\n}\n\n/** inspect_request for in-process targets: resolvePath, then describeValue. */\nexport function inspectPath(path, { inspect, detail = 0, root = globalThis }) {\n const resolved = resolvePath(path, root);\n if (!resolved.found) return null;\n if (resolved.accessor) {\n return `Type: accessor property\\n${resolved.name} has a getter, which isn't called for inspection: it could have side effects.`;\n }\n return describeValue(resolved.value, { inspect, detail });\n}\n", "// Where a browser cell's imports load from. A Worker resolves only URLs, so\n// packages come from a CDN that serves npm and jsr as ES modules: esm.sh by\n// default, with its jsr/ prefix for jsr packages.\n//\n// No imports: this file must load in every target.\n\nexport const DEFAULT_CDN = \"https://esm.sh/\";\n\n/** The URL `specifier`, imported from `base`, loads from. */\nexport function resolveSpecifier(specifier, base, cdn = DEFAULT_CDN) {\n if (/^(?:https?|data|blob):/.test(specifier)) return specifier;\n if (/^\\.{0,2}\\//.test(specifier)) return new URL(specifier, base).href;\n if (specifier.startsWith(\"npm:\")) return cdn + specifier.slice(4);\n if (specifier.startsWith(\"jsr:\")) return `${cdn}jsr/${specifier.slice(4).replace(/^\\//, \"\")}`;\n // esm.sh serves polyfills for Node's builtins under node:.\n return cdn + specifier;\n}\n", "// The driver for the browser target: a module Web Worker that runs cells.\n//\n// The page's kernel (src/browser/target.ts) sends each request as a\n// message and gets a reply message back, as over the workerd driver's\n// WebSocket (runtime/workerd-worker.mjs), whose shape this follows. Cells\n// come from transformCellForEval and run as global code with indirect\n// eval, so their declarations persist from cell to cell.\n//\n// A Worker has no module resolution beyond URLs, so `npm:` and `jsr:`\n// specifiers, and bare package names, load from a CDN (esm.sh by default).\n//\n// The page can also offer cells its own features (#384): `host` requests go\n// to the page's handler, and `preload` modules run before the first cell.\n\nimport { createJupyter } from \"./display.mjs\";\nimport { createHandler } from \"./evaluator.mjs\";\nimport { format, inspect } from \"./format.mjs\";\nimport { describeValue, inspectPath, resolvePath } from \"./introspect.mjs\";\nimport { DEFAULT_CDN, resolveSpecifier } from \"./cdn.mjs\";\n\nfunction base64(bytes) {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(binary);\n}\n\nconst post = (message) => globalThis.postMessage(message);\n\n// --- Output -----------------------------------------------------------------\nconst stream = (name) => (...args) => post({ kind: \"stream\", name, text: format(...args) + \"\\n\" });\nObject.assign(console, {\n log: stream(\"stdout\"),\n info: stream(\"stdout\"),\n debug: stream(\"stdout\"),\n dir: (value) => post({ kind: \"stream\", name: \"stdout\", text: inspect(value, { depth: 4 }) + \"\\n\" }),\n warn: stream(\"stderr\"),\n error: stream(\"stderr\"),\n});\n\n// An error thrown later by a cell's timer or promise goes to stderr, as on\n// the other targets.\nfunction reportUncaught(kind, err) {\n post({ kind: \"stream\", name: \"stderr\", text: `${kind}: ${err instanceof Error ? (err.stack ?? err.message) : inspect(err)}\\n` });\n}\nglobalThis.addEventListener(\"unhandledrejection\", (event) => {\n event.preventDefault();\n reportUncaught(\"Uncaught (in promise)\", event.reason);\n});\nglobalThis.addEventListener(\"error\", (event) => {\n event.preventDefault();\n reportUncaught(\"Uncaught\", event.error ?? event.message);\n});\n\nconst jupyter = createJupyter({\n inspect: (value) => inspect(value, { depth: 4 }),\n base64,\n readFile() {\n throw new Error(\"the browser target has no file system to read from; pass the image bytes instead\");\n },\n send(msgType, content, metadata, buffers) {\n post({ kind: \"iopub\", msg_type: msgType, content, metadata, buffers: buffers.map(base64), barrier: 0 });\n },\n // A synchronous prompt would need SharedArrayBuffer and Atomics.wait, so\n // a cross-origin isolated page; until then, as with no stdin.\n input: () => null,\n});\n\n// --- Modules ----------------------------------------------------------------\nlet cdn = DEFAULT_CDN;\n\n\n// --- The host page (#384) -----------------------------------------------------\n// Requests to the page's `host` handler (src/browser/target.ts), and events\n// it sends. Preload modules get this object; cells only through them.\nconst hostCalls = new Map();\nconst hostListeners = new Set();\nlet nextHostId = 0;\n\nfunction hostError(error) {\n const err = new Error(String(error?.message ?? \"the host request failed\"));\n if (typeof error?.name === \"string\") err.name = error.name;\n if (error?.code !== undefined) err.code = error.code;\n return err;\n}\n\nconst host = {\n /** Resolves with the page's answer; aborting `signal` cancels the call on the page too. */\n request(method, params, { signal, transfer } = {}) {\n if (signal?.aborted) return Promise.reject(signal.reason);\n const id = ++nextHostId;\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n hostCalls.delete(id);\n post({ kind: \"host\", id, cancel: true });\n reject(signal.reason);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n const done = () => signal?.removeEventListener(\"abort\", onAbort);\n try {\n globalThis.postMessage({ kind: \"host\", id, method, params }, transfer ?? []);\n } catch (err) {\n done(); // params structured clone can't copy\n throw err;\n }\n hostCalls.set(id, { resolve, reject, done });\n });\n },\n /** Calls `listener(event, value)` for each event the page sends; returns a function that stops it. */\n onEvent(listener) {\n hostListeners.add(listener);\n return () => hostListeners.delete(listener);\n },\n};\n\nfunction receiveHost(msg) {\n if (msg.id === undefined) {\n for (const listener of hostListeners) {\n try {\n listener(msg.event, msg.value);\n } catch (err) {\n reportUncaught(\"Uncaught\", err);\n }\n }\n return;\n }\n const call = hostCalls.get(msg.id);\n if (!call) return; // cancelled\n hostCalls.delete(msg.id);\n call.done();\n if (msg.error !== undefined) call.reject(hostError(msg.error));\n else call.resolve(msg.result);\n}\n\n// Each module is imported in order, and a default export that is a function\n// is called with the host. A module that fails is reported, and the kernel\n// runs without it.\nasync function preload(urls, base) {\n for (const specifier of Array.isArray(urls) ? urls : []) {\n try {\n const mod = await import(new URL(specifier, base).href);\n if (typeof mod.default === \"function\") await mod.default({ host, jupyter: jupyter.namespace });\n } catch (err) {\n reportUncaught(`Preloading ${specifier} failed`, err);\n }\n }\n}\n\n// --- The shim cells and the evaluator use -----------------------------------\nlet handle = null;\n\nfunction install({ base, cdn: cdnBase }) {\n if (typeof cdnBase === \"string\") cdn = cdnBase.endsWith(\"/\") ? cdnBase : cdnBase + \"/\";\n const url = new URL(\"$cdpk$repl.mjs\", base).href;\n globalThis.__cdpk = {\n import: (specifier, options) => import(resolveSpecifier(specifier, url, cdn), options),\n meta: { url, resolve: (specifier) => resolveSpecifier(specifier, url, cdn) },\n // inspect_request (#10): by descriptor, so nothing runs.\n describeForInspect: (value, detail) => describeValue(value, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n inspectPath: (path, detail) => inspectPath(path, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n resolvePath,\n barrier: () => 0,\n broadcastResult: jupyter.broadcastResult,\n // execute_request's user_expressions (#340).\n formatJson: async (value) => JSON.stringify(await jupyter.namespace.format(value)),\n async commDispatch(msgType, content, metadata, buffers64) {\n const buffers = buffers64.map((b) => Uint8Array.from(atob(b), (c) => c.charCodeAt(0)));\n return await jupyter.commDispatch(msgType, content, metadata, buffers);\n },\n describeError(value) {\n if (value instanceof Error) {\n return JSON.stringify({ name: value.name, message: value.message, stack: value.stack ?? \"\" });\n }\n return JSON.stringify({ name: \"Error\", message: inspect(value), stack: \"\" });\n },\n };\n Object.defineProperty(globalThis, \"__cdpk\", { enumerable: false });\n globalThis.jupyter = jupyter.namespace;\n globalThis.prompt = jupyter.prompt;\n globalThis.confirm = jupyter.confirm;\n handle = createHandler(globalThis.__cdpk, (code) => (0, eval)(code));\n}\n\nasync function answer(req) {\n if (req.op === \"info\") {\n install(req);\n await preload(req.preload, req.base);\n return { userAgent: globalThis.navigator?.userAgent ?? \"\" };\n }\n if (handle === null) throw new Error(\"the driver wasn't sent info first\");\n return await handle(req);\n}\n\nglobalThis.addEventListener(\"message\", (event) => {\n const req = event.data;\n if (req?.op === \"host\") return receiveHost(req);\n answer(req).then(\n (reply) => post({ kind: \"reply\", id: req.id, ...reply }),\n (err) => post({ kind: \"reply\", id: req.id, failure: String(err?.stack ?? err) }),\n );\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["comm", "list", "key", "$display", "key", "encoding", "list", "host", "format", "answer", "handle", "items", "propertyNames", "inspect", "cdn"]
|
|
7
7
|
}
|
package/dist/bun-target.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export declare class BunTarget implements KernelTarget {
|
|
|
24
24
|
static launch(events: TargetEvents, options?: {
|
|
25
25
|
cwd?: string;
|
|
26
26
|
executable?: string;
|
|
27
|
+
startTimeoutMs?: number;
|
|
27
28
|
}): Promise<BunTarget>;
|
|
28
29
|
evaluate(script: string): Promise<EvaluateResult>;
|
|
29
30
|
/**
|
|
@@ -45,6 +46,7 @@ export declare class BunTarget implements KernelTarget {
|
|
|
45
46
|
stack: string;
|
|
46
47
|
};
|
|
47
48
|
}>;
|
|
49
|
+
format(value: RemoteObject): Promise<CdpParams>;
|
|
48
50
|
describeError(exception: RemoteObject): Promise<{
|
|
49
51
|
name: string;
|
|
50
52
|
message: string;
|
package/dist/bun-target.js
CHANGED
|
@@ -13,7 +13,8 @@ import { asEvaluateResult } from "./cdp.js";
|
|
|
13
13
|
import { transformCellForEval } from "./transform.js";
|
|
14
14
|
import { runtimeDir } from "./package.js";
|
|
15
15
|
import { killOnExit } from "./children.js";
|
|
16
|
-
import { Gates, Interrupted, isTargetMessage, parseJson, PipeDemux } from "./target.js";
|
|
16
|
+
import { Gates, Interrupted, isTargetMessage, parseBundle, parseJson, PipeDemux } from "./target.js";
|
|
17
|
+
import { withStartTimeout } from "./target-api.js";
|
|
17
18
|
/**
|
|
18
19
|
* How long an interrupted target has to answer a ping. A cell waiting on a
|
|
19
20
|
* promise leaves the event loop free, so the answer is near-instant; a busy
|
|
@@ -91,7 +92,15 @@ export class BunTarget {
|
|
|
91
92
|
});
|
|
92
93
|
target.#readChannel(events);
|
|
93
94
|
child.once("exit", (code) => target.#exited(code, events));
|
|
94
|
-
|
|
95
|
+
let versions;
|
|
96
|
+
try {
|
|
97
|
+
// A bun that stays up but never says it's ready is stopped (#336).
|
|
98
|
+
({ versions } = await withStartTimeout(ready, cmd, options.startTimeoutMs));
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
child.kill();
|
|
102
|
+
throw err;
|
|
103
|
+
}
|
|
95
104
|
if (isRecord(versions))
|
|
96
105
|
Object.assign(target.versions, versions);
|
|
97
106
|
return target;
|
|
@@ -230,6 +239,10 @@ export class BunTarget {
|
|
|
230
239
|
}
|
|
231
240
|
return { handled: reply.handled === true };
|
|
232
241
|
}
|
|
242
|
+
async format(value) {
|
|
243
|
+
const reply = await this.#request("format", { handle: value.objectId });
|
|
244
|
+
return parseBundle(reply.value);
|
|
245
|
+
}
|
|
233
246
|
async describeError(exception) {
|
|
234
247
|
if (exception.objectId === undefined)
|
|
235
248
|
return { name: "Error", message: exception.description ?? "", stack: "" };
|
package/dist/cdp.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ export declare class CdpAbandoned extends Error {
|
|
|
39
39
|
export declare class CdpSession {
|
|
40
40
|
#private;
|
|
41
41
|
private constructor();
|
|
42
|
+
/** Called once, when the session closes for any reason. */
|
|
43
|
+
onClose(listener: () => void): void;
|
|
42
44
|
static connect(url: string): Promise<CdpSession>;
|
|
43
45
|
on(method: string, listener: (params: CdpParams) => void): void;
|
|
44
46
|
send(method: string, params?: CdpParams): Promise<CdpParams>;
|
package/dist/cdp.js
CHANGED
|
@@ -21,10 +21,21 @@ export class CdpSession {
|
|
|
21
21
|
#nextId = 0;
|
|
22
22
|
#pending = new Map();
|
|
23
23
|
#listeners = new Map();
|
|
24
|
+
#closeListeners = [];
|
|
25
|
+
#closed = false;
|
|
24
26
|
constructor(ws) {
|
|
25
27
|
this.#ws = ws;
|
|
26
28
|
ws.addEventListener("message", (event) => {
|
|
27
|
-
|
|
29
|
+
let msg;
|
|
30
|
+
try {
|
|
31
|
+
msg = JSON.parse(String(event.data));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Not CDP: the session can't be trusted to answer, but one bad frame
|
|
35
|
+
// mustn't throw out of the listener and end the kernel (#337).
|
|
36
|
+
this.#closeBroken("CDP connection closed: the runtime sent a frame that isn't JSON");
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
28
39
|
if (isResponse(msg)) {
|
|
29
40
|
const pending = this.#pending.get(msg.id);
|
|
30
41
|
if (!pending)
|
|
@@ -42,12 +53,28 @@ export class CdpSession {
|
|
|
42
53
|
listener(msg.params);
|
|
43
54
|
}
|
|
44
55
|
});
|
|
45
|
-
ws.addEventListener("close", () =>
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
ws.addEventListener("close", () => this.#closedWith("CDP connection closed"));
|
|
57
|
+
}
|
|
58
|
+
/** Fails what's in flight, and tells the close listeners, once. */
|
|
59
|
+
#closedWith(reason) {
|
|
60
|
+
for (const pending of this.#pending.values()) {
|
|
61
|
+
pending.reject(new Error(reason));
|
|
62
|
+
}
|
|
63
|
+
this.#pending.clear();
|
|
64
|
+
if (this.#closed)
|
|
65
|
+
return;
|
|
66
|
+
this.#closed = true;
|
|
67
|
+
for (const listener of this.#closeListeners)
|
|
68
|
+
listener();
|
|
69
|
+
}
|
|
70
|
+
/** Without waiting for the close handshake. */
|
|
71
|
+
#closeBroken(reason) {
|
|
72
|
+
this.#closedWith(reason);
|
|
73
|
+
this.#ws.close();
|
|
74
|
+
}
|
|
75
|
+
/** Called once, when the session closes for any reason. */
|
|
76
|
+
onClose(listener) {
|
|
77
|
+
this.#closeListeners.push(listener);
|
|
51
78
|
}
|
|
52
79
|
static async connect(url) {
|
|
53
80
|
const ws = new WebSocket(url);
|
package/dist/celld-target.js
CHANGED
|
@@ -25,6 +25,7 @@ import { isRecord } from "./cdp.js";
|
|
|
25
25
|
import { parseJsonc } from "./deno-config.js";
|
|
26
26
|
import { runtimeDir } from "./package.js";
|
|
27
27
|
import { childPids, killOnExit, reapWith } from "./children.js";
|
|
28
|
+
import { withStartTimeout } from "./target-api.js";
|
|
28
29
|
import { cellMeta, WorkerdTarget } from "./workerd-target.js";
|
|
29
30
|
import { builtinAliases, findWranglerConfig } from "./workers-project.js";
|
|
30
31
|
/** The project keys the generated config keeps: bindings and compatibility. */
|
|
@@ -255,7 +256,7 @@ class CelldHost {
|
|
|
255
256
|
return channelOf(ws);
|
|
256
257
|
})();
|
|
257
258
|
try {
|
|
258
|
-
const host = new CelldHost(child, await Promise.race([ready, exited]), `celld ${version}`.trim(), projectConfig ?? undefined);
|
|
259
|
+
const host = new CelldHost(child, await withStartTimeout(Promise.race([ready, exited]), "celld"), `celld ${version}`.trim(), projectConfig ?? undefined);
|
|
259
260
|
// Its server, in its own process group, outlives a SIGKILLed celld dev.
|
|
260
261
|
for (const pid of childPids(child.pid ?? -1))
|
|
261
262
|
reapWith(pid, child);
|
|
@@ -305,5 +306,5 @@ export async function launchCelld(events, options = {}) {
|
|
|
305
306
|
}
|
|
306
307
|
}
|
|
307
308
|
host ??= await CelldHost.start(cwd, null, options.executable);
|
|
308
|
-
return await WorkerdTarget.open(host, cwd, events, "celld", notice);
|
|
309
|
+
return await WorkerdTarget.open(host, cwd, events, "celld", { notice });
|
|
309
310
|
}
|