@tlockney/cdp-kernel 0.7.2 → 0.8.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
3
  "sources": ["../../runtime/comm.mjs", "../../runtime/widget.mjs", "../../runtime/display.mjs", "../../runtime/evaluator.mjs", "../../runtime/format.mjs", "../../runtime/introspect.mjs", "../../runtime/cdn.mjs", "../../runtime/browser-worker.mjs"],
4
- "sourcesContent": ["// @ts-self-types=\"./comm.d.mts\"\n// Jupyter comms: bidirectional channels between kernel and frontend, the\n// transport ipywidgets and anywidget are built on (#9). Runs inside the\n// target runtime.\n//\n// Kernel-to-frontend messages (comm_open, comm_msg, comm_close) go out\n// through `send`, the same ordered path as display messages. Frontend\n// messages arrive from the host through `dispatch`, which returns whether\n// anything in the kernel handled them, so the host can answer an unknown\n// target's comm_open with a comm_close, as the protocol asks.\n\nclass Comm {\n #send;\n #onClosed;\n #msgHandlers = [];\n #closeHandlers = [];\n closed = false;\n\n constructor(id, targetName, send, onClosed) {\n this.id = id;\n this.targetName = targetName;\n this.#send = send;\n this.#onClosed = onClosed;\n }\n\n send(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_msg\", { comm_id: this.id, data }, metadata, buffers);\n }\n\n close(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_close\", { comm_id: this.id, data }, metadata, buffers);\n // close() is synchronous for callers; its close handlers run detached.\n void this._closed({ data, metadata, buffers });\n }\n\n onMsg(handler) {\n this.#msgHandlers.push(handler);\n }\n\n onClose(handler) {\n this.#closeHandlers.push(handler);\n }\n\n async _receive(msg) {\n for (const handler of this.#msgHandlers) await handler(msg);\n }\n\n async _closed(msg) {\n if (this.closed) return;\n this.closed = true;\n this.#onClosed(this.id);\n for (const handler of this.#closeHandlers) await handler(msg);\n }\n}\n\n/**\n * @param {(msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void} send\n * @param {() => string} [newId]\n */\nexport function createComms(send, newId = () => crypto.randomUUID()) {\n const comms = new Map(); // comm_id -> Comm\n const targets = new Map(); // target_name -> handler\n const forget = (id) => comms.delete(id);\n\n function track(id, targetName) {\n const comm = new Comm(id, targetName, send, forget);\n comms.set(id, comm);\n return comm;\n }\n\n const api = {\n open(targetName, data = {}, { metadata = {}, buffers = [] } = {}) {\n const comm = track(newId(), targetName);\n send(\"comm_open\", { comm_id: comm.id, target_name: targetName, data }, metadata, buffers);\n return comm;\n },\n registerTarget(targetName, handler) {\n targets.set(targetName, handler);\n },\n unregisterTarget(targetName) {\n targets.delete(targetName);\n },\n };\n\n async function dispatch(msgType, content, metadata, buffers) {\n const msg = { data: content.data ?? {}, metadata: metadata ?? {}, buffers: buffers ?? [] };\n if (msgType === \"comm_open\") {\n const handler = targets.get(content.target_name);\n if (!handler) return false;\n const comm = track(content.comm_id, content.target_name);\n try {\n await handler(comm, msg);\n } catch (err) {\n // The host answers a failed comm_open with comm_close, so the comm\n // is gone on the frontend: drop it here too, without running close\n // handlers or sending anything (#137).\n comm.closed = true;\n forget(comm.id);\n throw err;\n }\n return true;\n }\n const comm = comms.get(content.comm_id);\n if (!comm) return false;\n if (msgType === \"comm_msg\") await comm._receive(msg);\n else if (msgType === \"comm_close\") await comm._closed(msg);\n else return false;\n return true;\n }\n\n function list() {\n return [...comms.values()].map((comm) => ({ commId: comm.id, targetName: comm.targetName }));\n }\n\n return { api, dispatch, list };\n}\n", "// @ts-self-types=\"./widget.d.mts\"\n// anywidget-compatible widgets over Jupyter comms (#9): the kernel half of\n// the ipywidgets model protocol (version 2.1.0) for anywidget's AnyModel,\n// whose frontend is the `anywidget` JupyterLab/Notebook/VS Code extension.\n//\n// const counter = jupyter.widget({ esm, state: { count: 0 } });\n// counter // display it\n// counter.get(\"count\"); counter.set(\"count\", 1);\n// counter.on(\"change:count\", (value, old) => ...);\n//\n// State is synced as in ipywidgets: `update` messages carry changed keys,\n// with binary values lifted out into message buffers at `buffer_paths`\n// (ipywidgets' _remove_buffers/_put_buffers).\n\nexport const WIDGET_PROTOCOL_VERSION = \"2.1.0\";\nconst WIDGET_TARGET = \"jupyter.widget\";\nconst CONTROL_TARGET = \"jupyter.widget.control\";\nconst VIEW_MIME = \"application/vnd.jupyter.widget-view+json\";\n\n// The anywidget model the frontend instantiates. The module version is a\n// semver range for the frontend's registry; anywidget sends \"~major.minor.*\"\n// of its own version, and \"*\" accepts whichever release is installed.\nconst ANYWIDGET_MODEL = {\n _model_name: \"AnyModel\",\n _model_module: \"anywidget\",\n _model_module_version: \"*\",\n _view_name: \"AnyView\",\n _view_module: \"anywidget\",\n _view_module_version: \"*\",\n _view_count: null,\n};\n\nfunction isBinary(value) {\n return value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value);\n}\n\nfunction toBytes(value) {\n if (value instanceof Uint8Array) return value;\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\n/** Copies `state` with binary values replaced by null, collecting them. */\nexport function removeBuffers(state) {\n const bufferPaths = [];\n const buffers = [];\n function walk(value, path) {\n if (isBinary(value)) {\n bufferPaths.push(path);\n buffers.push(toBytes(value));\n return null;\n }\n if (Array.isArray(value)) return value.map((item, i) => walk(item, [...path, i]));\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, walk(v, [...path, k])]));\n }\n return value;\n }\n return { state: walk(state, []), bufferPaths, buffers };\n}\n\n/** Puts received buffers back into `state` at `bufferPaths` (in place). */\nexport function putBuffers(state, bufferPaths = [], buffers = []) {\n bufferPaths.forEach((path, i) => {\n let obj = state;\n for (const key of path.slice(0, -1)) obj = obj[key];\n obj[path[path.length - 1]] = buffers[i];\n });\n return state;\n}\n\nclass Widget {\n #comm;\n #state;\n #listeners = new Map(); // event -> Set<listener>\n\n constructor(comm, state, $display) {\n this.#comm = comm;\n this.#state = state;\n this[$display] = () => ({\n [VIEW_MIME]: { version_major: 2, version_minor: 1, model_id: this.id },\n \"text/plain\": `Widget(${this.id})`,\n });\n }\n\n get id() {\n return this.#comm.id;\n }\n\n get closed() {\n return this.#comm.closed;\n }\n\n get(key) {\n return this.#state[key];\n }\n\n /** set(\"key\", value) or set({ key: value, ... }); syncs to the frontend. */\n set(keyOrChanges, value) {\n const changes = typeof keyOrChanges === \"string\" ? { [keyOrChanges]: value } : keyOrChanges;\n this.#apply(changes);\n if (this.closed) return;\n const { state, bufferPaths, buffers } = removeBuffers(changes);\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n }\n\n on(event, listener) {\n if (!this.#listeners.has(event)) this.#listeners.set(event, new Set());\n this.#listeners.get(event).add(listener);\n }\n\n off(event, listener) {\n this.#listeners.get(event)?.delete(listener);\n }\n\n /** A custom message, delivered to the view's model.on(\"msg:custom\"). */\n send(content, buffers = []) {\n this.#comm.send({ method: \"custom\", content }, { buffers });\n }\n\n close() {\n this.#comm.close();\n }\n\n /** The full state, as the frontend sees it (for request_state). */\n fullState() {\n return { ...ANYWIDGET_MODEL, ...this.#state };\n }\n\n async #emit(event, ...args) {\n for (const listener of this.#listeners.get(event) ?? []) await listener(...args);\n }\n\n async #apply(changes) {\n const previous = {};\n for (const [key, value] of Object.entries(changes)) {\n previous[key] = this.#state[key];\n this.#state[key] = value;\n }\n for (const key of Object.keys(changes)) await this.#emit(`change:${key}`, changes[key], previous[key]);\n await this.#emit(\"change\", changes);\n }\n\n async _receive(msg) {\n const { method } = msg.data;\n if (method === \"update\") {\n const changes = putBuffers(msg.data.state ?? {}, msg.data.buffer_paths, msg.buffers);\n await this.#apply(changes);\n } else if (method === \"request_state\") {\n const { state, bufferPaths, buffers } = removeBuffers(this.fullState());\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n } else if (method === \"custom\") {\n await this.#emit(\"msg:custom\", msg.data.content, msg.buffers);\n }\n }\n}\n\n/**\n * @param {import(\"./comm.d.mts\").CommApi} commApi\n * @param {symbol} $display\n */\nexport function createWidgetFactory(commApi, $display) {\n const live = new Map(); // model id -> Widget\n\n // The frontend opens this comm to restore every widget's state, e.g.\n // after the page reloads.\n commApi.registerTarget(CONTROL_TARGET, (control) => {\n control.onMsg((msg) => {\n if (msg.data.method !== \"request_states\") return;\n const states = {};\n for (const widget of live.values()) {\n const full = widget.fullState();\n states[widget.id] = {\n model_name: full._model_name,\n model_module: full._model_module,\n model_module_version: full._model_module_version,\n state: full,\n };\n }\n const { state, bufferPaths, buffers } = removeBuffers(states);\n control.send({ method: \"update_states\", states: state, buffer_paths: bufferPaths }, { buffers });\n });\n });\n\n return function widget({ esm, css, state = {} } = {}) {\n if (typeof esm !== \"string\") throw new TypeError(\"jupyter.widget needs an `esm` module string\");\n const initial = { ...state };\n const full = {\n ...ANYWIDGET_MODEL,\n _esm: esm,\n ...(css === undefined ? {} : { _css: css }),\n _anywidget_id: \"cdp-kernel.widget\",\n ...initial,\n };\n const { state: wire, bufferPaths, buffers } = removeBuffers(full);\n const comm = commApi.open(WIDGET_TARGET, { state: wire, buffer_paths: bufferPaths }, {\n metadata: { version: WIDGET_PROTOCOL_VERSION },\n buffers,\n });\n const instance = new Widget(comm, { ...full }, $display);\n live.set(comm.id, instance);\n comm.onMsg((msg) => instance._receive(msg));\n comm.onClose(() => {\n live.delete(comm.id);\n });\n return instance;\n };\n}\n", "// @ts-self-types=\"./display.d.mts\"\n// The Jupyter display API that Deno exposes as `Deno.jupyter`, made\n// runtime-neutral. Runs inside the target runtime (Node or Deno).\n//\n// Ported from Deno's cli/js/40_jupyter.js (v2.9.6), which is\n// Copyright 2018-2026 the Deno authors, MIT license. The formatting rules\n// (display symbol, canvas, Vega, Polars-style DataFrames, JPEG/PNG bytes,\n// HTML/SVG elements) are unchanged; the Deno internals it used are injected:\n// Deno[Deno.internal].inspectArgs -> host.inspect\n// op_base64_encode_from_buffer -> host.base64\n// Deno.readFileSync -> host.readFile\n// op_jupyter_broadcast -> host.send\n// WebGPU texture/buffer display depends on Deno's wgpu bindings and is\n// omitted. Comms and widgets (jupyter.comm, jupyter.widget) are additions\n// Deno doesn't have; see comm.mjs and widget.mjs.\n\nimport { createComms } from \"./comm.mjs\";\nimport { createWidgetFactory } from \"./widget.mjs\";\n\nexport const $display = Symbol.for(\"Jupyter.display\");\n\nconst rawToEntity = new Map([\n [\"&\", \"&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 isDataFrameLike(obj) {\n return obj !== null && typeof obj === \"object\" &&\n obj.schema !== undefined && typeof obj.schema === \"object\" &&\n typeof obj.head === \"function\" && typeof obj.toRecords === \"function\";\n}\n\nfunction mapPolarsTypeToJSONSchema(colType) {\n const typeMapping = {\n Null: \"null\",\n Bool: \"boolean\",\n Int8: \"integer\",\n Int16: \"integer\",\n Int32: \"integer\",\n Int64: \"integer\",\n UInt8: \"integer\",\n UInt16: \"integer\",\n UInt32: \"integer\",\n UInt64: \"integer\",\n Float32: \"number\",\n Float64: \"number\",\n Date: \"string\",\n Datetime: \"string\",\n Utf8: \"string\",\n Categorical: \"string\",\n List: \"array\",\n Struct: \"object\",\n };\n // Polars DataTypes only expose their name through toJSON().\n const dataType = typeof colType?.toJSON === \"function\" ? colType.toJSON()[\"DataType\"] : undefined;\n return typeMapping[dataType] || \"string\";\n}\n\nfunction extractDataFrame(df) {\n const fields = [];\n for (const [name, colType] of Object.entries(df.schema)) {\n fields.push({ name, type: mapPolarsTypeToJSONSchema(colType) });\n }\n const data = df.head(50).toRecords();\n let html = \"<table><thead><tr>\";\n for (const field of fields) html += `<th>${escapeHTML(String(field.name))}</th>`;\n html += \"</tr></thead><tbody>\";\n for (const row of df.head(10).toRecords()) {\n html += \"<tr>\";\n for (const field of fields) html += `<td>${escapeHTML(String(row[field.name]))}</td>`;\n html += \"</tr>\";\n }\n html += \"</tbody></table>\";\n // Polars has `height`; the row count is left out when there isn't one.\n const size = [];\n if (Number.isInteger(df.height)) size.push(`${df.height} ${df.height === 1 ? \"row\" : \"rows\"}`);\n size.push(`${fields.length} ${fields.length === 1 ? \"column\" : \"columns\"}`);\n const columns = fields.slice(0, 20).map((field) => `${clip(String(field.name), 40)} (${field.type})`);\n if (fields.length > 20) columns.push(`\u2026 ${fields.length - 20} more`);\n return {\n \"application/vnd.dataresource+json\": { data, schema: { fields } },\n \"text/html\": html,\n \"text/plain\": `DataFrame (${size.join(\", \")})${columns.length ? `: ${columns.join(\", \")}` : \"\"}`,\n };\n}\n\nfunction isCanvasLike(obj) {\n return obj !== null && typeof obj === \"object\" && \"toDataURL\" in obj;\n}\n\nexport function isJpg(obj) {\n return obj instanceof Uint8Array && obj.length >= 4 &&\n obj[0] === 0xff && obj[1] === 0xd8 &&\n obj[obj.length - 2] === 0xff && obj[obj.length - 1] === 0xd9;\n}\n\nconst PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];\n\nexport function isPng(obj) {\n return obj instanceof Uint8Array && obj.length >= PNG_SIGNATURE.length &&\n PNG_SIGNATURE.every((byte, i) => obj[i] === byte);\n}\n\nfunction isSVGElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\" &&\n obj.outerHTML.startsWith(\"<svg\");\n}\n\nfunction isHTMLElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\";\n}\n\nfunction hasDisplaySymbol(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj[$display] === \"function\";\n}\n\nfunction isMediaBundle(obj) {\n return obj !== null && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * @param {{\n * inspect: (value: unknown) => string,\n * base64: (bytes: Uint8Array) => string,\n * readFile: (path: string) => Uint8Array,\n * send: (msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void,\n * input: (prompt: string, password: boolean) => string | null,\n * }} host\n */\nexport function createJupyter(host) {\n async function format(obj) {\n return await formatNow(obj);\n }\n\n // format without awaiting: the debugger's variable viewer formats values\n // while the target is paused, when no promise settles (#18). A $display\n // method's promise is the caller's to handle.\n function formatNow(obj) {\n if (hasDisplaySymbol(obj)) return obj[$display]();\n if (typeof obj !== \"object\" || obj === null) return { \"text/plain\": host.inspect(obj) };\n if (isCanvasLike(obj)) {\n const [prefix, data] = obj.toDataURL().split(\",\");\n return { [prefix.split(\":\")[1].split(\";\")[0]]: data };\n }\n if (isVegaLike(obj)) {\n const vega = extractVega(obj);\n if (vega) return vega;\n }\n if (isDataFrameLike(obj)) return extractDataFrame(obj);\n if (isJpg(obj)) return { \"image/jpeg\": host.base64(obj) };\n if (isPng(obj)) return { \"image/png\": host.base64(obj) };\n if (isSVGElementLike(obj)) return { \"image/svg+xml\": obj.outerHTML };\n if (isHTMLElementLike(obj)) return { \"text/html\": obj.outerHTML };\n return { \"text/plain\": host.inspect(obj) };\n }\n\n function taggedTemplate(mediatype) {\n return (strings, ...values) => {\n const payload = strings.reduce((acc, string, i) =>\n acc + string + (values[i] !== undefined ? values[i] : \"\"), \"\");\n return { [$display]: () => ({ [mediatype]: payload }) };\n };\n }\n\n function image(obj) {\n if (typeof obj === \"string\") {\n // As Deno does: a path that can't be read gets the TypeError below.\n try {\n obj = host.readFile(obj);\n } catch {\n // fall through\n }\n }\n if (isJpg(obj)) return { [$display]: () => ({ \"image/jpeg\": host.base64(obj) }) };\n if (isPng(obj)) return { [$display]: () => ({ \"image/png\": host.base64(obj) }) };\n throw new TypeError(\n \"Object is not a valid image or a path to an image. `jupyter.image` supports displaying JPG or PNG images.\",\n );\n }\n\n function broadcast(msgType, content, { metadata = {}, buffers = [] } = {}) {\n host.send(msgType, content, metadata, buffers);\n }\n\n async function display(obj, options = { raw: false, update: false }) {\n const bundle = options.raw && isMediaBundle(obj) ? obj : await format(obj);\n broadcast(options.update ? \"update_display_data\" : \"display_data\", {\n data: bundle,\n metadata: {},\n transient: options.display_id ? { display_id: options.display_id } : {},\n });\n }\n\n async function broadcastResult(executionCount, result) {\n if (result === undefined) return;\n try {\n broadcast(\"execute_result\", {\n execution_count: executionCount,\n data: await format(result),\n metadata: {},\n // nbclient crashes on a null `transient`; Deno learned this too.\n transient: {},\n });\n } catch (err) {\n broadcast(\"error\", {\n ename: err instanceof Error ? err.name : \"Error\",\n evalue: err instanceof Error ? err.message : String(err),\n traceback: err instanceof Error && err.stack ? err.stack.split(\"\\n\") : [],\n });\n }\n }\n\n function confirm(message = \"Confirm\") {\n const answer = host.input(`${message} [y/N] `, false);\n return answer === \"Y\" || answer === \"y\";\n }\n\n function prompt(message = \"Prompt\", defaultValue = \"\", { password = false } = {}) {\n if (defaultValue != \"\") message += ` [${defaultValue}]`;\n const answer = host.input(message, password);\n return answer === \"\" ? defaultValue : answer;\n }\n\n const comms = createComms((msgType, content, metadata, buffers) => host.send(msgType, content, metadata, buffers));\n\n return {\n namespace: {\n broadcast,\n display,\n format,\n md: taggedTemplate(\"text/markdown\"),\n html: taggedTemplate(\"text/html\"),\n svg: taggedTemplate(\"image/svg+xml\"),\n image,\n $display,\n comm: comms.api,\n widget: createWidgetFactory(comms.api, $display),\n },\n broadcastResult,\n formatNow,\n confirm,\n prompt,\n commDispatch: comms.dispatch,\n };\n}\n", "// The in-process evaluator behind the targets that don't use CDP: Bun (#7),\n// over a pipe (bun-channel.mjs), and workerd (#8), inside a request\n// (workerd-worker.mjs). Cells arrive as global code from\n// src/transform.ts's transformCellForEval, whose value is a promise of the\n// boxed result. Requests and replies mirror the CDP calls the kernel makes\n// of the other targets.\n//\n// No imports: this file must load in every target.\n\n/** Own and inherited property names, as Runtime.getProperties lists them. */\nexport function propertyNames(value) {\n if (value === null || value === undefined) return [];\n const names = new Set();\n for (let o = Object(value); o !== null; o = Object.getPrototypeOf(o)) {\n for (const name of Object.getOwnPropertyNames(o)) names.add(name);\n }\n return [...names];\n}\n\n/**\n * Answers the host's requests. `shim` is globalThis.__cdpk; `evaluate` runs\n * global code. Values the host refers to later (a result to display, an\n * error to describe) stay here under a handle, the stand-in for a CDP\n * objectId.\n */\nexport function createHandler(shim, evaluate = (code) => (0, eval)(code)) {\n const handles = new Map();\n let nextHandle = 0;\n const remote = (value) => {\n const objectId = `h${++nextHandle}`;\n handles.set(objectId, value);\n return { type: value === null ? \"object\" : typeof value, objectId };\n };\n const take = (objectId) => {\n const value = handles.get(objectId);\n handles.delete(objectId);\n return value;\n };\n\n return async function handle(request) {\n switch (request.op) {\n case \"ping\":\n return {};\n case \"eval\": {\n // The host uses a result's handle before its next cell.\n handles.clear();\n try {\n const box = await evaluate(request.code);\n return { result: box === undefined ? { type: \"undefined\" } : remote(box[0]) };\n } catch (err) {\n return {\n exceptionDetails: { text: \"Uncaught\", lineNumber: 0, columnNumber: 0, exception: remote(err) },\n };\n }\n }\n case \"broadcast\":\n await shim.broadcastResult(request.count, take(request.handle));\n return {};\n case \"format\":\n return { value: await shim.formatJson(request.handle === undefined ? undefined : take(request.handle)) };\n case \"describe\":\n return { value: shim.describeError(take(request.handle)) };\n case \"comm\":\n try {\n const handled = await shim.commDispatch(request.msgType, request.content, request.metadata, request.buffers);\n return { handled: handled === true };\n } catch (err) {\n return { error: JSON.parse(shim.describeError(err)) };\n }\n case \"props\": {\n // Completion's expression is a dotted path; resolved by descriptor\n // where the shim can, so completing `obj.` never runs a getter (#10).\n if (typeof shim.resolvePath === \"function\") {\n const resolved = shim.resolvePath(request.expr);\n return { names: resolved.found && !resolved.accessor ? propertyNames(resolved.value) : [] };\n }\n let value;\n try {\n value = evaluate(`(${request.expr})`);\n } catch {\n return { names: [] };\n }\n return { names: propertyNames(value) };\n }\n case \"inspect\":\n return { text: shim.inspectPath(request.path, request.detail ?? 0) };\n case \"barrier\":\n return { value: shim.barrier() };\n default:\n throw new Error(`unknown request ${JSON.stringify(request.op)}`);\n }\n };\n}\n", "// A small stand-in for util.inspect and util.format, for targets that have\n// neither: the browser Worker (runtime/browser-worker.mjs). Output follows\n// Node's for the common cases (strings quoted when nested, objects and\n// arrays on one line, Map, Set, Date, Error, class names, circular\n// references), without colours.\n//\n// No imports: this file must load in every target.\n\nconst MAX_ITEMS = 100;\n\n// Single quotes, unless the string has some and double quotes or\n// backticks would need no escapes, as util.inspect picks.\nfunction quote(s) {\n const q = !s.includes(\"'\") ? \"'\" : !s.includes('\"') ? '\"' : !s.includes(\"`\") && !s.includes(\"${\") ? \"`\" : \"'\";\n const escaped = s.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"\\n\", \"\\\\n\").replaceAll(q, `\\\\${q}`);\n return `${q}${escaped}${q}`;\n}\n\nfunction key(k) {\n return typeof k === \"symbol\" ? `[${k.toString()}]` : /^[A-Za-z_$][\\w$]*$/.test(k) ? k : quote(k);\n}\n\nfunction className(value) {\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return \"[Object: null prototype]\";\n const name = proto.constructor?.name;\n return name && name !== \"Object\" ? name : \"\";\n}\n\nfunction list(open, items, close, more) {\n if (more > 0) items.push(`... ${more} more item${more === 1 ? \"\" : \"s\"}`);\n return items.length === 0 ? `${open}${close}` : `${open} ${items.join(\", \")} ${close}`;\n}\n\n/** `value` as Node's util.inspect would show it, to `depth` levels. */\nexport function inspect(value, { depth = 2 } = {}) {\n const seen = [];\n const show = (v, level) => {\n switch (typeof v) {\n case \"string\":\n return quote(v);\n case \"bigint\":\n return `${v}n`;\n case \"symbol\":\n return v.toString();\n case \"undefined\":\n return \"undefined\";\n case \"function\": {\n const isClass = /^class\\b/.test(Function.prototype.toString.call(v));\n return isClass ? `[class ${v.name || \"(anonymous)\"}]` : `[Function${v.name ? `: ${v.name}` : \" (anonymous)\"}]`;\n }\n case \"number\":\n return Object.is(v, -0) ? \"-0\" : String(v);\n case \"boolean\":\n return String(v);\n }\n if (v === null) return \"null\";\n if (seen.includes(v)) return \"[Circular *1]\";\n if (v instanceof Date) return Number.isNaN(v.getTime()) ? \"Invalid Date\" : v.toISOString();\n if (v instanceof RegExp) return String(v);\n if (v instanceof Error) return v.stack ?? `${v.name}: ${v.message}`;\n if (v instanceof Promise) return \"Promise { <unknown> }\";\n if (level > depth) return Array.isArray(v) ? \"[Array]\" : `[${className(v) || \"Object\"}]`;\n seen.push(v);\n try {\n if (Array.isArray(v) || ArrayBuffer.isView(v)) {\n const items = Array.from(v).slice(0, MAX_ITEMS).map((x) => show(x, level + 1));\n const prefix = Array.isArray(v) ? \"\" : `${v.constructor.name}(${v.length}) `;\n return prefix + list(\"[\", items, \"]\", v.length - items.length);\n }\n if (v instanceof Map) {\n const items = [...v].slice(0, MAX_ITEMS).map(([k, x]) => `${show(k, level + 1)} => ${show(x, level + 1)}`);\n return `Map(${v.size}) ` + list(\"{\", items, \"}\", v.size - items.length);\n }\n if (v instanceof Set) {\n const items = [...v].slice(0, MAX_ITEMS).map((x) => show(x, level + 1));\n return `Set(${v.size}) ` + list(\"{\", items, \"}\", v.size - items.length);\n }\n const keys = Reflect.ownKeys(v).filter((k) => Object.getOwnPropertyDescriptor(v, k)?.enumerable);\n const items = keys.slice(0, MAX_ITEMS).map((k) => {\n const d = Object.getOwnPropertyDescriptor(v, k);\n const shown = d.get || d.set ? `[${d.get ? \"Getter\" : \"\"}${d.get && d.set ? \"/\" : \"\"}${d.set ? \"Setter\" : \"\"}]` : show(d.value, level + 1);\n return `${key(k)}: ${shown}`;\n });\n const name = className(v);\n return (name ? `${name} ` : \"\") + list(\"{\", items, \"}\", keys.length - items.length);\n } finally {\n seen.pop();\n }\n };\n return show(value, 0);\n}\n\n/** console.log's formatting: strings as they are, everything else inspected, %s/%d/%i/%f/%o/%O/%j substituted. */\nexport function format(...args) {\n let out = [];\n let rest = args;\n if (typeof args[0] === \"string\" && args.length > 1 && args[0].includes(\"%\")) {\n let i = 1;\n const text = args[0].replace(/%[sdifoOjc%]/g, (spec) => {\n if (spec === \"%%\") return \"%\";\n if (i >= args.length) return spec;\n const a = args[i++];\n switch (spec) {\n case \"%s\":\n return typeof a === \"string\" ? a : inspect(a, { depth: 1 });\n case \"%d\":\n case \"%i\":\n return typeof a === \"bigint\" ? `${a}n` : String(spec === \"%i\" ? Math.trunc(Number(a)) : Number(a));\n case \"%f\":\n return String(Number(a));\n case \"%j\":\n return JSON.stringify(a);\n case \"%c\":\n return \"\";\n default:\n return inspect(a, { depth: 4 });\n }\n });\n out = [text];\n rest = args.slice(i);\n }\n for (const a of rest) out.push(typeof a === \"string\" ? a : inspect(a));\n return out.join(\" \");\n}\n", "// What inspect_request (#10) shows for a value: the text of a JupyterLab\n// tooltip (Shift-Tab) or inspector panel. Shared by every target; the host\n// decides how the value is found (src/target.ts: CDP's throwOnSideEffect;\n// in-process targets: resolvePath, below).\n//\n// No imports: this file must load in every target. `inspect` (util.inspect\n// or Deno.inspect) is passed in.\n\nconst PREVIEW_CHARS = 1500;\nconst SOURCE_CHARS = 4000;\nconst MAX_PROPERTIES = 40;\n\nconst IDENTIFIER_PATH = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)*$/;\n\n/**\n * Looks up a dotted path such as \"a.b.c\" from globalThis, by property\n * descriptor, so nothing runs: a getter along the way is reported rather\n * than called. In-process targets (Bun, workerd, celld) have no way to\n * evaluate without side effects, so inspection and completion use this.\n */\nexport function resolvePath(path, root = globalThis) {\n if (!IDENTIFIER_PATH.test(path)) return { found: false };\n let value = root;\n for (const name of path.split(\".\")) {\n if (value === null || value === undefined) return { found: false };\n let descriptor;\n for (let o = Object(value); o !== null && descriptor === undefined; o = Object.getPrototypeOf(o)) {\n descriptor = Object.getOwnPropertyDescriptor(o, name);\n }\n if (descriptor === undefined) return { found: false };\n if (!(\"value\" in descriptor)) return { found: true, accessor: true, name };\n value = descriptor.value;\n }\n return { found: true, value };\n}\n\nfunction truncate(text, limit) {\n return text.length > limit ? `${text.slice(0, limit)}\u2026 (${text.length - limit} more characters)` : text;\n}\n\n/** \"function add(a, b) {...}\" -> \"add(a, b)\"; \"class K {...}\" -> \"class K\". */\nexport function signatureOf(fn) {\n let source;\n try {\n source = Function.prototype.toString.call(fn);\n } catch {\n return `${fn.name || \"anonymous\"}(\u2026)`;\n }\n if (/^class\\b/.test(source)) return `class ${fn.name || \"(anonymous)\"}`;\n const params = /^[^(]*\\(([^)]*)\\)/.exec(source)?.[1];\n const native = /\\{\\s*\\[native code\\]\\s*\\}$/.test(source);\n // One line, however the parameters were spread over the source.\n const written = (params ?? \"\").replace(/\\s+/g, \" \").replace(/\\s*,\\s*/g, \", \").trim();\n const args = native ? Array.from({ length: fn.length }, (_, i) => `arg${i}`).join(\", \") : written;\n const arrow = !/^(?:async\\s+)?function\\b/.test(source) && /=>/.test(source.split(\"{\")[0] ?? \"\");\n const name = fn.name || (arrow ? \"(arrow function)\" : \"anonymous\");\n const prefix = /^async\\b/.test(source) ? \"async \" : \"\";\n return `${prefix}${name}(${args})`;\n}\n\nfunction typeOf(value) {\n if (value === null) return \"null\";\n if (typeof value !== \"object\" && typeof value !== \"function\") return typeof value;\n const name = Object.getPrototypeOf(value)?.constructor?.name;\n if (typeof value === \"function\") return /^class\\b/.test(safeSource(value)) ? \"class\" : \"function\";\n return name && name !== \"Object\" ? `object (${name})` : \"object\";\n}\n\nfunction safeSource(fn) {\n try {\n return Function.prototype.toString.call(fn);\n } catch {\n return \"\";\n }\n}\n\nfunction propertyNames(value) {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) return [];\n try {\n // A function's own internals aren't worth listing; older V8 (Node 22 and 24)\n // also gives sloppy-mode functions own `arguments` and `caller`.\n const internal = [\"length\", \"name\", \"prototype\", \"arguments\", \"caller\"];\n return Object.getOwnPropertyNames(value).filter((n) => !(typeof value === \"function\" && internal.includes(n)));\n } catch {\n return [];\n }\n}\n\n/**\n * The tooltip text for a value. `detail` 1 (Shift-Tab twice, or the\n * inspector panel) adds a function's source.\n */\nexport function describeValue(value, { inspect, detail = 0 }) {\n const lines = [`Type: ${typeOf(value)}`];\n if (typeof value === \"function\") lines.push(`Signature: ${signatureOf(value)}`);\n let preview;\n try {\n preview = inspect(value);\n } catch (err) {\n preview = `(inspect failed: ${err instanceof Error ? err.message : String(err)})`;\n }\n lines.push(`Value: ${truncate(preview, PREVIEW_CHARS)}`);\n const names = propertyNames(value);\n if (names.length > 0) {\n const shown = names.slice(0, MAX_PROPERTIES).join(\", \");\n lines.push(`Properties: ${shown}${names.length > MAX_PROPERTIES ? `, \u2026 (${names.length - MAX_PROPERTIES} more)` : \"\"}`);\n }\n if (detail > 0 && typeof value === \"function\") lines.push(`Source:\\n${truncate(safeSource(value), SOURCE_CHARS)}`);\n return lines.join(\"\\n\");\n}\n\n/** inspect_request for in-process targets: resolvePath, then describeValue. */\nexport function inspectPath(path, { inspect, detail = 0, root = globalThis }) {\n const resolved = resolvePath(path, root);\n if (!resolved.found) return null;\n if (resolved.accessor) {\n return `Type: accessor property\\n${resolved.name} has a getter, which isn't called for inspection: it could have side effects.`;\n }\n return describeValue(resolved.value, { inspect, detail });\n}\n", "// Where a browser cell's imports load from. A Worker resolves only URLs, so\n// packages come from a CDN that serves npm and jsr as ES modules: esm.sh by\n// default, with its jsr/ prefix for jsr packages.\n//\n// No imports: this file must load in every target.\n\nexport const DEFAULT_CDN = \"https://esm.sh/\";\n\n/** The URL `specifier`, imported from `base`, loads from. */\nexport function resolveSpecifier(specifier, base, cdn = DEFAULT_CDN) {\n if (/^(?:https?|data|blob):/.test(specifier)) return specifier;\n if (/^\\.{0,2}\\//.test(specifier)) return new URL(specifier, base).href;\n if (specifier.startsWith(\"npm:\")) return cdn + specifier.slice(4);\n if (specifier.startsWith(\"jsr:\")) return `${cdn}jsr/${specifier.slice(4).replace(/^\\//, \"\")}`;\n // esm.sh serves polyfills for Node's builtins under node:.\n return cdn + specifier;\n}\n", "// The driver for the browser target: a module Web Worker that runs cells.\n//\n// The page's kernel (src/browser/target.ts) sends each request as a\n// message and gets a reply message back, as over the workerd driver's\n// WebSocket (runtime/workerd-worker.mjs), whose shape this follows. Cells\n// come from transformCellForEval and run as global code with indirect\n// eval, so their declarations persist from cell to cell.\n//\n// A Worker has no module resolution beyond URLs, so `npm:` and `jsr:`\n// specifiers, and bare package names, load from a CDN (esm.sh by default).\n//\n// The page can also offer cells its own features (#384): `host` requests go\n// to the page's handler, and `preload` modules run before the first cell.\n\nimport { createJupyter } from \"./display.mjs\";\nimport { createHandler } from \"./evaluator.mjs\";\nimport { format, inspect } from \"./format.mjs\";\nimport { describeValue, inspectPath, resolvePath } from \"./introspect.mjs\";\nimport { DEFAULT_CDN, resolveSpecifier } from \"./cdn.mjs\";\n\nfunction base64(bytes) {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(i, i + 0x8000));\n }\n return btoa(binary);\n}\n\nconst post = (message) => globalThis.postMessage(message);\n\n// --- Output -----------------------------------------------------------------\nconst stream = (name) => (...args) => post({ kind: \"stream\", name, text: format(...args) + \"\\n\" });\nObject.assign(console, {\n log: stream(\"stdout\"),\n info: stream(\"stdout\"),\n debug: stream(\"stdout\"),\n dir: (value) => post({ kind: \"stream\", name: \"stdout\", text: inspect(value, { depth: 4 }) + \"\\n\" }),\n warn: stream(\"stderr\"),\n error: stream(\"stderr\"),\n});\n\n// An error thrown later by a cell's timer or promise goes to stderr, as on\n// the other targets.\nfunction reportUncaught(kind, err) {\n post({ kind: \"stream\", name: \"stderr\", text: `${kind}: ${err instanceof Error ? (err.stack ?? err.message) : inspect(err)}\\n` });\n}\nglobalThis.addEventListener(\"unhandledrejection\", (event) => {\n event.preventDefault();\n reportUncaught(\"Uncaught (in promise)\", event.reason);\n});\nglobalThis.addEventListener(\"error\", (event) => {\n event.preventDefault();\n reportUncaught(\"Uncaught\", event.error ?? event.message);\n});\n\nconst jupyter = createJupyter({\n inspect: (value) => inspect(value, { depth: 4 }),\n base64,\n readFile() {\n throw new Error(\"the browser target has no file system to read from; pass the image bytes instead\");\n },\n send(msgType, content, metadata, buffers) {\n post({ kind: \"iopub\", msg_type: msgType, content, metadata, buffers: buffers.map(base64), barrier: 0 });\n },\n // A synchronous prompt would need SharedArrayBuffer and Atomics.wait, so\n // a cross-origin isolated page; until then, as with no stdin.\n input: () => null,\n});\n\n// --- Modules ----------------------------------------------------------------\nlet cdn = DEFAULT_CDN;\n\n\n// --- The host page (#384) -----------------------------------------------------\n// Requests to the page's `host` handler (src/browser/target.ts), and events\n// it sends. Preload modules get this object; cells only through them.\nconst hostCalls = new Map();\nconst hostListeners = new Set();\nlet nextHostId = 0;\n\nfunction hostError(error) {\n const err = new Error(String(error?.message ?? \"the host request failed\"));\n if (typeof error?.name === \"string\") err.name = error.name;\n if (error?.code !== undefined) err.code = error.code;\n return err;\n}\n\nconst host = {\n /** Resolves with the page's answer; aborting `signal` cancels the call on the page too. */\n request(method, params, { signal, transfer } = {}) {\n if (signal?.aborted) return Promise.reject(signal.reason);\n const id = ++nextHostId;\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n hostCalls.delete(id);\n post({ kind: \"host\", id, cancel: true });\n reject(signal.reason);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n const done = () => signal?.removeEventListener(\"abort\", onAbort);\n try {\n globalThis.postMessage({ kind: \"host\", id, method, params }, transfer ?? []);\n } catch (err) {\n done(); // params structured clone can't copy\n throw err;\n }\n hostCalls.set(id, { resolve, reject, done });\n });\n },\n /** Calls `listener(event, value)` for each event the page sends; returns a function that stops it. */\n onEvent(listener) {\n hostListeners.add(listener);\n return () => hostListeners.delete(listener);\n },\n};\n\nfunction receiveHost(msg) {\n if (msg.id === undefined) {\n for (const listener of hostListeners) {\n try {\n listener(msg.event, msg.value);\n } catch (err) {\n reportUncaught(\"Uncaught\", err);\n }\n }\n return;\n }\n const call = hostCalls.get(msg.id);\n if (!call) return; // cancelled\n hostCalls.delete(msg.id);\n call.done();\n if (msg.error !== undefined) call.reject(hostError(msg.error));\n else call.resolve(msg.result);\n}\n\n// Each module is imported in order, and a default export that is a function\n// is called with the host. A module that fails is reported, and the kernel\n// runs without it.\nasync function preload(urls, base) {\n for (const specifier of Array.isArray(urls) ? urls : []) {\n try {\n const mod = await import(new URL(specifier, base).href);\n if (typeof mod.default === \"function\") await mod.default({ host, jupyter: jupyter.namespace });\n } catch (err) {\n reportUncaught(`Preloading ${specifier} failed`, err);\n }\n }\n}\n\n// --- The shim cells and the evaluator use -----------------------------------\nlet handle = null;\n\nfunction install({ base, cdn: cdnBase }) {\n if (typeof cdnBase === \"string\") cdn = cdnBase.endsWith(\"/\") ? cdnBase : cdnBase + \"/\";\n const url = new URL(\"$cdpk$repl.mjs\", base).href;\n globalThis.__cdpk = {\n import: (specifier, options) => import(resolveSpecifier(specifier, url, cdn), options),\n meta: { url, resolve: (specifier) => resolveSpecifier(specifier, url, cdn) },\n // inspect_request (#10): by descriptor, so nothing runs.\n describeForInspect: (value, detail) => describeValue(value, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n inspectPath: (path, detail) => inspectPath(path, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n resolvePath,\n barrier: () => 0,\n broadcastResult: jupyter.broadcastResult,\n // execute_request's user_expressions (#340).\n formatJson: async (value) => JSON.stringify(await jupyter.namespace.format(value)),\n async commDispatch(msgType, content, metadata, buffers64) {\n const buffers = buffers64.map((b) => Uint8Array.from(atob(b), (c) => c.charCodeAt(0)));\n return await jupyter.commDispatch(msgType, content, metadata, buffers);\n },\n describeError(value) {\n if (value instanceof Error) {\n return JSON.stringify({ name: value.name, message: value.message, stack: value.stack ?? \"\" });\n }\n return JSON.stringify({ name: \"Error\", message: inspect(value), stack: \"\" });\n },\n };\n Object.defineProperty(globalThis, \"__cdpk\", { enumerable: false });\n globalThis.jupyter = jupyter.namespace;\n globalThis.prompt = jupyter.prompt;\n globalThis.confirm = jupyter.confirm;\n handle = createHandler(globalThis.__cdpk, (code) => (0, eval)(code));\n}\n\nasync function answer(req) {\n if (req.op === \"info\") {\n install(req);\n await preload(req.preload, req.base);\n return { userAgent: globalThis.navigator?.userAgent ?? \"\" };\n }\n if (handle === null) throw new Error(\"the driver wasn't sent info first\");\n return await handle(req);\n}\n\nglobalThis.addEventListener(\"message\", (event) => {\n const req = event.data;\n if (req?.op === \"host\") return receiveHost(req);\n answer(req).then(\n (reply) => post({ kind: \"reply\", id: req.id, ...reply }),\n (err) => post({ kind: \"reply\", id: req.id, failure: String(err?.stack ?? err) }),\n );\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// @ts-self-types=\"./comm.d.mts\"\n// Jupyter comms: bidirectional channels between kernel and frontend, the\n// transport ipywidgets and anywidget are built on (#9). Runs inside the\n// target runtime.\n//\n// Kernel-to-frontend messages (comm_open, comm_msg, comm_close) go out\n// through `send`, the same ordered path as display messages. Frontend\n// messages arrive from the host through `dispatch`, which returns whether\n// anything in the kernel handled them, so the host can answer an unknown\n// target's comm_open with a comm_close, as the protocol asks.\n\nclass Comm {\n #send;\n #onClosed;\n #msgHandlers = [];\n #closeHandlers = [];\n closed = false;\n\n constructor(id, targetName, send, onClosed) {\n this.id = id;\n this.targetName = targetName;\n this.#send = send;\n this.#onClosed = onClosed;\n }\n\n send(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_msg\", { comm_id: this.id, data }, metadata, buffers);\n }\n\n close(data = {}, { metadata = {}, buffers = [] } = {}) {\n if (this.closed) return;\n this.#send(\"comm_close\", { comm_id: this.id, data }, metadata, buffers);\n // close() is synchronous for callers; its close handlers run detached.\n void this._closed({ data, metadata, buffers });\n }\n\n onMsg(handler) {\n this.#msgHandlers.push(handler);\n }\n\n onClose(handler) {\n this.#closeHandlers.push(handler);\n }\n\n async _receive(msg) {\n for (const handler of this.#msgHandlers) await handler(msg);\n }\n\n async _closed(msg) {\n if (this.closed) return;\n this.closed = true;\n this.#onClosed(this.id);\n for (const handler of this.#closeHandlers) await handler(msg);\n }\n}\n\n/**\n * @param {(msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void} send\n * @param {() => string} [newId]\n */\nexport function createComms(send, newId = () => crypto.randomUUID()) {\n const comms = new Map(); // comm_id -> Comm\n const targets = new Map(); // target_name -> handler\n const forget = (id) => comms.delete(id);\n\n function track(id, targetName) {\n const comm = new Comm(id, targetName, send, forget);\n comms.set(id, comm);\n return comm;\n }\n\n const api = {\n open(targetName, data = {}, { metadata = {}, buffers = [] } = {}) {\n const comm = track(newId(), targetName);\n send(\"comm_open\", { comm_id: comm.id, target_name: targetName, data }, metadata, buffers);\n return comm;\n },\n registerTarget(targetName, handler) {\n targets.set(targetName, handler);\n },\n unregisterTarget(targetName) {\n targets.delete(targetName);\n },\n };\n\n async function dispatch(msgType, content, metadata, buffers) {\n const msg = { data: content.data ?? {}, metadata: metadata ?? {}, buffers: buffers ?? [] };\n if (msgType === \"comm_open\") {\n const handler = targets.get(content.target_name);\n if (!handler) return false;\n const comm = track(content.comm_id, content.target_name);\n try {\n await handler(comm, msg);\n } catch (err) {\n // The host answers a failed comm_open with comm_close, so the comm\n // is gone on the frontend: drop it here too, without running close\n // handlers or sending anything (#137).\n comm.closed = true;\n forget(comm.id);\n throw err;\n }\n return true;\n }\n const comm = comms.get(content.comm_id);\n if (!comm) return false;\n if (msgType === \"comm_msg\") await comm._receive(msg);\n else if (msgType === \"comm_close\") await comm._closed(msg);\n else return false;\n return true;\n }\n\n function list() {\n return [...comms.values()].map((comm) => ({ commId: comm.id, targetName: comm.targetName }));\n }\n\n return { api, dispatch, list };\n}\n", "// @ts-self-types=\"./widget.d.mts\"\n// anywidget-compatible widgets over Jupyter comms (#9): the kernel half of\n// the ipywidgets model protocol (version 2.1.0) for anywidget's AnyModel,\n// whose frontend is the `anywidget` JupyterLab/Notebook/VS Code extension.\n//\n// const counter = jupyter.widget({ esm, state: { count: 0 } });\n// counter // display it\n// counter.get(\"count\"); counter.set(\"count\", 1);\n// counter.on(\"change:count\", (value, old) => ...);\n//\n// State is synced as in ipywidgets: `update` messages carry changed keys,\n// with binary values lifted out into message buffers at `buffer_paths`\n// (ipywidgets' _remove_buffers/_put_buffers).\n\nexport const WIDGET_PROTOCOL_VERSION = \"2.1.0\";\nconst WIDGET_TARGET = \"jupyter.widget\";\nconst CONTROL_TARGET = \"jupyter.widget.control\";\nconst VIEW_MIME = \"application/vnd.jupyter.widget-view+json\";\n\n// The anywidget model the frontend instantiates. The module version is a\n// semver range for the frontend's registry; anywidget sends \"~major.minor.*\"\n// of its own version, and \"*\" accepts whichever release is installed.\nconst ANYWIDGET_MODEL = {\n _model_name: \"AnyModel\",\n _model_module: \"anywidget\",\n _model_module_version: \"*\",\n _view_name: \"AnyView\",\n _view_module: \"anywidget\",\n _view_module_version: \"*\",\n _view_count: null,\n};\n\nfunction isBinary(value) {\n return value instanceof Uint8Array || value instanceof ArrayBuffer || ArrayBuffer.isView(value);\n}\n\nfunction toBytes(value) {\n if (value instanceof Uint8Array) return value;\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n}\n\n/** Copies `state` with binary values replaced by null, collecting them. */\nexport function removeBuffers(state) {\n const bufferPaths = [];\n const buffers = [];\n function walk(value, path) {\n if (isBinary(value)) {\n bufferPaths.push(path);\n buffers.push(toBytes(value));\n return null;\n }\n if (Array.isArray(value)) return value.map((item, i) => walk(item, [...path, i]));\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, walk(v, [...path, k])]));\n }\n return value;\n }\n return { state: walk(state, []), bufferPaths, buffers };\n}\n\n/** Puts received buffers back into `state` at `bufferPaths` (in place). */\nexport function putBuffers(state, bufferPaths = [], buffers = []) {\n bufferPaths.forEach((path, i) => {\n let obj = state;\n for (const key of path.slice(0, -1)) obj = obj[key];\n obj[path[path.length - 1]] = buffers[i];\n });\n return state;\n}\n\nclass Widget {\n #comm;\n #state;\n #listeners = new Map(); // event -> Set<listener>\n\n constructor(comm, state, $display) {\n this.#comm = comm;\n this.#state = state;\n this[$display] = () => ({\n [VIEW_MIME]: { version_major: 2, version_minor: 1, model_id: this.id },\n \"text/plain\": `Widget(${this.id})`,\n });\n }\n\n get id() {\n return this.#comm.id;\n }\n\n get closed() {\n return this.#comm.closed;\n }\n\n get(key) {\n return this.#state[key];\n }\n\n /** set(\"key\", value) or set({ key: value, ... }); syncs to the frontend. */\n set(keyOrChanges, value) {\n const changes = typeof keyOrChanges === \"string\" ? { [keyOrChanges]: value } : keyOrChanges;\n this.#apply(changes);\n if (this.closed) return;\n const { state, bufferPaths, buffers } = removeBuffers(changes);\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n }\n\n on(event, listener) {\n if (!this.#listeners.has(event)) this.#listeners.set(event, new Set());\n this.#listeners.get(event).add(listener);\n }\n\n off(event, listener) {\n this.#listeners.get(event)?.delete(listener);\n }\n\n /** A custom message, delivered to the view's model.on(\"msg:custom\"). */\n send(content, buffers = []) {\n this.#comm.send({ method: \"custom\", content }, { buffers });\n }\n\n close() {\n this.#comm.close();\n }\n\n /** The full state, as the frontend sees it (for request_state). */\n fullState() {\n return { ...ANYWIDGET_MODEL, ...this.#state };\n }\n\n async #emit(event, ...args) {\n for (const listener of this.#listeners.get(event) ?? []) await listener(...args);\n }\n\n async #apply(changes) {\n const previous = {};\n for (const [key, value] of Object.entries(changes)) {\n previous[key] = this.#state[key];\n this.#state[key] = value;\n }\n for (const key of Object.keys(changes)) await this.#emit(`change:${key}`, changes[key], previous[key]);\n await this.#emit(\"change\", changes);\n }\n\n async _receive(msg) {\n const { method } = msg.data;\n if (method === \"update\") {\n const changes = putBuffers(msg.data.state ?? {}, msg.data.buffer_paths, msg.buffers);\n await this.#apply(changes);\n } else if (method === \"request_state\") {\n const { state, bufferPaths, buffers } = removeBuffers(this.fullState());\n this.#comm.send({ method: \"update\", state, buffer_paths: bufferPaths }, { buffers });\n } else if (method === \"custom\") {\n await this.#emit(\"msg:custom\", msg.data.content, msg.buffers);\n }\n }\n}\n\n/**\n * @param {import(\"./comm.d.mts\").CommApi} commApi\n * @param {symbol} $display\n */\nexport function createWidgetFactory(commApi, $display) {\n const live = new Map(); // model id -> Widget\n\n // The frontend opens this comm to restore every widget's state, e.g.\n // after the page reloads.\n commApi.registerTarget(CONTROL_TARGET, (control) => {\n control.onMsg((msg) => {\n if (msg.data.method !== \"request_states\") return;\n const states = {};\n for (const widget of live.values()) {\n const full = widget.fullState();\n states[widget.id] = {\n model_name: full._model_name,\n model_module: full._model_module,\n model_module_version: full._model_module_version,\n state: full,\n };\n }\n const { state, bufferPaths, buffers } = removeBuffers(states);\n control.send({ method: \"update_states\", states: state, buffer_paths: bufferPaths }, { buffers });\n });\n });\n\n return function widget({ esm, css, state = {} } = {}) {\n if (typeof esm !== \"string\") throw new TypeError(\"jupyter.widget needs an `esm` module string\");\n const initial = { ...state };\n const full = {\n ...ANYWIDGET_MODEL,\n _esm: esm,\n ...(css === undefined ? {} : { _css: css }),\n _anywidget_id: \"cdp-kernel.widget\",\n ...initial,\n };\n const { state: wire, bufferPaths, buffers } = removeBuffers(full);\n const comm = commApi.open(WIDGET_TARGET, { state: wire, buffer_paths: bufferPaths }, {\n metadata: { version: WIDGET_PROTOCOL_VERSION },\n buffers,\n });\n const instance = new Widget(comm, { ...full }, $display);\n live.set(comm.id, instance);\n comm.onMsg((msg) => instance._receive(msg));\n comm.onClose(() => {\n live.delete(comm.id);\n });\n return instance;\n };\n}\n", "// @ts-self-types=\"./display.d.mts\"\n// The Jupyter display API that Deno exposes as `Deno.jupyter`, made\n// runtime-neutral. Runs inside the target runtime (Node or Deno).\n//\n// Ported from Deno's cli/js/40_jupyter.js (v2.9.6), which is\n// Copyright 2018-2026 the Deno authors, MIT license. The formatting rules\n// (display symbol, canvas, Vega, Polars-style DataFrames, JPEG/PNG bytes,\n// HTML/SVG elements) are unchanged; the Deno internals it used are injected:\n// Deno[Deno.internal].inspectArgs -> host.inspect\n// op_base64_encode_from_buffer -> host.base64\n// Deno.readFileSync -> host.readFile\n// op_jupyter_broadcast -> host.send\n// WebGPU texture/buffer display depends on Deno's wgpu bindings and is\n// omitted. Comms and widgets (jupyter.comm, jupyter.widget) are additions\n// Deno doesn't have; see comm.mjs and widget.mjs.\n\nimport { createComms } from \"./comm.mjs\";\nimport { createWidgetFactory } from \"./widget.mjs\";\n\nexport const $display = Symbol.for(\"Jupyter.display\");\n\nconst rawToEntity = new Map([\n [\"&\", \"&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 isDataFrameLike(obj) {\n return obj !== null && typeof obj === \"object\" &&\n obj.schema !== undefined && typeof obj.schema === \"object\" &&\n typeof obj.head === \"function\" && typeof obj.toRecords === \"function\";\n}\n\nfunction mapPolarsTypeToJSONSchema(colType) {\n const typeMapping = {\n Null: \"null\",\n Bool: \"boolean\",\n Int8: \"integer\",\n Int16: \"integer\",\n Int32: \"integer\",\n Int64: \"integer\",\n UInt8: \"integer\",\n UInt16: \"integer\",\n UInt32: \"integer\",\n UInt64: \"integer\",\n Float32: \"number\",\n Float64: \"number\",\n Date: \"string\",\n Datetime: \"string\",\n Utf8: \"string\",\n Categorical: \"string\",\n List: \"array\",\n Struct: \"object\",\n };\n // Polars DataTypes only expose their name through toJSON().\n const dataType = typeof colType?.toJSON === \"function\" ? colType.toJSON()[\"DataType\"] : undefined;\n return typeMapping[dataType] || \"string\";\n}\n\nfunction extractDataFrame(df) {\n const fields = [];\n for (const [name, colType] of Object.entries(df.schema)) {\n fields.push({ name, type: mapPolarsTypeToJSONSchema(colType) });\n }\n const data = df.head(50).toRecords();\n let html = \"<table><thead><tr>\";\n for (const field of fields) html += `<th>${escapeHTML(String(field.name))}</th>`;\n html += \"</tr></thead><tbody>\";\n for (const row of df.head(10).toRecords()) {\n html += \"<tr>\";\n for (const field of fields) html += `<td>${escapeHTML(String(row[field.name]))}</td>`;\n html += \"</tr>\";\n }\n html += \"</tbody></table>\";\n // Polars has `height`; the row count is left out when there isn't one.\n const size = [];\n if (Number.isInteger(df.height)) size.push(`${df.height} ${df.height === 1 ? \"row\" : \"rows\"}`);\n size.push(`${fields.length} ${fields.length === 1 ? \"column\" : \"columns\"}`);\n const columns = fields.slice(0, 20).map((field) => `${clip(String(field.name), 40)} (${field.type})`);\n if (fields.length > 20) columns.push(`\u2026 ${fields.length - 20} more`);\n return {\n \"application/vnd.dataresource+json\": { data, schema: { fields } },\n \"text/html\": html,\n \"text/plain\": `DataFrame (${size.join(\", \")})${columns.length ? `: ${columns.join(\", \")}` : \"\"}`,\n };\n}\n\nfunction isCanvasLike(obj) {\n return obj !== null && typeof obj === \"object\" && \"toDataURL\" in obj;\n}\n\nexport function isJpg(obj) {\n return obj instanceof Uint8Array && obj.length >= 4 &&\n obj[0] === 0xff && obj[1] === 0xd8 &&\n obj[obj.length - 2] === 0xff && obj[obj.length - 1] === 0xd9;\n}\n\nconst PNG_SIGNATURE = [137, 80, 78, 71, 13, 10, 26, 10];\n\nexport function isPng(obj) {\n return obj instanceof Uint8Array && obj.length >= PNG_SIGNATURE.length &&\n PNG_SIGNATURE.every((byte, i) => obj[i] === byte);\n}\n\nfunction isSVGElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\" &&\n obj.outerHTML.startsWith(\"<svg\");\n}\n\nfunction isHTMLElementLike(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj.outerHTML === \"string\";\n}\n\nfunction hasDisplaySymbol(obj) {\n return obj !== null && typeof obj === \"object\" && typeof obj[$display] === \"function\";\n}\n\nfunction isMediaBundle(obj) {\n return obj !== null && typeof obj === \"object\" && !Array.isArray(obj);\n}\n\n/**\n * @param {{\n * inspect: (value: unknown) => string,\n * base64: (bytes: Uint8Array) => string,\n * readFile: (path: string) => Uint8Array,\n * send: (msgType: string, content: object, metadata: object, buffers: Uint8Array[]) => void,\n * input: (prompt: string, password: boolean) => string | null,\n * }} host\n */\nexport function createJupyter(host) {\n async function format(obj) {\n return await formatNow(obj);\n }\n\n // format without awaiting: the debugger's variable viewer formats values\n // while the target is paused, when no promise settles (#18). A $display\n // method's promise is the caller's to handle.\n function formatNow(obj) {\n if (hasDisplaySymbol(obj)) return obj[$display]();\n if (typeof obj !== \"object\" || obj === null) return { \"text/plain\": host.inspect(obj) };\n if (isCanvasLike(obj)) {\n const [prefix, data] = obj.toDataURL().split(\",\");\n return { [prefix.split(\":\")[1].split(\";\")[0]]: data };\n }\n if (isVegaLike(obj)) {\n const vega = extractVega(obj);\n if (vega) return vega;\n }\n if (isDataFrameLike(obj)) return extractDataFrame(obj);\n if (isJpg(obj)) return { \"image/jpeg\": host.base64(obj) };\n if (isPng(obj)) return { \"image/png\": host.base64(obj) };\n if (isSVGElementLike(obj)) return { \"image/svg+xml\": obj.outerHTML };\n if (isHTMLElementLike(obj)) return { \"text/html\": obj.outerHTML };\n return { \"text/plain\": host.inspect(obj) };\n }\n\n function taggedTemplate(mediatype) {\n return (strings, ...values) => {\n const payload = strings.reduce((acc, string, i) =>\n acc + string + (values[i] !== undefined ? values[i] : \"\"), \"\");\n return { [$display]: () => ({ [mediatype]: payload }) };\n };\n }\n\n function image(obj) {\n if (typeof obj === \"string\") {\n // As Deno does: a path that can't be read gets the TypeError below.\n try {\n obj = host.readFile(obj);\n } catch {\n // fall through\n }\n }\n if (isJpg(obj)) return { [$display]: () => ({ \"image/jpeg\": host.base64(obj) }) };\n if (isPng(obj)) return { [$display]: () => ({ \"image/png\": host.base64(obj) }) };\n throw new TypeError(\n \"Object is not a valid image or a path to an image. `jupyter.image` supports displaying JPG or PNG images.\",\n );\n }\n\n function broadcast(msgType, content, { metadata = {}, buffers = [] } = {}) {\n host.send(msgType, content, metadata, buffers);\n }\n\n async function display(obj, options = { raw: false, update: false }) {\n const bundle = options.raw && isMediaBundle(obj) ? obj : await format(obj);\n broadcast(options.update ? \"update_display_data\" : \"display_data\", {\n data: bundle,\n metadata: {},\n transient: options.display_id ? { display_id: options.display_id } : {},\n });\n }\n\n async function broadcastResult(executionCount, result) {\n if (result === undefined) return;\n try {\n broadcast(\"execute_result\", {\n execution_count: executionCount,\n data: await format(result),\n metadata: {},\n // nbclient crashes on a null `transient`; Deno learned this too.\n transient: {},\n });\n } catch (err) {\n broadcast(\"error\", {\n ename: err instanceof Error ? err.name : \"Error\",\n evalue: err instanceof Error ? err.message : String(err),\n traceback: err instanceof Error && err.stack ? err.stack.split(\"\\n\") : [],\n });\n }\n }\n\n function confirm(message = \"Confirm\") {\n const answer = host.input(`${message} [y/N] `, false);\n return answer === \"Y\" || answer === \"y\";\n }\n\n function prompt(message = \"Prompt\", defaultValue = \"\", { password = false } = {}) {\n if (defaultValue != \"\") message += ` [${defaultValue}]`;\n const answer = host.input(message, password);\n return answer === \"\" ? defaultValue : answer;\n }\n\n const comms = createComms((msgType, content, metadata, buffers) => host.send(msgType, content, metadata, buffers));\n\n // 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 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 format,\n md: taggedTemplate(\"text/markdown\"),\n html: taggedTemplate(\"text/html\"),\n svg: taggedTemplate(\"image/svg+xml\"),\n image,\n $display,\n comm: comms.api,\n widget: createWidgetFactory(comms.api, $display),\n },\n broadcastResult,\n formatNow,\n confirm,\n prompt,\n commDispatch,\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});\n\n// --- Modules ----------------------------------------------------------------\nlet cdn = DEFAULT_CDN;\n\n\n// --- The host page (#384) -----------------------------------------------------\n// Requests to the page's `host` handler (src/browser/target.ts), and events\n// it sends. Preload modules get this object; cells only through them.\nconst hostCalls = new Map();\nconst hostListeners = new Set();\nlet nextHostId = 0;\n\nfunction hostError(error) {\n const err = new Error(String(error?.message ?? \"the host request failed\"));\n if (typeof error?.name === \"string\") err.name = error.name;\n if (error?.code !== undefined) err.code = error.code;\n return err;\n}\n\nconst host = {\n /** Resolves with the page's answer; aborting `signal` cancels the call on the page too. */\n request(method, params, { signal, transfer } = {}) {\n if (signal?.aborted) return Promise.reject(signal.reason);\n const id = ++nextHostId;\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n hostCalls.delete(id);\n post({ kind: \"host\", id, cancel: true });\n reject(signal.reason);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n const done = () => signal?.removeEventListener(\"abort\", onAbort);\n try {\n globalThis.postMessage({ kind: \"host\", id, method, params }, transfer ?? []);\n } catch (err) {\n done(); // params structured clone can't copy\n throw err;\n }\n hostCalls.set(id, { resolve, reject, done });\n });\n },\n /** Calls `listener(event, value)` for each event the page sends; returns a function that stops it. */\n onEvent(listener) {\n hostListeners.add(listener);\n return () => hostListeners.delete(listener);\n },\n};\n\nfunction receiveHost(msg) {\n if (msg.id === undefined) {\n for (const listener of hostListeners) {\n try {\n listener(msg.event, msg.value);\n } catch (err) {\n reportUncaught(\"Uncaught\", err);\n }\n }\n return;\n }\n const call = hostCalls.get(msg.id);\n if (!call) return; // cancelled\n hostCalls.delete(msg.id);\n call.done();\n if (msg.error !== undefined) call.reject(hostError(msg.error));\n else call.resolve(msg.result);\n}\n\n// Each module is imported in order, and a default export that is a function\n// is called with the host. A module that fails is reported, and the kernel\n// runs without it.\nasync function preload(urls, base) {\n for (const specifier of Array.isArray(urls) ? urls : []) {\n try {\n const mod = await import(new URL(specifier, base).href);\n if (typeof mod.default === \"function\") await mod.default({ host, jupyter: jupyter.namespace });\n } catch (err) {\n reportUncaught(`Preloading ${specifier} failed`, err);\n }\n }\n}\n\n// --- The shim cells and the evaluator use -----------------------------------\nlet handle = null;\n\nfunction install({ base, cdn: cdnBase }) {\n if (typeof cdnBase === \"string\") cdn = cdnBase.endsWith(\"/\") ? cdnBase : cdnBase + \"/\";\n const url = new URL(\"$cdpk$repl.mjs\", base).href;\n globalThis.__cdpk = {\n import: (specifier, options) => import(resolveSpecifier(specifier, url, cdn), options),\n meta: { url, resolve: (specifier) => resolveSpecifier(specifier, url, cdn) },\n // inspect_request (#10): by descriptor, so nothing runs.\n describeForInspect: (value, detail) => describeValue(value, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n inspectPath: (path, detail) => inspectPath(path, { inspect: (v) => inspect(v, { depth: 2 }), detail }),\n resolvePath,\n barrier: () => 0,\n broadcastResult: jupyter.broadcastResult,\n // execute_request's user_expressions (#340).\n formatJson: async (value) => JSON.stringify(await jupyter.namespace.format(value)),\n // 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": ";AAWA,IAAM,OAAN,MAAW;AAAA,EACT;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AAAA,EAChB,iBAAiB,CAAC;AAAA,EAClB,SAAS;AAAA,EAET,YAAY,IAAI,YAAY,MAAM,UAAU;AAC1C,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,QAAQ;AACb,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,KAAK,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG;AACpD,QAAI,KAAK,OAAQ;AACjB,SAAK,MAAM,YAAY,EAAE,SAAS,KAAK,IAAI,KAAK,GAAG,UAAU,OAAO;AAAA,EACtE;AAAA,EAEA,MAAM,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG;AACrD,QAAI,KAAK,OAAQ;AACjB,SAAK,MAAM,cAAc,EAAE,SAAS,KAAK,IAAI,KAAK,GAAG,UAAU,OAAO;AAEtE,SAAK,KAAK,QAAQ,EAAE,MAAM,UAAU,QAAQ,CAAC;AAAA,EAC/C;AAAA,EAEA,MAAM,SAAS;AACb,SAAK,aAAa,KAAK,OAAO;AAAA,EAChC;AAAA,EAEA,QAAQ,SAAS;AACf,SAAK,eAAe,KAAK,OAAO;AAAA,EAClC;AAAA,EAEA,MAAM,SAAS,KAAK;AAClB,eAAW,WAAW,KAAK,aAAc,OAAM,QAAQ,GAAG;AAAA,EAC5D;AAAA,EAEA,MAAM,QAAQ,KAAK;AACjB,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,SAAK,UAAU,KAAK,EAAE;AACtB,eAAW,WAAW,KAAK,eAAgB,OAAM,QAAQ,GAAG;AAAA,EAC9D;AACF;AAMO,SAAS,YAAY,MAAM,QAAQ,MAAM,OAAO,WAAW,GAAG;AACnE,QAAM,QAAQ,oBAAI,IAAI;AACtB,QAAM,UAAU,oBAAI,IAAI;AACxB,QAAM,SAAS,CAAC,OAAO,MAAM,OAAO,EAAE;AAEtC,WAAS,MAAM,IAAI,YAAY;AAC7B,UAAM,OAAO,IAAI,KAAK,IAAI,YAAY,MAAM,MAAM;AAClD,UAAM,IAAI,IAAI,IAAI;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,MAAM;AAAA,IACV,KAAK,YAAY,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG;AAChE,YAAM,OAAO,MAAM,MAAM,GAAG,UAAU;AACtC,WAAK,aAAa,EAAE,SAAS,KAAK,IAAI,aAAa,YAAY,KAAK,GAAG,UAAU,OAAO;AACxF,aAAO;AAAA,IACT;AAAA,IACA,eAAe,YAAY,SAAS;AAClC,cAAQ,IAAI,YAAY,OAAO;AAAA,IACjC;AAAA,IACA,iBAAiB,YAAY;AAC3B,cAAQ,OAAO,UAAU;AAAA,IAC3B;AAAA,EACF;AAEA,iBAAe,SAAS,SAAS,SAAS,UAAU,SAAS;AAC3D,UAAM,MAAM,EAAE,MAAM,QAAQ,QAAQ,CAAC,GAAG,UAAU,YAAY,CAAC,GAAG,SAAS,WAAW,CAAC,EAAE;AACzF,QAAI,YAAY,aAAa;AAC3B,YAAM,UAAU,QAAQ,IAAI,QAAQ,WAAW;AAC/C,UAAI,CAAC,QAAS,QAAO;AACrB,YAAMA,QAAO,MAAM,QAAQ,SAAS,QAAQ,WAAW;AACvD,UAAI;AACF,cAAM,QAAQA,OAAM,GAAG;AAAA,MACzB,SAAS,KAAK;AAIZ,QAAAA,MAAK,SAAS;AACd,eAAOA,MAAK,EAAE;AACd,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT;AACA,UAAM,OAAO,MAAM,IAAI,QAAQ,OAAO;AACtC,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,YAAY,WAAY,OAAM,KAAK,SAAS,GAAG;AAAA,aAC1C,YAAY,aAAc,OAAM,KAAK,QAAQ,GAAG;AAAA,QACpD,QAAO;AACZ,WAAO;AAAA,EACT;AAEA,WAASC,QAAO;AACd,WAAO,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,YAAY,KAAK,WAAW,EAAE;AAAA,EAC7F;AAEA,SAAO,EAAE,KAAK,UAAU,MAAAA,MAAK;AAC/B;;;ACvGO,IAAM,0BAA0B;AACvC,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AACvB,IAAM,YAAY;AAKlB,IAAM,kBAAkB;AAAA,EACtB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,aAAa;AACf;AAEA,SAAS,SAAS,OAAO;AACvB,SAAO,iBAAiB,cAAc,iBAAiB,eAAe,YAAY,OAAO,KAAK;AAChG;AAEA,SAAS,QAAQ,OAAO;AACtB,MAAI,iBAAiB,WAAY,QAAO;AACxC,MAAI,iBAAiB,YAAa,QAAO,IAAI,WAAW,KAAK;AAC7D,SAAO,IAAI,WAAW,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AACxE;AAGO,SAAS,cAAc,OAAO;AACnC,QAAM,cAAc,CAAC;AACrB,QAAM,UAAU,CAAC;AACjB,WAAS,KAAK,OAAO,MAAM;AACzB,QAAI,SAAS,KAAK,GAAG;AACnB,kBAAY,KAAK,IAAI;AACrB,cAAQ,KAAK,QAAQ,KAAK,CAAC;AAC3B,aAAO;AAAA,IACT;AACA,QAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,CAAC,MAAM,MAAM,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAChF,QAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,aAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,IAC7F;AACA,WAAO;AAAA,EACT;AACA,SAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,aAAa,QAAQ;AACxD;AAGO,SAAS,WAAW,OAAO,cAAc,CAAC,GAAG,UAAU,CAAC,GAAG;AAChE,cAAY,QAAQ,CAAC,MAAM,MAAM;AAC/B,QAAI,MAAM;AACV,eAAWC,QAAO,KAAK,MAAM,GAAG,EAAE,EAAG,OAAM,IAAIA,IAAG;AAClD,QAAI,KAAK,KAAK,SAAS,CAAC,CAAC,IAAI,QAAQ,CAAC;AAAA,EACxC,CAAC;AACD,SAAO;AACT;AAEA,IAAM,SAAN,MAAa;AAAA,EACX;AAAA,EACA;AAAA,EACA,aAAa,oBAAI,IAAI;AAAA;AAAA,EAErB,YAAY,MAAM,OAAOC,WAAU;AACjC,SAAK,QAAQ;AACb,SAAK,SAAS;AACd,SAAKA,SAAQ,IAAI,OAAO;AAAA,MACtB,CAAC,SAAS,GAAG,EAAE,eAAe,GAAG,eAAe,GAAG,UAAU,KAAK,GAAG;AAAA,MACrE,cAAc,UAAU,KAAK,EAAE;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,IAAI,KAAK;AACP,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAI,SAAS;AACX,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEA,IAAID,MAAK;AACP,WAAO,KAAK,OAAOA,IAAG;AAAA,EACxB;AAAA;AAAA,EAGA,IAAI,cAAc,OAAO;AACvB,UAAM,UAAU,OAAO,iBAAiB,WAAW,EAAE,CAAC,YAAY,GAAG,MAAM,IAAI;AAC/E,SAAK,OAAO,OAAO;AACnB,QAAI,KAAK,OAAQ;AACjB,UAAM,EAAE,OAAO,aAAa,QAAQ,IAAI,cAAc,OAAO;AAC7D,SAAK,MAAM,KAAK,EAAE,QAAQ,UAAU,OAAO,cAAc,YAAY,GAAG,EAAE,QAAQ,CAAC;AAAA,EACrF;AAAA,EAEA,GAAG,OAAO,UAAU;AAClB,QAAI,CAAC,KAAK,WAAW,IAAI,KAAK,EAAG,MAAK,WAAW,IAAI,OAAO,oBAAI,IAAI,CAAC;AACrE,SAAK,WAAW,IAAI,KAAK,EAAE,IAAI,QAAQ;AAAA,EACzC;AAAA,EAEA,IAAI,OAAO,UAAU;AACnB,SAAK,WAAW,IAAI,KAAK,GAAG,OAAO,QAAQ;AAAA,EAC7C;AAAA;AAAA,EAGA,KAAK,SAAS,UAAU,CAAC,GAAG;AAC1B,SAAK,MAAM,KAAK,EAAE,QAAQ,UAAU,QAAQ,GAAG,EAAE,QAAQ,CAAC;AAAA,EAC5D;AAAA,EAEA,QAAQ;AACN,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA;AAAA,EAGA,YAAY;AACV,WAAO,EAAE,GAAG,iBAAiB,GAAG,KAAK,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,MAAM,UAAU,MAAM;AAC1B,eAAW,YAAY,KAAK,WAAW,IAAI,KAAK,KAAK,CAAC,EAAG,OAAM,SAAS,GAAG,IAAI;AAAA,EACjF;AAAA,EAEA,MAAM,OAAO,SAAS;AACpB,UAAM,WAAW,CAAC;AAClB,eAAW,CAACA,MAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,eAASA,IAAG,IAAI,KAAK,OAAOA,IAAG;AAC/B,WAAK,OAAOA,IAAG,IAAI;AAAA,IACrB;AACA,eAAWA,QAAO,OAAO,KAAK,OAAO,EAAG,OAAM,KAAK,MAAM,UAAUA,IAAG,IAAI,QAAQA,IAAG,GAAG,SAASA,IAAG,CAAC;AACrG,UAAM,KAAK,MAAM,UAAU,OAAO;AAAA,EACpC;AAAA,EAEA,MAAM,SAAS,KAAK;AAClB,UAAM,EAAE,OAAO,IAAI,IAAI;AACvB,QAAI,WAAW,UAAU;AACvB,YAAM,UAAU,WAAW,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,KAAK,cAAc,IAAI,OAAO;AACnF,YAAM,KAAK,OAAO,OAAO;AAAA,IAC3B,WAAW,WAAW,iBAAiB;AACrC,YAAM,EAAE,OAAO,aAAa,QAAQ,IAAI,cAAc,KAAK,UAAU,CAAC;AACtE,WAAK,MAAM,KAAK,EAAE,QAAQ,UAAU,OAAO,cAAc,YAAY,GAAG,EAAE,QAAQ,CAAC;AAAA,IACrF,WAAW,WAAW,UAAU;AAC9B,YAAM,KAAK,MAAM,cAAc,IAAI,KAAK,SAAS,IAAI,OAAO;AAAA,IAC9D;AAAA,EACF;AACF;AAMO,SAAS,oBAAoB,SAASC,WAAU;AACrD,QAAM,OAAO,oBAAI,IAAI;AAIrB,UAAQ,eAAe,gBAAgB,CAAC,YAAY;AAClD,YAAQ,MAAM,CAAC,QAAQ;AACrB,UAAI,IAAI,KAAK,WAAW,iBAAkB;AAC1C,YAAM,SAAS,CAAC;AAChB,iBAAW,UAAU,KAAK,OAAO,GAAG;AAClC,cAAM,OAAO,OAAO,UAAU;AAC9B,eAAO,OAAO,EAAE,IAAI;AAAA,UAClB,YAAY,KAAK;AAAA,UACjB,cAAc,KAAK;AAAA,UACnB,sBAAsB,KAAK;AAAA,UAC3B,OAAO;AAAA,QACT;AAAA,MACF;AACA,YAAM,EAAE,OAAO,aAAa,QAAQ,IAAI,cAAc,MAAM;AAC5D,cAAQ,KAAK,EAAE,QAAQ,iBAAiB,QAAQ,OAAO,cAAc,YAAY,GAAG,EAAE,QAAQ,CAAC;AAAA,IACjG,CAAC;AAAA,EACH,CAAC;AAED,SAAO,SAAS,OAAO,EAAE,KAAK,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG;AACpD,QAAI,OAAO,QAAQ,SAAU,OAAM,IAAI,UAAU,6CAA6C;AAC9F,UAAM,UAAU,EAAE,GAAG,MAAM;AAC3B,UAAM,OAAO;AAAA,MACX,GAAG;AAAA,MACH,MAAM;AAAA,MACN,GAAI,QAAQ,SAAY,CAAC,IAAI,EAAE,MAAM,IAAI;AAAA,MACzC,eAAe;AAAA,MACf,GAAG;AAAA,IACL;AACA,UAAM,EAAE,OAAO,MAAM,aAAa,QAAQ,IAAI,cAAc,IAAI;AAChE,UAAM,OAAO,QAAQ,KAAK,eAAe,EAAE,OAAO,MAAM,cAAc,YAAY,GAAG;AAAA,MACnF,UAAU,EAAE,SAAS,wBAAwB;AAAA,MAC7C;AAAA,IACF,CAAC;AACD,UAAM,WAAW,IAAI,OAAO,MAAM,EAAE,GAAG,KAAK,GAAGA,SAAQ;AACvD,SAAK,IAAI,KAAK,IAAI,QAAQ;AAC1B,SAAK,MAAM,CAAC,QAAQ,SAAS,SAAS,GAAG,CAAC;AAC1C,SAAK,QAAQ,MAAM;AACjB,WAAK,OAAO,KAAK,EAAE;AAAA,IACrB,CAAC;AACD,WAAO;AAAA,EACT;AACF;;;AC5LO,IAAM,WAAW,OAAO,IAAI,iBAAiB;AAEpD,IAAM,cAAc,oBAAI,IAAI;AAAA,EAC1B,CAAC,KAAK,OAAO;AAAA,EACb,CAAC,KAAK,MAAM;AAAA,EACZ,CAAC,KAAK,MAAM;AAAA,EACZ,CAAC,KAAK,QAAQ;AAAA,EACd,CAAC,KAAK,OAAO;AACf,CAAC;AACD,IAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,GAAG;AAE9D,SAAS,WAAW,KAAK;AAC9B,SAAO,IAAI,WAAW,OAAO,CAAC,MAAM,YAAY,IAAI,CAAC,KAAK,CAAC;AAC7D;AAEA,SAAS,WAAW,KAAK;AACvB,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,YAAY;AAChE;AAEA,SAAS,YAAY,KAAK;AACxB,QAAM,OAAO,IAAI,OAAO;AACxB,MAAI,OAAO,SAAS,YAAY,SAAS,QAAQ,EAAE,aAAa,MAAO,QAAO;AAC9E,MAAI,YAAY;AAChB,MAAI,KAAK,YAAY,mDAAmD;AACtE,gBAAY;AAAA,EACd,WAAW,KAAK,YAAY,mDAAmD;AAC7E,gBAAY;AAAA,EACd;AACA,QAAM,UAAU,eAAe,IAAI;AACnC,SAAO,YAAY,SAAY,EAAE,CAAC,SAAS,GAAG,KAAK,IAAI,EAAE,CAAC,SAAS,GAAG,MAAM,cAAc,QAAQ;AACpG;AAMA,IAAM,WAAW,EAAE,GAAG,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU;AAC9F,IAAM,eAAe;AAErB,SAAS,KAAK,KAAK,MAAM,IAAI;AAC3B,SAAO,IAAI,SAAS,MAAM,GAAG,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,WAAM;AAC1D;AAEA,SAAS,aAAa,GAAG;AACvB,SAAO,OAAO,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAC1E;AAEA,SAAS,UAAU,OAAO;AACxB,QAAM,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO;AACjG,QAAM,MAAM,MAAM,QAAQ,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,OAAO,SAAS,WAAW,OAAO;AACrF,SAAO,MAAM,KAAK,KAAK,KAAK,EAAE,CAAC,MAAM;AACvC;AAEA,SAAS,SAAS,KAAK,OAAO;AAC5B,MAAI,QAAQ,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACpD,MAAI,SAAS,IAAK,QAAO,IAAI,KAAK;AAElC,MAAI,MAAM,SAAS,IAAI,EAAG,QAAO,IAAI,MAAM,QAAQ,UAAU,IAAI,CAAC;AAClE,SAAO,MAAM,MAAM,GAAG,EAAE,OAAO,CAAC,KAAKC,SAAS,QAAQ,QAAQ,OAAO,QAAQ,WAAW,SAAY,IAAIA,IAAG,GAAI,GAAG;AACpH;AAEA,SAAS,WAAW,MAAM,OAAO,MAAM;AACrC,QAAM,SAAS,CAAC;AAChB,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,SAAS,KAAK,KAAK;AACjC,QAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,GAAI,QAAO,KAAK,KAAK;AAAA,EAC9E;AACA,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,SAAS,gBAAgB;AAC3B,QAAI,MAAM;AACV,QAAI,MAAM;AACV,eAAW,SAAS,QAAQ;AAC1B,YAAM,IAAI,OAAO,KAAK;AACtB,UAAI,CAAC,OAAO,SAAS,CAAC,EAAG;AACzB,UAAI,IAAI,IAAK,OAAM;AACnB,UAAI,IAAI,IAAK,OAAM;AAAA,IACrB;AACA,QAAI,MAAM,IAAK,QAAO;AACtB,WAAO,QAAQ,MAAM,aAAa,GAAG,IAAI,GAAG,aAAa,GAAG,CAAC,OAAO,aAAa,GAAG,CAAC;AAAA,EACvF;AACA,MAAI,SAAS,YAAY;AACvB,QAAI;AACJ,QAAI;AACJ,eAAW,SAAS,QAAQ;AAC1B,YAAM,IAAI,iBAAiB,OAAO,MAAM,QAAQ,IAAI,OAAO,UAAU,WAAW,QAAQ,KAAK,MAAM,OAAO,KAAK,CAAC;AAChH,UAAI,CAAC,OAAO,SAAS,CAAC,EAAG;AACzB,UAAI,QAAQ,UAAa,IAAI,IAAI,EAAG,OAAM,EAAE,GAAG,MAAM;AACrD,UAAI,QAAQ,UAAa,IAAI,IAAI,EAAG,OAAM,EAAE,GAAG,MAAM;AAAA,IACvD;AACA,QAAI,QAAQ,OAAW,QAAO;AAC9B,UAAM,OAAO,CAAC,EAAE,MAAM,MACpB,OAAO,UAAU,WAAW,KAAK,OAAO,EAAE,IAAI,IAAI,KAAK,iBAAiB,OAAO,MAAM,QAAQ,IAAI,KAAK,EAAE,YAAY;AACtH,WAAO,IAAI,MAAM,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC;AAAA,EACnE;AACA,QAAM,WAAW,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK,CAAC,CAAC;AACjH,SAAO,GAAG,SAAS,IAAI,IAAI,SAAS,SAAS,IAAI,UAAU,QAAQ;AACrE;AAEA,SAAS,gBAAgB,UAAU,MAAM;AACvC,QAAM,QAAQ,CAAC;AACf,aAAW,CAAC,SAAS,GAAG,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACrD,QAAI,YAAY,aAAa,QAAQ,QAAQ,OAAO,QAAQ,YAAY,MAAM,QAAQ,GAAG,EAAG;AAC5F,QAAI,IAAI,UAAU,UAAa,IAAI,cAAc,OAAW;AAC5D,QAAI,OAAO,OAAO,IAAI,UAAU,WAAW,IAAI,QAAQ,IAAI,OAAO,SAAS,UAAU,IAAI,MAAM,MAAM,KAAK;AAC1G,QAAI,IAAI,cAAc,OAAW,QAAO,GAAG,IAAI,SAAS,IAAI,IAAI;AAAA,aACvD,IAAI,aAAa,OAAW,QAAO,GAAG,OAAO,IAAI,aAAa,WAAW,IAAI,WAAW,MAAM,IAAI,IAAI;AAC/G,UAAM,OAAO,SAAS,IAAI,IAAI,KAAK,IAAI;AACvC,UAAM,UAAU,CAAC;AACjB,QAAI,OAAO,SAAS,SAAU,SAAQ,KAAK,IAAI;AAC/C,QAAI,QAAQ,OAAO,IAAI,UAAU,YAAY,IAAI,cAAc,QAAW;AACxE,YAAM,QAAQ,WAAW,MAAM,IAAI,OAAO,IAAI;AAC9C,UAAI,MAAO,SAAQ,KAAK,KAAK;AAAA,IAC/B;AACA,UAAM,KAAK,GAAG,OAAO,IAAI,KAAK,MAAM,EAAE,CAAC,GAAG,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,EAC9F;AACA,SAAO;AACT;AAEA,SAAS,OAAO,MAAM,UAAU;AAC9B,MAAI,SAAS,QAAQ,OAAO,SAAS,SAAU,QAAO;AACtD,MAAI,MAAM,QAAQ,KAAK,MAAM,EAAG,QAAO,KAAK;AAC5C,MAAI,OAAO,KAAK,SAAS,YAAY,MAAM,QAAQ,WAAW,KAAK,IAAI,CAAC,EAAG,QAAO,SAAS,KAAK,IAAI;AACpG,SAAO;AACT;AAEA,SAAS,WAAW,MAAM,MAAM;AAC9B,MAAI,KAAM,QAAO,GAAG,KAAK,MAAM,IAAI,KAAK,WAAW,IAAI,QAAQ,MAAM;AACrE,MAAI,OAAO,MAAM,QAAQ,SAAU,QAAO,aAAa,KAAK,KAAK,GAAG,CAAC;AACrE,SAAO;AACT;AAEA,SAAS,UAAU,KAAK;AACtB,MAAI,MAAM,QAAQ,GAAG,EAAG,QAAO,IAAI,KAAK,IAAI;AAC5C,MAAI,QAAQ,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACpD,MAAI,OAAO,IAAI,UAAU,SAAU,QAAO,IAAI;AAC9C,SAAO,OAAO,OAAO,GAAG,EAAE,IAAI,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AACpE;AAEA,SAAS,sBAAsB,MAAM,OAAO,WAAW,UAAU,OAAO,OAAO;AAC7E,QAAM,SAAS,KAAK,OAAO,KAAK;AAChC,QAAM,OAAO,KAAK,QAAQ,UAAU;AACpC,QAAM,OAAO,OAAO,MAAM,QAAQ;AAClC,QAAM,OAAO,GAAG,MAAM,GAAG,KAAK;AAC9B,QAAM,QAAQ,UAAU,KAAK,KAAK;AAClC,QAAM,WAAW,KAAK,SAAS,KAAK,UAAU,KAAK,WAAW,KAAK;AACnE,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,UAAM,OAAO,KAAK,QAAQ,UAAU;AACpC,UAAM,OAAO,CAAC,GAAG,SAAS,MAAM,IAAI,SAAS,WAAW,IAAI,OAAO,GAAG,IAAI,GAAG,IAAI,WAAW,MAAM,IAAI,CAAC,EAAE,OAAO,OAAO;AACvH,UAAM,KAAK,GAAG,IAAI,GAAG,KAAK,QAAQ,YAAY,cAAc,SAAS,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,EAAE;AAChG,UAAMC,YAAW,KAAK,QAAQ,EAAE,GAAG,UAAU,UAAU,GAAG,KAAK,SAAS,IAAI,CAAC;AAC7E,aAAS,MAAM,GAAG,YAAY,EAAE,QAAQ,CAAC,OAAO,MAAM;AACpD,UAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;AAC/C,8BAAsB,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,UAAAA,UAAS,GAAG,UAAU,QAAQ,GAAG,KAAK;AAAA,MACnG;AAAA,IACF,CAAC;AACD,QAAI,SAAS,SAAS,aAAc,OAAM,KAAK,GAAG,MAAM,YAAO,SAAS,SAAS,YAAY,OAAO;AACpG;AAAA,EACF;AACA,OAAK,KAAK,UAAU,UAAa,KAAK,WAAW,WAAc,KAAK,SAAS,QAAQ,OAAO,KAAK,SAAS,UAAU;AAClH,UAAM,OAAO,KAAK,UAAU,SAAY,cAAc,UAAU,KAAK,KAAK,CAAC,KAAK,iBAAiB,UAAU,KAAK,MAAM,CAAC;AACvH,UAAM,OAAO,WAAW,MAAM,IAAI;AAClC,UAAM,KAAK,GAAG,IAAI,QAAQ,KAAK,IAAI,IAAI,GAAG,OAAO,KAAK,IAAI,KAAK,EAAE,EAAE;AACnE,0BAAsB,KAAK,MAAM,gBAAgB,EAAE,MAAM,UAAU,CAAC,EAAE,GAAG,UAAU,QAAQ,GAAG,KAAK;AACnG;AAAA,EACF;AACA,QAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,KAAK,MAAM;AACpE,QAAM,WAAW,EAAE,GAAG,UAAU,UAAU,GAAG,KAAK,SAAS;AAC3D,QAAM,QAAQ,gBAAgB,UAAU,IAAI;AAE5C,MAAI,KAAK,SAAS,UAAa,UAAU,GAAG;AAC1C,UAAM,OAAO,WAAW,MAAM,IAAI;AAClC,QAAI,KAAM,OAAM,KAAK,IAAI;AAAA,EAC3B;AACA,QAAM,KAAK,GAAG,IAAI,GAAG,OAAO,SAAS,WAAW,GAAG,IAAI,MAAM,EAAE,QAAQ,KAAK,GAAG,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE;AAC9H;AAEA,SAAS,cAAc,OAAO,OAAO;AACnC,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,aAAW,QAAQ,OAAO;AACxB,QAAI,OAAO,MAAM,SAAS,SAAU,OAAM,IAAI,KAAK,IAAI;AACvD,kBAAc,MAAM,OAAO,KAAK;AAAA,EAClC;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAM;AAC3B,QAAM,WAAW,CAAC;AAClB,QAAM,QAAQ,CAAC,GAAG,cAAc,KAAK,OAAO,oBAAI,IAAI,CAAC,CAAC;AACtD,MAAI,MAAM,OAAQ,UAAS,KAAK,SAAS,MAAM,KAAK,IAAI,CAAC,EAAE;AAC3D,QAAMC,QAAO,CAAC,OAAO,aAAa;AAChC,UAAM,QAAQ,MAAM,MAAM,GAAG,YAAY,EAAE,IAAI,QAAQ;AACvD,QAAI,MAAM,SAAS,aAAc,OAAM,KAAK,UAAK,MAAM,SAAS,YAAY,OAAO;AACnF,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACA,QAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,MAAM,QAAQ,OAAO,MAAM,QAAQ,IAAI,CAAC;AACxG,MAAI,KAAK,QAAQ;AACf,aAAS,KAAK,QAAQA,MAAK,MAAM,CAAC,MAAM;AACtC,YAAM,OAAO,KAAK,OAAO,EAAE,QAAQ,GAAG,GAAG,EAAE;AAC3C,UAAI,MAAM,QAAQ,EAAE,MAAM,EAAG,QAAO,GAAG,IAAI,KAAK,EAAE,OAAO,MAAM,IAAI,EAAE,OAAO,WAAW,IAAI,QAAQ,MAAM;AACzG,UAAI,OAAO,EAAE,QAAQ,SAAU,QAAO,GAAG,IAAI,UAAU,KAAK,EAAE,GAAG,CAAC;AAClE,UAAI,EAAE,WAAW,OAAW,QAAO,GAAG,IAAI,UAAU,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;AAC9E,aAAO;AAAA,IACT,CAAC,CAAC,EAAE;AAAA,EACN;AACA,QAAM,SAAS,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,OAAO,OAAO,CAAC,MAAM,MAAM,QAAQ,OAAO,MAAM,QAAQ,IAAI,CAAC;AAC9G,MAAI,OAAO,QAAQ;AACjB,aAAS,KAAK,UAAUA,MAAK,QAAQ,CAAC,MAAM,GAAG,KAAK,OAAO,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,QAAQ,GAAG,CAAC,EAAE;AAAA,EAC7G;AACA,SAAO,aAAa,UAAU,KAAK,KAAK,CAAC,GAAG,SAAS,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE;AAC/F;AAEA,SAAS,eAAe,MAAM;AAC5B,MAAI;AACF,QAAI,OAAO,KAAK,YAAY,YAAY,KAAK,QAAQ,SAAS,aAAa,GAAG;AAC5E,YAAM,QAAQ,CAAC;AACf,4BAAsB,MAAM,cAAc,EAAE,UAAU,CAAC,EAAE,GAAG,KAAK,UAAU,GAAG,KAAK;AACnF,aAAO,MAAM,KAAK,IAAI;AAAA,IACxB;AACA,WAAO,cAAc,IAAI;AAAA,EAC3B,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,KAAK;AAC5B,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YACpC,IAAI,WAAW,UAAa,OAAO,IAAI,WAAW,YAClD,OAAO,IAAI,SAAS,cAAc,OAAO,IAAI,cAAc;AAC/D;AAEA,SAAS,0BAA0B,SAAS;AAC1C,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAEA,QAAM,WAAW,OAAO,SAAS,WAAW,aAAa,QAAQ,OAAO,EAAE,UAAU,IAAI;AACxF,SAAO,YAAY,QAAQ,KAAK;AAClC;AAEA,SAAS,iBAAiB,IAAI;AAC5B,QAAM,SAAS,CAAC;AAChB,aAAW,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,GAAG,MAAM,GAAG;AACvD,WAAO,KAAK,EAAE,MAAM,MAAM,0BAA0B,OAAO,EAAE,CAAC;AAAA,EAChE;AACA,QAAM,OAAO,GAAG,KAAK,EAAE,EAAE,UAAU;AACnC,MAAI,OAAO;AACX,aAAW,SAAS,OAAQ,SAAQ,OAAO,WAAW,OAAO,MAAM,IAAI,CAAC,CAAC;AACzE,UAAQ;AACR,aAAW,OAAO,GAAG,KAAK,EAAE,EAAE,UAAU,GAAG;AACzC,YAAQ;AACR,eAAW,SAAS,OAAQ,SAAQ,OAAO,WAAW,OAAO,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC;AAC9E,YAAQ;AAAA,EACV;AACA,UAAQ;AAER,QAAM,OAAO,CAAC;AACd,MAAI,OAAO,UAAU,GAAG,MAAM,EAAG,MAAK,KAAK,GAAG,GAAG,MAAM,IAAI,GAAG,WAAW,IAAI,QAAQ,MAAM,EAAE;AAC7F,OAAK,KAAK,GAAG,OAAO,MAAM,IAAI,OAAO,WAAW,IAAI,WAAW,SAAS,EAAE;AAC1E,QAAM,UAAU,OAAO,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,OAAO,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,MAAM,IAAI,GAAG;AACpG,MAAI,OAAO,SAAS,GAAI,SAAQ,KAAK,UAAK,OAAO,SAAS,EAAE,OAAO;AACnE,SAAO;AAAA,IACL,qCAAqC,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE;AAAA,IAChE,aAAa;AAAA,IACb,cAAc,cAAc,KAAK,KAAK,IAAI,CAAC,IAAI,QAAQ,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE;AAAA,EAChG;AACF;AAEA,SAAS,aAAa,KAAK;AACzB,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,eAAe;AACnE;AAEO,SAAS,MAAM,KAAK;AACzB,SAAO,eAAe,cAAc,IAAI,UAAU,KAChD,IAAI,CAAC,MAAM,OAAQ,IAAI,CAAC,MAAM,OAC9B,IAAI,IAAI,SAAS,CAAC,MAAM,OAAQ,IAAI,IAAI,SAAS,CAAC,MAAM;AAC5D;AAEA,IAAM,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAE/C,SAAS,MAAM,KAAK;AACzB,SAAO,eAAe,cAAc,IAAI,UAAU,cAAc,UAC9D,cAAc,MAAM,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,IAAI;AACpD;AAEA,SAAS,iBAAiB,KAAK;AAC7B,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAO,IAAI,cAAc,YACzE,IAAI,UAAU,WAAW,MAAM;AACnC;AAEA,SAAS,kBAAkB,KAAK;AAC9B,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAO,IAAI,cAAc;AAC7E;AAEA,SAAS,iBAAiB,KAAK;AAC7B,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,OAAO,IAAI,QAAQ,MAAM;AAC7E;AAEA,SAAS,cAAc,KAAK;AAC1B,SAAO,QAAQ,QAAQ,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG;AACtE;AAWO,SAAS,cAAcC,OAAM;AAClC,iBAAeC,QAAO,KAAK;AACzB,WAAO,MAAM,UAAU,GAAG;AAAA,EAC5B;AAKA,WAAS,UAAU,KAAK;AACtB,QAAI,iBAAiB,GAAG,EAAG,QAAO,IAAI,QAAQ,EAAE;AAChD,QAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,QAAO,EAAE,cAAcD,MAAK,QAAQ,GAAG,EAAE;AACtF,QAAI,aAAa,GAAG,GAAG;AACrB,YAAM,CAAC,QAAQ,IAAI,IAAI,IAAI,UAAU,EAAE,MAAM,GAAG;AAChD,aAAO,EAAE,CAAC,OAAO,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK;AAAA,IACtD;AACA,QAAI,WAAW,GAAG,GAAG;AACnB,YAAM,OAAO,YAAY,GAAG;AAC5B,UAAI,KAAM,QAAO;AAAA,IACnB;AACA,QAAI,gBAAgB,GAAG,EAAG,QAAO,iBAAiB,GAAG;AACrD,QAAI,MAAM,GAAG,EAAG,QAAO,EAAE,cAAcA,MAAK,OAAO,GAAG,EAAE;AACxD,QAAI,MAAM,GAAG,EAAG,QAAO,EAAE,aAAaA,MAAK,OAAO,GAAG,EAAE;AACvD,QAAI,iBAAiB,GAAG,EAAG,QAAO,EAAE,iBAAiB,IAAI,UAAU;AACnE,QAAI,kBAAkB,GAAG,EAAG,QAAO,EAAE,aAAa,IAAI,UAAU;AAChE,WAAO,EAAE,cAAcA,MAAK,QAAQ,GAAG,EAAE;AAAA,EAC3C;AAEA,WAAS,eAAe,WAAW;AACjC,WAAO,CAAC,YAAY,WAAW;AAC7B,YAAM,UAAU,QAAQ,OAAO,CAAC,KAAK,QAAQ,MAC3C,MAAM,UAAU,OAAO,CAAC,MAAM,SAAY,OAAO,CAAC,IAAI,KAAK,EAAE;AAC/D,aAAO,EAAE,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC,SAAS,GAAG,QAAQ,GAAG;AAAA,IACxD;AAAA,EACF;AAEA,WAAS,MAAM,KAAK;AAClB,QAAI,OAAO,QAAQ,UAAU;AAE3B,UAAI;AACF,cAAMA,MAAK,SAAS,GAAG;AAAA,MACzB,QAAQ;AAAA,MAER;AAAA,IACF;AACA,QAAI,MAAM,GAAG,EAAG,QAAO,EAAE,CAAC,QAAQ,GAAG,OAAO,EAAE,cAAcA,MAAK,OAAO,GAAG,EAAE,GAAG;AAChF,QAAI,MAAM,GAAG,EAAG,QAAO,EAAE,CAAC,QAAQ,GAAG,OAAO,EAAE,aAAaA,MAAK,OAAO,GAAG,EAAE,GAAG;AAC/E,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,WAAS,UAAU,SAAS,SAAS,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG;AACzE,IAAAA,MAAK,KAAK,SAAS,SAAS,UAAU,OAAO;AAAA,EAC/C;AAEA,iBAAe,QAAQ,KAAK,UAAU,EAAE,KAAK,OAAO,QAAQ,MAAM,GAAG;AACnE,UAAM,SAAS,QAAQ,OAAO,cAAc,GAAG,IAAI,MAAM,MAAMC,QAAO,GAAG;AACzE,cAAU,QAAQ,SAAS,wBAAwB,gBAAgB;AAAA,MACjE,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,WAAW,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,IACxE,CAAC;AAAA,EACH;AAEA,iBAAe,gBAAgB,gBAAgB,QAAQ;AACrD,QAAI,WAAW,OAAW;AAC1B,QAAI;AACF,gBAAU,kBAAkB;AAAA,QAC1B,iBAAiB;AAAA,QACjB,MAAM,MAAMA,QAAO,MAAM;AAAA,QACzB,UAAU,CAAC;AAAA;AAAA,QAEX,WAAW,CAAC;AAAA,MACd,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,gBAAU,SAAS;AAAA,QACjB,OAAO,eAAe,QAAQ,IAAI,OAAO;AAAA,QACzC,QAAQ,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACvD,WAAW,eAAe,SAAS,IAAI,QAAQ,IAAI,MAAM,MAAM,IAAI,IAAI,CAAC;AAAA,MAC1E,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,QAAQ,UAAU,WAAW;AACpC,UAAMC,UAASF,MAAK,MAAM,GAAG,OAAO,WAAW,KAAK;AACpD,WAAOE,YAAW,OAAOA,YAAW;AAAA,EACtC;AAEA,WAAS,OAAO,UAAU,UAAU,eAAe,IAAI,EAAE,WAAW,MAAM,IAAI,CAAC,GAAG;AAChF,QAAI,gBAAgB,GAAI,YAAW,KAAK,YAAY;AACpD,UAAMA,UAASF,MAAK,MAAM,SAAS,QAAQ;AAC3C,WAAOE,YAAW,KAAK,eAAeA;AAAA,EACxC;AAEA,QAAM,QAAQ,YAAY,CAAC,SAAS,SAAS,UAAU,YAAYF,MAAK,KAAK,SAAS,SAAS,UAAU,OAAO,CAAC;AAQjH,MAAI,OAAO,IAAI,gBAAgB;AAE/B,MAAI,UAAU;AAEd,QAAM,WAAW,oBAAI,IAAI;AACzB,WAAS,YAAY;AACnB,cAAU,OAAO,IAAI,gBAAgB;AAAA,EACvC;AAEA,WAAS,YAAY,cAAc,MAAM;AACvC,UAAM,SAAS,IAAI,aAAa,yBAAyB,YAAY;AACrE,QAAI,YAAa,MAAK,MAAM,MAAM;AAClC,eAAW,cAAc,SAAS,KAAK,EAAG,YAAW,MAAM,MAAM;AACjE,aAAS,MAAM;AAAA,EACjB;AACA,iBAAe,aAAa,SAAS,SAAS,UAAU,SAAS,YAAY,OAAO;AAGlF,UAAM,aAAa,YAAY,IAAI,gBAAgB,IAAI;AACvD,QAAI,UAAW,WAAU;AACzB,aAAS,IAAI,aAAa,SAAS,IAAI,UAAU,KAAK,KAAK,CAAC;AAC5D,QAAI;AACF,aAAO,MAAM,MAAM,SAAS,SAAS,SAAS,UAAU,OAAO;AAAA,IACjE,UAAE;AACA,YAAM,QAAQ,SAAS,IAAI,UAAU,KAAK,KAAK;AAC/C,UAAI,OAAO,EAAG,UAAS,IAAI,YAAY,IAAI;AAAA,UACtC,UAAS,OAAO,UAAU;AAAA,IACjC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,MACT,IAAI,SAAS;AACX,eAAO,QAAQ;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA,IAAI,eAAe,eAAe;AAAA,MAClC,MAAM,eAAe,WAAW;AAAA,MAChC,KAAK,eAAe,eAAe;AAAA,MACnC;AAAA,MACA;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,QAAQ,oBAAoB,MAAM,KAAK,QAAQ;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC7eO,SAAS,cAAc,OAAO;AACnC,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO,CAAC;AACnD,QAAM,QAAQ,oBAAI,IAAI;AACtB,WAAS,IAAI,OAAO,KAAK,GAAG,MAAM,MAAM,IAAI,OAAO,eAAe,CAAC,GAAG;AACpE,eAAW,QAAQ,OAAO,oBAAoB,CAAC,EAAG,OAAM,IAAI,IAAI;AAAA,EAClE;AACA,SAAO,CAAC,GAAG,KAAK;AAClB;AAQO,SAAS,cAAc,MAAM,WAAW,CAAC,UAAU,GAAG,MAAM,IAAI,GAAG;AACxE,QAAM,UAAU,oBAAI,IAAI;AACxB,MAAI,aAAa;AACjB,QAAM,SAAS,CAAC,UAAU;AACxB,UAAM,WAAW,IAAI,EAAE,UAAU;AACjC,YAAQ,IAAI,UAAU,KAAK;AAC3B,WAAO,EAAE,MAAM,UAAU,OAAO,WAAW,OAAO,OAAO,SAAS;AAAA,EACpE;AACA,QAAM,OAAO,CAAC,aAAa;AACzB,UAAM,QAAQ,QAAQ,IAAI,QAAQ;AAClC,YAAQ,OAAO,QAAQ;AACvB,WAAO;AAAA,EACT;AAEA,SAAO,eAAeE,QAAO,SAAS;AACpC,YAAQ,QAAQ,IAAI;AAAA,MAClB,KAAK;AACH,eAAO,CAAC;AAAA,MACV,KAAK,QAAQ;AAEX,gBAAQ,MAAM;AACd,aAAK,YAAY;AACjB,YAAI;AACF,gBAAM,MAAM,MAAM,SAAS,QAAQ,IAAI;AACvC,iBAAO,EAAE,QAAQ,QAAQ,SAAY,EAAE,MAAM,YAAY,IAAI,OAAO,IAAI,CAAC,CAAC,EAAE;AAAA,QAC9E,SAAS,KAAK;AACZ,iBAAO;AAAA,YACL,kBAAkB,EAAE,MAAM,YAAY,YAAY,GAAG,cAAc,GAAG,WAAW,OAAO,GAAG,EAAE;AAAA,UAC/F;AAAA,QACF;AAAA,MACF;AAAA,MACA,KAAK;AACH,cAAM,KAAK,gBAAgB,QAAQ,OAAO,KAAK,QAAQ,MAAM,CAAC;AAC9D,eAAO,CAAC;AAAA,MACV,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,KAAK,WAAW,QAAQ,WAAW,SAAY,SAAY,KAAK,QAAQ,MAAM,CAAC,EAAE;AAAA,MACzG,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,cAAc,KAAK,QAAQ,MAAM,CAAC,EAAE;AAAA,MAC3D,KAAK;AACH,YAAI;AACF,gBAAM,UAAU,MAAM,KAAK;AAAA,YACzB,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ,cAAc;AAAA,UACxB;AACA,iBAAO,EAAE,SAAS,YAAY,KAAK;AAAA,QACrC,SAAS,KAAK;AACZ,iBAAO,EAAE,OAAO,KAAK,MAAM,KAAK,cAAc,GAAG,CAAC,EAAE;AAAA,QACtD;AAAA,MACF,KAAK,SAAS;AAGZ,YAAI,OAAO,KAAK,gBAAgB,YAAY;AAC1C,gBAAM,WAAW,KAAK,YAAY,QAAQ,IAAI;AAC9C,iBAAO,EAAE,OAAO,SAAS,SAAS,CAAC,SAAS,WAAW,cAAc,SAAS,KAAK,IAAI,CAAC,EAAE;AAAA,QAC5F;AACA,YAAI;AACJ,YAAI;AACF,kBAAQ,SAAS,IAAI,QAAQ,IAAI,GAAG;AAAA,QACtC,QAAQ;AACN,iBAAO,EAAE,OAAO,CAAC,EAAE;AAAA,QACrB;AACA,eAAO,EAAE,OAAO,cAAc,KAAK,EAAE;AAAA,MACvC;AAAA,MACA,KAAK;AACH,eAAO,EAAE,MAAM,KAAK,YAAY,QAAQ,MAAM,QAAQ,UAAU,CAAC,EAAE;AAAA,MACrE,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,QAAQ,EAAE;AAAA,MACjC,KAAK;AAEH,aAAK,cAAc,QAAQ,SAAS,KAAK;AACzC,eAAO,CAAC;AAAA,MACV;AACE,cAAM,IAAI,MAAM,mBAAmB,KAAK,UAAU,QAAQ,EAAE,CAAC,EAAE;AAAA,IACnE;AAAA,EACF;AACF;;;AC/FA,IAAM,YAAY;AAIlB,SAAS,MAAM,GAAG;AAChB,QAAM,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,EAAE,SAAS,IAAI,IAAI,MAAM;AAC1G,QAAM,UAAU,EAAE,WAAW,MAAM,MAAM,EAAE,WAAW,MAAM,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC,EAAE;AACzF,SAAO,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC;AAC3B;AAEA,SAAS,IAAI,GAAG;AACd,SAAO,OAAO,MAAM,WAAW,IAAI,EAAE,SAAS,CAAC,MAAM,qBAAqB,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC;AACjG;AAEA,SAAS,UAAU,OAAO;AACxB,QAAM,QAAQ,OAAO,eAAe,KAAK;AACzC,MAAI,UAAU,KAAM,QAAO;AAC3B,QAAM,OAAO,MAAM,aAAa;AAChC,SAAO,QAAQ,SAAS,WAAW,OAAO;AAC5C;AAEA,SAAS,KAAK,MAAM,OAAO,OAAO,MAAM;AACtC,MAAI,OAAO,EAAG,OAAM,KAAK,OAAO,IAAI,aAAa,SAAS,IAAI,KAAK,GAAG,EAAE;AACxE,SAAO,MAAM,WAAW,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK,GAAG,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK;AACtF;AAGO,SAAS,QAAQ,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AACjD,QAAM,OAAO,CAAC;AACd,QAAM,OAAO,CAAC,GAAG,UAAU;AACzB,YAAQ,OAAO,GAAG;AAAA,MAChB,KAAK;AACH,eAAO,MAAM,CAAC;AAAA,MAChB,KAAK;AACH,eAAO,GAAG,CAAC;AAAA,MACb,KAAK;AACH,eAAO,EAAE,SAAS;AAAA,MACpB,KAAK;AACH,eAAO;AAAA,MACT,KAAK,YAAY;AACf,cAAM,UAAU,WAAW,KAAK,SAAS,UAAU,SAAS,KAAK,CAAC,CAAC;AACnE,eAAO,UAAU,UAAU,EAAE,QAAQ,aAAa,MAAM,YAAY,EAAE,OAAO,KAAK,EAAE,IAAI,KAAK,cAAc;AAAA,MAC7G;AAAA,MACA,KAAK;AACH,eAAO,OAAO,GAAG,GAAG,EAAE,IAAI,OAAO,OAAO,CAAC;AAAA,MAC3C,KAAK;AACH,eAAO,OAAO,CAAC;AAAA,IACnB;AACA,QAAI,MAAM,KAAM,QAAO;AACvB,QAAI,KAAK,SAAS,CAAC,EAAG,QAAO;AAC7B,QAAI,aAAa,KAAM,QAAO,OAAO,MAAM,EAAE,QAAQ,CAAC,IAAI,iBAAiB,EAAE,YAAY;AACzF,QAAI,aAAa,OAAQ,QAAO,OAAO,CAAC;AACxC,QAAI,aAAa,MAAO,QAAO,EAAE,SAAS,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO;AACjE,QAAI,aAAa,QAAS,QAAO;AACjC,QAAI,QAAQ,MAAO,QAAO,MAAM,QAAQ,CAAC,IAAI,YAAY,IAAI,UAAU,CAAC,KAAK,QAAQ;AACrF,SAAK,KAAK,CAAC;AACX,QAAI;AACF,UAAI,MAAM,QAAQ,CAAC,KAAK,YAAY,OAAO,CAAC,GAAG;AAC7C,cAAMC,SAAQ,MAAM,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;AAC7E,cAAM,SAAS,MAAM,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE,YAAY,IAAI,IAAI,EAAE,MAAM;AACxE,eAAO,SAAS,KAAK,KAAKA,QAAO,KAAK,EAAE,SAASA,OAAM,MAAM;AAAA,MAC/D;AACA,UAAI,aAAa,KAAK;AACpB,cAAMA,SAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,OAAO,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE;AACzG,eAAO,OAAO,EAAE,IAAI,OAAO,KAAK,KAAKA,QAAO,KAAK,EAAE,OAAOA,OAAM,MAAM;AAAA,MACxE;AACA,UAAI,aAAa,KAAK;AACpB,cAAMA,SAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;AACtE,eAAO,OAAO,EAAE,IAAI,OAAO,KAAK,KAAKA,QAAO,KAAK,EAAE,OAAOA,OAAM,MAAM;AAAA,MACxE;AACA,YAAM,OAAO,QAAQ,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,OAAO,yBAAyB,GAAG,CAAC,GAAG,UAAU;AAC/F,YAAM,QAAQ,KAAK,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,MAAM;AAChD,cAAM,IAAI,OAAO,yBAAyB,GAAG,CAAC;AAC9C,cAAM,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,MAAM,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,MAAM,EAAE,GAAG,EAAE,MAAM,WAAW,EAAE,MAAM,KAAK,EAAE,OAAO,QAAQ,CAAC;AACzI,eAAO,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK;AAAA,MAC5B,CAAC;AACD,YAAM,OAAO,UAAU,CAAC;AACxB,cAAQ,OAAO,GAAG,IAAI,MAAM,MAAM,KAAK,KAAK,OAAO,KAAK,KAAK,SAAS,MAAM,MAAM;AAAA,IACpF,UAAE;AACA,WAAK,IAAI;AAAA,IACX;AAAA,EACF;AACA,SAAO,KAAK,OAAO,CAAC;AACtB;AAGO,SAAS,UAAU,MAAM;AAC9B,MAAI,MAAM,CAAC;AACX,MAAI,OAAO;AACX,MAAI,OAAO,KAAK,CAAC,MAAM,YAAY,KAAK,SAAS,KAAK,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG;AAC3E,QAAI,IAAI;AACR,UAAM,OAAO,KAAK,CAAC,EAAE,QAAQ,iBAAiB,CAAC,SAAS;AACtD,UAAI,SAAS,KAAM,QAAO;AAC1B,UAAI,KAAK,KAAK,OAAQ,QAAO;AAC7B,YAAM,IAAI,KAAK,GAAG;AAClB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,OAAO,MAAM,WAAW,IAAI,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC;AAAA,QAC5D,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,OAAO,MAAM,WAAW,GAAG,CAAC,MAAM,OAAO,SAAS,OAAO,KAAK,MAAM,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;AAAA,QACnG,KAAK;AACH,iBAAO,OAAO,OAAO,CAAC,CAAC;AAAA,QACzB,KAAK;AACH,iBAAO,KAAK,UAAU,CAAC;AAAA,QACzB,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC;AAAA,MAClC;AAAA,IACF,CAAC;AACD,UAAM,CAAC,IAAI;AACX,WAAO,KAAK,MAAM,CAAC;AAAA,EACrB;AACA,aAAW,KAAK,KAAM,KAAI,KAAK,OAAO,MAAM,WAAW,IAAI,QAAQ,CAAC,CAAC;AACrE,SAAO,IAAI,KAAK,GAAG;AACrB;;;ACpHA,IAAM,gBAAgB;AACtB,IAAM,eAAe;AACrB,IAAM,iBAAiB;AAEvB,IAAM,kBAAkB;AAQjB,SAAS,YAAY,MAAM,OAAO,YAAY;AACnD,MAAI,CAAC,gBAAgB,KAAK,IAAI,EAAG,QAAO,EAAE,OAAO,MAAM;AACvD,MAAI,QAAQ;AACZ,aAAW,QAAQ,KAAK,MAAM,GAAG,GAAG;AAClC,QAAI,UAAU,QAAQ,UAAU,OAAW,QAAO,EAAE,OAAO,MAAM;AACjE,QAAI;AACJ,aAAS,IAAI,OAAO,KAAK,GAAG,MAAM,QAAQ,eAAe,QAAW,IAAI,OAAO,eAAe,CAAC,GAAG;AAChG,mBAAa,OAAO,yBAAyB,GAAG,IAAI;AAAA,IACtD;AACA,QAAI,eAAe,OAAW,QAAO,EAAE,OAAO,MAAM;AACpD,QAAI,EAAE,WAAW,YAAa,QAAO,EAAE,OAAO,MAAM,UAAU,MAAM,KAAK;AACzE,YAAQ,WAAW;AAAA,EACrB;AACA,SAAO,EAAE,OAAO,MAAM,MAAM;AAC9B;AAEA,SAAS,SAAS,MAAM,OAAO;AAC7B,SAAO,KAAK,SAAS,QAAQ,GAAG,KAAK,MAAM,GAAG,KAAK,CAAC,WAAM,KAAK,SAAS,KAAK,sBAAsB;AACrG;AAGO,SAAS,YAAY,IAAI;AAC9B,MAAI;AACJ,MAAI;AACF,aAAS,SAAS,UAAU,SAAS,KAAK,EAAE;AAAA,EAC9C,QAAQ;AACN,WAAO,GAAG,GAAG,QAAQ,WAAW;AAAA,EAClC;AACA,MAAI,WAAW,KAAK,MAAM,EAAG,QAAO,SAAS,GAAG,QAAQ,aAAa;AACrE,QAAM,SAAS,oBAAoB,KAAK,MAAM,IAAI,CAAC;AACnD,QAAM,SAAS,6BAA6B,KAAK,MAAM;AAEvD,QAAM,WAAW,UAAU,IAAI,QAAQ,QAAQ,GAAG,EAAE,QAAQ,YAAY,IAAI,EAAE,KAAK;AACnF,QAAM,OAAO,SAAS,MAAM,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,IAAI;AAC1F,QAAM,QAAQ,CAAC,2BAA2B,KAAK,MAAM,KAAK,KAAK,KAAK,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE;AAC9F,QAAM,OAAO,GAAG,SAAS,QAAQ,qBAAqB;AACtD,QAAM,SAAS,WAAW,KAAK,MAAM,IAAI,WAAW;AACpD,SAAO,GAAG,MAAM,GAAG,IAAI,IAAI,IAAI;AACjC;AAEA,SAAS,OAAO,OAAO;AACrB,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAAY,QAAO,OAAO;AAC5E,QAAM,OAAO,OAAO,eAAe,KAAK,GAAG,aAAa;AACxD,MAAI,OAAO,UAAU,WAAY,QAAO,WAAW,KAAK,WAAW,KAAK,CAAC,IAAI,UAAU;AACvF,SAAO,QAAQ,SAAS,WAAW,WAAW,IAAI,MAAM;AAC1D;AAEA,SAAS,WAAW,IAAI;AACtB,MAAI;AACF,WAAO,SAAS,UAAU,SAAS,KAAK,EAAE;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAASC,eAAc,OAAO;AAC5B,MAAK,OAAO,UAAU,YAAY,OAAO,UAAU,cAAe,UAAU,KAAM,QAAO,CAAC;AAC1F,MAAI;AAGF,UAAM,WAAW,CAAC,UAAU,QAAQ,aAAa,aAAa,QAAQ;AACtE,WAAO,OAAO,oBAAoB,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,UAAU,cAAc,SAAS,SAAS,CAAC,EAAE;AAAA,EAC/G,QAAQ;AACN,WAAO,CAAC;AAAA,EACV;AACF;AAMO,SAAS,cAAc,OAAO,EAAE,SAAAC,UAAS,SAAS,EAAE,GAAG;AAC5D,QAAM,QAAQ,CAAC,SAAS,OAAO,KAAK,CAAC,EAAE;AACvC,MAAI,OAAO,UAAU,WAAY,OAAM,KAAK,cAAc,YAAY,KAAK,CAAC,EAAE;AAC9E,MAAI;AACJ,MAAI;AACF,cAAUA,SAAQ,KAAK;AAAA,EACzB,SAAS,KAAK;AACZ,cAAU,oBAAoB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,EAChF;AACA,QAAM,KAAK,UAAU,SAAS,SAAS,aAAa,CAAC,EAAE;AACvD,QAAM,QAAQD,eAAc,KAAK;AACjC,MAAI,MAAM,SAAS,GAAG;AACpB,UAAM,QAAQ,MAAM,MAAM,GAAG,cAAc,EAAE,KAAK,IAAI;AACtD,UAAM,KAAK,eAAe,KAAK,GAAG,MAAM,SAAS,iBAAiB,aAAQ,MAAM,SAAS,cAAc,WAAW,EAAE,EAAE;AAAA,EACxH;AACA,MAAI,SAAS,KAAK,OAAO,UAAU,WAAY,OAAM,KAAK;AAAA,EAAY,SAAS,WAAW,KAAK,GAAG,YAAY,CAAC,EAAE;AACjH,SAAO,MAAM,KAAK,IAAI;AACxB;AAGO,SAAS,YAAY,MAAM,EAAE,SAAAC,UAAS,SAAS,GAAG,OAAO,WAAW,GAAG;AAC5E,QAAM,WAAW,YAAY,MAAM,IAAI;AACvC,MAAI,CAAC,SAAS,MAAO,QAAO;AAC5B,MAAI,SAAS,UAAU;AACrB,WAAO;AAAA,EAA4B,SAAS,IAAI;AAAA,EAClD;AACA,SAAO,cAAc,SAAS,OAAO,EAAE,SAAAA,UAAS,OAAO,CAAC;AAC1D;;;ACjHO,IAAM,cAAc;AAGpB,SAAS,iBAAiB,WAAW,MAAMC,OAAM,aAAa;AACnE,MAAI,yBAAyB,KAAK,SAAS,EAAG,QAAO;AACrD,MAAI,aAAa,KAAK,SAAS,EAAG,QAAO,IAAI,IAAI,WAAW,IAAI,EAAE;AAClE,MAAI,UAAU,WAAW,MAAM,EAAG,QAAOA,OAAM,UAAU,MAAM,CAAC;AAChE,MAAI,UAAU,WAAW,MAAM,EAAG,QAAO,GAAGA,IAAG,OAAO,UAAU,MAAM,CAAC,EAAE,QAAQ,OAAO,EAAE,CAAC;AAE3F,SAAOA,OAAM;AACf;;;ACIA,SAAS,OAAO,OAAO;AACrB,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,OAAQ;AAC7C,cAAU,OAAO,aAAa,GAAG,MAAM,SAAS,GAAG,IAAI,KAAM,CAAC;AAAA,EAChE;AACA,SAAO,KAAK,MAAM;AACpB;AAEA,IAAM,OAAO,CAAC,YAAY,WAAW,YAAY,OAAO;AAGxD,IAAM,SAAS,CAAC,SAAS,IAAI,SAAS,KAAK,EAAE,MAAM,UAAU,MAAM,MAAM,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC;AACjG,OAAO,OAAO,SAAS;AAAA,EACrB,KAAK,OAAO,QAAQ;AAAA,EACpB,MAAM,OAAO,QAAQ;AAAA,EACrB,OAAO,OAAO,QAAQ;AAAA,EACtB,KAAK,CAAC,UAAU,KAAK,EAAE,MAAM,UAAU,MAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC;AAAA,EAClG,MAAM,OAAO,QAAQ;AAAA,EACrB,OAAO,OAAO,QAAQ;AACxB,CAAC;AAID,SAAS,eAAe,MAAM,KAAK;AACjC,OAAK,EAAE,MAAM,UAAU,MAAM,UAAU,MAAM,GAAG,IAAI,KAAK,eAAe,QAAS,IAAI,SAAS,IAAI,UAAW,QAAQ,GAAG,CAAC;AAAA,EAAK,CAAC;AACjI;AACA,WAAW,iBAAiB,sBAAsB,CAAC,UAAU;AAC3D,QAAM,eAAe;AACrB,iBAAe,yBAAyB,MAAM,MAAM;AACtD,CAAC;AACD,WAAW,iBAAiB,SAAS,CAAC,UAAU;AAC9C,QAAM,eAAe;AACrB,iBAAe,YAAY,MAAM,SAAS,MAAM,OAAO;AACzD,CAAC;AAED,IAAM,UAAU,cAAc;AAAA,EAC5B,SAAS,CAAC,UAAU,QAAQ,OAAO,EAAE,OAAO,EAAE,CAAC;AAAA,EAC/C;AAAA,EACA,WAAW;AACT,UAAM,IAAI,MAAM,kFAAkF;AAAA,EACpG;AAAA,EACA,KAAK,SAAS,SAAS,UAAU,SAAS;AACxC,SAAK,EAAE,MAAM,SAAS,UAAU,SAAS,SAAS,UAAU,SAAS,QAAQ,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;AAAA,EACxG;AAAA;AAAA;AAAA,EAGA,OAAO,MAAM;AACf,CAAC;AAGD,IAAI,MAAM;AAMV,IAAM,YAAY,oBAAI,IAAI;AAC1B,IAAM,gBAAgB,oBAAI,IAAI;AAC9B,IAAI,aAAa;AAEjB,SAAS,UAAU,OAAO;AACxB,QAAM,MAAM,IAAI,MAAM,OAAO,OAAO,WAAW,yBAAyB,CAAC;AACzE,MAAI,OAAO,OAAO,SAAS,SAAU,KAAI,OAAO,MAAM;AACtD,MAAI,OAAO,SAAS,OAAW,KAAI,OAAO,MAAM;AAChD,SAAO;AACT;AAEA,IAAM,OAAO;AAAA;AAAA,EAEX,QAAQ,QAAQ,QAAQ,EAAE,QAAQ,SAAS,IAAI,CAAC,GAAG;AACjD,QAAI,QAAQ,QAAS,QAAO,QAAQ,OAAO,OAAO,MAAM;AACxD,UAAM,KAAK,EAAE;AACb,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,MAAM;AACpB,kBAAU,OAAO,EAAE;AACnB,aAAK,EAAE,MAAM,QAAQ,IAAI,QAAQ,KAAK,CAAC;AACvC,eAAO,OAAO,MAAM;AAAA,MACtB;AACA,cAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACzD,YAAM,OAAO,MAAM,QAAQ,oBAAoB,SAAS,OAAO;AAC/D,UAAI;AACF,mBAAW,YAAY,EAAE,MAAM,QAAQ,IAAI,QAAQ,OAAO,GAAG,YAAY,CAAC,CAAC;AAAA,MAC7E,SAAS,KAAK;AACZ,aAAK;AACL,cAAM;AAAA,MACR;AACA,gBAAU,IAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA;AAAA,EAEA,QAAQ,UAAU;AAChB,kBAAc,IAAI,QAAQ;AAC1B,WAAO,MAAM,cAAc,OAAO,QAAQ;AAAA,EAC5C;AACF;AAEA,SAAS,YAAY,KAAK;AACxB,MAAI,IAAI,OAAO,QAAW;AACxB,eAAW,YAAY,eAAe;AACpC,UAAI;AACF,iBAAS,IAAI,OAAO,IAAI,KAAK;AAAA,MAC/B,SAAS,KAAK;AACZ,uBAAe,YAAY,GAAG;AAAA,MAChC;AAAA,IACF;AACA;AAAA,EACF;AACA,QAAM,OAAO,UAAU,IAAI,IAAI,EAAE;AACjC,MAAI,CAAC,KAAM;AACX,YAAU,OAAO,IAAI,EAAE;AACvB,OAAK,KAAK;AACV,MAAI,IAAI,UAAU,OAAW,MAAK,OAAO,UAAU,IAAI,KAAK,CAAC;AAAA,MACxD,MAAK,QAAQ,IAAI,MAAM;AAC9B;AAKA,eAAe,QAAQ,MAAM,MAAM;AACjC,aAAW,aAAa,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,GAAG;AACvD,QAAI;AACF,YAAM,MAAM,MAAM,OAAO,IAAI,IAAI,WAAW,IAAI,EAAE;AAClD,UAAI,OAAO,IAAI,YAAY,WAAY,OAAM,IAAI,QAAQ,EAAE,MAAM,SAAS,QAAQ,UAAU,CAAC;AAAA,IAC/F,SAAS,KAAK;AACZ,qBAAe,cAAc,SAAS,WAAW,GAAG;AAAA,IACtD;AAAA,EACF;AACF;AAGA,IAAI,SAAS;AAEb,SAAS,QAAQ,EAAE,MAAM,KAAK,QAAQ,GAAG;AACvC,MAAI,OAAO,YAAY,SAAU,OAAM,QAAQ,SAAS,GAAG,IAAI,UAAU,UAAU;AACnF,QAAM,MAAM,IAAI,IAAI,kBAAkB,IAAI,EAAE;AAC5C,aAAW,SAAS;AAAA,IAClB,QAAQ,CAAC,WAAW,YAAY,OAAO,iBAAiB,WAAW,KAAK,GAAG;AAAA,IAC3E,MAAM,EAAE,KAAK,SAAS,CAAC,cAAc,iBAAiB,WAAW,KAAK,GAAG,EAAE;AAAA;AAAA,IAE3E,oBAAoB,CAAC,OAAO,WAAW,cAAc,OAAO,EAAE,SAAS,CAAC,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;AAAA,IAChH,aAAa,CAAC,MAAM,WAAW,YAAY,MAAM,EAAE,SAAS,CAAC,MAAM,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;AAAA,IACrG;AAAA,IACA,SAAS,MAAM;AAAA,IACf,iBAAiB,QAAQ;AAAA;AAAA,IAEzB,YAAY,OAAO,UAAU,KAAK,UAAU,MAAM,QAAQ,UAAU,OAAO,KAAK,CAAC;AAAA;AAAA;AAAA,IAGjF,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,MAAM,aAAa,SAAS,SAAS,UAAU,WAAW,WAAW;AACnE,YAAM,UAAU,UAAU,IAAI,CAAC,MAAM,WAAW,KAAK,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACrF,aAAO,MAAM,QAAQ,aAAa,SAAS,SAAS,UAAU,SAAS,SAAS;AAAA,IAClF;AAAA,IACA,cAAc,OAAO;AACnB,UAAI,iBAAiB,OAAO;AAC1B,eAAO,KAAK,UAAU,EAAE,MAAM,MAAM,MAAM,SAAS,MAAM,SAAS,OAAO,MAAM,SAAS,GAAG,CAAC;AAAA,MAC9F;AACA,aAAO,KAAK,UAAU,EAAE,MAAM,SAAS,SAAS,QAAQ,KAAK,GAAG,OAAO,GAAG,CAAC;AAAA,IAC7E;AAAA,EACF;AACA,SAAO,eAAe,YAAY,UAAU,EAAE,YAAY,MAAM,CAAC;AACjE,aAAW,UAAU,QAAQ;AAC7B,aAAW,SAAS,QAAQ;AAC5B,aAAW,UAAU,QAAQ;AAC7B,WAAS,cAAc,WAAW,QAAQ,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC;AACrE;AAEA,eAAe,OAAO,KAAK;AACzB,MAAI,IAAI,OAAO,QAAQ;AACrB,YAAQ,GAAG;AACX,UAAM,QAAQ,IAAI,SAAS,IAAI,IAAI;AACnC,WAAO,EAAE,WAAW,WAAW,WAAW,aAAa,GAAG;AAAA,EAC5D;AACA,MAAI,WAAW,KAAM,OAAM,IAAI,MAAM,mCAAmC;AACxE,SAAO,MAAM,OAAO,GAAG;AACzB;AAEA,WAAW,iBAAiB,WAAW,CAAC,UAAU;AAChD,QAAM,MAAM,MAAM;AAClB,MAAI,KAAK,OAAO,OAAQ,QAAO,YAAY,GAAG;AAC9C,SAAO,GAAG,EAAE;AAAA,IACV,CAAC,UAAU,KAAK,EAAE,MAAM,SAAS,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC;AAAA,IACvD,CAAC,QAAQ,KAAK,EAAE,MAAM,SAAS,IAAI,IAAI,IAAI,SAAS,OAAO,KAAK,SAAS,GAAG,EAAE,CAAC;AAAA,EACjF;AACF,CAAC;",
6
6
  "names": ["comm", "list", "key", "$display", "key", "encoding", "list", "host", "format", "answer", "handle", "items", "propertyNames", "inspect", "cdn"]
7
7
  }
@@ -1,6 +1,7 @@
1
1
  import { type CdpParams, type EvaluateResult, type RemoteObject } from "./cdp.ts";
2
2
  import { transformCellForEval } from "./transform.ts";
3
3
  import { type KernelTarget, type TargetEvents } from "./target.ts";
4
+ import { type TargetUsage } from "./target-api.ts";
4
5
  /**
5
6
  * How long an interrupted target has to answer a ping. A cell waiting on a
6
7
  * promise leaves the event loop free, so the answer is near-instant; a busy
@@ -31,7 +32,8 @@ export declare class BunTarget implements KernelTarget {
31
32
  * There's no terminateExecution, but a cell that's waiting on a promise
32
33
  * leaves the event loop free: the target answers a ping, and the cell is
33
34
  * abandoned with the session intact, like terminateExecution on an idle
34
- * isolate (its pending work still runs). A busy cell can't be reached, so
35
+ * isolate (its pending work still runs, and jupyter.signal tells it to
36
+ * stop: #418). A busy cell can't be reached, so
35
37
  * the process is stopped and restarts on the next cell, losing its state.
36
38
  */
37
39
  interrupt(): Promise<void>;
@@ -58,5 +60,7 @@ export declare class BunTarget implements KernelTarget {
58
60
  /** None: top-level declarations here are properties of globalThis. */
59
61
  lexicalNames(): Promise<string[]>;
60
62
  replyInput(value: string | null, interrupted?: boolean): void;
63
+ /** The bun process's resident memory and CPU time, from the OS (#410). */
64
+ usage(): Promise<TargetUsage>;
61
65
  kill(): void;
62
66
  }
@@ -15,6 +15,7 @@ import { runtimeDir } from "./package.js";
15
15
  import { killOnExit } from "./children.js";
16
16
  import { Gates, Interrupted, isTargetMessage, parseBundle, parseJson, PipeDemux } from "./target.js";
17
17
  import { withStartTimeout } from "./target-api.js";
18
+ import { processUsage } from "./usage.js";
18
19
  /**
19
20
  * How long an interrupted target has to answer a ping. A cell waiting on a
20
21
  * promise leaves the event loop free, so the answer is near-instant; a busy
@@ -52,8 +53,12 @@ export class BunTarget {
52
53
  #interruptibleIds = new Set();
53
54
  #exitedOnce = false;
54
55
  #messages = Promise.resolve();
55
- #interrupted = false;
56
+ /** Counts interrupt() calls: a call that saw one start during it was interrupted (#417). */
57
+ #interrupts = 0;
58
+ /** Cells running: a comm handler that starts with none gets its own jupyter.signal (#421). */
59
+ #cells = 0;
56
60
  #stopNote;
61
+ #startedAt = Date.now();
57
62
  constructor(child, channel, events) {
58
63
  this.#child = child;
59
64
  this.#channel = channel;
@@ -175,28 +180,37 @@ export class BunTarget {
175
180
  }
176
181
  /** A request that interrupt() may cut short. */
177
182
  async #interruptible(op, params, what) {
178
- this.#interrupted = false;
183
+ const interrupts = this.#interrupts;
179
184
  try {
180
185
  return await this.#request(op, params, true);
181
186
  }
182
187
  catch (err) {
183
- if (err instanceof Abandoned || this.#interrupted)
188
+ if (err instanceof Abandoned || this.#interrupts !== interrupts)
184
189
  throw new Interrupted(`${what} interrupted`);
185
190
  throw err;
186
191
  }
187
192
  }
188
193
  async evaluate(script) {
189
- return asEvaluateResult(await this.#interruptible("eval", { code: script }, "Execution"));
194
+ this.#cells++;
195
+ try {
196
+ return asEvaluateResult(await this.#interruptible("eval", { code: script }, "Execution"));
197
+ }
198
+ finally {
199
+ this.#cells--;
200
+ }
190
201
  }
191
202
  /**
192
203
  * There's no terminateExecution, but a cell that's waiting on a promise
193
204
  * leaves the event loop free: the target answers a ping, and the cell is
194
205
  * abandoned with the session intact, like terminateExecution on an idle
195
- * isolate (its pending work still runs). A busy cell can't be reached, so
206
+ * isolate (its pending work still runs, and jupyter.signal tells it to
207
+ * stop: #418). A busy cell can't be reached, so
196
208
  * the process is stopped and restarts on the next cell, losing its state.
197
209
  */
198
210
  async interrupt() {
199
- this.#interrupted = true;
211
+ this.#interrupts++;
212
+ // Before abandoning the cell's request, which ends the count.
213
+ const cellRunning = this.#cells > 0;
200
214
  const running = [...this.#interruptibleIds];
201
215
  const answered = await Promise.race([
202
216
  this.#request("ping").then(() => true, () => false),
@@ -210,6 +224,10 @@ export class BunTarget {
210
224
  this.#pending.delete(id);
211
225
  this.#interruptibleIds.delete(id);
212
226
  }
227
+ // After the cell is abandoned, so its reply can't end it first
228
+ // (#418). Not awaited: requests are answered in order, and an abort
229
+ // listener that never returns mustn't hold up the interrupt.
230
+ void this.#request("abort", { cell: cellRunning }).catch(() => { });
213
231
  return;
214
232
  }
215
233
  this.#stopNote = RESTART_NOTE;
@@ -232,6 +250,7 @@ export class BunTarget {
232
250
  content,
233
251
  metadata,
234
252
  buffers: buffers.map((b) => Buffer.from(b).toString("base64")),
253
+ ownSignal: this.#cells === 0,
235
254
  }, "Comm handler");
236
255
  if (isRecord(reply.error)) {
237
256
  const { name, message, stack } = reply.error;
@@ -263,7 +282,13 @@ export class BunTarget {
263
282
  return Promise.resolve([]);
264
283
  }
265
284
  replyInput(value, interrupted = false) {
266
- this.#child.stdin?.write(JSON.stringify({ value, interrupted }) + "\n");
285
+ // `cell`: an interrupted prompt aborts a cell's jupyter.signal only if one runs (#421).
286
+ this.#child.stdin?.write(JSON.stringify({ value, interrupted, cell: this.#cells > 0 }) + "\n");
287
+ }
288
+ /** The bun process's resident memory and CPU time, from the OS (#410). */
289
+ async usage() {
290
+ const pid = this.#child.pid;
291
+ return { startedAt: this.#startedAt, ...(pid === undefined ? {} : await processUsage(pid)) };
267
292
  }
268
293
  kill() {
269
294
  this.#child.kill();