@tlockney/cdp-kernel 0.11.0 → 0.12.0

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../runtime/comm.mjs", "../../runtime/host.mjs", "../../runtime/widget.mjs", "../../runtime/table.mjs", "../../runtime/sql.mjs", "../../runtime/chart.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=\"./host.d.mts\"\n// jupyter.host() (#461): the client for a Ganymede server's host API, which\n// lets a cell read, search and (when granted) run other notebooks. The\n// server opens a comm to target `ganymede.host.v1` when the kernel starts,\n// with its `hello` as the open's data. Calls go out as comm messages\n// `{ id, method, params }`; the server replies `{ id, result }` or\n// `{ id, error: { code, message } }` on a kernel subshell, so a cell that\n// awaits a call gets its reply. The message format and error codes are\n// ganymede-device's, so the two clients behave alike.\n//\n// Design: https://github.com/tlockney/ganymede/blob/main/docs/host-api.md\n\nexport const HOST_TARGET = \"ganymede.host.v1\";\n\nconst CODES = new Set([\"unavailable\", \"denied\", \"cancelled\", \"timeout\", \"failed\", \"disconnected\"]);\n\nexport class HostError extends Error {\n constructor(code, message) {\n super(message);\n this.name = \"HostError\";\n this.code = code;\n }\n\n /** An abort becomes `cancelled`, a timeout signal's abort `timeout`, anything else `failed`. */\n static from(err) {\n if (err instanceof HostError) return err;\n const message = typeof err?.message === \"string\" ? err.message : String(err);\n if (err?.name === \"AbortError\") return new HostError(\"cancelled\", message);\n if (err?.name === \"TimeoutError\") return new HostError(\"timeout\", message);\n if (typeof err?.code === \"string\" && CODES.has(err.code)) return new HostError(err.code, message);\n return new HostError(\"failed\", message);\n }\n}\n\n/** Why an aborted signal ended a call: `timeout` for a timeout signal, else `cancelled`. */\nfunction abortError(reason) {\n const message = typeof reason?.message === \"string\" ? reason.message : String(reason ?? \"aborted\");\n return new HostError(reason?.name === \"TimeoutError\" ? \"timeout\" : \"cancelled\", message);\n}\n\n/** A server's `hello`, or null when `data` isn't one. */\nfunction helloOf(data) {\n if (data === null || typeof data !== \"object\" || typeof data.protocol !== \"number\") return null;\n return {\n protocol: data.protocol,\n server: typeof data.server === \"string\" ? data.server : \"\",\n notebook: typeof data.notebook === \"string\" ? data.notebook : null,\n methods: Array.isArray(data.methods) ? data.methods.filter((m) => typeof m === \"string\") : [],\n };\n}\n\n/**\n * @param {import(\"./comm.d.mts\").CommApi} comms\n * @param {() => AbortSignal | undefined} [defaultSignal] the signal a call\n * watches when it is given none: jupyter.signal.\n */\nexport function createHost(comms, defaultSignal = () => undefined) {\n /** The open host comm: { comm, hello, host, pending }, or null. */\n let link = null;\n /** Whoever waits for a hello: called with the link's Host, or null once there is no link. */\n const waiters = new Set();\n /**\n * A comm this runtime opened went unanswered: no server. Remembered, so\n * each `jupyter.host()` after the first answers null at once, until a\n * server opens the comm itself.\n */\n let noServer = false;\n let nextId = 0;\n\n function settle() {\n const host = link?.host ?? null;\n if (host === null && link !== null) return;\n for (const waiter of [...waiters]) waiter(host);\n }\n\n /** `ours`: this runtime opened the comm, not the server. */\n function adopt(comm, data, ours = false) {\n // A new comm replaces the old one: the server opens one per kernel start.\n const old = link;\n const l = { comm, host: null, pending: new Map(), ours };\n if (!ours) noServer = false;\n link = l;\n if (old !== null && !old.comm.closed) old.comm.close();\n const hello = helloOf(data);\n if (hello !== null) l.host = makeHost(l, hello);\n comm.onMsg(({ data }) => {\n if (data.hello !== undefined) {\n const hello = helloOf(data.hello);\n if (hello !== null) {\n l.host = makeHost(l, hello);\n if (link === l) settle();\n }\n return;\n }\n const call = l.pending.get(data.id);\n if (call === undefined) return;\n if (data.error !== undefined) {\n const { code, message } = data.error ?? {};\n call.reject(new HostError(CODES.has(code) ? code : \"failed\", typeof message === \"string\" ? message : String(code)));\n } else {\n call.resolve(data.result);\n }\n });\n comm.onClose(({ data }) => {\n for (const call of l.pending.values()) {\n call.reject(new HostError(\"disconnected\", typeof data?.error === \"string\" ? `host comm closed: ${data.error}` : \"host comm closed\"));\n }\n l.pending.clear();\n if (link === l) {\n link = null;\n // The frontend closed the comm this runtime opened: no server.\n if (l.ours && l.host === null) noServer = true;\n settle();\n }\n });\n if (l.host !== null) settle();\n }\n\n function makeHost(l, hello) {\n const methods = Object.freeze([...hello.methods]);\n function call(method, params = {}, { signal = defaultSignal() } = {}) {\n if (signal?.aborted) return Promise.reject(abortError(signal.reason));\n if (l.comm.closed) return Promise.reject(new HostError(\"disconnected\", \"host comm closed\"));\n const id = nextId++;\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n l.pending.delete(id);\n if (!l.comm.closed) l.comm.send({ id, cancel: true });\n reject(abortError(signal.reason));\n };\n const done = () => signal?.removeEventListener(\"abort\", onAbort);\n const call = {\n resolve: (value) => (l.pending.delete(id), done(), resolve(value)),\n reject: (error) => (l.pending.delete(id), done(), reject(error)),\n };\n l.pending.set(id, call);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n l.comm.send({ id, method, params });\n } catch (err) {\n // Params that can't be sent, such as a BigInt: the server never\n // got the call.\n call.reject(new HostError(\"failed\", `cannot send ${method}: ${err instanceof Error ? err.message : err}`));\n }\n });\n }\n const bind = (method) => (params, options) => call(method, params, options);\n return Object.freeze({\n protocol: hello.protocol,\n server: hello.server,\n notebook: hello.notebook,\n methods,\n has: (method) => methods.includes(method),\n call,\n notebooks: Object.freeze({\n list: bind(\"notebooks.list\"),\n read: bind(\"notebooks.read\"),\n search: bind(\"notebooks.search\"),\n results: bind(\"notebooks.results\"),\n run: bind(\"notebooks.run\"),\n }),\n self: Object.freeze({\n add: bind(\"self.add\"),\n edit: bind(\"self.edit\"),\n delete: bind(\"self.delete\"),\n }),\n });\n }\n\n comms.registerTarget(HOST_TARGET, (comm, msg) => adopt(comm, msg.data));\n\n async function host({ timeout = 1000 } = {}) {\n if (link?.host) return link.host;\n // The wait for a server watches jupyter.signal, so an interrupt ends it.\n const signal = defaultSignal();\n if (signal?.aborted) throw abortError(signal.reason);\n if (noServer) return null;\n // No comm from the server (one whose comm closed, as when a runtime\n // restarts in the same kernel): open it from here. A Ganymede server\n // answers `{ hello }`; anything else closes it or stays silent.\n if (link === null) adopt(comms.open(HOST_TARGET), null, true);\n const mine = link;\n return new Promise((resolve, reject) => {\n let timer;\n const onAbort = () => {\n done();\n reject(abortError(signal.reason));\n };\n const done = () => {\n waiters.delete(waiter);\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n };\n const waiter = (host) => {\n done();\n resolve(host);\n };\n waiters.add(waiter);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n // Each caller waits its own timeout; the last to give up on a comm\n // this runtime opened closes it.\n timer = setTimeout(() => {\n done();\n if (waiters.size === 0 && link === mine && mine.host === null && mine.ours) {\n link = null;\n noServer = true;\n mine.comm.close();\n }\n resolve(null);\n }, timeout);\n });\n }\n\n return { host };\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=\"./table.d.mts\"\n// Table output (cdp-kernel#475, ganymede#747): a value with rows and\n// columns as one MIME bundle every reader can show. The design is\n// Ganymede's docs/data-output.md:\n// - application/vnd.dataresource+json: Table Schema fields and up to\n// `limit` rows as JSON, plus `ganymede: { rows, shown }`, which the\n// Ganymede apps render with sorting and paging;\n// - text/html: a plain table, head and tail rows, for JupyterLab, VS Code\n// and GitHub;\n// - text/plain: shape, column types and ranges, and numbered head and\n// tail rows, for agents and consoles.\n// Sources: arrays of row objects or arrays, Arrow tables (apache-arrow,\n// duckdb-wasm), Polars DataFrames and @duckdb/node-api results.\n//\n// No imports: this file must load in every target.\n\nexport const TABLE_MIME = \"application/vnd.dataresource+json\";\nexport const DEFAULT_LIMIT = 1000;\nexport const MAX_LIMIT = 10_000;\n/** Embedded rows stop at this much JSON, whatever the limit. */\nexport const MAX_BYTES = 1_000_000;\n/** A longer string is cut, with \"\u2026\". */\nexport const MAX_CELL = 1000;\nconst HTML_ALL = 20;\nconst HTML_HEAD = 10;\nconst HTML_TAIL = 5;\nconst TEXT_HEAD = 3;\nconst TEXT_TAIL = 2;\nconst TEXT_COLUMNS = 20;\nconst TEXT_MAX = 4096;\n\nconst rawToEntity = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" };\nconst escapeHTML = (s) => s.replace(/[&<>\"']/g, (c) => rawToEntity[c]);\n\nfunction isObject(value) {\n return value !== null && typeof value === \"object\";\n}\n\nexport function isArrowTable(value) {\n return isObject(value) && isObject(value.schema) && Array.isArray(value.schema.fields) &&\n typeof value.numRows === \"number\" && typeof value.getChild === \"function\";\n}\n\nexport function isPolarsFrame(value) {\n return isObject(value) && isObject(value.schema) && typeof value.head === \"function\" &&\n typeof value.toRecords === \"function\";\n}\n\nfunction isDuckDBShaped(value) {\n return isObject(value) && typeof value.columnNames === \"function\" && typeof value.columnTypes === \"function\" &&\n typeof value.getRowObjectsJS === \"function\";\n}\n\n/**\n * A `@duckdb/node-api` result reader (from `runAndReadAll` or\n * `streamAndReadAll`) that has read all its rows. A `run()` result\n * reads its rows asynchronously, so it isn't one.\n */\nexport function isDuckDBResult(value) {\n return isDuckDBShaped(value) && typeof value.currentRowCount === \"number\" && typeof value.getRowsJS === \"function\" &&\n value.done === true;\n}\n\n/** Whether `value` shows as a table when it is a cell's value. */\nexport function isTableLike(value) {\n return isArrowTable(value) || isPolarsFrame(value) || isDuckDBResult(value);\n}\n\n// --- Types ------------------------------------------------------------------\n\n/** A declared column type (Arrow, Polars or DuckDB) as a Table Schema type. */\nexport function schemaType(declared) {\n const t = String(declared ?? \"\");\n if (t === \"\") return undefined;\n if (/^(list|large_?list|fixed_?size_?list|array)\\b|\\[\\d*\\]$/i.test(t)) return \"array\";\n if (/^(struct|map|union|json)\\b/i.test(t)) return \"object\";\n if (/^(u?int\\d*|u?(tiny|small|big|huge)?int(eger)?)\\b/i.test(t)) return \"integer\";\n if (/^(float\\d*|double|real|decimal|numeric)\\b/i.test(t)) return \"number\";\n if (/^bool/i.test(t)) return \"boolean\";\n if (/^date(32|64)?(<|$|\\b(?!time))/i.test(t) && !/^datetime/i.test(t)) return \"date\";\n if (/^(timestamp|datetime)/i.test(t)) return \"datetime\";\n if (/^time/i.test(t)) return \"time\";\n if (/^(interval|duration)/i.test(t)) return \"duration\";\n if (/^(utf8|large_?utf8|string|varchar|char|text|categorical|enum|uuid|null)\\b/i.test(t)) return \"string\";\n return undefined;\n}\n\nfunction polarsDeclared(dtype) {\n // Polars DataTypes only expose their name through toJSON().\n if (typeof dtype?.toJSON === \"function\") {\n const json = dtype.toJSON();\n const name = isObject(json) ? json.DataType ?? Object.keys(json)[0] : json;\n if (typeof name === \"string\") return name;\n if (isObject(name)) return Object.keys(name)[0];\n }\n return typeof dtype === \"string\" ? dtype : undefined;\n}\n\nfunction inferType(values) {\n let type;\n for (const v of values) {\n if (v === null || v === undefined) continue;\n let t;\n if (typeof v === \"bigint\") t = \"integer\";\n else if (typeof v === \"number\") t = Number.isInteger(v) ? \"integer\" : \"number\";\n else if (typeof v === \"boolean\") t = \"boolean\";\n else if (typeof v === \"string\") t = \"string\";\n // A Date at midnight UTC, as new Date(\"1610-01-08\") makes, is a date.\n else if (v instanceof Date) t = v.getTime() % 86_400_000 === 0 ? \"date\" : \"datetime\";\n else if (Array.isArray(v) || ArrayBuffer.isView(v)) t = ArrayBuffer.isView(v) && !(v instanceof DataView) && v.BYTES_PER_ELEMENT === 1 ? \"string\" : \"array\";\n else t = \"object\";\n if (type === undefined) type = t;\n else if (type !== t) {\n if ((type === \"integer\" && t === \"number\") || (type === \"number\" && t === \"integer\")) type = \"number\";\n else if ((type === \"date\" && t === \"datetime\") || (type === \"datetime\" && t === \"date\")) type = \"datetime\";\n else return \"string\";\n }\n }\n return type ?? \"string\";\n}\n\n// --- Values -----------------------------------------------------------------\n\nfunction clipString(s, max = MAX_CELL) {\n return s.length > max ? `${s.slice(0, max - 1)}\u2026` : s;\n}\n\nfunction toDate(value) {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n const d = new Date(Number(value));\n return Number.isNaN(d.getTime()) ? null : d;\n }\n return null;\n}\n\n/** A nested value as JSON-safe data: bigints as numbers or strings. */\nfunction plain(value, depth = 0) {\n if (value === null || value === undefined) return null;\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (typeof value === \"string\") return clipString(value);\n if (typeof value !== \"object\") return value;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();\n if (depth > 8) return \"\u2026\";\n if (ArrayBuffer.isView(value) && !(value instanceof DataView) && value.BYTES_PER_ELEMENT === 1) {\n return `<${value.byteLength} bytes>`;\n }\n if (Array.isArray(value) || ArrayBuffer.isView(value)) return Array.from(value, (v) => plain(v, depth + 1));\n // Arrow vectors and struct rows.\n if (typeof value.toJSON === \"function\") return plain(value.toJSON(), depth + 1);\n if (typeof value.toArray === \"function\") return plain(value.toArray(), depth + 1);\n const out = {};\n for (const [k, v] of Object.entries(value)) out[k] = plain(v, depth + 1);\n return out;\n}\n\n/** One cell as Table Schema JSON for a column of `type`. */\nexport function encodeValue(value, type, declared) {\n if (value === null || value === undefined) return null;\n if (type === \"time\" && (typeof value === \"bigint\" || typeof value === \"number\")) return timeText(value, declared);\n if (type === \"date\" || type === \"datetime\") {\n const d = toDate(value);\n if (d) return type === \"date\" ? d.toISOString().slice(0, 10) : d.toISOString();\n }\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n if (typeof value === \"number\") {\n if (Number.isNaN(value)) return \"NaN\";\n if (!Number.isFinite(value)) return value > 0 ? \"Infinity\" : \"-Infinity\";\n return value;\n }\n if (typeof value === \"string\") return clipString(value);\n if (typeof value === \"boolean\") return value;\n return plain(value);\n}\n\n/**\n * A time of day as `HH:MM:SS[.fraction]`, from a count in the declared\n * type's unit: Arrow's `Time64<NANOSECOND>` and the like, Polars' `Time`\n * (nanoseconds), or microseconds, as DuckDB's `TIME` is.\n */\nexport function timeText(value, declared = \"\") {\n const d = String(declared);\n const unit = /NANOSECOND|^Time$/.test(d) || /_NS$/i.test(d) ? 1_000_000_000n : /MILLISECOND/i.test(d) ? 1000n : /<SECOND/i.test(d) ? 1n : 1_000_000n;\n const total = typeof value === \"bigint\" ? value : BigInt(Math.trunc(value));\n const seconds = total / unit;\n const fraction = total % unit;\n const pad = (n) => String(n).padStart(2, \"0\");\n const text = `${pad(seconds / 3600n)}:${pad((seconds / 60n) % 60n)}:${pad(seconds % 60n)}`;\n if (fraction === 0n) return text;\n return `${text}.${String(fraction).padStart(String(unit).length - 1, \"0\").replace(/0+$/, \"\")}`;\n}\n\n/**\n * Unique column names: a result may have two columns called `id` (a\n * join), and rows are keyed by name, so the second becomes `id_1`.\n */\nexport function uniqueNames(names) {\n const seen = new Set();\n return names.map((name) => {\n let unique = name;\n for (let i = 1; seen.has(unique); i++) unique = `${name}_${i}`;\n seen.add(unique);\n return unique;\n });\n}\n\n// --- Sources ----------------------------------------------------------------\n\n/**\n * @typedef {{ name: string, declared?: string }} Column\n * @typedef {{ columns: Column[], total: number, read: (start: number, end: number) => unknown[][] }} Source\n */\n\nfunction fromObjects(rows, names) {\n let columns = names;\n if (!columns) {\n const seen = new Set();\n for (const row of rows.slice(0, DEFAULT_LIMIT)) {\n if (isObject(row)) for (const key of Object.keys(row)) seen.add(key);\n }\n columns = [...seen];\n }\n return {\n columns: columns.map((name) => ({ name: String(name) })),\n total: rows.length,\n read: (start, end) => rows.slice(start, end).map((row) => columns.map((c) => (isObject(row) ? row[c] : undefined))),\n };\n}\n\nfunction fromArrays(rows, names) {\n const width = names?.length ?? Math.max(0, ...rows.slice(0, DEFAULT_LIMIT).map((r) => (Array.isArray(r) ? r.length : 0)));\n const columns = names ?? Array.from({ length: width }, (_, i) => String(i));\n return {\n columns: columns.map((name) => ({ name: String(name) })),\n total: rows.length,\n read: (start, end) => rows.slice(start, end).map((row) => columns.map((_, i) => (Array.isArray(row) ? row[i] : undefined))),\n };\n}\n\nfunction fromArrow(table, names) {\n const fields = table.schema.fields.filter((f) => !names || names.includes(f.name));\n const vectors = fields.map((f) => table.getChild(f.name));\n return {\n columns: fields.map((f) => ({ name: String(f.name), declared: String(f.type) })),\n total: table.numRows,\n read(start, end) {\n const out = [];\n for (let i = start; i < Math.min(end, table.numRows); i++) out.push(vectors.map((v) => v?.get(i)));\n return out;\n },\n };\n}\n\nfunction fromPolars(df, names) {\n const columns = Object.entries(df.schema)\n .filter(([name]) => !names || names.includes(name))\n .map(([name, dtype]) => ({ name, declared: polarsDeclared(dtype) }));\n const total = Number.isInteger(df.height) ? df.height : df.toRecords().length;\n const records = (start, end) =>\n typeof df.slice === \"function\" ? df.slice(start, end - start).toRecords() : df.toRecords().slice(start, end);\n return {\n columns,\n total,\n read: (start, end) => records(start, Math.min(end, total)).map((row) => columns.map((c) => row[c.name])),\n };\n}\n\nfunction fromDuckDB(result, names) {\n const types = result.columnTypes();\n const all = result.columnNames().map((name, i) => ({ name, declared: String(types[i]) }));\n const columns = names ? all.filter((c) => names.includes(c.name)) : all;\n const at = columns.map((c) => all.indexOf(c));\n let rows;\n const get = () => (rows ??= result.getRowsJS());\n return {\n columns,\n total: result.currentRowCount,\n read: (start, end) => get().slice(start, end).map((row) => at.map((i) => row[i])),\n };\n}\n\n/** A table's columns and rows, from any source `jupyter.table` takes. */\nexport function tableSource(value, options = {}) {\n const names = Array.isArray(options.columns) ? options.columns.map(String) : undefined;\n if (isObject(value) && typeof value.toTableSource === \"function\") return value.toTableSource(names);\n if (isArrowTable(value)) return fromArrow(value, names);\n if (isPolarsFrame(value)) return fromPolars(value, names);\n if (isDuckDBResult(value)) return fromDuckDB(value, names);\n if (isDuckDBShaped(value)) {\n throw new TypeError(typeof value.currentRowCount === \"number\"\n ? \"jupyter.table: this DuckDB reader hasn't read all its rows; call readAll() first, or use runAndReadAll()\"\n : \"jupyter.table: a DuckDB run() result reads its rows asynchronously; use runAndReadAll(), or jupyter.sql\");\n }\n if (Array.isArray(value)) {\n const first = value.find((row) => row !== null && row !== undefined);\n return Array.isArray(first) ? fromArrays(value, names) : fromObjects(value, names);\n }\n throw new TypeError(\n \"jupyter.table takes an array of rows, an Arrow table, a Polars DataFrame or a DuckDB result\",\n );\n}\n\n/** Each column's name and Table Schema type: declared, or inferred from `rows`. */\nexport function fieldsOf(source, rows) {\n const names = uniqueNames(source.columns.map((c) => c.name));\n return source.columns.map((c, i) => ({\n name: names[i],\n type: schemaType(c.declared) ?? inferType(rows.map((r) => r[i])),\n }));\n}\n\n// --- The bundle -------------------------------------------------------------\n\nfunction count(n, noun) {\n return `${n.toLocaleString(\"en-US\")} ${n === 1 ? noun : `${noun}s`}`;\n}\n\nfunction shortValue(v) {\n if (v === null || v === undefined) return \"\";\n const s = typeof v === \"string\" ? v : JSON.stringify(v);\n return clipString(s.replace(/\\s+/g, \" \"), 30);\n}\n\nfunction columnStats(rows, i, type) {\n let nulls = 0;\n const values = [];\n for (const row of rows) {\n const v = row[i];\n if (v === null) nulls++;\n else values.push(v);\n }\n let range = \"\";\n if (values.length) {\n if (type === \"integer\" || type === \"number\") {\n const nums = values.map(Number).filter(Number.isFinite);\n if (nums.length) {\n const min = Math.min(...nums);\n const max = Math.max(...nums);\n // Grouping only from 10,000, so years read as years.\n const fmt = (n) => (Number.isInteger(n) && Math.abs(n) >= 10_000 ? n.toLocaleString(\"en-US\") : String(Number(n.toPrecision(6))));\n range = min === max ? fmt(min) : `${fmt(min)} to ${fmt(max)}`;\n }\n } else if (type === \"date\" || type === \"datetime\" || type === \"time\") {\n const sorted = values.map(String).sort();\n range = sorted[0] === sorted.at(-1) ? sorted[0] : `${sorted[0]} to ${sorted.at(-1)}`;\n } else if (type === \"boolean\") {\n const t = values.filter((v) => v === true).length;\n range = `${t} true, ${values.length - t} false`;\n } else {\n const distinct = new Set(values.map((v) => (typeof v === \"string\" ? v : JSON.stringify(v)))).size;\n range = count(distinct, \"value\");\n }\n }\n return [range, nulls ? count(nulls, \"null\") : \"\"].filter(Boolean).join(\", \");\n}\n\nfunction htmlTable(fields, head, tail, total, title) {\n let html = \"<table>\";\n if (title) html += `<caption>${escapeHTML(title)}</caption>`;\n html += \"<thead><tr>\";\n for (const f of fields) {\n html += `<th>${escapeHTML(f.name)}<br><small>${escapeHTML(f.type)}</small></th>`;\n }\n html += \"</tr></thead><tbody>\";\n const row = (r) => {\n let s = \"<tr>\";\n fields.forEach((f, i) => {\n const v = r[i];\n const text = v === null ? \"\" : typeof v === \"string\" ? v : JSON.stringify(v);\n const align = f.type === \"integer\" || f.type === \"number\" ? ' style=\"text-align:right\"' : \"\";\n s += `<td${align}>${escapeHTML(text)}</td>`;\n });\n return `${s}</tr>`;\n };\n for (const r of head) html += row(r);\n const hidden = total - head.length - tail.length;\n if (hidden > 0) html += `<tr><td colspan=\"${Math.max(1, fields.length)}\">\u2026 ${count(hidden, \"more row\")}</td></tr>`;\n for (const r of tail) html += row(r);\n return `${html}</tbody></table>`;\n}\n\nfunction textTable(fields, numbered) {\n const cells = numbered.map(([n, r]) => [String(n), ...r.map(shortValue)]);\n const widths = [0, ...fields.map(() => 0)];\n for (const row of cells) row.forEach((c, i) => (widths[i] = Math.max(widths[i], c.length)));\n return cells.map((row) => ` ${row.map((c, i) => c.padEnd(widths[i])).join(\" | \").trimEnd()}`);\n}\n\n/**\n * The MIME bundle for a table: Table Schema JSON with up to `limit` rows,\n * an HTML table and a text summary.\n */\nexport function tableBundle(source, options = {}) {\n const requested = options.limit ?? DEFAULT_LIMIT;\n if (!Number.isInteger(requested) || requested < 0) throw new TypeError(\"jupyter.table: limit must be a whole number\");\n const limit = Math.min(requested, MAX_LIMIT);\n const title = typeof options.title === \"string\" && options.title !== \"\" ? options.title : undefined;\n const total = source.total;\n\n const raw = source.read(0, Math.min(limit, total));\n const fields = fieldsOf(source, raw);\n const encode = (r) => fields.map((f, i) => encodeValue(r[i], f.type, source.columns[i].declared));\n const utf8 = new TextEncoder();\n\n // Rows as JSON, stopping at MAX_BYTES.\n const encoded = [];\n const data = [];\n let bytes = 0;\n for (const r of raw) {\n const values = encode(r);\n // defineProperty, so a column called __proto__ is an ordinary key.\n const obj = {};\n fields.forEach((f, i) => Object.defineProperty(obj, f.name, { value: values[i], enumerable: true, writable: true, configurable: true }));\n bytes += utf8.encode(JSON.stringify(obj)).length + 1;\n if (bytes > MAX_BYTES && data.length > 0) break;\n encoded.push(values);\n data.push(obj);\n }\n const shown = data.length;\n\n // Head and tail rows, the tail from the source itself.\n const split = total > HTML_ALL;\n const htmlHead = split ? encoded.slice(0, HTML_HEAD) : encoded.slice(0, total);\n const htmlTail = split ? source.read(total - HTML_TAIL, total).map(encode) : [];\n const textSplit = total > TEXT_HEAD + TEXT_TAIL;\n const textHeadRows = encoded.slice(0, textSplit ? TEXT_HEAD : total);\n const textTail = !textSplit ? [] : htmlTail.length ? htmlTail.slice(-TEXT_TAIL) : source.read(total - TEXT_TAIL, total).map(encode);\n\n // Text summary.\n const lines = [];\n const name = title ? `Table \"${clipString(title, 80)}\"` : \"Table\";\n const shape = `${count(total, \"row\")}, ${count(fields.length, \"column\")}`;\n lines.push(`${name} (${shape}${shown < total ? `; ${shown.toLocaleString(\"en-US\")} shown` : \"\"})`);\n if (fields.length) {\n lines.push(shown < total ? `Columns (ranges over the first ${shown.toLocaleString(\"en-US\")} of ${total.toLocaleString(\"en-US\")} rows):` : \"Columns:\");\n const nameWidth = Math.min(30, Math.max(...fields.slice(0, TEXT_COLUMNS).map((f) => f.name.length)));\n const typeWidth = Math.max(...fields.slice(0, TEXT_COLUMNS).map((f) => f.type.length));\n fields.slice(0, TEXT_COLUMNS).forEach((f, i) => {\n const stats = columnStats(encoded, i, f.type);\n lines.push(` ${clipString(f.name, 30).padEnd(nameWidth)} ${f.type.padEnd(typeWidth)} ${stats}`.trimEnd());\n });\n if (fields.length > TEXT_COLUMNS) lines.push(` \u2026 ${count(fields.length - TEXT_COLUMNS, \"more column\")}`);\n const numbered = [\n ...textHeadRows.map((r, i) => [i, r]),\n ...textTail.map((r, i) => [total - textTail.length + i, r]),\n ];\n if (numbered.length) {\n lines.push(\"Rows:\");\n const table = textTable(fields.slice(0, TEXT_COLUMNS), numbered.map(([n, r]) => [n, r.slice(0, TEXT_COLUMNS)]));\n if (textTail.length) table.splice(textHeadRows.length, 0, \" \u2026\");\n lines.push(...table);\n }\n }\n let text = lines.join(\"\\n\");\n if (text.length > TEXT_MAX) text = `${text.slice(0, TEXT_MAX - 1)}\u2026`;\n\n /** @type {Record<string, unknown>} */\n const resource = { schema: { fields }, data, ganymede: { rows: total, shown } };\n if (title) resource.ganymede.title = title;\n return {\n [TABLE_MIME]: resource,\n \"text/html\": htmlTable(fields, htmlHead, htmlTail, total, title),\n \"text/plain\": text,\n };\n}\n", "// @ts-self-types=\"./sql.d.mts\"\n// jupyter.sql (cdp-kernel#477, ganymede#747): a tagged template over an\n// in-memory DuckDB, whose results show as table output (table.mjs).\n//\n// const rows = await jupyter.sql`select * from trips where riders > ${min}`;\n//\n// Template values become bound parameters, never query text; sql.raw()\n// is the explicit way to put text in. One database per kernel, opened on\n// the first query, as ganymede-ui's DuckDB example does (ganymede-ui#559):\n// DuckDB's native build, @duckdb/node-api, on Node, Deno and Bun, and its\n// WebAssembly build in a Worker of its own in the browser target (the\n// apps' in-app kernel). The packages load through the cell's own import,\n// so npm: resolution and the browser target's CDN apply as in a cell.\n//\n// No static imports beyond table.mjs: this file must load in every target.\n\nimport { fieldsOf, tableBundle, tableSource, timeText, uniqueNames } from \"./table.mjs\";\n\nexport { timeText, uniqueNames };\n\nexport const NODE_API = \"npm:@duckdb/node-api@1.5.6-r.2\";\nexport const DUCKDB_WASM = \"npm:@duckdb/duckdb-wasm@1.29.0\";\n\nconst $display = Symbol.for(\"Jupyter.display\");\nconst RAW = Symbol(\"cdpk.sql.raw\");\n\n/** A value from DuckDB as plain JavaScript: safe bigints as numbers. */\nfunction jsValue(value, declared) {\n if (/^time(?!stamp)/i.test(declared ?? \"\") && (typeof value === \"bigint\" || typeof value === \"number\")) {\n return timeText(value, declared);\n }\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : value;\n if (typeof value === \"number\" && /^(date|timestamp)/i.test(declared ?? \"\")) return new Date(value);\n if (Array.isArray(value)) return value.map((v) => jsValue(v));\n if (value !== null && typeof value === \"object\" && !(value instanceof Date) && !ArrayBuffer.isView(value)) {\n if (typeof value.toJSON === \"function\" && !(Symbol.iterator in value) && Object.getPrototypeOf(value) !== Object.prototype) {\n return jsValue(value.toJSON());\n }\n if (typeof value.toArray === \"function\") return jsValue(Array.from(value.toArray()));\n const out = {};\n for (const [k, v] of Object.entries(value)) out[k] = jsValue(v);\n return out;\n }\n return value;\n}\n\n/**\n * An Arrow decimal's little-endian 32-bit words, scaled, as a number; with\n * no scale (HUGEINT), a bigint when a number can't hold it.\n */\nexport function decimalValue(words, scale) {\n if (typeof words === \"bigint\" && scale === 0) return jsValue(words);\n if (typeof words === \"number\" || typeof words === \"bigint\") return Number(words) / 10 ** scale;\n const list = Array.from(words);\n let big = 0n;\n list.forEach((w, i) => (big |= BigInt(w >>> 0) << BigInt(32 * i)));\n const bits = BigInt(32 * list.length);\n if (list.length && list.at(-1) >>> 31) big -= 1n << bits;\n return scale === 0 ? jsValue(big) : Number(big) / 10 ** scale;\n}\n\n/** A query's result: its columns and rows, shown as a table. */\nexport class SqlResult {\n /**\n * @param {{ name: string, type: string }[]} columns\n * @param {Record<string, unknown>[]} rows\n */\n constructor(columns, rows) {\n this.columns = columns;\n this.rows = rows;\n }\n /** table.mjs reads this instead of guessing at the shape. */\n toTableSource(names) {\n const columns = names ? this.columns.filter((c) => names.includes(c.name)) : this.columns;\n return {\n columns: columns.map((c) => ({ name: c.name, declared: c.type })),\n total: this.rows.length,\n read: (start, end) => this.rows.slice(start, end).map((row) => columns.map((c) => row[c.name])),\n };\n }\n [$display]() {\n return tableBundle(tableSource(this));\n }\n}\n\n/** A JavaScript value as a DuckDB parameter. */\nexport function toParam(value) {\n if (value === undefined) return null;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"object\" && value !== null && !ArrayBuffer.isView(value)) return JSON.stringify(value);\n return value;\n}\n\n/** Joins a template's strings with `?` for each value, inlining sql.raw(). */\nexport function compose(strings, values) {\n let text = strings[0];\n const params = [];\n values.forEach((value, i) => {\n if (value !== null && typeof value === \"object\" && RAW in value) text += value[RAW];\n else {\n text += \"?\";\n params.push(toParam(value));\n }\n text += strings[i + 1];\n });\n return { text, params };\n}\n\nexport function quoteIdent(name) {\n return `\"${String(name).replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function quoteString(text) {\n return `'${String(text).replaceAll(\"'\", \"''\")}'`;\n}\n\n/**\n * A parameter (as toParam leaves it) as a SQL literal. A negative number\n * is parenthesized, since after a minus sign `-1` would make `--`, a\n * comment.\n */\nexport function sqlLiteral(value) {\n const text = literalText(value);\n return text.startsWith(\"-\") ? `(${text})` : text;\n}\n\nfunction literalText(value) {\n if (value === null || value === undefined) return \"NULL\";\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (typeof value === \"bigint\") return `${value}`;\n if (typeof value === \"number\") {\n if (Number.isSafeInteger(value)) return String(value);\n return Number.isFinite(value) ? `${value}::DOUBLE` : `'${value}'::DOUBLE`;\n }\n if (value instanceof Uint8Array) {\n return `'${Array.from(value, (b) => `\\\\x${b.toString(16).padStart(2, \"0\")}`).join(\"\")}'::BLOB`;\n }\n if (ArrayBuffer.isView(value)) return `[${Array.from(value, (v) => sqlLiteral(v)).join(\", \")}]`;\n return quoteString(value);\n}\n\n/**\n * The query with each `?` placeholder replaced by its parameter as a\n * literal. A `?` inside a string, a quoted name or a comment is left as it\n * is. duckdb-wasm can cancel only an unprepared query, so it runs this.\n * Dollar-quoted (`$$\u2026$$`) and `E'\u2026'` strings and nested comments aren't\n * recognized: a `?` in one counts as a placeholder, and the count then\n * fails to match the parameters and throws.\n */\nexport function inlineParams(text, params) {\n if (params.length === 0) return text;\n let out = \"\";\n let next = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text[i];\n const end =\n c === \"'\" || c === '\"' ? text.indexOf(c, i + 1) :\n c === \"-\" && text[i + 1] === \"-\" ? text.indexOf(\"\\n\", i) :\n c === \"/\" && text[i + 1] === \"*\" ? text.indexOf(\"*/\", i + 2) + 1 :\n undefined;\n if (end !== undefined) {\n // A doubled quote ('it''s') reads as two strings back to back.\n const stop = end < 0 || end === 0 ? text.length : end + 1;\n out += text.slice(i, stop);\n i = stop - 1;\n } else if (c === \"?\") {\n if (next >= params.length) throw new RangeError(\"jupyter.sql: more ? placeholders than parameters\");\n // A space after a quote, so 'a'? doesn't read as one string 'a''x'.\n if (out.endsWith(\"'\") || out.endsWith('\"')) out += \" \";\n out += sqlLiteral(params[next++]);\n } else out += c;\n }\n if (next < params.length) throw new RangeError(\"jupyter.sql: more parameters than ? placeholders\");\n return out;\n}\n\nconst DUCK_TYPES = {\n integer: \"BIGINT\",\n number: \"DOUBLE\",\n boolean: \"BOOLEAN\",\n string: \"VARCHAR\",\n date: \"DATE\",\n datetime: \"TIMESTAMP\",\n time: \"TIME\",\n array: \"JSON\",\n object: \"JSON\",\n duration: \"VARCHAR\",\n};\n\n/**\n * @param {{\n * importModule: (specifier: string) => Promise<any>,\n * signal?: () => AbortSignal | undefined,\n * openEngine?: () => Promise<Engine>,\n * }} options\n *\n * @typedef {{\n * query: (text: string, params: unknown[]) => Promise<SqlResult>,\n * interrupt?: () => void,\n * close: () => Promise<void>,\n * connection: unknown,\n * }} Engine\n */\nexport function createSql({ importModule, signal, openEngine }) {\n let engine = null;\n const open = () => (engine ??= (openEngine ?? (() => defaultEngine(importModule)))().catch((err) => {\n engine = null;\n throw err;\n }));\n\n async function run(text, params) {\n // The cell's signal, read before the first open's wait, so a cell that\n // starts meanwhile doesn't take the query over.\n const s = signal?.();\n const e = await open();\n if (s?.aborted) throw s.reason;\n const onAbort = () => e.interrupt?.();\n s?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n return await e.query(text, params);\n } finally {\n s?.removeEventListener(\"abort\", onAbort);\n }\n }\n\n function sql(strings, ...values) {\n if (!Array.isArray(strings) || !Array.isArray(strings.raw)) {\n return Promise.reject(new TypeError(\"jupyter.sql is a tag: jupyter.sql`select ...`; for a string, use jupyter.sql.query(text, params)\"));\n }\n const { text, params } = compose(strings, values);\n return run(text, params);\n }\n\n sql.query = (text, params = []) => {\n if (typeof text !== \"string\") return Promise.reject(new TypeError(\"jupyter.sql.query: text must be a string\"));\n return run(text, params.map(toParam));\n };\n\n sql.raw = (text) => ({ [RAW]: String(text) });\n\n sql.load = async (name, source) => {\n if (typeof name !== \"string\" || name === \"\") throw new TypeError(\"jupyter.sql.load: name must be a non-empty string\");\n const table = quoteIdent(name);\n if (typeof source === \"string\") {\n await run(`create or replace table ${table} as select * from ${quoteString(source)}`, []);\n return;\n }\n const { structure, json } = rowsAsJson(source);\n if (structure === null) {\n throw new TypeError(\"jupyter.sql.load: the rows have no columns\");\n }\n await run(\n `create or replace table ${table} as select unnest(from_json(?, ?), recursive := true)`,\n [json, structure],\n );\n };\n\n sql.close = async () => {\n const e = engine;\n engine = null;\n if (e) await (await e).close();\n };\n\n sql.connection = async () => (await open()).connection;\n\n return sql;\n}\n\n/** A value as JSON for loading: nothing clipped, unlike a table's display. */\nfunction loadValue(value, type, depth = 0) {\n if (value === null || value === undefined) return null;\n if (type === \"date\" || type === \"datetime\") {\n const d = value instanceof Date ? value : typeof value === \"number\" || typeof value === \"bigint\" ? new Date(Number(value)) : null;\n if (d) return Number.isNaN(d.getTime()) ? null : type === \"date\" ? d.toISOString().slice(0, 10) : d.toISOString();\n }\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n // DOUBLE takes no \"NaN\" text from JSON; null instead.\n if (typeof value === \"number\") return Number.isFinite(value) ? value : null;\n if (typeof value !== \"object\") return value;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();\n if (depth > 64) throw new TypeError(\"jupyter.sql.load: a value is nested more than 64 levels deep\");\n if (ArrayBuffer.isView(value) && !(value instanceof DataView) && value.BYTES_PER_ELEMENT === 1) {\n // Bytes as base64 text: JSON has no binary.\n let text = \"\";\n for (const byte of value) text += String.fromCharCode(byte);\n return btoa(text);\n }\n if (Array.isArray(value) || ArrayBuffer.isView(value)) return Array.from(value, (v) => loadValue(v, undefined, depth + 1));\n if (typeof value.toJSON === \"function\" && Object.getPrototypeOf(value) !== Object.prototype) {\n return loadValue(value.toJSON(), undefined, depth + 1);\n }\n const out = {};\n for (const [k, v] of Object.entries(value)) out[k] = loadValue(v, undefined, depth + 1);\n return out;\n}\n\n/** Rows, an Arrow table or a DataFrame as JSON and a from_json structure. */\nexport function rowsAsJson(source) {\n const src = tableSource(source);\n const raw = src.read(0, src.total);\n const fields = fieldsOf(src, raw);\n if (fields.length === 0) return { structure: null, json: \"[]\" };\n const rows = raw.map((r) => {\n const obj = {};\n fields.forEach((f, i) => {\n obj[f.name] = loadValue(r[i], f.type);\n });\n return obj;\n });\n const structure = {};\n for (const f of fields) structure[f.name] = DUCK_TYPES[f.type] ?? \"VARCHAR\";\n return { structure: JSON.stringify([structure]), json: JSON.stringify(rows) };\n}\n\nfunction inWorker() {\n return typeof globalThis.WorkerGlobalScope === \"function\" && globalThis instanceof globalThis.WorkerGlobalScope;\n}\n\nfunction hasNativeRuntime() {\n return typeof globalThis.Deno?.version?.deno === \"string\" || typeof globalThis.Bun?.version === \"string\" ||\n typeof globalThis.process?.versions?.node === \"string\" && !inWorker();\n}\n\nasync function defaultEngine(importModule) {\n if (hasNativeRuntime()) return nativeEngine(importModule);\n if (inWorker() && typeof Worker === \"function\") return wasmEngine(importModule);\n throw new Error(\"jupyter.sql needs Node, Deno, Bun or the browser target; workerd and celld have no DuckDB\");\n}\n\nasync function nativeEngine(importModule) {\n const { DuckDBInstance, blobValue } = await importModule(NODE_API);\n const db = await DuckDBInstance.create(\":memory:\");\n const conn = await db.connect();\n return {\n connection: conn,\n interrupt: () => conn.interrupt?.(),\n async query(text, params) {\n // Bytes need a declared BLOB; the rest bind by their JavaScript type.\n const bound = params.map((p) => (p instanceof Uint8Array && blobValue ? blobValue(p) : p));\n const result = await conn.runAndReadAll(text, bound);\n const types = result.columnTypes();\n const columns = uniqueNames(result.columnNames()).map((name, i) => ({ name, type: String(types[i]) }));\n // By position, as two columns may share a name.\n const rows = result.getRowsJS().map((row) => {\n const out = {};\n columns.forEach((c, j) => (out[c.name] = jsValue(row[j], c.type)));\n return out;\n });\n return new SqlResult(columns, rows);\n },\n async close() {\n conn.closeSync?.();\n db.closeSync?.();\n },\n };\n}\n\nasync function wasmEngine(importModule) {\n const duckdb = await importModule(DUCKDB_WASM);\n const bundle = await duckdb.selectBundle(duckdb.getJsDelivrBundles());\n // A Worker can only start from its own origin's scripts, so a Blob\n // script loads DuckDB's.\n const loader = URL.createObjectURL(new Blob([`importScripts(${JSON.stringify(bundle.mainWorker)});`], { type: \"text/javascript\" }));\n const worker = new Worker(loader);\n const db = new duckdb.AsyncDuckDB(new duckdb.VoidLogger(), worker);\n await db.instantiate(bundle.mainModule, bundle.pthreadWorker);\n URL.revokeObjectURL(loader);\n const conn = await db.connect();\n let cancelled = false;\n return {\n connection: conn,\n interrupt: () => {\n cancelled = true;\n void conn.cancelSent?.();\n },\n async query(text, params) {\n // send() streams the result, which cancelSent() can stop; query()\n // runs to the end in the worker whatever is asked of it, and so\n // does a prepared statement's send(). So the parameters go into the\n // text as literals, and the batch loop stops on an interrupt too.\n cancelled = false;\n const reader = await conn.send(inlineParams(text, params), true);\n const stop = () => {\n if (cancelled) throw new DOMException(\"The query was interrupted\", \"AbortError\");\n };\n try {\n stop();\n const columns = [];\n const rows = [];\n let decimal = [];\n for await (const batch of reader) {\n if (columns.length === 0 && batch.schema.fields.length) {\n const fields = batch.schema.fields;\n uniqueNames(fields.map((f) => f.name)).forEach((name, j) => columns.push({ name, type: String(fields[j].type) }));\n // Arrow gives a DECIMAL as its 128-bit words; DuckDB's native\n // build gives a number, so this does too.\n decimal = fields.map((f) => (/^decimal/i.test(String(f.type)) ? f.type.scale ?? 0 : null));\n }\n stop();\n const vectors = columns.map((_, j) => batch.getChildAt(j));\n for (let i = 0; i < batch.numRows; i++) {\n const row = {};\n columns.forEach((c, j) => {\n const v = vectors[j]?.get(i);\n row[c.name] = decimal[j] !== null && v != null ? decimalValue(v, decimal[j]) : jsValue(v, c.type);\n });\n rows.push(row);\n }\n }\n if (columns.length === 0 && reader.schema?.fields) {\n const fields = reader.schema.fields;\n uniqueNames(fields.map((f) => f.name)).forEach((name, j) => columns.push({ name, type: String(fields[j].type) }));\n }\n return new SqlResult(columns, rows);\n } catch (err) {\n await Promise.resolve((reader.cancel ?? reader.return)?.call(reader)).catch(() => {});\n throw err;\n }\n },\n async close() {\n await conn.close();\n await db.terminate();\n worker.terminate();\n },\n };\n}\n", "// @ts-self-types=\"./chart.d.mts\"\n// jupyter.chart (cdp-kernel#479, ganymede#747): a Vega-Lite (or Vega) spec,\n// or Observable Plot options, drawn in the kernel as one SVG with its\n// legend and title inside, plus a text summary. An SVG shows the same in\n// every reader: the Ganymede apps, JupyterLab, VS Code, a published page,\n// and an agent that gets it as a PNG. Plot draws a categorical legend as\n// HTML beside its SVG, so the legend is drawn here instead, from the\n// plot's color scale.\n//\n// vega, vega-lite and linkedom (Plot's DOM where there is none) load\n// through the cell's own import on first use, as jupyter.sql's DuckDB\n// does, so nothing loads for a notebook that draws no chart.\n//\n// No static imports: this file must load in every target.\n\nexport const VEGA = \"npm:vega@6\";\nexport const VEGA_LITE = \"npm:vega-lite@6\";\nexport const LINKEDOM = \"npm:linkedom@0.18\";\n/** Past this much SVG, jupyter.chart warns: aggregate or sample first. */\nexport const WARN_BYTES = 2_000_000;\n\nconst $display = Symbol.for(\"Jupyter.display\");\n/** Plot scales with a legend option, besides color. */\nconst OTHER_LEGENDS = [\"opacity\", \"r\", \"symbol\"];\nconst FONT = \"system-ui, sans-serif\";\n\nconst rawToEntity = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" };\nconst esc = (s) => String(s).replace(/[&<>\"']/g, (c) => rawToEntity[c]);\n\nfunction isObject(value) {\n return value !== null && typeof value === \"object\";\n}\n\n/** Plot's module: it has plot() and mark factories. */\nexport function isPlotModule(value) {\n return (isObject(value) || typeof value === \"function\") && typeof value.plot === \"function\" &&\n typeof value.barY === \"function\";\n}\n\n/** Keys one of which every Vega-Lite or Vega spec has. */\nconst SPEC_KEYS = [\"$schema\", \"mark\", \"marks\", \"layer\", \"spec\", \"concat\", \"hconcat\", \"vconcat\", \"facet\", \"repeat\"];\n\n/** A spec object, or anything with toSpec() (vega-lite-api). */\nexport function specOf(value) {\n const spec = isObject(value) && typeof value.toSpec === \"function\" ? value.toSpec() : value;\n if (!isObject(spec) || Array.isArray(spec) || !SPEC_KEYS.some((key) => key in spec)) {\n throw new TypeError(\n \"jupyter.chart takes a Vega-Lite or Vega spec, the Plot module and Plot options, or an SVG element\",\n );\n }\n return spec;\n}\n\n/** An SVG element already drawn, such as Plot's output without a legend. */\nexport function isSvgElement(value) {\n return isObject(value) && typeof value.outerHTML === \"string\" && /^<svg\\b/i.test(value.outerHTML);\n}\n\nexport function isVegaSpec(spec) {\n return typeof spec.$schema === \"string\" && /\\/schema\\/vega\\/v\\d/.test(spec.$schema);\n}\n\n// --- SVG helpers --------------------------------------------------------------\n\n/** An SVG's width and height from its attributes or viewBox. */\nexport function svgSize(svg) {\n const open = /<svg\\b[^>]*>/i.exec(svg)?.[0] ?? \"\";\n const attr = (name) => {\n const m = new RegExp(`\\\\s${name}=\"([^\"]*)\"`, \"i\").exec(open);\n return m ? m[1] : undefined;\n };\n let width = parseFloat(attr(\"width\") ?? \"\");\n let height = parseFloat(attr(\"height\") ?? \"\");\n const box = attr(\"viewBox\")?.trim().split(/[\\s,]+/).map(Number);\n if (!Number.isFinite(width) && box?.length === 4) width = box[2];\n if (!Number.isFinite(height) && box?.length === 4) height = box[3];\n return { width: Number.isFinite(width) ? width : 640, height: Number.isFinite(height) ? height : 400 };\n}\n\n/** The SVG with the namespace an <img> needs (an HTML DOM leaves it out). */\nexport function withNamespace(svg) {\n return /<svg\\b[^>]*\\sxmlns=/i.test(svg) ? svg : svg.replace(/<svg\\b/i, '<svg xmlns=\"http://www.w3.org/2000/svg\"');\n}\n\n/** A short FNV-1a hash of `text`, in base 36. */\nfunction hash(text) {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) h = Math.imul(h ^ text.charCodeAt(i), 0x01000193);\n return (h >>> 0).toString(36);\n}\n\nconst textWidth = (text, size) => String(text).length * size * 0.6;\n\n/**\n * A legend for a color scale, as SVG: swatches for a categorical scale,\n * a ramp for a continuous one, or the form `form` names (\"swatches\" or\n * \"ramp\", as Plot's `legend` option does). `scale` is Plot's scale\n * description.\n */\nexport function legendSVG(scale, width, form) {\n if (!isObject(scale) || typeof scale.apply !== \"function\" || !Array.isArray(scale.domain)) return { svg: \"\", height: 0 };\n const label = typeof scale.label === \"string\" && scale.label ? scale.label : \"\";\n const parts = [];\n let y = 0;\n if (label) {\n parts.push(`<text x=\"0\" y=\"10\" font-weight=\"bold\">${esc(label)}</text>`);\n y = 16;\n }\n const continuous = form === \"ramp\" ||\n (form !== \"swatches\" &&\n /^(linear|log|pow|sqrt|symlog|utc|time|sequential|diverging|quantize|threshold|quantile)/.test(String(scale.type)));\n if (!continuous) {\n let x = 0;\n let row = y;\n for (const value of scale.domain) {\n const text = String(value);\n const w = 14 + textWidth(text, 10) + 12;\n if (x > 0 && x + w > width) {\n x = 0;\n row += 16;\n }\n parts.push(\n `<rect x=\"${x}\" y=\"${row}\" width=\"10\" height=\"10\" fill=\"${esc(scale.apply(value))}\"/>` +\n `<text x=\"${x + 14}\" y=\"${row + 9}\">${esc(text)}</text>`,\n );\n x += w;\n }\n return { svg: parts.join(\"\"), height: row + 14 };\n }\n const [lo, hi] = [scale.domain[0], scale.domain.at(-1)];\n const n = 16;\n const stops = [];\n // Plot's interpolator runs over the scale's output (its range), so\n // sampling it spaces a log or sqrt scale's colors as the chart does;\n // without one, step through the domain, Dates as their times.\n const range = Array.isArray(scale.range) && scale.range.length >= 2 && scale.range.every((r) => typeof r === \"number\")\n ? [scale.range[0], scale.range.at(-1)]\n : undefined;\n const numeric = (v) => (v instanceof Date ? v.getTime() : typeof v === \"number\" ? v : NaN);\n const [a, b] = [numeric(lo), numeric(hi)];\n for (let i = 0; i <= n; i++) {\n const t = i / n;\n let color;\n if (typeof scale.interpolate === \"function\" && range) color = scale.interpolate(range[0] + (range[1] - range[0]) * t);\n else if (Number.isFinite(a) && Number.isFinite(b)) {\n const v = a + (b - a) * t;\n color = scale.apply(lo instanceof Date ? new Date(v) : v);\n } else color = scale.apply(i === 0 ? lo : hi);\n stops.push(`<stop offset=\"${t * 100}%\" stop-color=\"${esc(color)}\"/>`);\n }\n // From the stops, so the same chart gives the same SVG on every run.\n const id = `ramp-${hash(stops.join(\"\"))}`;\n const rampWidth = Math.min(240, width);\n const fmt = (v) => (v instanceof Date ? v.toISOString().slice(0, 10) : typeof v === \"number\" ? String(Number(v.toPrecision(4))) : String(v));\n parts.push(\n `<defs><linearGradient id=\"${id}\">${stops.join(\"\")}</linearGradient></defs>` +\n `<rect x=\"0\" y=\"${y}\" width=\"${rampWidth}\" height=\"10\" fill=\"url(#${id})\"/>` +\n `<text x=\"0\" y=\"${y + 22}\">${esc(fmt(lo))}</text>` +\n `<text x=\"${rampWidth}\" y=\"${y + 22}\" text-anchor=\"end\">${esc(fmt(hi))}</text>`,\n );\n return { svg: parts.join(\"\"), height: y + 26 };\n}\n\n/**\n * Plot's SVG with a title, subtitle, legend and caption around it, all in\n * one SVG.\n */\nexport function composeSVG(inner, { title, subtitle, caption, legend }) {\n const { width, height } = svgSize(inner);\n const head = [];\n let y = 0;\n if (title) {\n head.push(`<text x=\"0\" y=\"${y + 16}\" font-size=\"16\" font-weight=\"bold\">${esc(title)}</text>`);\n y += 24;\n }\n if (subtitle) {\n head.push(`<text x=\"0\" y=\"${y + 13}\" font-size=\"13\">${esc(subtitle)}</text>`);\n y += 20;\n }\n if (legend?.svg) {\n head.push(`<g transform=\"translate(0,${y})\" font-size=\"10\">${legend.svg}</g>`);\n y += legend.height + 8;\n }\n const body = withNamespace(inner).replace(/<svg\\b/i, `<svg x=\"0\" y=\"${y}\"`);\n let total = y + height;\n let foot = \"\";\n if (caption) {\n foot = `<text x=\"0\" y=\"${total + 16}\" font-size=\"12\">${esc(caption)}</text>`;\n total += 24;\n }\n return (\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${total}\" viewBox=\"0 0 ${width} ${total}\" ` +\n `font-family=\"${FONT}\" fill=\"currentColor\">${head.join(\"\")}${body}${foot}</svg>`\n );\n}\n\n// --- Summaries ----------------------------------------------------------------\n\nfunction markName(mark) {\n if (typeof mark?.ariaLabel === \"string\" && mark.ariaLabel) return mark.ariaLabel;\n return mark?.constructor?.name?.toLowerCase() ?? \"mark\";\n}\n\nfunction describeScale(name, scale) {\n if (!isObject(scale)) return null;\n const label = typeof scale.label === \"string\" && scale.label ? scale.label : \"\";\n const domain = Array.isArray(scale.domain) ? scale.domain : [];\n let range = \"\";\n if (domain.length && domain.every((v) => typeof v === \"number\" || v instanceof Date) && !/ordinal|band|point/.test(scale.type)) {\n const fmt = (v) => (v instanceof Date ? v.toISOString().slice(0, 10) : String(Number(v.toPrecision(4))));\n range = `${fmt(domain[0])} to ${fmt(domain.at(-1))}`;\n } else if (domain.length) {\n range = `${domain.length} ${domain.length === 1 ? \"value\" : \"values\"}`;\n }\n const details = [scale.type, range].filter(Boolean).join(\", \");\n return `${name}${label ? `=${label}` : \"\"}${details ? ` (${details})` : \"\"}`;\n}\n\n/** A few lines about a Plot chart, for readers that can't see it. */\nexport function summarizePlot(element, options) {\n const marks = (Array.isArray(options.marks) ? options.marks.flat(Infinity) : []).filter(isObject);\n const names = [...new Set(marks.map(markName))];\n const scales = [\"x\", \"y\", \"fx\", \"fy\", \"color\", \"r\", \"opacity\", \"symbol\"]\n .map((name) => (typeof element?.scale === \"function\" ? describeScale(name, element.scale(name)) : null))\n .filter(Boolean);\n const rows = marks.map((m) => (Array.isArray(m.data) ? m.data.length : typeof m.data?.length === \"number\" ? m.data.length : 0));\n const most = rows.length ? Math.max(...rows) : 0;\n const title = typeof options.title === \"string\" && options.title ? ` \"${options.title}\"` : \"\";\n const parts = [...scales];\n if (most) parts.push(`${most} ${most === 1 ? \"row\" : \"rows\"}`);\n return `Plot ${names.length ? `${names.join(\", \")} ` : \"\"}chart${title}${parts.length ? `: ${parts.join(\", \")}` : \"\"}`;\n}\n\n// --- Vega's defaults, for a chart on any background ----------------------------\n\nconst INK = \"currentColor\";\n/**\n * Text and lines in `currentColor`, on no background: the page's text\n * color when the SVG is inline, and in the Ganymede apps, which give an\n * SVG image the page's color. In a plain <img> it is black.\n */\nexport const VEGA_CONFIG = {\n background: \"transparent\",\n axis: { labelColor: INK, titleColor: INK, domainColor: INK, tickColor: INK, gridColor: INK, gridOpacity: 0.15 },\n legend: { labelColor: INK, titleColor: INK },\n title: { color: INK, subtitleColor: INK },\n header: { labelColor: INK, titleColor: INK },\n view: { stroke: null },\n};\n\nfunction mergeConfig(base, own) {\n if (!isObject(own)) return base;\n const out = { ...base };\n for (const [key, value] of Object.entries(own)) {\n out[key] = isObject(value) && isObject(base[key]) && !Array.isArray(value) ? mergeConfig(base[key], value) : value;\n }\n return out;\n}\n\n// --- The helper -----------------------------------------------------------------\n\n/**\n * @param {{\n * importModule: (specifier: string) => Promise<any>,\n * summarizeSpec?: (spec: object) => string | undefined,\n * warn?: (message: string) => void,\n * }} options\n */\nexport function createChart({ importModule, summarizeSpec, warn = (m) => console.warn(m) }) {\n let dom;\n async function document() {\n if (globalThis.document && typeof globalThis.document.createElementNS === \"function\") return globalThis.document;\n // A failed load isn't kept, so the next chart tries again.\n dom ??= importModule(LINKEDOM)\n .then(({ parseHTML }) => parseHTML(\"<!doctype html><html><body></body></html>\").document)\n .catch((err) => {\n dom = undefined;\n throw err;\n });\n return dom;\n }\n\n async function renderVega(spec, options) {\n const keepSpec = isObject(options) && options.spec === true;\n const [vega, vl] = await Promise.all([importModule(VEGA), isVegaSpec(spec) ? null : importModule(VEGA_LITE)]);\n const config = mergeConfig(VEGA_CONFIG, spec.config);\n const vgSpec = vl ? vl.compile({ ...spec, config }).spec : { ...spec, config };\n const view = new vega.View(vega.parse(vgSpec), { renderer: \"none\" });\n let svg;\n try {\n svg = await view.toSVG();\n } finally {\n view.finalize();\n }\n const bundle = { \"image/svg+xml\": withNamespace(svg) };\n const summary = summarizeSpec?.({ $schema: \"https://vega.github.io/schema/vega-lite/v5.json\", ...spec });\n if (summary) bundle[\"text/plain\"] = summary;\n if (keepSpec) {\n const v4 = /\\/schema\\/vega-lite\\/v4/.test(String(spec.$schema));\n bundle[vl ? (v4 ? \"application/vnd.vegalite.v4+json\" : \"application/vnd.vegalite.v5+json\") : \"application/vnd.vega.v5+json\"] = spec;\n }\n return bundle;\n }\n\n async function renderPlot(Plot, options) {\n if (!isObject(options)) throw new TypeError(\"jupyter.chart(Plot, options): options must be Plot's options object\");\n const { title, subtitle, caption, ...rest } = options;\n const color = isObject(rest.color) ? rest.color : undefined;\n const wantLegend = Boolean(color?.legend);\n const plotOptions = { ...rest, document: await document(), figure: false };\n if (color) plotOptions.color = { ...color, legend: false };\n // Only the color legend is drawn; Plot would put the others in an\n // HTML figure, which a reader that shows only images drops.\n const others = OTHER_LEGENDS.filter((name) => isObject(rest[name]) && rest[name].legend);\n if (others.length) {\n warn(`jupyter.chart draws only a color legend; the ${others.join(\", \")} legend is left out`);\n }\n const element = Plot.plot(plotOptions);\n const inner = element.outerHTML;\n const { width } = svgSize(inner);\n const scale = wantLegend && typeof element.scale === \"function\" ? element.scale(\"color\") : undefined;\n const form = color?.legend === \"ramp\" || color?.legend === \"swatches\" ? color.legend : undefined;\n const legend = scale ? legendSVG({ ...scale, label: scale.label ?? color.label }, width, form) : undefined;\n const svg = composeSVG(inner, { title, subtitle, caption, legend });\n return { \"image/svg+xml\": withNamespace(svg), \"text/plain\": summarizePlot(element, options) };\n }\n\n function chart(first, second) {\n // Checked now, so a wrong argument fails the call.\n const spec = isPlotModule(first) || isSvgElement(first) ? undefined : specOf(first);\n if (isPlotModule(first) && !isObject(second)) {\n throw new TypeError(\"jupyter.chart(Plot, options): options must be Plot's options object\");\n }\n if (isSvgElement(first)) {\n const bundle = { \"image/svg+xml\": withNamespace(first.outerHTML) };\n return { [$display]: () => bundle };\n }\n let pending;\n const render = () =>\n (pending ??= (async () => {\n const bundle = spec ? await renderVega(spec, second) : await renderPlot(first, second);\n const size = bundle[\"image/svg+xml\"].length;\n if (size > WARN_BYTES) {\n warn(\n `jupyter.chart: the SVG is ${(size / 1e6).toFixed(1)} MB, which makes the notebook large; ` +\n \"aggregate or sample the data first\",\n );\n }\n return bundle;\n })().catch((err) => {\n // Not kept, so displaying the chart again retries.\n pending = undefined;\n throw err;\n }));\n return { [$display]: render };\n }\n\n return chart;\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, JPEG/PNG bytes, HTML/SVG elements) are\n// unchanged; Polars-style DataFrames show through table.mjs instead (#475),\n// as do Arrow tables and DuckDB results. The Deno internals it used are\n// 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, widgets, tables, SQL and charts (jupyter.comm,\n// jupyter.widget, jupyter.table, jupyter.sql, jupyter.chart) are additions\n// Deno doesn't have; see comm.mjs, widget.mjs, table.mjs, sql.mjs and\n// chart.mjs.\n\nimport { createComms } from \"./comm.mjs\";\nimport { createHost } from \"./host.mjs\";\nimport { createWidgetFactory } from \"./widget.mjs\";\nimport { createSql } from \"./sql.mjs\";\nimport { createChart } from \"./chart.mjs\";\nimport { isTableLike, tableBundle, tableSource } from \"./table.mjs\";\n\nexport const $display = Symbol.for(\"Jupyter.display\");\n\nconst rawToEntity = new Map([\n [\"&\", \"&amp;\"],\n [\"<\", \"&lt;\"],\n [\">\", \"&gt;\"],\n ['\"', \"&quot;\"],\n [\"'\", \"&#39;\"],\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 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 * params?: () => string | undefined,\n * }} host\n */\n/** The MIME type of a named result (cdp-kernel#456): `{ name, value }`. */\nexport const RESULT_MIME = \"application/vnd.ganymede.result+json\";\n\nfunction deepFreeze(value) {\n if (typeof value === \"object\" && value !== null) {\n for (const v of Object.values(value)) deepFreeze(v);\n Object.freeze(value);\n }\n return value;\n}\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 // Arrow tables, Polars DataFrames and DuckDB results (#475).\n if (isTableLike(obj)) return tableBundle(tableSource(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 // jupyter.table (#475): rows and columns as Ganymede's table output,\n // built now so a bad value fails the call, not the display.\n function table(value, options = {}) {\n const bundle = tableBundle(tableSource(value, options), options);\n return { [$display]: () => bundle };\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 // jupyter.params (cdp-kernel#456): the run's parameters, which the host\n // (ganymede execute -p) passes as JSON in GANYMEDE_PARAMS. Parsed on first\n // read, so a bad value fails the cell that reads it, not the kernel.\n let params;\n function readParams() {\n if (params !== undefined) return params;\n const text = host.params?.();\n if (text === undefined || text === \"\") return (params = Object.freeze({}));\n let value;\n try {\n value = JSON.parse(text);\n } catch (err) {\n throw new TypeError(`GANYMEDE_PARAMS is not JSON: ${err instanceof Error ? err.message : err}`);\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"GANYMEDE_PARAMS must be a JSON object, such as {\\\"counter\\\": \\\"Fremont\\\"}\");\n }\n return (params = deepFreeze(value));\n }\n\n // jupyter.result (cdp-kernel#456): a named value as an output of\n // Ganymede's result type, which a run's caller reads without parsing\n // outputs. JSON only, so every reader sees the same value.\n function result(name, value) {\n if (typeof name !== \"string\" || name === \"\") throw new TypeError(\"jupyter.result: name must be a non-empty string\");\n let text;\n try {\n text = JSON.stringify(value);\n } catch (err) {\n throw new TypeError(`jupyter.result: ${name} is not JSON: ${err instanceof Error ? err.message : err}`);\n }\n if (text === undefined) throw new TypeError(`jupyter.result: ${name} is not JSON (${typeof value})`);\n const json = JSON.parse(text);\n broadcast(\"display_data\", {\n data: { [RESULT_MIME]: { name, value: json }, \"text/plain\": `${name} = ${text}` },\n metadata: {},\n transient: {},\n });\n }\n\n // The cell's own import, so npm: resolution and the browser target's CDN\n // apply to the packages jupyter.sql and jupyter.chart load.\n const cellImport = (what) => (specifier) => {\n const load = globalThis.__cdpk?.import;\n if (typeof load !== \"function\") return Promise.reject(new Error(`${what}: no module loader in this runtime`));\n return load(specifier);\n };\n\n // jupyter.sql (#477): DuckDB, loaded on the first query; an interrupt\n // (jupyter.signal) interrupts the query.\n const sql = createSql({ importModule: cellImport(\"jupyter.sql\"), signal: () => current.signal });\n\n // jupyter.chart (#479): vega, vega-lite or linkedom, loaded on first use.\n const chart = createChart({ importModule: cellImport(\"jupyter.chart\"), summarizeSpec: summarizeChart });\n\n const comms = createComms((msgType, content, metadata, buffers) => host.send(msgType, content, metadata, buffers));\n\n // jupyter.signal (#418): aborted when the kernel is interrupted, so cell\n // code can stop waiting on what the interrupt can't reach, such as a comm\n // reply. Each cell gets its own, as does a comm handler that starts while\n // no cell runs; a handler during a cell shares the cell's. An interrupt\n // aborts only those of the cell and handlers running (#421).\n /** The last cell's controller. */\n let cell = new AbortController();\n /** What jupyter.signal returns: that of whatever started last. */\n let current = cell;\n /** Controllers of running comm handlers, with how many handlers use each. */\n const handlers = new Map();\n function startCell() {\n current = cell = new AbortController();\n }\n /** `cellRunning`: the host has a cell in flight, so the last cell's signal is aborted too. */\n function abortSignal(cellRunning = true) {\n const reason = new DOMException(\"Execution interrupted\", \"AbortError\");\n if (cellRunning) cell.abort(reason);\n for (const controller of handlers.keys()) controller.abort(reason);\n handlers.clear();\n }\n // jupyter.host() (#461): Ganymede's host API. Registers its comm target\n // now, so the comm the server opens at kernel start finds it. A call\n // without a signal watches the jupyter.signal of whatever started it.\n const hostApi = createHost(comms.api, () => current.signal);\n\n async function commDispatch(msgType, content, metadata, buffers, ownSignal = false) {\n // A handler during a cell shares the cell's signal, and is tracked\n // apart from it: it can outlive the cell.\n const controller = ownSignal ? new AbortController() : cell;\n if (ownSignal) current = controller;\n handlers.set(controller, (handlers.get(controller) ?? 0) + 1);\n try {\n return await comms.dispatch(msgType, content, metadata, buffers);\n } finally {\n const left = (handlers.get(controller) ?? 0) - 1;\n if (left > 0) handlers.set(controller, left);\n else handlers.delete(controller);\n }\n }\n\n return {\n namespace: {\n get signal() {\n return current.signal;\n },\n broadcast,\n display,\n get params() {\n return readParams();\n },\n result,\n table,\n sql,\n chart,\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 host: hostApi.host,\n widget: createWidgetFactory(comms.api, $display),\n },\n broadcastResult,\n formatNow,\n confirm,\n prompt,\n commDispatch,\n startCell,\n abortSignal,\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 shim.startCell?.();\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(\n request.msgType,\n request.content,\n request.metadata,\n request.buffers,\n request.ownSignal === true,\n );\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 case \"abort\":\n // After an interrupt: jupyter.signal (#418).\n shim.abortSignal?.(request.cell !== false);\n return {};\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 // jupyter.params (#456): the target's `params` option, sent with info.\n params: () => paramsText,\n});\nlet paramsText;\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, params }) {\n if (typeof params === \"string\") paramsText = params;\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 // jupyter.signal (#418, #421): a new one as each cell starts; the host\n // aborts the running ones on interrupt.\n startCell: jupyter.startCell,\n abortSignal: jupyter.abortSignal,\n async commDispatch(msgType, content, metadata, buffers64, ownSignal) {\n const buffers = buffers64.map((b) => Uint8Array.from(atob(b), (c) => c.charCodeAt(0)));\n return await jupyter.commDispatch(msgType, content, metadata, buffers, ownSignal);\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", "host", "data", "hello", "call", "key", "$display", "key", "list", "$display", "rawToEntity", "isObject", "key", "$display", "rawToEntity", "key", "encoding", "list", "$display", "host", "format", "result", "answer", "handle", "items", "propertyNames", "inspect", "cdn"]
3
+ "sources": ["../../runtime/comm.mjs", "../../runtime/host.mjs", "../../runtime/widget.mjs", "../../runtime/table.mjs", "../../runtime/sql.mjs", "../../runtime/chart.mjs", "../../runtime/table-paging.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=\"./host.d.mts\"\n// jupyter.host() (#461): the client for a Ganymede server's host API, which\n// lets a cell read, search and (when granted) run other notebooks. The\n// server opens a comm to target `ganymede.host.v1` when the kernel starts,\n// with its `hello` as the open's data. Calls go out as comm messages\n// `{ id, method, params }`; the server replies `{ id, result }` or\n// `{ id, error: { code, message } }` on a kernel subshell, so a cell that\n// awaits a call gets its reply. The message format and error codes are\n// ganymede-device's, so the two clients behave alike.\n//\n// Design: https://github.com/tlockney/ganymede/blob/main/docs/host-api.md\n\nexport const HOST_TARGET = \"ganymede.host.v1\";\n\nconst CODES = new Set([\"unavailable\", \"denied\", \"cancelled\", \"timeout\", \"failed\", \"disconnected\"]);\n\nexport class HostError extends Error {\n constructor(code, message) {\n super(message);\n this.name = \"HostError\";\n this.code = code;\n }\n\n /** An abort becomes `cancelled`, a timeout signal's abort `timeout`, anything else `failed`. */\n static from(err) {\n if (err instanceof HostError) return err;\n const message = typeof err?.message === \"string\" ? err.message : String(err);\n if (err?.name === \"AbortError\") return new HostError(\"cancelled\", message);\n if (err?.name === \"TimeoutError\") return new HostError(\"timeout\", message);\n if (typeof err?.code === \"string\" && CODES.has(err.code)) return new HostError(err.code, message);\n return new HostError(\"failed\", message);\n }\n}\n\n/** Why an aborted signal ended a call: `timeout` for a timeout signal, else `cancelled`. */\nfunction abortError(reason) {\n const message = typeof reason?.message === \"string\" ? reason.message : String(reason ?? \"aborted\");\n return new HostError(reason?.name === \"TimeoutError\" ? \"timeout\" : \"cancelled\", message);\n}\n\n/** A server's `hello`, or null when `data` isn't one. */\nfunction helloOf(data) {\n if (data === null || typeof data !== \"object\" || typeof data.protocol !== \"number\") return null;\n return {\n protocol: data.protocol,\n server: typeof data.server === \"string\" ? data.server : \"\",\n notebook: typeof data.notebook === \"string\" ? data.notebook : null,\n methods: Array.isArray(data.methods) ? data.methods.filter((m) => typeof m === \"string\") : [],\n };\n}\n\n/**\n * @param {import(\"./comm.d.mts\").CommApi} comms\n * @param {() => AbortSignal | undefined} [defaultSignal] the signal a call\n * watches when it is given none: jupyter.signal.\n */\nexport function createHost(comms, defaultSignal = () => undefined) {\n /** The open host comm: { comm, hello, host, pending }, or null. */\n let link = null;\n /** Whoever waits for a hello: called with the link's Host, or null once there is no link. */\n const waiters = new Set();\n /**\n * A comm this runtime opened went unanswered: no server. Remembered, so\n * each `jupyter.host()` after the first answers null at once, until a\n * server opens the comm itself.\n */\n let noServer = false;\n let nextId = 0;\n\n function settle() {\n const host = link?.host ?? null;\n if (host === null && link !== null) return;\n for (const waiter of [...waiters]) waiter(host);\n }\n\n /** `ours`: this runtime opened the comm, not the server. */\n function adopt(comm, data, ours = false) {\n // A new comm replaces the old one: the server opens one per kernel start.\n const old = link;\n const l = { comm, host: null, pending: new Map(), ours };\n if (!ours) noServer = false;\n link = l;\n if (old !== null && !old.comm.closed) old.comm.close();\n const hello = helloOf(data);\n if (hello !== null) l.host = makeHost(l, hello);\n comm.onMsg(({ data }) => {\n if (data.hello !== undefined) {\n const hello = helloOf(data.hello);\n if (hello !== null) {\n l.host = makeHost(l, hello);\n if (link === l) settle();\n }\n return;\n }\n const call = l.pending.get(data.id);\n if (call === undefined) return;\n if (data.error !== undefined) {\n const { code, message } = data.error ?? {};\n call.reject(new HostError(CODES.has(code) ? code : \"failed\", typeof message === \"string\" ? message : String(code)));\n } else {\n call.resolve(data.result);\n }\n });\n comm.onClose(({ data }) => {\n for (const call of l.pending.values()) {\n call.reject(new HostError(\"disconnected\", typeof data?.error === \"string\" ? `host comm closed: ${data.error}` : \"host comm closed\"));\n }\n l.pending.clear();\n if (link === l) {\n link = null;\n // The frontend closed the comm this runtime opened: no server.\n if (l.ours && l.host === null) noServer = true;\n settle();\n }\n });\n if (l.host !== null) settle();\n }\n\n function makeHost(l, hello) {\n const methods = Object.freeze([...hello.methods]);\n function call(method, params = {}, { signal = defaultSignal() } = {}) {\n if (signal?.aborted) return Promise.reject(abortError(signal.reason));\n if (l.comm.closed) return Promise.reject(new HostError(\"disconnected\", \"host comm closed\"));\n const id = nextId++;\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n l.pending.delete(id);\n if (!l.comm.closed) l.comm.send({ id, cancel: true });\n reject(abortError(signal.reason));\n };\n const done = () => signal?.removeEventListener(\"abort\", onAbort);\n const call = {\n resolve: (value) => (l.pending.delete(id), done(), resolve(value)),\n reject: (error) => (l.pending.delete(id), done(), reject(error)),\n };\n l.pending.set(id, call);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n l.comm.send({ id, method, params });\n } catch (err) {\n // Params that can't be sent, such as a BigInt: the server never\n // got the call.\n call.reject(new HostError(\"failed\", `cannot send ${method}: ${err instanceof Error ? err.message : err}`));\n }\n });\n }\n const bind = (method) => (params, options) => call(method, params, options);\n return Object.freeze({\n protocol: hello.protocol,\n server: hello.server,\n notebook: hello.notebook,\n methods,\n has: (method) => methods.includes(method),\n call,\n notebooks: Object.freeze({\n list: bind(\"notebooks.list\"),\n read: bind(\"notebooks.read\"),\n search: bind(\"notebooks.search\"),\n results: bind(\"notebooks.results\"),\n run: bind(\"notebooks.run\"),\n }),\n self: Object.freeze({\n add: bind(\"self.add\"),\n edit: bind(\"self.edit\"),\n delete: bind(\"self.delete\"),\n }),\n });\n }\n\n comms.registerTarget(HOST_TARGET, (comm, msg) => adopt(comm, msg.data));\n\n async function host({ timeout = 1000 } = {}) {\n if (link?.host) return link.host;\n // The wait for a server watches jupyter.signal, so an interrupt ends it.\n const signal = defaultSignal();\n if (signal?.aborted) throw abortError(signal.reason);\n if (noServer) return null;\n // No comm from the server (one whose comm closed, as when a runtime\n // restarts in the same kernel): open it from here. A Ganymede server\n // answers `{ hello }`; anything else closes it or stays silent.\n if (link === null) adopt(comms.open(HOST_TARGET), null, true);\n const mine = link;\n return new Promise((resolve, reject) => {\n let timer;\n const onAbort = () => {\n done();\n reject(abortError(signal.reason));\n };\n const done = () => {\n waiters.delete(waiter);\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n };\n const waiter = (host) => {\n done();\n resolve(host);\n };\n waiters.add(waiter);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n // Each caller waits its own timeout; the last to give up on a comm\n // this runtime opened closes it.\n timer = setTimeout(() => {\n done();\n if (waiters.size === 0 && link === mine && mine.host === null && mine.ours) {\n link = null;\n noServer = true;\n mine.comm.close();\n }\n resolve(null);\n }, timeout);\n });\n }\n\n return { host };\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=\"./table.d.mts\"\n// Table output (cdp-kernel#475, ganymede#747): a value with rows and\n// columns as one MIME bundle every reader can show. The design is\n// Ganymede's docs/data-output.md:\n// - application/vnd.dataresource+json: Table Schema fields and up to\n// `limit` rows as JSON, plus `ganymede: { rows, shown }`, which the\n// Ganymede apps render with sorting and paging;\n// - text/html: a plain table, head and tail rows, for JupyterLab, VS Code\n// and GitHub;\n// - text/plain: shape, column types and ranges, and numbered head and\n// tail rows, for agents and consoles.\n// Sources: arrays of row objects or arrays, Arrow tables (apache-arrow,\n// duckdb-wasm), Polars DataFrames and @duckdb/node-api results.\n//\n// No imports: this file must load in every target.\n\nexport const TABLE_MIME = \"application/vnd.dataresource+json\";\nexport const DEFAULT_LIMIT = 1000;\nexport const MAX_LIMIT = 10_000;\n/** Embedded rows stop at this much JSON, whatever the limit. */\nexport const MAX_BYTES = 1_000_000;\n/** A longer string is cut, with \"\u2026\". */\nexport const MAX_CELL = 1000;\nconst HTML_ALL = 20;\nconst HTML_HEAD = 10;\nconst HTML_TAIL = 5;\nconst TEXT_HEAD = 3;\nconst TEXT_TAIL = 2;\nconst TEXT_COLUMNS = 20;\nconst TEXT_MAX = 4096;\n\nconst rawToEntity = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" };\nconst escapeHTML = (s) => s.replace(/[&<>\"']/g, (c) => rawToEntity[c]);\n\nfunction isObject(value) {\n return value !== null && typeof value === \"object\";\n}\n\nexport function isArrowTable(value) {\n return isObject(value) && isObject(value.schema) && Array.isArray(value.schema.fields) &&\n typeof value.numRows === \"number\" && typeof value.getChild === \"function\";\n}\n\nexport function isPolarsFrame(value) {\n return isObject(value) && isObject(value.schema) && typeof value.head === \"function\" &&\n typeof value.toRecords === \"function\";\n}\n\nfunction isDuckDBShaped(value) {\n return isObject(value) && typeof value.columnNames === \"function\" && typeof value.columnTypes === \"function\" &&\n typeof value.getRowObjectsJS === \"function\";\n}\n\n/**\n * A `@duckdb/node-api` result reader (from `runAndReadAll` or\n * `streamAndReadAll`) that has read all its rows. A `run()` result\n * reads its rows asynchronously, so it isn't one.\n */\nexport function isDuckDBResult(value) {\n return isDuckDBShaped(value) && typeof value.currentRowCount === \"number\" && typeof value.getRowsJS === \"function\" &&\n value.done === true;\n}\n\n/** Whether `value` shows as a table when it is a cell's value. */\nexport function isTableLike(value) {\n return isArrowTable(value) || isPolarsFrame(value) || isDuckDBResult(value);\n}\n\n// --- Types ------------------------------------------------------------------\n\n/** A declared column type (Arrow, Polars or DuckDB) as a Table Schema type. */\nexport function schemaType(declared) {\n const t = String(declared ?? \"\");\n if (t === \"\") return undefined;\n if (/^(list|large_?list|fixed_?size_?list|array)\\b|\\[\\d*\\]$/i.test(t)) return \"array\";\n if (/^(struct|map|union|json)\\b/i.test(t)) return \"object\";\n if (/^(u?int\\d*|u?(tiny|small|big|huge)?int(eger)?)\\b/i.test(t)) return \"integer\";\n if (/^(float\\d*|double|real|decimal|numeric)\\b/i.test(t)) return \"number\";\n if (/^bool/i.test(t)) return \"boolean\";\n if (/^date(32|64)?(<|$|\\b(?!time))/i.test(t) && !/^datetime/i.test(t)) return \"date\";\n if (/^(timestamp|datetime)/i.test(t)) return \"datetime\";\n if (/^time/i.test(t)) return \"time\";\n if (/^(interval|duration)/i.test(t)) return \"duration\";\n if (/^(utf8|large_?utf8|string|varchar|char|text|categorical|enum|uuid|null)\\b/i.test(t)) return \"string\";\n return undefined;\n}\n\nfunction polarsDeclared(dtype) {\n // Polars DataTypes only expose their name through toJSON().\n if (typeof dtype?.toJSON === \"function\") {\n const json = dtype.toJSON();\n const name = isObject(json) ? json.DataType ?? Object.keys(json)[0] : json;\n if (typeof name === \"string\") return name;\n if (isObject(name)) return Object.keys(name)[0];\n }\n return typeof dtype === \"string\" ? dtype : undefined;\n}\n\nfunction inferType(values) {\n let type;\n for (const v of values) {\n if (v === null || v === undefined) continue;\n let t;\n if (typeof v === \"bigint\") t = \"integer\";\n else if (typeof v === \"number\") t = Number.isInteger(v) ? \"integer\" : \"number\";\n else if (typeof v === \"boolean\") t = \"boolean\";\n else if (typeof v === \"string\") t = \"string\";\n // A Date at midnight UTC, as new Date(\"1610-01-08\") makes, is a date.\n else if (v instanceof Date) t = v.getTime() % 86_400_000 === 0 ? \"date\" : \"datetime\";\n else if (Array.isArray(v) || ArrayBuffer.isView(v)) t = ArrayBuffer.isView(v) && !(v instanceof DataView) && v.BYTES_PER_ELEMENT === 1 ? \"string\" : \"array\";\n else t = \"object\";\n if (type === undefined) type = t;\n else if (type !== t) {\n if ((type === \"integer\" && t === \"number\") || (type === \"number\" && t === \"integer\")) type = \"number\";\n else if ((type === \"date\" && t === \"datetime\") || (type === \"datetime\" && t === \"date\")) type = \"datetime\";\n else return \"string\";\n }\n }\n return type ?? \"string\";\n}\n\n// --- Values -----------------------------------------------------------------\n\nfunction clipString(s, max = MAX_CELL) {\n return s.length > max ? `${s.slice(0, max - 1)}\u2026` : s;\n}\n\nfunction toDate(value) {\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value;\n if (typeof value === \"number\" || typeof value === \"bigint\") {\n const d = new Date(Number(value));\n return Number.isNaN(d.getTime()) ? null : d;\n }\n return null;\n}\n\n/** A nested value as JSON-safe data: bigints as numbers or strings. */\nfunction plain(value, depth = 0) {\n if (value === null || value === undefined) return null;\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n if (typeof value === \"number\") return Number.isFinite(value) ? value : String(value);\n if (typeof value === \"string\") return clipString(value);\n if (typeof value !== \"object\") return value;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();\n if (depth > 8) return \"\u2026\";\n if (ArrayBuffer.isView(value) && !(value instanceof DataView) && value.BYTES_PER_ELEMENT === 1) {\n return `<${value.byteLength} bytes>`;\n }\n if (Array.isArray(value) || ArrayBuffer.isView(value)) return Array.from(value, (v) => plain(v, depth + 1));\n // Arrow vectors and struct rows.\n if (typeof value.toJSON === \"function\") return plain(value.toJSON(), depth + 1);\n if (typeof value.toArray === \"function\") return plain(value.toArray(), depth + 1);\n const out = {};\n for (const [k, v] of Object.entries(value)) out[k] = plain(v, depth + 1);\n return out;\n}\n\n/** One cell as Table Schema JSON for a column of `type`. */\nexport function encodeValue(value, type, declared) {\n if (value === null || value === undefined) return null;\n if (type === \"time\" && (typeof value === \"bigint\" || typeof value === \"number\")) return timeText(value, declared);\n if (type === \"date\" || type === \"datetime\") {\n const d = toDate(value);\n if (d) return type === \"date\" ? d.toISOString().slice(0, 10) : d.toISOString();\n }\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n if (typeof value === \"number\") {\n if (Number.isNaN(value)) return \"NaN\";\n if (!Number.isFinite(value)) return value > 0 ? \"Infinity\" : \"-Infinity\";\n return value;\n }\n if (typeof value === \"string\") return clipString(value);\n if (typeof value === \"boolean\") return value;\n return plain(value);\n}\n\n/**\n * A time of day as `HH:MM:SS[.fraction]`, from a count in the declared\n * type's unit: Arrow's `Time64<NANOSECOND>` and the like, Polars' `Time`\n * (nanoseconds), or microseconds, as DuckDB's `TIME` is.\n */\nexport function timeText(value, declared = \"\") {\n const d = String(declared);\n const unit = /NANOSECOND|^Time$/.test(d) || /_NS$/i.test(d) ? 1_000_000_000n : /MILLISECOND/i.test(d) ? 1000n : /<SECOND/i.test(d) ? 1n : 1_000_000n;\n const total = typeof value === \"bigint\" ? value : BigInt(Math.trunc(value));\n const seconds = total / unit;\n const fraction = total % unit;\n const pad = (n) => String(n).padStart(2, \"0\");\n const text = `${pad(seconds / 3600n)}:${pad((seconds / 60n) % 60n)}:${pad(seconds % 60n)}`;\n if (fraction === 0n) return text;\n return `${text}.${String(fraction).padStart(String(unit).length - 1, \"0\").replace(/0+$/, \"\")}`;\n}\n\n/**\n * Unique column names: a result may have two columns called `id` (a\n * join), and rows are keyed by name, so the second becomes `id_1`.\n */\nexport function uniqueNames(names) {\n const seen = new Set();\n return names.map((name) => {\n let unique = name;\n for (let i = 1; seen.has(unique); i++) unique = `${name}_${i}`;\n seen.add(unique);\n return unique;\n });\n}\n\n// --- Sources ----------------------------------------------------------------\n\n/**\n * @typedef {{ name: string, declared?: string }} Column\n * @typedef {{ columns: Column[], total: number, read: (start: number, end: number) => unknown[][] }} Source\n */\n\nfunction fromObjects(rows, names) {\n let columns = names;\n if (!columns) {\n const seen = new Set();\n for (const row of rows.slice(0, DEFAULT_LIMIT)) {\n if (isObject(row)) for (const key of Object.keys(row)) seen.add(key);\n }\n columns = [...seen];\n }\n return {\n columns: columns.map((name) => ({ name: String(name) })),\n total: rows.length,\n read: (start, end) => rows.slice(start, end).map((row) => columns.map((c) => (isObject(row) ? row[c] : undefined))),\n };\n}\n\nfunction fromArrays(rows, names) {\n const width = names?.length ?? Math.max(0, ...rows.slice(0, DEFAULT_LIMIT).map((r) => (Array.isArray(r) ? r.length : 0)));\n const columns = names ?? Array.from({ length: width }, (_, i) => String(i));\n return {\n columns: columns.map((name) => ({ name: String(name) })),\n total: rows.length,\n read: (start, end) => rows.slice(start, end).map((row) => columns.map((_, i) => (Array.isArray(row) ? row[i] : undefined))),\n };\n}\n\nfunction fromArrow(table, names) {\n const fields = table.schema.fields.filter((f) => !names || names.includes(f.name));\n const vectors = fields.map((f) => table.getChild(f.name));\n return {\n columns: fields.map((f) => ({ name: String(f.name), declared: String(f.type) })),\n total: table.numRows,\n read(start, end) {\n const out = [];\n for (let i = start; i < Math.min(end, table.numRows); i++) out.push(vectors.map((v) => v?.get(i)));\n return out;\n },\n };\n}\n\nfunction fromPolars(df, names) {\n const columns = Object.entries(df.schema)\n .filter(([name]) => !names || names.includes(name))\n .map(([name, dtype]) => ({ name, declared: polarsDeclared(dtype) }));\n const total = Number.isInteger(df.height) ? df.height : df.toRecords().length;\n const records = (start, end) =>\n typeof df.slice === \"function\" ? df.slice(start, end - start).toRecords() : df.toRecords().slice(start, end);\n return {\n columns,\n total,\n read: (start, end) => records(start, Math.min(end, total)).map((row) => columns.map((c) => row[c.name])),\n };\n}\n\nfunction fromDuckDB(result, names) {\n const types = result.columnTypes();\n const all = result.columnNames().map((name, i) => ({ name, declared: String(types[i]) }));\n const columns = names ? all.filter((c) => names.includes(c.name)) : all;\n const at = columns.map((c) => all.indexOf(c));\n let rows;\n const get = () => (rows ??= result.getRowsJS());\n return {\n columns,\n total: result.currentRowCount,\n read: (start, end) => get().slice(start, end).map((row) => at.map((i) => row[i])),\n };\n}\n\n/** A table's columns and rows, from any source `jupyter.table` takes. */\nexport function tableSource(value, options = {}) {\n const names = Array.isArray(options.columns) ? options.columns.map(String) : undefined;\n if (isObject(value) && typeof value.toTableSource === \"function\") return value.toTableSource(names);\n if (isArrowTable(value)) return fromArrow(value, names);\n if (isPolarsFrame(value)) return fromPolars(value, names);\n if (isDuckDBResult(value)) return fromDuckDB(value, names);\n if (isDuckDBShaped(value)) {\n throw new TypeError(typeof value.currentRowCount === \"number\"\n ? \"jupyter.table: this DuckDB reader hasn't read all its rows; call readAll() first, or use runAndReadAll()\"\n : \"jupyter.table: a DuckDB run() result reads its rows asynchronously; use runAndReadAll(), or jupyter.sql\");\n }\n if (Array.isArray(value)) {\n const first = value.find((row) => row !== null && row !== undefined);\n return Array.isArray(first) ? fromArrays(value, names) : fromObjects(value, names);\n }\n throw new TypeError(\n \"jupyter.table takes an array of rows, an Arrow table, a Polars DataFrame or a DuckDB result\",\n );\n}\n\n/** Each column's name and Table Schema type: declared, or inferred from `rows`. */\nexport function fieldsOf(source, rows) {\n const names = uniqueNames(source.columns.map((c) => c.name));\n return source.columns.map((c, i) => ({\n name: names[i],\n type: schemaType(c.declared) ?? inferType(rows.map((r) => r[i])),\n }));\n}\n\n// --- The bundle -------------------------------------------------------------\n\nfunction count(n, noun) {\n return `${n.toLocaleString(\"en-US\")} ${n === 1 ? noun : `${noun}s`}`;\n}\n\nfunction shortValue(v) {\n if (v === null || v === undefined) return \"\";\n const s = typeof v === \"string\" ? v : JSON.stringify(v);\n return clipString(s.replace(/\\s+/g, \" \"), 30);\n}\n\nfunction columnStats(rows, i, type) {\n let nulls = 0;\n const values = [];\n for (const row of rows) {\n const v = row[i];\n if (v === null) nulls++;\n else values.push(v);\n }\n let range = \"\";\n if (values.length) {\n if (type === \"integer\" || type === \"number\") {\n const nums = values.map(Number).filter(Number.isFinite);\n if (nums.length) {\n const min = Math.min(...nums);\n const max = Math.max(...nums);\n // Grouping only from 10,000, so years read as years.\n const fmt = (n) => (Number.isInteger(n) && Math.abs(n) >= 10_000 ? n.toLocaleString(\"en-US\") : String(Number(n.toPrecision(6))));\n range = min === max ? fmt(min) : `${fmt(min)} to ${fmt(max)}`;\n }\n } else if (type === \"date\" || type === \"datetime\" || type === \"time\") {\n const sorted = values.map(String).sort();\n range = sorted[0] === sorted.at(-1) ? sorted[0] : `${sorted[0]} to ${sorted.at(-1)}`;\n } else if (type === \"boolean\") {\n const t = values.filter((v) => v === true).length;\n range = `${t} true, ${values.length - t} false`;\n } else {\n const distinct = new Set(values.map((v) => (typeof v === \"string\" ? v : JSON.stringify(v)))).size;\n range = count(distinct, \"value\");\n }\n }\n return [range, nulls ? count(nulls, \"null\") : \"\"].filter(Boolean).join(\", \");\n}\n\nfunction htmlTable(fields, head, tail, total, title) {\n let html = \"<table>\";\n if (title) html += `<caption>${escapeHTML(title)}</caption>`;\n html += \"<thead><tr>\";\n for (const f of fields) {\n html += `<th>${escapeHTML(f.name)}<br><small>${escapeHTML(f.type)}</small></th>`;\n }\n html += \"</tr></thead><tbody>\";\n const row = (r) => {\n let s = \"<tr>\";\n fields.forEach((f, i) => {\n const v = r[i];\n const text = v === null ? \"\" : typeof v === \"string\" ? v : JSON.stringify(v);\n const align = f.type === \"integer\" || f.type === \"number\" ? ' style=\"text-align:right\"' : \"\";\n s += `<td${align}>${escapeHTML(text)}</td>`;\n });\n return `${s}</tr>`;\n };\n for (const r of head) html += row(r);\n const hidden = total - head.length - tail.length;\n if (hidden > 0) html += `<tr><td colspan=\"${Math.max(1, fields.length)}\">\u2026 ${count(hidden, \"more row\")}</td></tr>`;\n for (const r of tail) html += row(r);\n return `${html}</tbody></table>`;\n}\n\nfunction textTable(fields, numbered) {\n const cells = numbered.map(([n, r]) => [String(n), ...r.map(shortValue)]);\n const widths = [0, ...fields.map(() => 0)];\n for (const row of cells) row.forEach((c, i) => (widths[i] = Math.max(widths[i], c.length)));\n return cells.map((row) => ` ${row.map((c, i) => c.padEnd(widths[i])).join(\" | \").trimEnd()}`);\n}\n\n/** A cut table's source and fields, on its resource, for `pageTable` to register when the table is shown. */\nconst PAGEABLE = Symbol(\"cdpk.table.pageable\");\n\n/** A row as the output encodes it: one value a field, in field order. */\nexport function encodeRow(source, fields, row) {\n return fields.map((f, i) => encodeValue(row[i], f.type, source.columns[i].declared));\n}\n\n/**\n * Keeps a cut table in `bundle` for paging (table-paging.mjs) and names it\n * as `ganymede.page`. The jupyter namespace calls this as it sends an\n * output, so a table that is built but never shown (the debugger's\n * variable viewer, an unshown `jupyter.table()`) takes no slot. `key` (a\n * display id) keeps one id for every update of a display.\n */\nexport function pageTable(bundle, pager, key) {\n const resource = bundle?.[TABLE_MIME];\n const pending = resource?.[PAGEABLE];\n if (!pending || !pager || resource.ganymede?.page !== undefined) return bundle;\n resource.ganymede.page = pager.register(pending.source, pending.fields, key);\n return bundle;\n}\n\n/**\n * The MIME bundle for a table: Table Schema JSON with up to `limit` rows,\n * an HTML table and a text summary. A table cut by the cap can be kept\n * for paging: by `options.pager` now, or by `pageTable` when it is shown.\n */\nexport function tableBundle(source, options = {}) {\n const requested = options.limit ?? DEFAULT_LIMIT;\n if (!Number.isInteger(requested) || requested < 0) throw new TypeError(\"jupyter.table: limit must be a whole number\");\n const limit = Math.min(requested, MAX_LIMIT);\n const title = typeof options.title === \"string\" && options.title !== \"\" ? options.title : undefined;\n const total = source.total;\n\n const raw = source.read(0, Math.min(limit, total));\n const fields = fieldsOf(source, raw);\n const encode = (r) => encodeRow(source, fields, r);\n const utf8 = new TextEncoder();\n\n // Rows as JSON, stopping at MAX_BYTES.\n const encoded = [];\n const data = [];\n let bytes = 0;\n for (const r of raw) {\n const values = encode(r);\n // defineProperty, so a column called __proto__ is an ordinary key.\n const obj = {};\n fields.forEach((f, i) => Object.defineProperty(obj, f.name, { value: values[i], enumerable: true, writable: true, configurable: true }));\n bytes += utf8.encode(JSON.stringify(obj)).length + 1;\n if (bytes > MAX_BYTES && data.length > 0) break;\n encoded.push(values);\n data.push(obj);\n }\n const shown = data.length;\n\n // Head and tail rows, the tail from the source itself.\n const split = total > HTML_ALL;\n const htmlHead = split ? encoded.slice(0, HTML_HEAD) : encoded.slice(0, total);\n const htmlTail = split ? source.read(total - HTML_TAIL, total).map(encode) : [];\n const textSplit = total > TEXT_HEAD + TEXT_TAIL;\n const textHeadRows = encoded.slice(0, textSplit ? TEXT_HEAD : total);\n const textTail = !textSplit ? [] : htmlTail.length ? htmlTail.slice(-TEXT_TAIL) : source.read(total - TEXT_TAIL, total).map(encode);\n\n // Text summary.\n const lines = [];\n const name = title ? `Table \"${clipString(title, 80)}\"` : \"Table\";\n const shape = `${count(total, \"row\")}, ${count(fields.length, \"column\")}`;\n lines.push(`${name} (${shape}${shown < total ? `; ${shown.toLocaleString(\"en-US\")} shown` : \"\"})`);\n if (fields.length) {\n lines.push(shown < total ? `Columns (ranges over the first ${shown.toLocaleString(\"en-US\")} of ${total.toLocaleString(\"en-US\")} rows):` : \"Columns:\");\n const nameWidth = Math.min(30, Math.max(...fields.slice(0, TEXT_COLUMNS).map((f) => f.name.length)));\n const typeWidth = Math.max(...fields.slice(0, TEXT_COLUMNS).map((f) => f.type.length));\n fields.slice(0, TEXT_COLUMNS).forEach((f, i) => {\n const stats = columnStats(encoded, i, f.type);\n lines.push(` ${clipString(f.name, 30).padEnd(nameWidth)} ${f.type.padEnd(typeWidth)} ${stats}`.trimEnd());\n });\n if (fields.length > TEXT_COLUMNS) lines.push(` \u2026 ${count(fields.length - TEXT_COLUMNS, \"more column\")}`);\n const numbered = [\n ...textHeadRows.map((r, i) => [i, r]),\n ...textTail.map((r, i) => [total - textTail.length + i, r]),\n ];\n if (numbered.length) {\n lines.push(\"Rows:\");\n const table = textTable(fields.slice(0, TEXT_COLUMNS), numbered.map(([n, r]) => [n, r.slice(0, TEXT_COLUMNS)]));\n if (textTail.length) table.splice(textHeadRows.length, 0, \" \u2026\");\n lines.push(...table);\n }\n }\n let text = lines.join(\"\\n\");\n if (text.length > TEXT_MAX) text = `${text.slice(0, TEXT_MAX - 1)}\u2026`;\n\n /** @type {Record<string, unknown>} */\n const resource = { schema: { fields }, data, ganymede: { rows: total, shown } };\n if (title) resource.ganymede.title = title;\n if (shown < total) {\n // Not enumerable, so it never reaches the message.\n Object.defineProperty(resource, PAGEABLE, { value: { source, fields } });\n if (options.pager) pageTable({ [TABLE_MIME]: resource }, options.pager);\n }\n return {\n [TABLE_MIME]: resource,\n \"text/html\": htmlTable(fields, htmlHead, htmlTail, total, title),\n \"text/plain\": text,\n };\n}\n", "// @ts-self-types=\"./sql.d.mts\"\n// jupyter.sql (cdp-kernel#477, ganymede#747): a tagged template over an\n// in-memory DuckDB, whose results show as table output (table.mjs).\n//\n// const rows = await jupyter.sql`select * from trips where riders > ${min}`;\n//\n// Template values become bound parameters, never query text; sql.raw()\n// is the explicit way to put text in. One database per kernel, opened on\n// the first query, as ganymede-ui's DuckDB example does (ganymede-ui#559):\n// DuckDB's native build, @duckdb/node-api, on Node, Deno and Bun, and its\n// WebAssembly build in a Worker of its own in the browser target (the\n// apps' in-app kernel). The packages load through the cell's own import,\n// so npm: resolution and the browser target's CDN apply as in a cell.\n//\n// No static imports beyond table.mjs: this file must load in every target.\n\nimport { fieldsOf, tableBundle, tableSource, timeText, uniqueNames } from \"./table.mjs\";\n\nexport { timeText, uniqueNames };\n\nexport const NODE_API = \"npm:@duckdb/node-api@1.5.6-r.2\";\nexport const DUCKDB_WASM = \"npm:@duckdb/duckdb-wasm@1.29.0\";\n\nconst $display = Symbol.for(\"Jupyter.display\");\nconst RAW = Symbol(\"cdpk.sql.raw\");\n\n/** A value from DuckDB as plain JavaScript: safe bigints as numbers. */\nfunction jsValue(value, declared) {\n if (/^time(?!stamp)/i.test(declared ?? \"\") && (typeof value === \"bigint\" || typeof value === \"number\")) {\n return timeText(value, declared);\n }\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : value;\n if (typeof value === \"number\" && /^(date|timestamp)/i.test(declared ?? \"\")) return new Date(value);\n if (Array.isArray(value)) return value.map((v) => jsValue(v));\n if (value !== null && typeof value === \"object\" && !(value instanceof Date) && !ArrayBuffer.isView(value)) {\n if (typeof value.toJSON === \"function\" && !(Symbol.iterator in value) && Object.getPrototypeOf(value) !== Object.prototype) {\n return jsValue(value.toJSON());\n }\n if (typeof value.toArray === \"function\") return jsValue(Array.from(value.toArray()));\n const out = {};\n for (const [k, v] of Object.entries(value)) out[k] = jsValue(v);\n return out;\n }\n return value;\n}\n\n/**\n * An Arrow decimal's little-endian 32-bit words, scaled, as a number; with\n * no scale (HUGEINT), a bigint when a number can't hold it.\n */\nexport function decimalValue(words, scale) {\n if (typeof words === \"bigint\" && scale === 0) return jsValue(words);\n if (typeof words === \"number\" || typeof words === \"bigint\") return Number(words) / 10 ** scale;\n const list = Array.from(words);\n let big = 0n;\n list.forEach((w, i) => (big |= BigInt(w >>> 0) << BigInt(32 * i)));\n const bits = BigInt(32 * list.length);\n if (list.length && list.at(-1) >>> 31) big -= 1n << bits;\n return scale === 0 ? jsValue(big) : Number(big) / 10 ** scale;\n}\n\n/** A query's result: its columns and rows, shown as a table. */\nexport class SqlResult {\n /**\n * @param {{ name: string, type: string }[]} columns\n * @param {Record<string, unknown>[]} rows\n */\n constructor(columns, rows) {\n this.columns = columns;\n this.rows = rows;\n }\n /** table.mjs reads this instead of guessing at the shape. */\n toTableSource(names) {\n const columns = names ? this.columns.filter((c) => names.includes(c.name)) : this.columns;\n return {\n columns: columns.map((c) => ({ name: c.name, declared: c.type })),\n total: this.rows.length,\n read: (start, end) => this.rows.slice(start, end).map((row) => columns.map((c) => row[c.name])),\n };\n }\n [$display]() {\n return tableBundle(tableSource(this));\n }\n}\n\n/** A JavaScript value as a DuckDB parameter. */\nexport function toParam(value) {\n if (value === undefined) return null;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === \"object\" && value !== null && !ArrayBuffer.isView(value)) return JSON.stringify(value);\n return value;\n}\n\n/** Joins a template's strings with `?` for each value, inlining sql.raw(). */\nexport function compose(strings, values) {\n let text = strings[0];\n const params = [];\n values.forEach((value, i) => {\n if (value !== null && typeof value === \"object\" && RAW in value) text += value[RAW];\n else {\n text += \"?\";\n params.push(toParam(value));\n }\n text += strings[i + 1];\n });\n return { text, params };\n}\n\nexport function quoteIdent(name) {\n return `\"${String(name).replaceAll('\"', '\"\"')}\"`;\n}\n\nexport function quoteString(text) {\n return `'${String(text).replaceAll(\"'\", \"''\")}'`;\n}\n\n/**\n * A parameter (as toParam leaves it) as a SQL literal. A negative number\n * is parenthesized, since after a minus sign `-1` would make `--`, a\n * comment.\n */\nexport function sqlLiteral(value) {\n const text = literalText(value);\n return text.startsWith(\"-\") ? `(${text})` : text;\n}\n\nfunction literalText(value) {\n if (value === null || value === undefined) return \"NULL\";\n if (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n if (typeof value === \"bigint\") return `${value}`;\n if (typeof value === \"number\") {\n if (Number.isSafeInteger(value)) return String(value);\n return Number.isFinite(value) ? `${value}::DOUBLE` : `'${value}'::DOUBLE`;\n }\n if (value instanceof Uint8Array) {\n return `'${Array.from(value, (b) => `\\\\x${b.toString(16).padStart(2, \"0\")}`).join(\"\")}'::BLOB`;\n }\n if (ArrayBuffer.isView(value)) return `[${Array.from(value, (v) => sqlLiteral(v)).join(\", \")}]`;\n return quoteString(value);\n}\n\n/**\n * The query with each `?` placeholder replaced by its parameter as a\n * literal. A `?` inside a string, a quoted name or a comment is left as it\n * is. duckdb-wasm can cancel only an unprepared query, so it runs this.\n * Dollar-quoted (`$$\u2026$$`) and `E'\u2026'` strings and nested comments aren't\n * recognized: a `?` in one counts as a placeholder, and the count then\n * fails to match the parameters and throws.\n */\nexport function inlineParams(text, params) {\n if (params.length === 0) return text;\n let out = \"\";\n let next = 0;\n for (let i = 0; i < text.length; i++) {\n const c = text[i];\n const end =\n c === \"'\" || c === '\"' ? text.indexOf(c, i + 1) :\n c === \"-\" && text[i + 1] === \"-\" ? text.indexOf(\"\\n\", i) :\n c === \"/\" && text[i + 1] === \"*\" ? text.indexOf(\"*/\", i + 2) + 1 :\n undefined;\n if (end !== undefined) {\n // A doubled quote ('it''s') reads as two strings back to back.\n const stop = end < 0 || end === 0 ? text.length : end + 1;\n out += text.slice(i, stop);\n i = stop - 1;\n } else if (c === \"?\") {\n if (next >= params.length) throw new RangeError(\"jupyter.sql: more ? placeholders than parameters\");\n // A space after a quote, so 'a'? doesn't read as one string 'a''x'.\n if (out.endsWith(\"'\") || out.endsWith('\"')) out += \" \";\n out += sqlLiteral(params[next++]);\n } else out += c;\n }\n if (next < params.length) throw new RangeError(\"jupyter.sql: more parameters than ? placeholders\");\n return out;\n}\n\nconst DUCK_TYPES = {\n integer: \"BIGINT\",\n number: \"DOUBLE\",\n boolean: \"BOOLEAN\",\n string: \"VARCHAR\",\n date: \"DATE\",\n datetime: \"TIMESTAMP\",\n time: \"TIME\",\n array: \"JSON\",\n object: \"JSON\",\n duration: \"VARCHAR\",\n};\n\n/**\n * @param {{\n * importModule: (specifier: string) => Promise<any>,\n * signal?: () => AbortSignal | undefined,\n * openEngine?: () => Promise<Engine>,\n * }} options\n *\n * @typedef {{\n * query: (text: string, params: unknown[]) => Promise<SqlResult>,\n * interrupt?: () => void,\n * close: () => Promise<void>,\n * connection: unknown,\n * }} Engine\n */\nexport function createSql({ importModule, signal, openEngine }) {\n let engine = null;\n const open = () => (engine ??= (openEngine ?? (() => defaultEngine(importModule)))().catch((err) => {\n engine = null;\n throw err;\n }));\n\n async function run(text, params) {\n // The cell's signal, read before the first open's wait, so a cell that\n // starts meanwhile doesn't take the query over.\n const s = signal?.();\n const e = await open();\n if (s?.aborted) throw s.reason;\n const onAbort = () => e.interrupt?.();\n s?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n return await e.query(text, params);\n } finally {\n s?.removeEventListener(\"abort\", onAbort);\n }\n }\n\n function sql(strings, ...values) {\n if (!Array.isArray(strings) || !Array.isArray(strings.raw)) {\n return Promise.reject(new TypeError(\"jupyter.sql is a tag: jupyter.sql`select ...`; for a string, use jupyter.sql.query(text, params)\"));\n }\n const { text, params } = compose(strings, values);\n return run(text, params);\n }\n\n sql.query = (text, params = []) => {\n if (typeof text !== \"string\") return Promise.reject(new TypeError(\"jupyter.sql.query: text must be a string\"));\n return run(text, params.map(toParam));\n };\n\n sql.raw = (text) => ({ [RAW]: String(text) });\n\n sql.load = async (name, source) => {\n if (typeof name !== \"string\" || name === \"\") throw new TypeError(\"jupyter.sql.load: name must be a non-empty string\");\n const table = quoteIdent(name);\n if (typeof source === \"string\") {\n await run(`create or replace table ${table} as select * from ${quoteString(source)}`, []);\n return;\n }\n const { structure, json } = rowsAsJson(source);\n if (structure === null) {\n throw new TypeError(\"jupyter.sql.load: the rows have no columns\");\n }\n await run(\n `create or replace table ${table} as select unnest(from_json(?, ?), recursive := true)`,\n [json, structure],\n );\n };\n\n sql.close = async () => {\n const e = engine;\n engine = null;\n if (e) await (await e).close();\n };\n\n sql.connection = async () => (await open()).connection;\n\n return sql;\n}\n\n/** A value as JSON for loading: nothing clipped, unlike a table's display. */\nfunction loadValue(value, type, depth = 0) {\n if (value === null || value === undefined) return null;\n if (type === \"date\" || type === \"datetime\") {\n const d = value instanceof Date ? value : typeof value === \"number\" || typeof value === \"bigint\" ? new Date(Number(value)) : null;\n if (d) return Number.isNaN(d.getTime()) ? null : type === \"date\" ? d.toISOString().slice(0, 10) : d.toISOString();\n }\n if (typeof value === \"bigint\") return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n // DOUBLE takes no \"NaN\" text from JSON; null instead.\n if (typeof value === \"number\") return Number.isFinite(value) ? value : null;\n if (typeof value !== \"object\") return value;\n if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();\n if (depth > 64) throw new TypeError(\"jupyter.sql.load: a value is nested more than 64 levels deep\");\n if (ArrayBuffer.isView(value) && !(value instanceof DataView) && value.BYTES_PER_ELEMENT === 1) {\n // Bytes as base64 text: JSON has no binary.\n let text = \"\";\n for (const byte of value) text += String.fromCharCode(byte);\n return btoa(text);\n }\n if (Array.isArray(value) || ArrayBuffer.isView(value)) return Array.from(value, (v) => loadValue(v, undefined, depth + 1));\n if (typeof value.toJSON === \"function\" && Object.getPrototypeOf(value) !== Object.prototype) {\n return loadValue(value.toJSON(), undefined, depth + 1);\n }\n const out = {};\n for (const [k, v] of Object.entries(value)) out[k] = loadValue(v, undefined, depth + 1);\n return out;\n}\n\n/** Rows, an Arrow table or a DataFrame as JSON and a from_json structure. */\nexport function rowsAsJson(source) {\n const src = tableSource(source);\n const raw = src.read(0, src.total);\n const fields = fieldsOf(src, raw);\n if (fields.length === 0) return { structure: null, json: \"[]\" };\n const rows = raw.map((r) => {\n const obj = {};\n fields.forEach((f, i) => {\n obj[f.name] = loadValue(r[i], f.type);\n });\n return obj;\n });\n const structure = {};\n for (const f of fields) structure[f.name] = DUCK_TYPES[f.type] ?? \"VARCHAR\";\n return { structure: JSON.stringify([structure]), json: JSON.stringify(rows) };\n}\n\nfunction inWorker() {\n return typeof globalThis.WorkerGlobalScope === \"function\" && globalThis instanceof globalThis.WorkerGlobalScope;\n}\n\nfunction hasNativeRuntime() {\n return typeof globalThis.Deno?.version?.deno === \"string\" || typeof globalThis.Bun?.version === \"string\" ||\n typeof globalThis.process?.versions?.node === \"string\" && !inWorker();\n}\n\nasync function defaultEngine(importModule) {\n if (hasNativeRuntime()) return nativeEngine(importModule);\n if (inWorker() && typeof Worker === \"function\") return wasmEngine(importModule);\n throw new Error(\"jupyter.sql needs Node, Deno, Bun or the browser target; workerd and celld have no DuckDB\");\n}\n\nasync function nativeEngine(importModule) {\n const { DuckDBInstance, blobValue } = await importModule(NODE_API);\n const db = await DuckDBInstance.create(\":memory:\");\n const conn = await db.connect();\n return {\n connection: conn,\n interrupt: () => conn.interrupt?.(),\n async query(text, params) {\n // Bytes need a declared BLOB; the rest bind by their JavaScript type.\n const bound = params.map((p) => (p instanceof Uint8Array && blobValue ? blobValue(p) : p));\n const result = await conn.runAndReadAll(text, bound);\n const types = result.columnTypes();\n const columns = uniqueNames(result.columnNames()).map((name, i) => ({ name, type: String(types[i]) }));\n // By position, as two columns may share a name.\n const rows = result.getRowsJS().map((row) => {\n const out = {};\n columns.forEach((c, j) => (out[c.name] = jsValue(row[j], c.type)));\n return out;\n });\n return new SqlResult(columns, rows);\n },\n async close() {\n conn.closeSync?.();\n db.closeSync?.();\n },\n };\n}\n\nasync function wasmEngine(importModule) {\n const duckdb = await importModule(DUCKDB_WASM);\n const bundle = await duckdb.selectBundle(duckdb.getJsDelivrBundles());\n // A Worker can only start from its own origin's scripts, so a Blob\n // script loads DuckDB's.\n const loader = URL.createObjectURL(new Blob([`importScripts(${JSON.stringify(bundle.mainWorker)});`], { type: \"text/javascript\" }));\n const worker = new Worker(loader);\n const db = new duckdb.AsyncDuckDB(new duckdb.VoidLogger(), worker);\n await db.instantiate(bundle.mainModule, bundle.pthreadWorker);\n URL.revokeObjectURL(loader);\n const conn = await db.connect();\n let cancelled = false;\n return {\n connection: conn,\n interrupt: () => {\n cancelled = true;\n void conn.cancelSent?.();\n },\n async query(text, params) {\n // send() streams the result, which cancelSent() can stop; query()\n // runs to the end in the worker whatever is asked of it, and so\n // does a prepared statement's send(). So the parameters go into the\n // text as literals, and the batch loop stops on an interrupt too.\n cancelled = false;\n const reader = await conn.send(inlineParams(text, params), true);\n const stop = () => {\n if (cancelled) throw new DOMException(\"The query was interrupted\", \"AbortError\");\n };\n try {\n stop();\n const columns = [];\n const rows = [];\n let decimal = [];\n for await (const batch of reader) {\n if (columns.length === 0 && batch.schema.fields.length) {\n const fields = batch.schema.fields;\n uniqueNames(fields.map((f) => f.name)).forEach((name, j) => columns.push({ name, type: String(fields[j].type) }));\n // Arrow gives a DECIMAL as its 128-bit words; DuckDB's native\n // build gives a number, so this does too.\n decimal = fields.map((f) => (/^decimal/i.test(String(f.type)) ? f.type.scale ?? 0 : null));\n }\n stop();\n const vectors = columns.map((_, j) => batch.getChildAt(j));\n for (let i = 0; i < batch.numRows; i++) {\n const row = {};\n columns.forEach((c, j) => {\n const v = vectors[j]?.get(i);\n row[c.name] = decimal[j] !== null && v != null ? decimalValue(v, decimal[j]) : jsValue(v, c.type);\n });\n rows.push(row);\n }\n }\n if (columns.length === 0 && reader.schema?.fields) {\n const fields = reader.schema.fields;\n uniqueNames(fields.map((f) => f.name)).forEach((name, j) => columns.push({ name, type: String(fields[j].type) }));\n }\n return new SqlResult(columns, rows);\n } catch (err) {\n await Promise.resolve((reader.cancel ?? reader.return)?.call(reader)).catch(() => {});\n throw err;\n }\n },\n async close() {\n await conn.close();\n await db.terminate();\n worker.terminate();\n },\n };\n}\n", "// @ts-self-types=\"./chart.d.mts\"\n// jupyter.chart (cdp-kernel#479, ganymede#747): a Vega-Lite (or Vega) spec,\n// or Observable Plot options, drawn in the kernel as one SVG with its\n// legend and title inside, plus a text summary. An SVG shows the same in\n// every reader: the Ganymede apps, JupyterLab, VS Code, a published page,\n// and an agent that gets it as a PNG. Plot draws a categorical legend as\n// HTML beside its SVG, so the legend is drawn here instead, from the\n// plot's color scale.\n//\n// vega, vega-lite and linkedom (Plot's DOM where there is none) load\n// through the cell's own import on first use, as jupyter.sql's DuckDB\n// does, so nothing loads for a notebook that draws no chart.\n//\n// No static imports: this file must load in every target.\n\nexport const VEGA = \"npm:vega@6\";\nexport const VEGA_LITE = \"npm:vega-lite@6\";\nexport const LINKEDOM = \"npm:linkedom@0.18\";\n/** Past this much SVG, jupyter.chart warns: aggregate or sample first. */\nexport const WARN_BYTES = 2_000_000;\n\nconst $display = Symbol.for(\"Jupyter.display\");\n/** Plot scales with a legend option, besides color. */\nconst OTHER_LEGENDS = [\"opacity\", \"r\", \"symbol\"];\nconst FONT = \"system-ui, sans-serif\";\n\nconst rawToEntity = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" };\nconst esc = (s) => String(s).replace(/[&<>\"']/g, (c) => rawToEntity[c]);\n\nfunction isObject(value) {\n return value !== null && typeof value === \"object\";\n}\n\n/** Plot's module: it has plot() and mark factories. */\nexport function isPlotModule(value) {\n return (isObject(value) || typeof value === \"function\") && typeof value.plot === \"function\" &&\n typeof value.barY === \"function\";\n}\n\n/** Keys one of which every Vega-Lite or Vega spec has. */\nconst SPEC_KEYS = [\"$schema\", \"mark\", \"marks\", \"layer\", \"spec\", \"concat\", \"hconcat\", \"vconcat\", \"facet\", \"repeat\"];\n\n/** A spec object, or anything with toSpec() (vega-lite-api). */\nexport function specOf(value) {\n const spec = isObject(value) && typeof value.toSpec === \"function\" ? value.toSpec() : value;\n if (!isObject(spec) || Array.isArray(spec) || !SPEC_KEYS.some((key) => key in spec)) {\n throw new TypeError(\n \"jupyter.chart takes a Vega-Lite or Vega spec, the Plot module and Plot options, or an SVG element\",\n );\n }\n return spec;\n}\n\n/** An SVG element already drawn, such as Plot's output without a legend. */\nexport function isSvgElement(value) {\n return isObject(value) && typeof value.outerHTML === \"string\" && /^<svg\\b/i.test(value.outerHTML);\n}\n\nexport function isVegaSpec(spec) {\n return typeof spec.$schema === \"string\" && /\\/schema\\/vega\\/v\\d/.test(spec.$schema);\n}\n\n// --- SVG helpers --------------------------------------------------------------\n\n/** An SVG's width and height from its attributes or viewBox. */\nexport function svgSize(svg) {\n const open = /<svg\\b[^>]*>/i.exec(svg)?.[0] ?? \"\";\n const attr = (name) => {\n const m = new RegExp(`\\\\s${name}=\"([^\"]*)\"`, \"i\").exec(open);\n return m ? m[1] : undefined;\n };\n let width = parseFloat(attr(\"width\") ?? \"\");\n let height = parseFloat(attr(\"height\") ?? \"\");\n const box = attr(\"viewBox\")?.trim().split(/[\\s,]+/).map(Number);\n if (!Number.isFinite(width) && box?.length === 4) width = box[2];\n if (!Number.isFinite(height) && box?.length === 4) height = box[3];\n return { width: Number.isFinite(width) ? width : 640, height: Number.isFinite(height) ? height : 400 };\n}\n\n/** The SVG with the namespace an <img> needs (an HTML DOM leaves it out). */\nexport function withNamespace(svg) {\n return /<svg\\b[^>]*\\sxmlns=/i.test(svg) ? svg : svg.replace(/<svg\\b/i, '<svg xmlns=\"http://www.w3.org/2000/svg\"');\n}\n\n/** A short FNV-1a hash of `text`, in base 36. */\nfunction hash(text) {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) h = Math.imul(h ^ text.charCodeAt(i), 0x01000193);\n return (h >>> 0).toString(36);\n}\n\nconst textWidth = (text, size) => String(text).length * size * 0.6;\n\n/**\n * A legend for a color scale, as SVG: swatches for a categorical scale,\n * a ramp for a continuous one, or the form `form` names (\"swatches\" or\n * \"ramp\", as Plot's `legend` option does). `scale` is Plot's scale\n * description.\n */\nexport function legendSVG(scale, width, form) {\n if (!isObject(scale) || typeof scale.apply !== \"function\" || !Array.isArray(scale.domain)) return { svg: \"\", height: 0 };\n const label = typeof scale.label === \"string\" && scale.label ? scale.label : \"\";\n const parts = [];\n let y = 0;\n if (label) {\n parts.push(`<text x=\"0\" y=\"10\" font-weight=\"bold\">${esc(label)}</text>`);\n y = 16;\n }\n const continuous = form === \"ramp\" ||\n (form !== \"swatches\" &&\n /^(linear|log|pow|sqrt|symlog|utc|time|sequential|diverging|quantize|threshold|quantile)/.test(String(scale.type)));\n if (!continuous) {\n let x = 0;\n let row = y;\n for (const value of scale.domain) {\n const text = String(value);\n const w = 14 + textWidth(text, 10) + 12;\n if (x > 0 && x + w > width) {\n x = 0;\n row += 16;\n }\n parts.push(\n `<rect x=\"${x}\" y=\"${row}\" width=\"10\" height=\"10\" fill=\"${esc(scale.apply(value))}\"/>` +\n `<text x=\"${x + 14}\" y=\"${row + 9}\">${esc(text)}</text>`,\n );\n x += w;\n }\n return { svg: parts.join(\"\"), height: row + 14 };\n }\n const [lo, hi] = [scale.domain[0], scale.domain.at(-1)];\n const n = 16;\n const stops = [];\n // Plot's interpolator runs over the scale's output (its range), so\n // sampling it spaces a log or sqrt scale's colors as the chart does;\n // without one, step through the domain, Dates as their times.\n const range = Array.isArray(scale.range) && scale.range.length >= 2 && scale.range.every((r) => typeof r === \"number\")\n ? [scale.range[0], scale.range.at(-1)]\n : undefined;\n const numeric = (v) => (v instanceof Date ? v.getTime() : typeof v === \"number\" ? v : NaN);\n const [a, b] = [numeric(lo), numeric(hi)];\n for (let i = 0; i <= n; i++) {\n const t = i / n;\n let color;\n if (typeof scale.interpolate === \"function\" && range) color = scale.interpolate(range[0] + (range[1] - range[0]) * t);\n else if (Number.isFinite(a) && Number.isFinite(b)) {\n const v = a + (b - a) * t;\n color = scale.apply(lo instanceof Date ? new Date(v) : v);\n } else color = scale.apply(i === 0 ? lo : hi);\n stops.push(`<stop offset=\"${t * 100}%\" stop-color=\"${esc(color)}\"/>`);\n }\n // From the stops, so the same chart gives the same SVG on every run.\n const id = `ramp-${hash(stops.join(\"\"))}`;\n const rampWidth = Math.min(240, width);\n const fmt = (v) => (v instanceof Date ? v.toISOString().slice(0, 10) : typeof v === \"number\" ? String(Number(v.toPrecision(4))) : String(v));\n parts.push(\n `<defs><linearGradient id=\"${id}\">${stops.join(\"\")}</linearGradient></defs>` +\n `<rect x=\"0\" y=\"${y}\" width=\"${rampWidth}\" height=\"10\" fill=\"url(#${id})\"/>` +\n `<text x=\"0\" y=\"${y + 22}\">${esc(fmt(lo))}</text>` +\n `<text x=\"${rampWidth}\" y=\"${y + 22}\" text-anchor=\"end\">${esc(fmt(hi))}</text>`,\n );\n return { svg: parts.join(\"\"), height: y + 26 };\n}\n\n/**\n * Plot's SVG with a title, subtitle, legend and caption around it, all in\n * one SVG.\n */\nexport function composeSVG(inner, { title, subtitle, caption, legend }) {\n const { width, height } = svgSize(inner);\n const head = [];\n let y = 0;\n if (title) {\n head.push(`<text x=\"0\" y=\"${y + 16}\" font-size=\"16\" font-weight=\"bold\">${esc(title)}</text>`);\n y += 24;\n }\n if (subtitle) {\n head.push(`<text x=\"0\" y=\"${y + 13}\" font-size=\"13\">${esc(subtitle)}</text>`);\n y += 20;\n }\n if (legend?.svg) {\n head.push(`<g transform=\"translate(0,${y})\" font-size=\"10\">${legend.svg}</g>`);\n y += legend.height + 8;\n }\n const body = withNamespace(inner).replace(/<svg\\b/i, `<svg x=\"0\" y=\"${y}\"`);\n let total = y + height;\n let foot = \"\";\n if (caption) {\n foot = `<text x=\"0\" y=\"${total + 16}\" font-size=\"12\">${esc(caption)}</text>`;\n total += 24;\n }\n return (\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${total}\" viewBox=\"0 0 ${width} ${total}\" ` +\n `font-family=\"${FONT}\" fill=\"currentColor\">${head.join(\"\")}${body}${foot}</svg>`\n );\n}\n\n// --- Summaries ----------------------------------------------------------------\n\nfunction markName(mark) {\n if (typeof mark?.ariaLabel === \"string\" && mark.ariaLabel) return mark.ariaLabel;\n return mark?.constructor?.name?.toLowerCase() ?? \"mark\";\n}\n\nfunction describeScale(name, scale) {\n if (!isObject(scale)) return null;\n const label = typeof scale.label === \"string\" && scale.label ? scale.label : \"\";\n const domain = Array.isArray(scale.domain) ? scale.domain : [];\n let range = \"\";\n if (domain.length && domain.every((v) => typeof v === \"number\" || v instanceof Date) && !/ordinal|band|point/.test(scale.type)) {\n const fmt = (v) => (v instanceof Date ? v.toISOString().slice(0, 10) : String(Number(v.toPrecision(4))));\n range = `${fmt(domain[0])} to ${fmt(domain.at(-1))}`;\n } else if (domain.length) {\n range = `${domain.length} ${domain.length === 1 ? \"value\" : \"values\"}`;\n }\n const details = [scale.type, range].filter(Boolean).join(\", \");\n return `${name}${label ? `=${label}` : \"\"}${details ? ` (${details})` : \"\"}`;\n}\n\n/** A few lines about a Plot chart, for readers that can't see it. */\nexport function summarizePlot(element, options) {\n const marks = (Array.isArray(options.marks) ? options.marks.flat(Infinity) : []).filter(isObject);\n const names = [...new Set(marks.map(markName))];\n const scales = [\"x\", \"y\", \"fx\", \"fy\", \"color\", \"r\", \"opacity\", \"symbol\"]\n .map((name) => (typeof element?.scale === \"function\" ? describeScale(name, element.scale(name)) : null))\n .filter(Boolean);\n const rows = marks.map((m) => (Array.isArray(m.data) ? m.data.length : typeof m.data?.length === \"number\" ? m.data.length : 0));\n const most = rows.length ? Math.max(...rows) : 0;\n const title = typeof options.title === \"string\" && options.title ? ` \"${options.title}\"` : \"\";\n const parts = [...scales];\n if (most) parts.push(`${most} ${most === 1 ? \"row\" : \"rows\"}`);\n return `Plot ${names.length ? `${names.join(\", \")} ` : \"\"}chart${title}${parts.length ? `: ${parts.join(\", \")}` : \"\"}`;\n}\n\n// --- Vega's defaults, for a chart on any background ----------------------------\n\nconst INK = \"currentColor\";\n/**\n * Text and lines in `currentColor`, on no background: the page's text\n * color when the SVG is inline, and in the Ganymede apps, which give an\n * SVG image the page's color. In a plain <img> it is black.\n */\nexport const VEGA_CONFIG = {\n background: \"transparent\",\n axis: { labelColor: INK, titleColor: INK, domainColor: INK, tickColor: INK, gridColor: INK, gridOpacity: 0.15 },\n legend: { labelColor: INK, titleColor: INK },\n title: { color: INK, subtitleColor: INK },\n header: { labelColor: INK, titleColor: INK },\n view: { stroke: null },\n};\n\nfunction mergeConfig(base, own) {\n if (!isObject(own)) return base;\n const out = { ...base };\n for (const [key, value] of Object.entries(own)) {\n out[key] = isObject(value) && isObject(base[key]) && !Array.isArray(value) ? mergeConfig(base[key], value) : value;\n }\n return out;\n}\n\n// --- The helper -----------------------------------------------------------------\n\n/**\n * @param {{\n * importModule: (specifier: string) => Promise<any>,\n * summarizeSpec?: (spec: object) => string | undefined,\n * warn?: (message: string) => void,\n * }} options\n */\nexport function createChart({ importModule, summarizeSpec, warn = (m) => console.warn(m) }) {\n let dom;\n async function document() {\n if (globalThis.document && typeof globalThis.document.createElementNS === \"function\") return globalThis.document;\n // A failed load isn't kept, so the next chart tries again.\n dom ??= importModule(LINKEDOM)\n .then(({ parseHTML }) => parseHTML(\"<!doctype html><html><body></body></html>\").document)\n .catch((err) => {\n dom = undefined;\n throw err;\n });\n return dom;\n }\n\n async function renderVega(spec, options) {\n const keepSpec = isObject(options) && options.spec === true;\n const [vega, vl] = await Promise.all([importModule(VEGA), isVegaSpec(spec) ? null : importModule(VEGA_LITE)]);\n const config = mergeConfig(VEGA_CONFIG, spec.config);\n const vgSpec = vl ? vl.compile({ ...spec, config }).spec : { ...spec, config };\n const view = new vega.View(vega.parse(vgSpec), { renderer: \"none\" });\n let svg;\n try {\n svg = await view.toSVG();\n } finally {\n view.finalize();\n }\n const bundle = { \"image/svg+xml\": withNamespace(svg) };\n const summary = summarizeSpec?.({ $schema: \"https://vega.github.io/schema/vega-lite/v5.json\", ...spec });\n if (summary) bundle[\"text/plain\"] = summary;\n if (keepSpec) {\n const v4 = /\\/schema\\/vega-lite\\/v4/.test(String(spec.$schema));\n bundle[vl ? (v4 ? \"application/vnd.vegalite.v4+json\" : \"application/vnd.vegalite.v5+json\") : \"application/vnd.vega.v5+json\"] = spec;\n }\n return bundle;\n }\n\n async function renderPlot(Plot, options) {\n if (!isObject(options)) throw new TypeError(\"jupyter.chart(Plot, options): options must be Plot's options object\");\n const { title, subtitle, caption, ...rest } = options;\n const color = isObject(rest.color) ? rest.color : undefined;\n const wantLegend = Boolean(color?.legend);\n const plotOptions = { ...rest, document: await document(), figure: false };\n if (color) plotOptions.color = { ...color, legend: false };\n // Only the color legend is drawn; Plot would put the others in an\n // HTML figure, which a reader that shows only images drops.\n const others = OTHER_LEGENDS.filter((name) => isObject(rest[name]) && rest[name].legend);\n if (others.length) {\n warn(`jupyter.chart draws only a color legend; the ${others.join(\", \")} legend is left out`);\n }\n const element = Plot.plot(plotOptions);\n const inner = element.outerHTML;\n const { width } = svgSize(inner);\n const scale = wantLegend && typeof element.scale === \"function\" ? element.scale(\"color\") : undefined;\n const form = color?.legend === \"ramp\" || color?.legend === \"swatches\" ? color.legend : undefined;\n const legend = scale ? legendSVG({ ...scale, label: scale.label ?? color.label }, width, form) : undefined;\n const svg = composeSVG(inner, { title, subtitle, caption, legend });\n return { \"image/svg+xml\": withNamespace(svg), \"text/plain\": summarizePlot(element, options) };\n }\n\n function chart(first, second) {\n // Checked now, so a wrong argument fails the call.\n const spec = isPlotModule(first) || isSvgElement(first) ? undefined : specOf(first);\n if (isPlotModule(first) && !isObject(second)) {\n throw new TypeError(\"jupyter.chart(Plot, options): options must be Plot's options object\");\n }\n if (isSvgElement(first)) {\n const bundle = { \"image/svg+xml\": withNamespace(first.outerHTML) };\n return { [$display]: () => bundle };\n }\n let pending;\n const render = () =>\n (pending ??= (async () => {\n const bundle = spec ? await renderVega(spec, second) : await renderPlot(first, second);\n const size = bundle[\"image/svg+xml\"].length;\n if (size > WARN_BYTES) {\n warn(\n `jupyter.chart: the SVG is ${(size / 1e6).toFixed(1)} MB, which makes the notebook large; ` +\n \"aggregate or sample the data first\",\n );\n }\n return bundle;\n })().catch((err) => {\n // Not kept, so displaying the chart again retries.\n pending = undefined;\n throw err;\n }));\n return { [$display]: render };\n }\n\n return chart;\n}\n", "// @ts-self-types=\"./table-paging.d.mts\"\n// Paging a table through the kernel (ganymede#747): a table output embeds\n// at most `limit` rows; past that, the frontend asks the kernel for the\n// rest over a comm, a page at a time, sorted by a column if it likes.\n//\n// A table cut by the cap is kept here under an id, which the output names\n// as `ganymede.page`. The frontend opens a comm to PAGE_TARGET with\n// `{ id }` and sends `{ request, offset, limit, sort? }`; the kernel answers\n// `{ request, offset, total, rows }`, rows as arrays in field order and\n// encoded as the embedded rows are, or `{ request, error }`. An id the\n// kernel no longer has (it restarted, or the table was evicted) gets\n// `{ error }` and the comm closes, and the frontend keeps to the rows the\n// output embeds.\n//\n// The kernel keeps the last KEEP tables shown, so a notebook that draws\n// many doesn't hold every one; an update of a display keeps its id. Each\n// request looks its table up again, so an open comm doesn't keep an\n// evicted table alive. Sorting reads the whole column, so it is offered up\n// to MAX_SORT rows; the last SORTS orders are kept, so flipping a column's\n// direction doesn't sort again.\n//\n// A table is the live value, not a copy: change it in a later cell and\n// its pages show the change (run the cell again to match).\n\nimport { encodeRow, encodeValue } from \"./table.mjs\";\n\nexport const PAGE_TARGET = \"ganymede.table.v1\";\nexport const KEEP = 16;\nexport const MAX_PAGE = 1000;\nexport const MAX_SORT = 1_000_000;\nconst CHUNK = 10_000;\nconst SORTS = 2;\n\nconst NUMERIC = new Set([\"integer\", \"number\"]);\nconst INTEGER_TEXT = /^-?\\d+$/;\n\nfunction sortNumber(value) {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\" && value.trim() !== \"\") return Number(value);\n return Number.NaN;\n}\n\nfunction textOf(value) {\n if (value === null || value === undefined) return \"null\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return JSON.stringify(value);\n}\n\nconst collator = new Intl.Collator(undefined, { numeric: true });\n\n/**\n * Compares two encoded values of a column, as the Ganymede apps' table does:\n * nulls, and values that aren't numbers in a numeric column (such as\n * \"NaN\"), last in either direction; integers past 2^53, sent as strings,\n * exactly.\n */\nexport function compareEncoded(a, b, type, descending = false) {\n const numeric = NUMERIC.has(type) || (typeof a === \"number\" && typeof b === \"number\");\n const last = (v) => v === null || v === undefined || (numeric && Number.isNaN(sortNumber(v)));\n const aLast = last(a);\n const bLast = last(b);\n if (aLast || bLast) return aLast === bLast ? 0 : aLast ? 1 : -1;\n const sign = descending ? -1 : 1;\n if (numeric) {\n if (typeof a === \"string\" && typeof b === \"string\" && INTEGER_TEXT.test(a) && INTEGER_TEXT.test(b)) {\n const x = BigInt(a);\n const y = BigInt(b);\n return sign * (x < y ? -1 : x > y ? 1 : 0);\n }\n return sign * (sortNumber(a) - sortNumber(b));\n }\n if (typeof a === \"boolean\" && typeof b === \"boolean\") return sign * (Number(a) - Number(b));\n return sign * collator.compare(textOf(a), textOf(b));\n}\n\n/**\n * Keeps tables for paging and answers the frontend's comm.\n * @param {import(\"./comm.d.mts\").CommApi} commApi\n * @param {{ keep?: number, newId?: () => string }} [options]\n */\nexport function createTablePager(commApi, { keep = KEEP, newId = () => crypto.randomUUID() } = {}) {\n /** id -> { source, fields, key?, orders: Map<sortKey, index> } */\n const tables = new Map();\n /** display id -> table id */\n const keyed = new Map();\n\n function register(source, fields, key) {\n let id = key === undefined ? undefined : keyed.get(key);\n if (id === undefined || !tables.has(id)) id = newId();\n if (key !== undefined) keyed.set(key, id);\n tables.delete(id);\n tables.set(id, { source, fields, key, orders: new Map() });\n while (tables.size > keep) {\n const [oldest, entry] = tables.entries().next().value;\n tables.delete(oldest);\n if (entry.key !== undefined && keyed.get(entry.key) === oldest) keyed.delete(entry.key);\n }\n return id;\n }\n\n function encodeRows(entry, raw) {\n return raw.map((r) => encodeRow(entry.source, entry.fields, r));\n }\n\n /** Row indexes in sorted order, kept for the last SORTS sorts asked for. */\n function orderFor(entry, column, descending) {\n const key = `${column}\\u0000${descending}`;\n const kept = entry.orders.get(key);\n if (kept) return kept;\n const { source, fields } = entry;\n const c = fields.findIndex((f) => f.name === column);\n if (c < 0) throw new Error(`no column ${JSON.stringify(column)}`);\n if (source.total > MAX_SORT) throw new Error(`sorting is offered up to ${MAX_SORT.toLocaleString(\"en-US\")} rows`);\n const type = fields[c].type;\n const declared = source.columns[c].declared;\n const values = new Array(source.total);\n for (let start = 0; start < source.total; start += CHUNK) {\n const raw = source.read(start, Math.min(start + CHUNK, source.total));\n raw.forEach((r, i) => (values[start + i] = encodeValue(r[c], type, declared)));\n }\n const index = Array.from({ length: source.total }, (_, i) => i);\n // Array sort is stable: ties keep the source's order.\n index.sort((i, j) => compareEncoded(values[i], values[j], type, descending));\n entry.orders.set(key, index);\n while (entry.orders.size > SORTS) entry.orders.delete(entry.orders.keys().next().value);\n return index;\n }\n\n function page(entry, { offset, limit, sort }) {\n const { source } = entry;\n const start = Math.max(0, Math.min(offset, source.total));\n const end = Math.min(source.total, start + Math.min(limit, MAX_PAGE));\n if (!sort) return encodeRows(entry, source.read(start, end));\n const index = orderFor(entry, String(sort.column), sort.descending === true).slice(start, end);\n // Sorted rows are scattered in the source: read each run of\n // neighbouring rows at once (a run is the whole page when the sort\n // keeps the source's order).\n const rows = [];\n for (let i = 0; i < index.length; ) {\n let j = i + 1;\n while (j < index.length && index[j] === index[j - 1] + 1) j++;\n rows.push(...source.read(index[i], index[j - 1] + 1));\n i = j;\n }\n return encodeRows(entry, rows);\n }\n\n const gone = \"The kernel no longer has this table: run the cell again to page through it.\";\n\n commApi.registerTarget(PAGE_TARGET, (comm, msg) => {\n const id = msg.data?.id;\n if (typeof id !== \"string\" || !tables.has(id)) {\n comm.send({ error: gone });\n comm.close();\n return;\n }\n comm.onMsg(({ data }) => {\n const request = data?.request;\n // Looked up each time: the comm holds the id, not the table.\n const entry = tables.get(id);\n if (!entry) {\n comm.send({ request, error: gone });\n comm.close();\n return;\n }\n const offset = data?.offset;\n const limit = data?.limit ?? MAX_PAGE;\n if (!Number.isInteger(offset) || offset < 0 || !Number.isInteger(limit) || limit < 1) {\n comm.send({ request, error: \"offset and limit must be whole numbers\" });\n return;\n }\n try {\n const rows = page(entry, { offset, limit, sort: data?.sort ?? undefined });\n comm.send({ request, offset, total: entry.source.total, rows });\n } catch (err) {\n comm.send({ request, error: err instanceof Error ? err.message : String(err) });\n }\n });\n });\n\n return { register, size: () => tables.size };\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, JPEG/PNG bytes, HTML/SVG elements) are\n// unchanged; Polars-style DataFrames show through table.mjs instead (#475),\n// as do Arrow tables and DuckDB results. The Deno internals it used are\n// 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, widgets, tables, SQL and charts (jupyter.comm,\n// jupyter.widget, jupyter.table, jupyter.sql, jupyter.chart) are additions\n// Deno doesn't have; see comm.mjs, widget.mjs, table.mjs, sql.mjs and\n// chart.mjs.\n\nimport { createComms } from \"./comm.mjs\";\nimport { createHost } from \"./host.mjs\";\nimport { createWidgetFactory } from \"./widget.mjs\";\nimport { createSql } from \"./sql.mjs\";\nimport { createChart } from \"./chart.mjs\";\nimport { isTableLike, pageTable, tableBundle, tableSource } from \"./table.mjs\";\nimport { createTablePager } from \"./table-paging.mjs\";\n\nexport const $display = Symbol.for(\"Jupyter.display\");\n\nconst rawToEntity = new Map([\n [\"&\", \"&amp;\"],\n [\"<\", \"&lt;\"],\n [\">\", \"&gt;\"],\n ['\"', \"&quot;\"],\n [\"'\", \"&#39;\"],\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 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 * params?: () => string | undefined,\n * }} host\n */\n/** The MIME type of a named result (cdp-kernel#456): `{ name, value }`. */\nexport const RESULT_MIME = \"application/vnd.ganymede.result+json\";\n\nfunction deepFreeze(value) {\n if (typeof value === \"object\" && value !== null) {\n for (const v of Object.values(value)) deepFreeze(v);\n Object.freeze(value);\n }\n return value;\n}\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 // Arrow tables, Polars DataFrames and DuckDB results (#475).\n if (isTableLike(obj)) return tableBundle(tableSource(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 // jupyter.table (#475): rows and columns as Ganymede's table output,\n // built now so a bad value fails the call, not the display.\n function table(value, options = {}) {\n const bundle = tableBundle(tableSource(value, options), options);\n return { [$display]: () => bundle };\n }\n\n function broadcast(msgType, content, { metadata = {}, buffers = [] } = {}) {\n host.send(msgType, content, metadata, buffers);\n }\n\n // Set below, once the comms are: a table cut by the cap is kept for\n // paging when it is sent as an output, not when it is formatted.\n let pager;\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: pageTable(bundle, pager, options.display_id),\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: pageTable(await format(result), pager),\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 // jupyter.params (cdp-kernel#456): the run's parameters, which the host\n // (ganymede execute -p) passes as JSON in GANYMEDE_PARAMS. Parsed on first\n // read, so a bad value fails the cell that reads it, not the kernel.\n let params;\n function readParams() {\n if (params !== undefined) return params;\n const text = host.params?.();\n if (text === undefined || text === \"\") return (params = Object.freeze({}));\n let value;\n try {\n value = JSON.parse(text);\n } catch (err) {\n throw new TypeError(`GANYMEDE_PARAMS is not JSON: ${err instanceof Error ? err.message : err}`);\n }\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"GANYMEDE_PARAMS must be a JSON object, such as {\\\"counter\\\": \\\"Fremont\\\"}\");\n }\n return (params = deepFreeze(value));\n }\n\n // jupyter.result (cdp-kernel#456): a named value as an output of\n // Ganymede's result type, which a run's caller reads without parsing\n // outputs. JSON only, so every reader sees the same value.\n function result(name, value) {\n if (typeof name !== \"string\" || name === \"\") throw new TypeError(\"jupyter.result: name must be a non-empty string\");\n let text;\n try {\n text = JSON.stringify(value);\n } catch (err) {\n throw new TypeError(`jupyter.result: ${name} is not JSON: ${err instanceof Error ? err.message : err}`);\n }\n if (text === undefined) throw new TypeError(`jupyter.result: ${name} is not JSON (${typeof value})`);\n const json = JSON.parse(text);\n broadcast(\"display_data\", {\n data: { [RESULT_MIME]: { name, value: json }, \"text/plain\": `${name} = ${text}` },\n metadata: {},\n transient: {},\n });\n }\n\n // The cell's own import, so npm: resolution and the browser target's CDN\n // apply to the packages jupyter.sql and jupyter.chart load.\n const cellImport = (what) => (specifier) => {\n const load = globalThis.__cdpk?.import;\n if (typeof load !== \"function\") return Promise.reject(new Error(`${what}: no module loader in this runtime`));\n return load(specifier);\n };\n\n // jupyter.sql (#477): DuckDB, loaded on the first query; an interrupt\n // (jupyter.signal) interrupts the query.\n const sql = createSql({ importModule: cellImport(\"jupyter.sql\"), signal: () => current.signal });\n\n // jupyter.chart (#479): vega, vega-lite or linkedom, loaded on first use.\n const chart = createChart({ importModule: cellImport(\"jupyter.chart\"), summarizeSpec: summarizeChart });\n\n const comms = createComms((msgType, content, metadata, buffers) => host.send(msgType, content, metadata, buffers));\n // Tables cut by the cap page through the kernel over a comm (ganymede#747).\n pager = createTablePager(comms.api);\n\n // jupyter.signal (#418): aborted when the kernel is interrupted, so cell\n // code can stop waiting on what the interrupt can't reach, such as a comm\n // reply. Each cell gets its own, as does a comm handler that starts while\n // no cell runs; a handler during a cell shares the cell's. An interrupt\n // aborts only those of the cell and handlers running (#421).\n /** The last cell's controller. */\n let cell = new AbortController();\n /** What jupyter.signal returns: that of whatever started last. */\n let current = cell;\n /** Controllers of running comm handlers, with how many handlers use each. */\n const handlers = new Map();\n function startCell() {\n current = cell = new AbortController();\n }\n /** `cellRunning`: the host has a cell in flight, so the last cell's signal is aborted too. */\n function abortSignal(cellRunning = true) {\n const reason = new DOMException(\"Execution interrupted\", \"AbortError\");\n if (cellRunning) cell.abort(reason);\n for (const controller of handlers.keys()) controller.abort(reason);\n handlers.clear();\n }\n // jupyter.host() (#461): Ganymede's host API. Registers its comm target\n // now, so the comm the server opens at kernel start finds it. A call\n // without a signal watches the jupyter.signal of whatever started it.\n const hostApi = createHost(comms.api, () => current.signal);\n\n async function commDispatch(msgType, content, metadata, buffers, ownSignal = false) {\n // A handler during a cell shares the cell's signal, and is tracked\n // apart from it: it can outlive the cell.\n const controller = ownSignal ? new AbortController() : cell;\n if (ownSignal) current = controller;\n handlers.set(controller, (handlers.get(controller) ?? 0) + 1);\n try {\n return await comms.dispatch(msgType, content, metadata, buffers);\n } finally {\n const left = (handlers.get(controller) ?? 0) - 1;\n if (left > 0) handlers.set(controller, left);\n else handlers.delete(controller);\n }\n }\n\n return {\n namespace: {\n get signal() {\n return current.signal;\n },\n broadcast,\n display,\n get params() {\n return readParams();\n },\n result,\n table,\n sql,\n chart,\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 host: hostApi.host,\n widget: createWidgetFactory(comms.api, $display),\n },\n broadcastResult,\n formatNow,\n confirm,\n prompt,\n commDispatch,\n startCell,\n abortSignal,\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 shim.startCell?.();\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(\n request.msgType,\n request.content,\n request.metadata,\n request.buffers,\n request.ownSignal === true,\n );\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 case \"abort\":\n // After an interrupt: jupyter.signal (#418).\n shim.abortSignal?.(request.cell !== false);\n return {};\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/**\n * The URL `specifier`, imported from `base`, loads from. `modules` maps\n * specifiers, as written, to URLs (resolved against `base`) that win over\n * the CDN: an app ships the packages it needs offline this way.\n */\nexport function resolveSpecifier(specifier, base, cdn = DEFAULT_CDN, modules = undefined) {\n if (modules && Object.hasOwn(modules, specifier)) return new URL(modules[specifier], base).href;\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 // jupyter.params (#456): the target's `params` option, sent with info.\n params: () => paramsText,\n});\nlet paramsText;\n\n// --- Modules ----------------------------------------------------------------\nlet cdn = DEFAULT_CDN;\n/** Specifiers the page serves itself, such as jupyter.chart's libraries in the Ganymede apps. */\nlet modules;\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, modules: moduleMap, params }) {\n if (typeof params === \"string\") paramsText = params;\n if (typeof cdnBase === \"string\") cdn = cdnBase.endsWith(\"/\") ? cdnBase : cdnBase + \"/\";\n if (moduleMap !== null && typeof moduleMap === \"object\") modules = { ...moduleMap };\n const url = new URL(\"$cdpk$repl.mjs\", base).href;\n globalThis.__cdpk = {\n import: (specifier, options) => import(resolveSpecifier(specifier, url, cdn, modules), options),\n meta: { url, resolve: (specifier) => resolveSpecifier(specifier, url, cdn, modules) },\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 // jupyter.signal (#418, #421): a new one as each cell starts; the host\n // aborts the running ones on interrupt.\n startCell: jupyter.startCell,\n abortSignal: jupyter.abortSignal,\n async commDispatch(msgType, content, metadata, buffers64, ownSignal) {\n const buffers = buffers64.map((b) => Uint8Array.from(atob(b), (c) => c.charCodeAt(0)));\n return await jupyter.commDispatch(msgType, content, metadata, buffers, ownSignal);\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", "host", "data", "hello", "call", "key", "$display", "key", "list", "$display", "rawToEntity", "isObject", "key", "key", "$display", "rawToEntity", "key", "encoding", "list", "$display", "host", "format", "result", "answer", "handle", "items", "propertyNames", "inspect", "cdn", "modules"]
7
7
  }