@motionscript/browser 0.0.0-stage → 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +192 -0
- package/LICENSE +201 -0
- package/NOTICE +49 -0
- package/README.md +140 -3
- package/dist/asset-bytes.d.ts +59 -0
- package/dist/asset-bytes.d.ts.map +1 -0
- package/dist/asset-bytes.js +78 -0
- package/dist/asset-bytes.js.map +1 -0
- package/dist/audio/bus-graph.d.ts +52 -0
- package/dist/audio/bus-graph.d.ts.map +1 -0
- package/dist/audio/bus-graph.js +108 -0
- package/dist/audio/bus-graph.js.map +1 -0
- package/dist/audio/effect-graph.d.ts +62 -0
- package/dist/audio/effect-graph.d.ts.map +1 -0
- package/dist/audio/effect-graph.js +234 -0
- package/dist/audio/effect-graph.js.map +1 -0
- package/dist/audio/index.d.ts +5 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +11 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/audio/loop-region.d.ts +31 -0
- package/dist/audio/loop-region.d.ts.map +1 -0
- package/dist/audio/loop-region.js +43 -0
- package/dist/audio/loop-region.js.map +1 -0
- package/dist/audio/mixer.d.ts +59 -0
- package/dist/audio/mixer.d.ts.map +1 -0
- package/dist/audio/mixer.js +192 -0
- package/dist/audio/mixer.js.map +1 -0
- package/dist/audio/player.d.ts +55 -0
- package/dist/audio/player.d.ts.map +1 -0
- package/dist/audio/player.js +217 -0
- package/dist/audio/player.js.map +1 -0
- package/dist/browser/THIRD_PARTY_LICENSES.txt +784 -0
- package/dist/browser/audio.js +2 -0
- package/dist/browser/audio.js.map +7 -0
- package/dist/browser/chunks/chunk-F3AZKPHU.js +2 -0
- package/dist/browser/chunks/chunk-F3AZKPHU.js.map +7 -0
- package/dist/browser/chunks/chunk-KLXMRKTL.js +2 -0
- package/dist/browser/chunks/chunk-KLXMRKTL.js.map +7 -0
- package/dist/browser/chunks/chunk-L5UFQACH.js +163 -0
- package/dist/browser/chunks/chunk-L5UFQACH.js.map +7 -0
- package/dist/browser/chunks/mediabunny-mp3-encoder-ZCIHVVTJ.js +14 -0
- package/dist/browser/chunks/mediabunny-mp3-encoder-ZCIHVVTJ.js.map +7 -0
- package/dist/browser/esbuild.wasm +0 -0
- package/dist/browser/index.js +734 -0
- package/dist/browser/index.js.map +7 -0
- package/dist/browser/manifest.json +32 -0
- package/dist/browser/ms_renderer_bg.wasm +0 -0
- package/dist/concat.d.ts +121 -0
- package/dist/concat.d.ts.map +1 -0
- package/dist/concat.js +219 -0
- package/dist/concat.js.map +1 -0
- package/dist/deliver.d.ts +10 -0
- package/dist/deliver.d.ts.map +1 -0
- package/dist/deliver.js +22 -0
- package/dist/deliver.js.map +1 -0
- package/dist/dynamic-nodes.d.ts +9 -0
- package/dist/dynamic-nodes.d.ts.map +1 -0
- package/dist/dynamic-nodes.js +53 -0
- package/dist/dynamic-nodes.js.map +1 -0
- package/dist/engine.d.ts +87 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +193 -0
- package/dist/engine.js.map +1 -0
- package/dist/export-audio.d.ts +36 -0
- package/dist/export-audio.d.ts.map +1 -0
- package/dist/export-audio.js +56 -0
- package/dist/export-audio.js.map +1 -0
- package/dist/exporter.d.ts +282 -0
- package/dist/exporter.d.ts.map +1 -0
- package/dist/exporter.js +308 -0
- package/dist/exporter.js.map +1 -0
- package/dist/formats.d.ts +36 -0
- package/dist/formats.d.ts.map +1 -0
- package/dist/formats.js +83 -0
- package/dist/formats.js.map +1 -0
- package/dist/frame-loop.d.ts +190 -0
- package/dist/frame-loop.d.ts.map +1 -0
- package/dist/frame-loop.js +304 -0
- package/dist/frame-loop.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/mix-timeline-audio.d.ts +42 -0
- package/dist/mix-timeline-audio.d.ts.map +1 -0
- package/dist/mix-timeline-audio.js +60 -0
- package/dist/mix-timeline-audio.js.map +1 -0
- package/dist/parallel/export-parallel.d.ts +32 -0
- package/dist/parallel/export-parallel.d.ts.map +1 -0
- package/dist/parallel/export-parallel.js +114 -0
- package/dist/parallel/export-parallel.js.map +1 -0
- package/dist/parallel/governor.d.ts +57 -0
- package/dist/parallel/governor.d.ts.map +1 -0
- package/dist/parallel/governor.js +79 -0
- package/dist/parallel/governor.js.map +1 -0
- package/dist/parallel/lane.d.ts +45 -0
- package/dist/parallel/lane.d.ts.map +1 -0
- package/dist/parallel/lane.js +2 -0
- package/dist/parallel/lane.js.map +1 -0
- package/dist/parallel/lanes.d.ts +20 -0
- package/dist/parallel/lanes.d.ts.map +1 -0
- package/dist/parallel/lanes.js +152 -0
- package/dist/parallel/lanes.js.map +1 -0
- package/dist/parallel/plan.d.ts +23 -0
- package/dist/parallel/plan.d.ts.map +1 -0
- package/dist/parallel/plan.js +30 -0
- package/dist/parallel/plan.js.map +1 -0
- package/dist/parallel/run-lanes.d.ts +38 -0
- package/dist/parallel/run-lanes.d.ts.map +1 -0
- package/dist/parallel/run-lanes.js +164 -0
- package/dist/parallel/run-lanes.js.map +1 -0
- package/dist/parallel/session.d.ts +9 -0
- package/dist/parallel/session.d.ts.map +1 -0
- package/dist/parallel/session.js +79 -0
- package/dist/parallel/session.js.map +1 -0
- package/dist/renderer.d.ts +22 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +23 -0
- package/dist/renderer.js.map +1 -0
- package/dist/screenshot.d.ts +45 -0
- package/dist/screenshot.d.ts.map +1 -0
- package/dist/screenshot.js +31 -0
- package/dist/screenshot.js.map +1 -0
- package/dist/still.d.ts +159 -0
- package/dist/still.d.ts.map +1 -0
- package/dist/still.js +222 -0
- package/dist/still.js.map +1 -0
- package/dist/ticker.d.ts +74 -0
- package/dist/ticker.d.ts.map +1 -0
- package/dist/ticker.js +215 -0
- package/dist/ticker.js.map +1 -0
- package/package.json +75 -3
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/.pnpm/esbuild-wasm@0.28.2/node_modules/esbuild-wasm/lib/browser.js", "../../src/exporter.ts", "../../src/frame-loop.ts", "../../../renderer/web/src/r3d/encode.ts", "../../../renderer/web/pkg/ms_renderer.js", "../../../renderer/web/src/doc.ts", "../../../renderer/web/src/protocol.ts", "../../../renderer/web/src/effects/_pack.ts", "../../../renderer/web/src/effects/alpha.ts", "../../../renderer/web/src/effects/ascii.ts", "../../../renderer/web/src/effects/bitCrush.ts", "../../../renderer/web/src/effects/blockDisplace.ts", "../../../renderer/web/src/effects/bloom.ts", "../../../renderer/web/src/effects/blur.ts", "../../../renderer/web/src/effects/bulge.ts", "../../../renderer/web/src/effects/chromaticAberration.ts", "../../../renderer/web/src/effects/colorAdjustment.ts", "../../../renderer/web/src/effects/colorMatrix.ts", "../../../renderer/web/src/effects/curves.ts", "../../../renderer/web/src/effects/directionalBlur.ts", "../../../renderer/web/src/effects/dither.ts", "../../../renderer/web/src/effects/dropShadow.ts", "../../../renderer/web/src/effects/duotone.ts", "../../../renderer/web/src/effects/edges.ts", "../../../renderer/web/src/effects/exposure.ts", "../../../renderer/web/src/effects/glass.ts", "../../../renderer/web/src/effects/glow.ts", "../../../renderer/web/src/effects/grain.ts", "../../../renderer/web/src/effects/grayscale.ts", "../../../renderer/web/src/effects/halftone.ts", "../../../renderer/web/src/effects/invert.ts", "../../../renderer/web/src/effects/kaleidoscope.ts", "../../../renderer/web/src/effects/lut.ts", "../../../renderer/web/src/effects/magnify.ts", "../../../renderer/web/src/effects/oilPaint.ts", "../../../renderer/web/src/effects/outline.ts", "../../../renderer/web/src/effects/pixelate.ts", "../../../renderer/web/src/effects/posterize.ts", "../../../renderer/web/src/effects/progressiveBlur.ts", "../../../renderer/web/src/effects/radialBlur.ts", "../../../renderer/web/src/effects/rgbShift.ts", "../../../renderer/web/src/effects/scanlines.ts", "../../../renderer/web/src/effects/scatter.ts", "../../../renderer/web/src/effects/sharpen.ts", "../../../renderer/web/src/effects/streak.ts", "../../../renderer/web/src/effects/threshold.ts", "../../../renderer/web/src/effects/twirl.ts", "../../../renderer/web/src/effects/vignette.ts", "../../../renderer/web/src/effects/vintage.ts", "../../../renderer/web/src/effects/wave.ts", "../../../renderer/web/src/effects/_port.ts", "../../../renderer/web/src/user-shaders.ts", "../../../renderer/web/src/backend-wgpu.ts", "../../../renderer/web/src/adapter/driver.ts", "../../../renderer/web/src/engine/storage.ts", "../../../renderer/web/src/adapter/geometry/image-matrix.ts", "../../../renderer/web/src/adapter/paint.ts", "../../../renderer/web/src/adapter/shader-params.ts", "../../../renderer/web/src/adapter/path-measure.ts", "../../../renderer/web/src/adapter/svg-path.ts", "../../../renderer/web/src/adapter/geometry/sink.ts", "../../../renderer/web/src/adapter/geometry/base.ts", "../../../renderer/web/src/adapter/geometry/ellipse.ts", "../../../renderer/web/src/adapter/geometry/line.ts", "../../../renderer/web/src/adapter/geometry/path.ts", "../../../renderer/web/src/adapter/geometry/polygon.ts", "../../../renderer/web/src/adapter/geometry/rect.ts", "../../../renderer/web/src/adapter/shapes.ts", "../../../renderer/web/src/adapter/geometry/motion-blur.ts", "../../../renderer/web/src/adapter/geometry/markers.ts", "../../../renderer/web/src/adapter/stroke-ends.ts", "../../../renderer/web/src/adapter/context.ts", "../../../renderer/web/src/engine/text.ts", "../../../renderer/web/src/engine/faults.ts", "../../../renderer/web/src/engine/surface.ts", "../../../renderer/web/src/engine/shader-preview.ts", "../../../renderer/web/src/engine/index.ts", "../../src/renderer.ts", "../../src/deliver.ts", "../../src/formats.ts", "../../src/mix-timeline-audio.ts", "../../src/export-audio.ts", "../../src/screenshot.ts", "../../src/still.ts", "../../src/concat.ts", "../../src/parallel/export-parallel.ts", "../../src/parallel/plan.ts", "../../src/parallel/governor.ts", "../../src/parallel/run-lanes.ts", "../../src/parallel/session.ts", "../../src/parallel/lanes.ts", "../../src/ticker.ts", "../../src/engine.ts", "../../src/dynamic-nodes.ts"],
|
|
4
|
+
"sourcesContent": ["(module=>{\n\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\n\n// lib/npm/browser.ts\nvar browser_exports = {};\n__export(browser_exports, {\n analyzeMetafile: () => analyzeMetafile,\n analyzeMetafileSync: () => analyzeMetafileSync,\n build: () => build,\n buildSync: () => buildSync,\n context: () => context,\n default: () => browser_default,\n formatMessages: () => formatMessages,\n formatMessagesSync: () => formatMessagesSync,\n initialize: () => initialize,\n stop: () => stop,\n transform: () => transform,\n transformSync: () => transformSync,\n version: () => version\n});\nmodule.exports = __toCommonJS(browser_exports);\n\n// lib/shared/stdio_protocol.ts\nfunction encodePacket(packet) {\n let visit = (value) => {\n if (value === null) {\n bb.write8(0);\n } else if (typeof value === \"boolean\") {\n bb.write8(1);\n bb.write8(+value);\n } else if (typeof value === \"number\") {\n bb.write8(2);\n bb.write32(value | 0);\n } else if (typeof value === \"string\") {\n bb.write8(3);\n bb.write(encodeUTF8(value));\n } else if (value instanceof Uint8Array) {\n bb.write8(4);\n bb.write(value);\n } else if (value instanceof Array) {\n bb.write8(5);\n bb.write32(value.length);\n for (let item of value) {\n visit(item);\n }\n } else {\n let keys = Object.keys(value);\n bb.write8(6);\n bb.write32(keys.length);\n for (let key of keys) {\n bb.write(encodeUTF8(key));\n visit(value[key]);\n }\n }\n };\n let bb = new ByteBuffer();\n bb.write32(0);\n bb.write32(packet.id << 1 | +!packet.isRequest);\n visit(packet.value);\n writeUInt32LE(bb.buf, bb.len - 4, 0);\n return bb.buf.subarray(0, bb.len);\n}\nfunction decodePacket(bytes) {\n let visit = () => {\n switch (bb.read8()) {\n case 0:\n return null;\n case 1:\n return !!bb.read8();\n case 2:\n return bb.read32();\n case 3:\n return decodeUTF8(bb.read());\n case 4:\n return bb.read();\n case 5: {\n let count = bb.read32();\n let value2 = [];\n for (let i = 0; i < count; i++) {\n value2.push(visit());\n }\n return value2;\n }\n case 6: {\n let count = bb.read32();\n let value2 = {};\n for (let i = 0; i < count; i++) {\n value2[decodeUTF8(bb.read())] = visit();\n }\n return value2;\n }\n default:\n throw new Error(\"Invalid packet\");\n }\n };\n let bb = new ByteBuffer(bytes);\n let id = bb.read32();\n let isRequest = (id & 1) === 0;\n id >>>= 1;\n let value = visit();\n if (bb.ptr !== bytes.length) {\n throw new Error(\"Invalid packet\");\n }\n return { id, isRequest, value };\n}\nvar ByteBuffer = class {\n constructor(buf = new Uint8Array(1024)) {\n this.buf = buf;\n this.len = 0;\n this.ptr = 0;\n }\n _write(delta) {\n if (this.len + delta > this.buf.length) {\n let clone = new Uint8Array((this.len + delta) * 2);\n clone.set(this.buf);\n this.buf = clone;\n }\n this.len += delta;\n return this.len - delta;\n }\n write8(value) {\n let offset = this._write(1);\n this.buf[offset] = value;\n }\n write32(value) {\n let offset = this._write(4);\n writeUInt32LE(this.buf, value, offset);\n }\n write(bytes) {\n let offset = this._write(4 + bytes.length);\n writeUInt32LE(this.buf, bytes.length, offset);\n this.buf.set(bytes, offset + 4);\n }\n _read(delta) {\n if (this.ptr + delta > this.buf.length) {\n throw new Error(\"Invalid packet\");\n }\n this.ptr += delta;\n return this.ptr - delta;\n }\n read8() {\n return this.buf[this._read(1)];\n }\n read32() {\n return readUInt32LE(this.buf, this._read(4));\n }\n read() {\n let length = this.read32();\n let bytes = new Uint8Array(length);\n let ptr = this._read(bytes.length);\n bytes.set(this.buf.subarray(ptr, ptr + length));\n return bytes;\n }\n};\nvar encodeUTF8;\nvar decodeUTF8;\nvar encodeInvariant;\nif (typeof TextEncoder !== \"undefined\" && typeof TextDecoder !== \"undefined\") {\n let encoder = new TextEncoder();\n let decoder = new TextDecoder();\n encodeUTF8 = (text) => encoder.encode(text);\n decodeUTF8 = (bytes) => decoder.decode(bytes);\n encodeInvariant = 'new TextEncoder().encode(\"\")';\n} else if (typeof Buffer !== \"undefined\") {\n encodeUTF8 = (text) => Buffer.from(text);\n decodeUTF8 = (bytes) => {\n let { buffer, byteOffset, byteLength } = bytes;\n return Buffer.from(buffer, byteOffset, byteLength).toString();\n };\n encodeInvariant = 'Buffer.from(\"\")';\n} else {\n throw new Error(\"No UTF-8 codec found\");\n}\nif (!(encodeUTF8(\"\") instanceof Uint8Array))\n throw new Error(`Invariant violation: \"${encodeInvariant} instanceof Uint8Array\" is incorrectly false\n\nThis indicates that your JavaScript environment is broken. You cannot use\nesbuild in this environment because esbuild relies on this invariant. This\nis not a problem with esbuild. You need to fix your environment instead.\n`);\nfunction readUInt32LE(buffer, offset) {\n return (buffer[offset++] | buffer[offset++] << 8 | buffer[offset++] << 16 | buffer[offset++] << 24) >>> 0;\n}\nfunction writeUInt32LE(buffer, value, offset) {\n buffer[offset++] = value;\n buffer[offset++] = value >> 8;\n buffer[offset++] = value >> 16;\n buffer[offset++] = value >> 24;\n}\n\n// lib/shared/uint8array_json_parser.ts\nvar fromCharCode = String.fromCharCode;\nfunction throwSyntaxError(bytes, index, message) {\n const c = bytes[index];\n let line = 1;\n let column = 0;\n for (let i = 0; i < index; i++) {\n if (bytes[i] === 10 /* Newline */) {\n line++;\n column = 0;\n } else {\n column++;\n }\n }\n throw new SyntaxError(\n message ? message : index === bytes.length ? \"Unexpected end of input while parsing JSON\" : c >= 32 && c <= 126 ? `Unexpected character ${fromCharCode(c)} in JSON at position ${index} (line ${line}, column ${column})` : `Unexpected byte 0x${c.toString(16)} in JSON at position ${index} (line ${line}, column ${column})`\n );\n}\nfunction JSON_parse(bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new Error(`JSON input must be a Uint8Array`);\n }\n const propertyStack = [];\n const objectStack = [];\n const stateStack = [];\n const length = bytes.length;\n let property = null;\n let state = 0 /* TopLevel */;\n let object;\n let i = 0;\n while (i < length) {\n let c = bytes[i++];\n if (c <= 32 /* Space */) {\n continue;\n }\n let value;\n if (state === 2 /* Object */ && property === null && c !== 34 /* Quote */ && c !== 125 /* CloseBrace */) {\n throwSyntaxError(bytes, --i);\n }\n switch (c) {\n // True\n case 116 /* LowerT */: {\n if (bytes[i++] !== 114 /* LowerR */ || bytes[i++] !== 117 /* LowerU */ || bytes[i++] !== 101 /* LowerE */) {\n throwSyntaxError(bytes, --i);\n }\n value = true;\n break;\n }\n // False\n case 102 /* LowerF */: {\n if (bytes[i++] !== 97 /* LowerA */ || bytes[i++] !== 108 /* LowerL */ || bytes[i++] !== 115 /* LowerS */ || bytes[i++] !== 101 /* LowerE */) {\n throwSyntaxError(bytes, --i);\n }\n value = false;\n break;\n }\n // Null\n case 110 /* LowerN */: {\n if (bytes[i++] !== 117 /* LowerU */ || bytes[i++] !== 108 /* LowerL */ || bytes[i++] !== 108 /* LowerL */) {\n throwSyntaxError(bytes, --i);\n }\n value = null;\n break;\n }\n // Number begin\n case 45 /* Minus */:\n case 46 /* Dot */:\n case 48 /* Digit0 */:\n case 49 /* Digit1 */:\n case 50 /* Digit2 */:\n case 51 /* Digit3 */:\n case 52 /* Digit4 */:\n case 53 /* Digit5 */:\n case 54 /* Digit6 */:\n case 55 /* Digit7 */:\n case 56 /* Digit8 */:\n case 57 /* Digit9 */: {\n let index = i;\n value = fromCharCode(c);\n c = bytes[i];\n while (true) {\n switch (c) {\n case 43 /* Plus */:\n case 45 /* Minus */:\n case 46 /* Dot */:\n case 48 /* Digit0 */:\n case 49 /* Digit1 */:\n case 50 /* Digit2 */:\n case 51 /* Digit3 */:\n case 52 /* Digit4 */:\n case 53 /* Digit5 */:\n case 54 /* Digit6 */:\n case 55 /* Digit7 */:\n case 56 /* Digit8 */:\n case 57 /* Digit9 */:\n case 101 /* LowerE */:\n case 69 /* UpperE */: {\n value += fromCharCode(c);\n c = bytes[++i];\n continue;\n }\n }\n break;\n }\n value = +value;\n if (isNaN(value)) {\n throwSyntaxError(bytes, --index, \"Invalid number\");\n }\n break;\n }\n // String begin\n case 34 /* Quote */: {\n value = \"\";\n while (true) {\n if (i >= length) {\n throwSyntaxError(bytes, length);\n }\n c = bytes[i++];\n if (c === 34 /* Quote */) {\n break;\n } else if (c === 92 /* Backslash */) {\n switch (bytes[i++]) {\n // Normal escape sequence\n case 34 /* Quote */:\n value += '\"';\n break;\n case 47 /* Slash */:\n value += \"/\";\n break;\n case 92 /* Backslash */:\n value += \"\\\\\";\n break;\n case 98 /* LowerB */:\n value += \"\\b\";\n break;\n case 102 /* LowerF */:\n value += \"\\f\";\n break;\n case 110 /* LowerN */:\n value += \"\\n\";\n break;\n case 114 /* LowerR */:\n value += \"\\r\";\n break;\n case 116 /* LowerT */:\n value += \"\t\";\n break;\n // Unicode escape sequence\n case 117 /* LowerU */: {\n let code = 0;\n for (let j = 0; j < 4; j++) {\n c = bytes[i++];\n code <<= 4;\n if (c >= 48 /* Digit0 */ && c <= 57 /* Digit9 */) code |= c - 48 /* Digit0 */;\n else if (c >= 97 /* LowerA */ && c <= 102 /* LowerF */) code |= c + (10 - 97 /* LowerA */);\n else if (c >= 65 /* UpperA */ && c <= 70 /* UpperF */) code |= c + (10 - 65 /* UpperA */);\n else throwSyntaxError(bytes, --i);\n }\n value += fromCharCode(code);\n break;\n }\n // Invalid escape sequence\n default:\n throwSyntaxError(bytes, --i);\n break;\n }\n } else if (c <= 127) {\n value += fromCharCode(c);\n } else if ((c & 224) === 192) {\n value += fromCharCode((c & 31) << 6 | bytes[i++] & 63);\n } else if ((c & 240) === 224) {\n value += fromCharCode((c & 15) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63);\n } else if ((c & 248) == 240) {\n let codePoint = (c & 7) << 18 | (bytes[i++] & 63) << 12 | (bytes[i++] & 63) << 6 | bytes[i++] & 63;\n if (codePoint > 65535) {\n codePoint -= 65536;\n value += fromCharCode(codePoint >> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n value += fromCharCode(codePoint);\n }\n }\n value[0];\n break;\n }\n // Array begin\n case 91 /* OpenBracket */: {\n value = [];\n propertyStack.push(property);\n objectStack.push(object);\n stateStack.push(state);\n property = null;\n object = value;\n state = 1 /* Array */;\n continue;\n }\n // Object begin\n case 123 /* OpenBrace */: {\n value = {};\n propertyStack.push(property);\n objectStack.push(object);\n stateStack.push(state);\n property = null;\n object = value;\n state = 2 /* Object */;\n continue;\n }\n // Array end\n case 93 /* CloseBracket */: {\n if (state !== 1 /* Array */) {\n throwSyntaxError(bytes, --i);\n }\n value = object;\n property = propertyStack.pop();\n object = objectStack.pop();\n state = stateStack.pop();\n break;\n }\n // Object end\n case 125 /* CloseBrace */: {\n if (state !== 2 /* Object */) {\n throwSyntaxError(bytes, --i);\n }\n value = object;\n property = propertyStack.pop();\n object = objectStack.pop();\n state = stateStack.pop();\n break;\n }\n default: {\n throwSyntaxError(bytes, --i);\n }\n }\n c = bytes[i];\n while (c <= 32 /* Space */) {\n c = bytes[++i];\n }\n switch (state) {\n case 0 /* TopLevel */: {\n if (i === length) {\n return value;\n }\n break;\n }\n case 1 /* Array */: {\n object.push(value);\n if (c === 44 /* Comma */) {\n i++;\n continue;\n }\n if (c === 93 /* CloseBracket */) {\n continue;\n }\n break;\n }\n case 2 /* Object */: {\n if (property === null) {\n property = value;\n if (c === 58 /* Colon */) {\n i++;\n continue;\n }\n } else {\n object[property] = value;\n property = null;\n if (c === 44 /* Comma */) {\n i++;\n continue;\n }\n if (c === 125 /* CloseBrace */) {\n continue;\n }\n }\n break;\n }\n }\n break;\n }\n throwSyntaxError(bytes, i);\n}\n\n// lib/shared/common.ts\nvar quote = JSON.stringify;\nvar buildLogLevelDefault = \"warning\";\nvar transformLogLevelDefault = \"silent\";\nfunction validateAndJoinStringArray(values, what) {\n const toJoin = [];\n for (const value of values) {\n validateStringValue(value, what);\n if (value.indexOf(\",\") >= 0) throw new Error(`Invalid ${what}: ${value}`);\n toJoin.push(value);\n }\n return toJoin.join(\",\");\n}\nvar canBeAnything = () => null;\nvar mustBeBoolean = (value) => typeof value === \"boolean\" ? null : \"a boolean\";\nvar mustBeString = (value) => typeof value === \"string\" ? null : \"a string\";\nvar mustBeRegExp = (value) => value instanceof RegExp ? null : \"a RegExp object\";\nvar mustBeInteger = (value) => typeof value === \"number\" && value === (value | 0) ? null : \"an integer\";\nvar mustBeValidPortNumber = (value) => typeof value === \"number\" && value === (value | 0) && value >= 0 && value <= 65535 ? null : \"a valid port number\";\nvar mustBeFunction = (value) => typeof value === \"function\" ? null : \"a function\";\nvar mustBeArray = (value) => Array.isArray(value) ? null : \"an array\";\nvar mustBeArrayOfStrings = (value) => Array.isArray(value) && value.every((x) => typeof x === \"string\") ? null : \"an array of strings\";\nvar mustBeObject = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"an object\";\nvar mustBeEntryPoints = (value) => typeof value === \"object\" && value !== null ? null : \"an array or an object\";\nvar mustBeWebAssemblyModule = (value) => value instanceof WebAssembly.Module ? null : \"a WebAssembly.Module\";\nvar mustBeObjectOrNull = (value) => typeof value === \"object\" && !Array.isArray(value) ? null : \"an object or null\";\nvar mustBeStringOrBoolean = (value) => typeof value === \"string\" || typeof value === \"boolean\" ? null : \"a string or a boolean\";\nvar mustBeStringOrObject = (value) => typeof value === \"string\" || typeof value === \"object\" && value !== null && !Array.isArray(value) ? null : \"a string or an object\";\nvar mustBeStringOrArrayOfStrings = (value) => typeof value === \"string\" || Array.isArray(value) && value.every((x) => typeof x === \"string\") ? null : \"a string or an array of strings\";\nvar mustBeStringOrUint8Array = (value) => typeof value === \"string\" || value instanceof Uint8Array ? null : \"a string or a Uint8Array\";\nvar mustBeStringOrURL = (value) => typeof value === \"string\" || value instanceof URL ? null : \"a string or a URL\";\nfunction getFlag(object, keys, key, mustBeFn) {\n let value = object[key];\n keys[key + \"\"] = true;\n if (value === void 0) return void 0;\n let mustBe = mustBeFn(value);\n if (mustBe !== null) throw new Error(`${quote(key)} must be ${mustBe}`);\n return value;\n}\nfunction checkForInvalidFlags(object, keys, where) {\n for (let key in object) {\n if (!(key in keys)) {\n throw new Error(`Invalid option ${where}: ${quote(key)}`);\n }\n }\n}\nfunction validateInitializeOptions(options) {\n let keys = /* @__PURE__ */ Object.create(null);\n let wasmURL = getFlag(options, keys, \"wasmURL\", mustBeStringOrURL);\n let wasmModule = getFlag(options, keys, \"wasmModule\", mustBeWebAssemblyModule);\n let worker = getFlag(options, keys, \"worker\", mustBeBoolean);\n checkForInvalidFlags(options, keys, \"in initialize() call\");\n return {\n wasmURL,\n wasmModule,\n worker\n };\n}\nfunction validateMangleCache(mangleCache) {\n let validated;\n if (mangleCache !== void 0) {\n validated = /* @__PURE__ */ Object.create(null);\n for (let key in mangleCache) {\n let value = mangleCache[key];\n if (typeof value === \"string\" || value === false) {\n validated[key] = value;\n } else {\n throw new Error(`Expected ${quote(key)} in mangle cache to map to either a string or false`);\n }\n }\n }\n return validated;\n}\nfunction pushLogFlags(flags, options, keys, isTTY, logLevelDefault) {\n let color = getFlag(options, keys, \"color\", mustBeBoolean);\n let logLevel = getFlag(options, keys, \"logLevel\", mustBeString);\n let logLimit = getFlag(options, keys, \"logLimit\", mustBeInteger);\n let logStyle = getFlag(options, keys, \"logStyle\", mustBeString);\n if (color !== void 0) flags.push(`--color=${color}`);\n else if (isTTY) flags.push(`--color=true`);\n flags.push(`--log-level=${logLevel || logLevelDefault}`);\n flags.push(`--log-limit=${logLimit || 0}`);\n if (logStyle) flags.push(`--log-style=${logStyle}`);\n}\nfunction validateStringValue(value, what, key) {\n if (typeof value !== \"string\") {\n throw new Error(`Expected value for ${what}${key !== void 0 ? \" \" + quote(key) : \"\"} to be a string, got ${typeof value} instead`);\n }\n return value;\n}\nfunction pushCommonFlags(flags, options, keys) {\n let legalComments = getFlag(options, keys, \"legalComments\", mustBeString);\n let sourceRoot = getFlag(options, keys, \"sourceRoot\", mustBeString);\n let sourcesContent = getFlag(options, keys, \"sourcesContent\", mustBeBoolean);\n let target = getFlag(options, keys, \"target\", mustBeStringOrArrayOfStrings);\n let format = getFlag(options, keys, \"format\", mustBeString);\n let globalName = getFlag(options, keys, \"globalName\", mustBeString);\n let mangleProps = getFlag(options, keys, \"mangleProps\", mustBeRegExp);\n let reserveProps = getFlag(options, keys, \"reserveProps\", mustBeRegExp);\n let mangleQuoted = getFlag(options, keys, \"mangleQuoted\", mustBeBoolean);\n let minify = getFlag(options, keys, \"minify\", mustBeBoolean);\n let minifySyntax = getFlag(options, keys, \"minifySyntax\", mustBeBoolean);\n let minifyWhitespace = getFlag(options, keys, \"minifyWhitespace\", mustBeBoolean);\n let minifyIdentifiers = getFlag(options, keys, \"minifyIdentifiers\", mustBeBoolean);\n let lineLimit = getFlag(options, keys, \"lineLimit\", mustBeInteger);\n let drop = getFlag(options, keys, \"drop\", mustBeArrayOfStrings);\n let dropLabels = getFlag(options, keys, \"dropLabels\", mustBeArrayOfStrings);\n let charset = getFlag(options, keys, \"charset\", mustBeString);\n let treeShaking = getFlag(options, keys, \"treeShaking\", mustBeBoolean);\n let ignoreAnnotations = getFlag(options, keys, \"ignoreAnnotations\", mustBeBoolean);\n let jsx = getFlag(options, keys, \"jsx\", mustBeString);\n let jsxFactory = getFlag(options, keys, \"jsxFactory\", mustBeString);\n let jsxFragment = getFlag(options, keys, \"jsxFragment\", mustBeString);\n let jsxImportSource = getFlag(options, keys, \"jsxImportSource\", mustBeString);\n let jsxDev = getFlag(options, keys, \"jsxDev\", mustBeBoolean);\n let jsxSideEffects = getFlag(options, keys, \"jsxSideEffects\", mustBeBoolean);\n let define = getFlag(options, keys, \"define\", mustBeObject);\n let logOverride = getFlag(options, keys, \"logOverride\", mustBeObject);\n let supported = getFlag(options, keys, \"supported\", mustBeObject);\n let pure = getFlag(options, keys, \"pure\", mustBeArrayOfStrings);\n let keepNames = getFlag(options, keys, \"keepNames\", mustBeBoolean);\n let platform = getFlag(options, keys, \"platform\", mustBeString);\n let tsconfigRaw = getFlag(options, keys, \"tsconfigRaw\", mustBeStringOrObject);\n let absPaths = getFlag(options, keys, \"absPaths\", mustBeArrayOfStrings);\n if (legalComments) flags.push(`--legal-comments=${legalComments}`);\n if (sourceRoot !== void 0) flags.push(`--source-root=${sourceRoot}`);\n if (sourcesContent !== void 0) flags.push(`--sources-content=${sourcesContent}`);\n if (target) flags.push(`--target=${validateAndJoinStringArray(Array.isArray(target) ? target : [target], \"target\")}`);\n if (format) flags.push(`--format=${format}`);\n if (globalName) flags.push(`--global-name=${globalName}`);\n if (platform) flags.push(`--platform=${platform}`);\n if (tsconfigRaw) flags.push(`--tsconfig-raw=${typeof tsconfigRaw === \"string\" ? tsconfigRaw : JSON.stringify(tsconfigRaw)}`);\n if (minify) flags.push(\"--minify\");\n if (minifySyntax) flags.push(\"--minify-syntax\");\n if (minifyWhitespace) flags.push(\"--minify-whitespace\");\n if (minifyIdentifiers) flags.push(\"--minify-identifiers\");\n if (lineLimit) flags.push(`--line-limit=${lineLimit}`);\n if (charset) flags.push(`--charset=${charset}`);\n if (treeShaking !== void 0) flags.push(`--tree-shaking=${treeShaking}`);\n if (ignoreAnnotations) flags.push(`--ignore-annotations`);\n if (drop) for (let what of drop) flags.push(`--drop:${validateStringValue(what, \"drop\")}`);\n if (dropLabels) flags.push(`--drop-labels=${validateAndJoinStringArray(dropLabels, \"drop label\")}`);\n if (absPaths) flags.push(`--abs-paths=${validateAndJoinStringArray(absPaths, \"abs paths\")}`);\n if (mangleProps) flags.push(`--mangle-props=${jsRegExpToGoRegExp(mangleProps)}`);\n if (reserveProps) flags.push(`--reserve-props=${jsRegExpToGoRegExp(reserveProps)}`);\n if (mangleQuoted !== void 0) flags.push(`--mangle-quoted=${mangleQuoted}`);\n if (jsx) flags.push(`--jsx=${jsx}`);\n if (jsxFactory) flags.push(`--jsx-factory=${jsxFactory}`);\n if (jsxFragment) flags.push(`--jsx-fragment=${jsxFragment}`);\n if (jsxImportSource) flags.push(`--jsx-import-source=${jsxImportSource}`);\n if (jsxDev) flags.push(`--jsx-dev`);\n if (jsxSideEffects) flags.push(`--jsx-side-effects`);\n if (define) {\n for (let key in define) {\n if (key.indexOf(\"=\") >= 0) throw new Error(`Invalid define: ${key}`);\n flags.push(`--define:${key}=${validateStringValue(define[key], \"define\", key)}`);\n }\n }\n if (logOverride) {\n for (let key in logOverride) {\n if (key.indexOf(\"=\") >= 0) throw new Error(`Invalid log override: ${key}`);\n flags.push(`--log-override:${key}=${validateStringValue(logOverride[key], \"log override\", key)}`);\n }\n }\n if (supported) {\n for (let key in supported) {\n if (key.indexOf(\"=\") >= 0) throw new Error(`Invalid supported: ${key}`);\n const value = supported[key];\n if (typeof value !== \"boolean\") throw new Error(`Expected value for supported ${quote(key)} to be a boolean, got ${typeof value} instead`);\n flags.push(`--supported:${key}=${value}`);\n }\n }\n if (pure) for (let fn of pure) flags.push(`--pure:${validateStringValue(fn, \"pure\")}`);\n if (keepNames) flags.push(`--keep-names`);\n}\nfunction flagsForBuildOptions(callName, options, isTTY, logLevelDefault, writeDefault) {\n var _a;\n let flags = [];\n let entries = [];\n let keys = /* @__PURE__ */ Object.create(null);\n let stdinContents = null;\n let stdinResolveDir = null;\n pushLogFlags(flags, options, keys, isTTY, logLevelDefault);\n pushCommonFlags(flags, options, keys);\n let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n let bundle = getFlag(options, keys, \"bundle\", mustBeBoolean);\n let splitting = getFlag(options, keys, \"splitting\", mustBeBoolean);\n let preserveSymlinks = getFlag(options, keys, \"preserveSymlinks\", mustBeBoolean);\n let metafile = getFlag(options, keys, \"metafile\", mustBeBoolean);\n let outfile = getFlag(options, keys, \"outfile\", mustBeString);\n let outdir = getFlag(options, keys, \"outdir\", mustBeString);\n let outbase = getFlag(options, keys, \"outbase\", mustBeString);\n let tsconfig = getFlag(options, keys, \"tsconfig\", mustBeString);\n let resolveExtensions = getFlag(options, keys, \"resolveExtensions\", mustBeArrayOfStrings);\n let nodePathsInput = getFlag(options, keys, \"nodePaths\", mustBeArrayOfStrings);\n let mainFields = getFlag(options, keys, \"mainFields\", mustBeArrayOfStrings);\n let conditions = getFlag(options, keys, \"conditions\", mustBeArrayOfStrings);\n let external = getFlag(options, keys, \"external\", mustBeArrayOfStrings);\n let packages = getFlag(options, keys, \"packages\", mustBeString);\n let alias = getFlag(options, keys, \"alias\", mustBeObject);\n let loader = getFlag(options, keys, \"loader\", mustBeObject);\n let outExtension = getFlag(options, keys, \"outExtension\", mustBeObject);\n let publicPath = getFlag(options, keys, \"publicPath\", mustBeString);\n let entryNames = getFlag(options, keys, \"entryNames\", mustBeString);\n let chunkNames = getFlag(options, keys, \"chunkNames\", mustBeString);\n let assetNames = getFlag(options, keys, \"assetNames\", mustBeString);\n let inject = getFlag(options, keys, \"inject\", mustBeArrayOfStrings);\n let banner = getFlag(options, keys, \"banner\", mustBeObject);\n let footer = getFlag(options, keys, \"footer\", mustBeObject);\n let entryPoints = getFlag(options, keys, \"entryPoints\", mustBeEntryPoints);\n let absWorkingDir = getFlag(options, keys, \"absWorkingDir\", mustBeString);\n let stdin = getFlag(options, keys, \"stdin\", mustBeObject);\n let write = (_a = getFlag(options, keys, \"write\", mustBeBoolean)) != null ? _a : writeDefault;\n let allowOverwrite = getFlag(options, keys, \"allowOverwrite\", mustBeBoolean);\n let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n keys.plugins = true;\n checkForInvalidFlags(options, keys, `in ${callName}() call`);\n if (sourcemap) flags.push(`--sourcemap${sourcemap === true ? \"\" : `=${sourcemap}`}`);\n if (bundle) flags.push(\"--bundle\");\n if (allowOverwrite) flags.push(\"--allow-overwrite\");\n if (splitting) flags.push(\"--splitting\");\n if (preserveSymlinks) flags.push(\"--preserve-symlinks\");\n if (metafile) flags.push(`--metafile`);\n if (outfile) flags.push(`--outfile=${outfile}`);\n if (outdir) flags.push(`--outdir=${outdir}`);\n if (outbase) flags.push(`--outbase=${outbase}`);\n if (tsconfig) flags.push(`--tsconfig=${tsconfig}`);\n if (packages) flags.push(`--packages=${packages}`);\n if (resolveExtensions) flags.push(`--resolve-extensions=${validateAndJoinStringArray(resolveExtensions, \"resolve extension\")}`);\n if (publicPath) flags.push(`--public-path=${publicPath}`);\n if (entryNames) flags.push(`--entry-names=${entryNames}`);\n if (chunkNames) flags.push(`--chunk-names=${chunkNames}`);\n if (assetNames) flags.push(`--asset-names=${assetNames}`);\n if (mainFields) flags.push(`--main-fields=${validateAndJoinStringArray(mainFields, \"main field\")}`);\n if (conditions) flags.push(`--conditions=${validateAndJoinStringArray(conditions, \"condition\")}`);\n if (external) for (let name of external) flags.push(`--external:${validateStringValue(name, \"external\")}`);\n if (alias) {\n for (let old in alias) {\n if (old.indexOf(\"=\") >= 0) throw new Error(`Invalid package name in alias: ${old}`);\n flags.push(`--alias:${old}=${validateStringValue(alias[old], \"alias\", old)}`);\n }\n }\n if (banner) {\n for (let type in banner) {\n if (type.indexOf(\"=\") >= 0) throw new Error(`Invalid banner file type: ${type}`);\n flags.push(`--banner:${type}=${validateStringValue(banner[type], \"banner\", type)}`);\n }\n }\n if (footer) {\n for (let type in footer) {\n if (type.indexOf(\"=\") >= 0) throw new Error(`Invalid footer file type: ${type}`);\n flags.push(`--footer:${type}=${validateStringValue(footer[type], \"footer\", type)}`);\n }\n }\n if (inject) for (let path of inject) flags.push(`--inject:${validateStringValue(path, \"inject\")}`);\n if (loader) {\n for (let ext in loader) {\n if (ext.indexOf(\"=\") >= 0) throw new Error(`Invalid loader extension: ${ext}`);\n flags.push(`--loader:${ext}=${validateStringValue(loader[ext], \"loader\", ext)}`);\n }\n }\n if (outExtension) {\n for (let ext in outExtension) {\n if (ext.indexOf(\"=\") >= 0) throw new Error(`Invalid out extension: ${ext}`);\n flags.push(`--out-extension:${ext}=${validateStringValue(outExtension[ext], \"out extension\", ext)}`);\n }\n }\n if (entryPoints) {\n if (Array.isArray(entryPoints)) {\n for (let i = 0, n = entryPoints.length; i < n; i++) {\n let entryPoint = entryPoints[i];\n if (typeof entryPoint === \"object\" && entryPoint !== null) {\n let entryPointKeys = /* @__PURE__ */ Object.create(null);\n let input = getFlag(entryPoint, entryPointKeys, \"in\", mustBeString);\n let output = getFlag(entryPoint, entryPointKeys, \"out\", mustBeString);\n checkForInvalidFlags(entryPoint, entryPointKeys, \"in entry point at index \" + i);\n if (input === void 0) throw new Error('Missing property \"in\" for entry point at index ' + i);\n if (output === void 0) throw new Error('Missing property \"out\" for entry point at index ' + i);\n entries.push([output, input]);\n } else {\n entries.push([\"\", validateStringValue(entryPoint, \"entry point at index \" + i)]);\n }\n }\n } else {\n for (let key in entryPoints) {\n entries.push([key, validateStringValue(entryPoints[key], \"entry point\", key)]);\n }\n }\n }\n if (stdin) {\n let stdinKeys = /* @__PURE__ */ Object.create(null);\n let contents = getFlag(stdin, stdinKeys, \"contents\", mustBeStringOrUint8Array);\n let resolveDir = getFlag(stdin, stdinKeys, \"resolveDir\", mustBeString);\n let sourcefile = getFlag(stdin, stdinKeys, \"sourcefile\", mustBeString);\n let loader2 = getFlag(stdin, stdinKeys, \"loader\", mustBeString);\n checkForInvalidFlags(stdin, stdinKeys, 'in \"stdin\" object');\n if (sourcefile) flags.push(`--sourcefile=${sourcefile}`);\n if (loader2) flags.push(`--loader=${loader2}`);\n if (resolveDir) stdinResolveDir = resolveDir;\n if (typeof contents === \"string\") stdinContents = encodeUTF8(contents);\n else if (contents instanceof Uint8Array) stdinContents = contents;\n }\n let nodePaths = [];\n if (nodePathsInput) {\n for (let value of nodePathsInput) {\n value += \"\";\n nodePaths.push(value);\n }\n }\n return {\n entries,\n flags,\n write,\n stdinContents,\n stdinResolveDir,\n absWorkingDir,\n nodePaths,\n mangleCache: validateMangleCache(mangleCache)\n };\n}\nfunction flagsForTransformOptions(callName, options, isTTY, logLevelDefault) {\n let flags = [];\n let keys = /* @__PURE__ */ Object.create(null);\n pushLogFlags(flags, options, keys, isTTY, logLevelDefault);\n pushCommonFlags(flags, options, keys);\n let sourcemap = getFlag(options, keys, \"sourcemap\", mustBeStringOrBoolean);\n let sourcefile = getFlag(options, keys, \"sourcefile\", mustBeString);\n let loader = getFlag(options, keys, \"loader\", mustBeString);\n let banner = getFlag(options, keys, \"banner\", mustBeString);\n let footer = getFlag(options, keys, \"footer\", mustBeString);\n let mangleCache = getFlag(options, keys, \"mangleCache\", mustBeObject);\n checkForInvalidFlags(options, keys, `in ${callName}() call`);\n if (sourcemap) flags.push(`--sourcemap=${sourcemap === true ? \"external\" : sourcemap}`);\n if (sourcefile) flags.push(`--sourcefile=${sourcefile}`);\n if (loader) flags.push(`--loader=${loader}`);\n if (banner) flags.push(`--banner=${banner}`);\n if (footer) flags.push(`--footer=${footer}`);\n return {\n flags,\n mangleCache: validateMangleCache(mangleCache)\n };\n}\nfunction createChannel(streamIn) {\n const requestCallbacksByKey = {};\n const closeData = { didClose: false, reason: \"\" };\n let responseCallbacks = {};\n let nextRequestID = 0;\n let nextBuildKey = 0;\n let stdout = new Uint8Array(16 * 1024);\n let stdoutUsed = 0;\n let readFromStdout = (chunk) => {\n let limit = stdoutUsed + chunk.length;\n if (limit > stdout.length) {\n let swap = new Uint8Array(limit * 2);\n swap.set(stdout);\n stdout = swap;\n }\n stdout.set(chunk, stdoutUsed);\n stdoutUsed += chunk.length;\n let offset = 0;\n while (offset + 4 <= stdoutUsed) {\n let length = readUInt32LE(stdout, offset);\n if (offset + 4 + length > stdoutUsed) {\n break;\n }\n offset += 4;\n handleIncomingPacket(stdout.subarray(offset, offset + length));\n offset += length;\n }\n if (offset > 0) {\n stdout.copyWithin(0, offset, stdoutUsed);\n stdoutUsed -= offset;\n }\n };\n let afterClose = (error) => {\n closeData.didClose = true;\n if (error) closeData.reason = \": \" + (error.message || error);\n const text = \"The service was stopped\" + closeData.reason;\n for (let id in responseCallbacks) {\n responseCallbacks[id](text, null);\n }\n responseCallbacks = {};\n };\n let sendRequest = (refs, value, callback) => {\n if (closeData.didClose) return callback(\"The service is no longer running\" + closeData.reason, null);\n let id = nextRequestID++;\n responseCallbacks[id] = (error, response) => {\n try {\n callback(error, response);\n } finally {\n if (refs) refs.unref();\n }\n };\n if (refs) refs.ref();\n streamIn.writeToStdin(encodePacket({ id, isRequest: true, value }));\n };\n let sendResponse = (id, value) => {\n if (closeData.didClose) throw new Error(\"The service is no longer running\" + closeData.reason);\n streamIn.writeToStdin(encodePacket({ id, isRequest: false, value }));\n };\n let handleRequest = (id, request) => __async(null, null, function* () {\n try {\n if (request.command === \"ping\") {\n sendResponse(id, {});\n return;\n }\n if (typeof request.key === \"number\") {\n const requestCallbacks = requestCallbacksByKey[request.key];\n if (!requestCallbacks) {\n return;\n }\n const callback = requestCallbacks[request.command];\n if (callback) {\n yield callback(id, request);\n return;\n }\n }\n throw new Error(`Invalid command: ` + request.command);\n } catch (e) {\n const errors = [extractErrorMessageV8(e, streamIn, null, void 0, \"\")];\n try {\n sendResponse(id, { errors });\n } catch (e2) {\n }\n }\n });\n let isFirstPacket = true;\n let handleIncomingPacket = (bytes) => {\n if (isFirstPacket) {\n isFirstPacket = false;\n let binaryVersion = String.fromCharCode(...bytes);\n if (binaryVersion !== \"0.28.2\") {\n throw new Error(`Cannot start service: Host version \"${\"0.28.2\"}\" does not match binary version ${quote(binaryVersion)}`);\n }\n return;\n }\n let packet = decodePacket(bytes);\n if (packet.isRequest) {\n handleRequest(packet.id, packet.value);\n } else {\n let callback = responseCallbacks[packet.id];\n delete responseCallbacks[packet.id];\n if (packet.value.error) callback(packet.value.error, {});\n else callback(null, packet.value);\n }\n };\n let buildOrContext = ({ callName, refs, options, isTTY, defaultWD, callback }) => {\n let refCount = 0;\n const buildKey = nextBuildKey++;\n const requestCallbacks = {};\n const buildRefs = {\n ref() {\n if (++refCount === 1) {\n if (refs) refs.ref();\n }\n },\n unref() {\n if (--refCount === 0) {\n delete requestCallbacksByKey[buildKey];\n if (refs) refs.unref();\n }\n }\n };\n requestCallbacksByKey[buildKey] = requestCallbacks;\n buildRefs.ref();\n buildOrContextImpl(\n callName,\n buildKey,\n sendRequest,\n sendResponse,\n buildRefs,\n streamIn,\n requestCallbacks,\n options,\n isTTY,\n defaultWD,\n (err, res) => {\n try {\n callback(err, res);\n } finally {\n buildRefs.unref();\n }\n }\n );\n };\n let transform2 = ({ callName, refs, input, options, isTTY, fs, callback }) => {\n const details = createObjectStash();\n let start = (inputPath) => {\n try {\n if (typeof input !== \"string\" && !(input instanceof Uint8Array))\n throw new Error('The input to \"transform\" must be a string or a Uint8Array');\n let {\n flags,\n mangleCache\n } = flagsForTransformOptions(callName, options, isTTY, transformLogLevelDefault);\n let request = {\n command: \"transform\",\n flags,\n inputFS: inputPath !== null,\n input: inputPath !== null ? encodeUTF8(inputPath) : typeof input === \"string\" ? encodeUTF8(input) : input\n };\n if (mangleCache) request.mangleCache = mangleCache;\n sendRequest(refs, request, (error, response) => {\n if (error) return callback(new Error(error), null);\n let errors = replaceDetailsInMessages(response.errors, details);\n let warnings = replaceDetailsInMessages(response.warnings, details);\n let outstanding = 1;\n let next = () => {\n if (--outstanding === 0) {\n let result = {\n warnings,\n code: response.code,\n map: response.map,\n mangleCache: void 0,\n legalComments: void 0\n };\n if (\"legalComments\" in response) result.legalComments = response == null ? void 0 : response.legalComments;\n if (response.mangleCache) result.mangleCache = response == null ? void 0 : response.mangleCache;\n callback(null, result);\n }\n };\n if (errors.length > 0) return callback(failureErrorWithLog(\"Transform failed\", errors, warnings), null);\n if (response.codeFS) {\n outstanding++;\n fs.readFile(response.code, (err, contents) => {\n if (err !== null) {\n callback(err, null);\n } else {\n response.code = contents;\n next();\n }\n });\n }\n if (response.mapFS) {\n outstanding++;\n fs.readFile(response.map, (err, contents) => {\n if (err !== null) {\n callback(err, null);\n } else {\n response.map = contents;\n next();\n }\n });\n }\n next();\n });\n } catch (e) {\n let flags = [];\n try {\n pushLogFlags(flags, options, {}, isTTY, transformLogLevelDefault);\n } catch (e2) {\n }\n const error = extractErrorMessageV8(e, streamIn, details, void 0, \"\");\n sendRequest(refs, { command: \"error\", flags, error }, () => {\n error.detail = details.load(error.detail);\n callback(failureErrorWithLog(\"Transform failed\", [error], []), null);\n });\n }\n };\n if ((typeof input === \"string\" || input instanceof Uint8Array) && input.length > 1024 * 1024) {\n let next = start;\n start = () => fs.writeFile(input, next);\n }\n start(null);\n };\n let formatMessages2 = ({ callName, refs, messages, options, callback }) => {\n if (!options) throw new Error(`Missing second argument in ${callName}() call`);\n let keys = {};\n let kind = getFlag(options, keys, \"kind\", mustBeString);\n let color = getFlag(options, keys, \"color\", mustBeBoolean);\n let terminalWidth = getFlag(options, keys, \"terminalWidth\", mustBeInteger);\n let logStyle = getFlag(options, keys, \"logStyle\", mustBeString);\n checkForInvalidFlags(options, keys, `in ${callName}() call`);\n if (kind === void 0) throw new Error(`Missing \"kind\" in ${callName}() call`);\n if (kind !== \"error\" && kind !== \"warning\") throw new Error(`Expected \"kind\" to be \"error\" or \"warning\" in ${callName}() call`);\n let request = {\n command: \"format-msgs\",\n messages: sanitizeMessages(messages, \"messages\", null, \"\", terminalWidth),\n isWarning: kind === \"warning\"\n };\n if (color !== void 0) request.color = color;\n if (terminalWidth !== void 0) request.terminalWidth = terminalWidth;\n if (logStyle !== void 0) request.logStyle = logStyle;\n sendRequest(refs, request, (error, response) => {\n if (error) return callback(new Error(error), null);\n callback(null, response.messages);\n });\n };\n let analyzeMetafile2 = ({ callName, refs, metafile, options, callback }) => {\n if (options === void 0) options = {};\n let keys = {};\n let color = getFlag(options, keys, \"color\", mustBeBoolean);\n let verbose = getFlag(options, keys, \"verbose\", mustBeBoolean);\n checkForInvalidFlags(options, keys, `in ${callName}() call`);\n let request = {\n command: \"analyze-metafile\",\n metafile\n };\n if (color !== void 0) request.color = color;\n if (verbose !== void 0) request.verbose = verbose;\n sendRequest(refs, request, (error, response) => {\n if (error) return callback(new Error(error), null);\n callback(null, response.result);\n });\n };\n return {\n readFromStdout,\n afterClose,\n service: {\n buildOrContext,\n transform: transform2,\n formatMessages: formatMessages2,\n analyzeMetafile: analyzeMetafile2\n }\n };\n}\nfunction buildOrContextImpl(callName, buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, options, isTTY, defaultWD, callback) {\n const details = createObjectStash();\n const isContext = callName === \"context\";\n const handleError = (e, pluginName) => {\n const flags = [];\n try {\n pushLogFlags(flags, options, {}, isTTY, buildLogLevelDefault);\n } catch (e2) {\n }\n const message = extractErrorMessageV8(e, streamIn, details, void 0, pluginName);\n sendRequest(refs, { command: \"error\", flags, error: message }, () => {\n message.detail = details.load(message.detail);\n callback(failureErrorWithLog(isContext ? \"Context failed\" : \"Build failed\", [message], []), null);\n });\n };\n let plugins;\n if (typeof options === \"object\") {\n const value = options.plugins;\n if (value !== void 0) {\n if (!Array.isArray(value)) return handleError(new Error(`\"plugins\" must be an array`), \"\");\n plugins = value;\n }\n }\n if (plugins && plugins.length > 0) {\n if (streamIn.isSync) return handleError(new Error(\"Cannot use plugins in synchronous API calls\"), \"\");\n handlePlugins(\n buildKey,\n sendRequest,\n sendResponse,\n refs,\n streamIn,\n requestCallbacks,\n options,\n plugins,\n details\n ).then(\n (result) => {\n if (!result.ok) return handleError(result.error, result.pluginName);\n try {\n buildOrContextContinue(result.requestPlugins, result.runOnEndCallbacks, result.scheduleOnDisposeCallbacks);\n } catch (e) {\n handleError(e, \"\");\n }\n },\n (e) => handleError(e, \"\")\n );\n return;\n }\n try {\n buildOrContextContinue(null, (result, done) => done([], []), () => {\n });\n } catch (e) {\n handleError(e, \"\");\n }\n function buildOrContextContinue(requestPlugins, runOnEndCallbacks, scheduleOnDisposeCallbacks) {\n const writeDefault = streamIn.hasFS;\n const {\n entries,\n flags,\n write,\n stdinContents,\n stdinResolveDir,\n absWorkingDir,\n nodePaths,\n mangleCache\n } = flagsForBuildOptions(callName, options, isTTY, buildLogLevelDefault, writeDefault);\n if (write && !streamIn.hasFS) throw new Error(`The \"write\" option is unavailable in this environment`);\n const request = {\n command: \"build\",\n key: buildKey,\n entries,\n flags,\n write,\n stdinContents,\n stdinResolveDir,\n absWorkingDir: absWorkingDir || defaultWD,\n nodePaths,\n context: isContext\n };\n if (requestPlugins) request.plugins = requestPlugins;\n if (mangleCache) request.mangleCache = mangleCache;\n const buildResponseToResult = (response, callback2) => {\n const result = {\n errors: replaceDetailsInMessages(response.errors, details),\n warnings: replaceDetailsInMessages(response.warnings, details),\n outputFiles: void 0,\n metafile: void 0,\n mangleCache: void 0\n };\n const originalErrors = result.errors.slice();\n const originalWarnings = result.warnings.slice();\n if (response.outputFiles) result.outputFiles = response.outputFiles.map(convertOutputFiles);\n if (response.metafile && response.metafile.length) result.metafile = parseJSON(response.metafile);\n if (response.mangleCache) result.mangleCache = response.mangleCache;\n if (response.writeToStdout !== void 0) console.log(decodeUTF8(response.writeToStdout).replace(/\\n$/, \"\"));\n runOnEndCallbacks(result, (onEndErrors, onEndWarnings) => {\n if (originalErrors.length > 0 || onEndErrors.length > 0) {\n const error = failureErrorWithLog(\"Build failed\", originalErrors.concat(onEndErrors), originalWarnings.concat(onEndWarnings));\n return callback2(error, null, onEndErrors, onEndWarnings);\n }\n callback2(null, result, onEndErrors, onEndWarnings);\n });\n };\n let latestResultPromise;\n let provideLatestResult;\n if (isContext)\n requestCallbacks[\"on-end\"] = (id, request2) => new Promise((resolve) => {\n buildResponseToResult(request2, (err, result, onEndErrors, onEndWarnings) => {\n const response = {\n errors: onEndErrors,\n warnings: onEndWarnings\n };\n if (provideLatestResult) provideLatestResult(err, result);\n latestResultPromise = void 0;\n provideLatestResult = void 0;\n sendResponse(id, response);\n resolve();\n });\n });\n sendRequest(refs, request, (error, response) => {\n if (error) return callback(new Error(error), null);\n if (!isContext) {\n return buildResponseToResult(response, (err, res) => {\n scheduleOnDisposeCallbacks();\n return callback(err, res);\n });\n }\n if (response.errors.length > 0) {\n return callback(failureErrorWithLog(\"Context failed\", response.errors, response.warnings), null);\n }\n let didDispose = false;\n const result = {\n rebuild: () => {\n if (!latestResultPromise) latestResultPromise = new Promise((resolve, reject) => {\n let settlePromise;\n provideLatestResult = (err, result2) => {\n if (!settlePromise) settlePromise = () => err ? reject(err) : resolve(result2);\n };\n const triggerAnotherBuild = () => {\n const request2 = {\n command: \"rebuild\",\n key: buildKey\n };\n sendRequest(refs, request2, (error2, response2) => {\n if (error2) {\n reject(new Error(error2));\n } else if (settlePromise) {\n settlePromise();\n } else {\n triggerAnotherBuild();\n }\n });\n };\n triggerAnotherBuild();\n });\n return latestResultPromise;\n },\n watch: (options2 = {}) => new Promise((resolve, reject) => {\n if (!streamIn.hasFS) throw new Error(`Cannot use the \"watch\" API in this environment`);\n const keys = {};\n const delay = getFlag(options2, keys, \"delay\", mustBeInteger);\n checkForInvalidFlags(options2, keys, `in watch() call`);\n const request2 = {\n command: \"watch\",\n key: buildKey\n };\n if (delay) request2.delay = delay;\n sendRequest(refs, request2, (error2) => {\n if (error2) reject(new Error(error2));\n else resolve(void 0);\n });\n }),\n serve: (options2 = {}) => new Promise((resolve, reject) => {\n if (!streamIn.hasFS) throw new Error(`Cannot use the \"serve\" API in this environment`);\n const keys = {};\n const port = getFlag(options2, keys, \"port\", mustBeValidPortNumber);\n const host = getFlag(options2, keys, \"host\", mustBeString);\n const servedir = getFlag(options2, keys, \"servedir\", mustBeString);\n const keyfile = getFlag(options2, keys, \"keyfile\", mustBeString);\n const certfile = getFlag(options2, keys, \"certfile\", mustBeString);\n const fallback = getFlag(options2, keys, \"fallback\", mustBeString);\n const cors = getFlag(options2, keys, \"cors\", mustBeObject);\n const onRequest = getFlag(options2, keys, \"onRequest\", mustBeFunction);\n checkForInvalidFlags(options2, keys, `in serve() call`);\n const request2 = {\n command: \"serve\",\n key: buildKey,\n onRequest: !!onRequest\n };\n if (port !== void 0) request2.port = port;\n if (host !== void 0) request2.host = host;\n if (servedir !== void 0) request2.servedir = servedir;\n if (keyfile !== void 0) request2.keyfile = keyfile;\n if (certfile !== void 0) request2.certfile = certfile;\n if (fallback !== void 0) request2.fallback = fallback;\n if (cors) {\n const corsKeys = {};\n const origin = getFlag(cors, corsKeys, \"origin\", mustBeStringOrArrayOfStrings);\n checkForInvalidFlags(cors, corsKeys, `on \"cors\" object`);\n if (Array.isArray(origin)) request2.corsOrigin = origin;\n else if (origin !== void 0) request2.corsOrigin = [origin];\n }\n sendRequest(refs, request2, (error2, response2) => {\n if (error2) return reject(new Error(error2));\n if (onRequest) {\n requestCallbacks[\"serve-request\"] = (id, request3) => {\n onRequest(request3.args);\n sendResponse(id, {});\n };\n }\n resolve(response2);\n });\n }),\n cancel: () => new Promise((resolve) => {\n if (didDispose) return resolve();\n const request2 = {\n command: \"cancel\",\n key: buildKey\n };\n sendRequest(refs, request2, () => {\n resolve();\n });\n }),\n dispose: () => new Promise((resolve) => {\n if (didDispose) return resolve();\n didDispose = true;\n const request2 = {\n command: \"dispose\",\n key: buildKey\n };\n sendRequest(refs, request2, () => {\n resolve();\n scheduleOnDisposeCallbacks();\n refs.unref();\n });\n })\n };\n refs.ref();\n callback(null, result);\n });\n }\n}\nvar handlePlugins = (buildKey, sendRequest, sendResponse, refs, streamIn, requestCallbacks, initialOptions, plugins, details) => __async(null, null, function* () {\n let onStartCallbacks = [];\n let onEndCallbacks = [];\n let onResolveCallbacks = {};\n let onLoadCallbacks = {};\n let onDisposeCallbacks = [];\n let nextCallbackID = 0;\n let i = 0;\n let requestPlugins = [];\n let isSetupDone = false;\n plugins = [...plugins];\n for (let item of plugins) {\n let keys = {};\n if (typeof item !== \"object\") throw new Error(`Plugin at index ${i} must be an object`);\n const name = getFlag(item, keys, \"name\", mustBeString);\n if (typeof name !== \"string\" || name === \"\") throw new Error(`Plugin at index ${i} is missing a name`);\n try {\n let setup = getFlag(item, keys, \"setup\", mustBeFunction);\n if (typeof setup !== \"function\") throw new Error(`Plugin is missing a setup function`);\n checkForInvalidFlags(item, keys, `on plugin ${quote(name)}`);\n let plugin = {\n name,\n onStart: false,\n onEnd: false,\n onResolve: [],\n onLoad: []\n };\n i++;\n let resolve = (path, options = {}) => {\n if (!isSetupDone) throw new Error('Cannot call \"resolve\" before plugin setup has completed');\n if (typeof path !== \"string\") throw new Error(`The path to resolve must be a string`);\n let keys2 = /* @__PURE__ */ Object.create(null);\n let pluginName = getFlag(options, keys2, \"pluginName\", mustBeString);\n let importer = getFlag(options, keys2, \"importer\", mustBeString);\n let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n let resolveDir = getFlag(options, keys2, \"resolveDir\", mustBeString);\n let kind = getFlag(options, keys2, \"kind\", mustBeString);\n let pluginData = getFlag(options, keys2, \"pluginData\", canBeAnything);\n let importAttributes = getFlag(options, keys2, \"with\", mustBeObject);\n checkForInvalidFlags(options, keys2, \"in resolve() call\");\n return new Promise((resolve2, reject) => {\n const request = {\n command: \"resolve\",\n path,\n key: buildKey,\n pluginName: name\n };\n if (pluginName != null) request.pluginName = pluginName;\n if (importer != null) request.importer = importer;\n if (namespace != null) request.namespace = namespace;\n if (resolveDir != null) request.resolveDir = resolveDir;\n if (kind != null) request.kind = kind;\n else throw new Error(`Must specify \"kind\" when calling \"resolve\"`);\n if (pluginData != null) request.pluginData = details.store(pluginData);\n if (importAttributes != null) request.with = sanitizeStringMap(importAttributes, \"with\");\n sendRequest(refs, request, (error, response) => {\n if (error !== null) reject(new Error(error));\n else resolve2({\n errors: replaceDetailsInMessages(response.errors, details),\n warnings: replaceDetailsInMessages(response.warnings, details),\n path: response.path,\n external: response.external,\n sideEffects: response.sideEffects,\n namespace: response.namespace,\n suffix: response.suffix,\n pluginData: details.load(response.pluginData)\n });\n });\n });\n };\n let promise = setup({\n initialOptions,\n resolve,\n onStart(callback) {\n let registeredText = `This error came from the \"onStart\" callback registered here:`;\n let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onStart\");\n onStartCallbacks.push({ name, callback, note: registeredNote });\n plugin.onStart = true;\n },\n onEnd(callback) {\n let registeredText = `This error came from the \"onEnd\" callback registered here:`;\n let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onEnd\");\n onEndCallbacks.push({ name, callback, note: registeredNote });\n plugin.onEnd = true;\n },\n onResolve(options, callback) {\n let registeredText = `This error came from the \"onResolve\" callback registered here:`;\n let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onResolve\");\n let keys2 = {};\n let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n checkForInvalidFlags(options, keys2, `in onResolve() call for plugin ${quote(name)}`);\n if (filter == null) throw new Error(`onResolve() call is missing a filter`);\n let id = nextCallbackID++;\n onResolveCallbacks[id] = { name, callback, note: registeredNote };\n plugin.onResolve.push({ id, filter: jsRegExpToGoRegExp(filter), namespace: namespace || \"\" });\n },\n onLoad(options, callback) {\n let registeredText = `This error came from the \"onLoad\" callback registered here:`;\n let registeredNote = extractCallerV8(new Error(registeredText), streamIn, \"onLoad\");\n let keys2 = {};\n let filter = getFlag(options, keys2, \"filter\", mustBeRegExp);\n let namespace = getFlag(options, keys2, \"namespace\", mustBeString);\n checkForInvalidFlags(options, keys2, `in onLoad() call for plugin ${quote(name)}`);\n if (filter == null) throw new Error(`onLoad() call is missing a filter`);\n let id = nextCallbackID++;\n onLoadCallbacks[id] = { name, callback, note: registeredNote };\n plugin.onLoad.push({ id, filter: jsRegExpToGoRegExp(filter), namespace: namespace || \"\" });\n },\n onDispose(callback) {\n onDisposeCallbacks.push(callback);\n },\n esbuild: streamIn.esbuild\n });\n if (promise) yield promise;\n requestPlugins.push(plugin);\n } catch (e) {\n return { ok: false, error: e, pluginName: name };\n }\n }\n requestCallbacks[\"on-start\"] = (id, request) => __async(null, null, function* () {\n details.clear();\n let response = { errors: [], warnings: [] };\n yield Promise.all(onStartCallbacks.map((_0) => __async(null, [_0], function* ({ name, callback, note }) {\n try {\n let result = yield callback();\n if (result != null) {\n if (typeof result !== \"object\") throw new Error(`Expected onStart() callback in plugin ${quote(name)} to return an object`);\n let keys = {};\n let errors = getFlag(result, keys, \"errors\", mustBeArray);\n let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n checkForInvalidFlags(result, keys, `from onStart() callback in plugin ${quote(name)}`);\n if (errors != null) response.errors.push(...sanitizeMessages(errors, \"errors\", details, name, void 0));\n if (warnings != null) response.warnings.push(...sanitizeMessages(warnings, \"warnings\", details, name, void 0));\n }\n } catch (e) {\n response.errors.push(extractErrorMessageV8(e, streamIn, details, note && note(), name));\n }\n })));\n sendResponse(id, response);\n });\n requestCallbacks[\"on-resolve\"] = (id, request) => __async(null, null, function* () {\n let response = {}, name = \"\", callback, note;\n for (let id2 of request.ids) {\n try {\n ({ name, callback, note } = onResolveCallbacks[id2]);\n let result = yield callback({\n path: request.path,\n importer: request.importer,\n namespace: request.namespace,\n resolveDir: request.resolveDir,\n kind: request.kind,\n pluginData: details.load(request.pluginData),\n with: request.with\n });\n if (result != null) {\n if (typeof result !== \"object\") throw new Error(`Expected onResolve() callback in plugin ${quote(name)} to return an object`);\n let keys = {};\n let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n let path = getFlag(result, keys, \"path\", mustBeString);\n let namespace = getFlag(result, keys, \"namespace\", mustBeString);\n let suffix = getFlag(result, keys, \"suffix\", mustBeString);\n let external = getFlag(result, keys, \"external\", mustBeBoolean);\n let sideEffects = getFlag(result, keys, \"sideEffects\", mustBeBoolean);\n let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n let errors = getFlag(result, keys, \"errors\", mustBeArray);\n let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArrayOfStrings);\n let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArrayOfStrings);\n checkForInvalidFlags(result, keys, `from onResolve() callback in plugin ${quote(name)}`);\n response.id = id2;\n if (pluginName != null) response.pluginName = pluginName;\n if (path != null) response.path = path;\n if (namespace != null) response.namespace = namespace;\n if (suffix != null) response.suffix = suffix;\n if (external != null) response.external = external;\n if (sideEffects != null) response.sideEffects = sideEffects;\n if (pluginData != null) response.pluginData = details.store(pluginData);\n if (errors != null) response.errors = sanitizeMessages(errors, \"errors\", details, name, void 0);\n if (warnings != null) response.warnings = sanitizeMessages(warnings, \"warnings\", details, name, void 0);\n if (watchFiles != null) response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n if (watchDirs != null) response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n break;\n }\n } catch (e) {\n response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n break;\n }\n }\n sendResponse(id, response);\n });\n requestCallbacks[\"on-load\"] = (id, request) => __async(null, null, function* () {\n let response = {}, name = \"\", callback, note;\n for (let id2 of request.ids) {\n try {\n ({ name, callback, note } = onLoadCallbacks[id2]);\n let result = yield callback({\n path: request.path,\n namespace: request.namespace,\n suffix: request.suffix,\n pluginData: details.load(request.pluginData),\n with: request.with\n });\n if (result != null) {\n if (typeof result !== \"object\") throw new Error(`Expected onLoad() callback in plugin ${quote(name)} to return an object`);\n let keys = {};\n let pluginName = getFlag(result, keys, \"pluginName\", mustBeString);\n let contents = getFlag(result, keys, \"contents\", mustBeStringOrUint8Array);\n let resolveDir = getFlag(result, keys, \"resolveDir\", mustBeString);\n let pluginData = getFlag(result, keys, \"pluginData\", canBeAnything);\n let loader = getFlag(result, keys, \"loader\", mustBeString);\n let errors = getFlag(result, keys, \"errors\", mustBeArray);\n let warnings = getFlag(result, keys, \"warnings\", mustBeArray);\n let watchFiles = getFlag(result, keys, \"watchFiles\", mustBeArrayOfStrings);\n let watchDirs = getFlag(result, keys, \"watchDirs\", mustBeArrayOfStrings);\n checkForInvalidFlags(result, keys, `from onLoad() callback in plugin ${quote(name)}`);\n response.id = id2;\n if (pluginName != null) response.pluginName = pluginName;\n if (contents instanceof Uint8Array) response.contents = contents;\n else if (contents != null) response.contents = encodeUTF8(contents);\n if (resolveDir != null) response.resolveDir = resolveDir;\n if (pluginData != null) response.pluginData = details.store(pluginData);\n if (loader != null) response.loader = loader;\n if (errors != null) response.errors = sanitizeMessages(errors, \"errors\", details, name, void 0);\n if (warnings != null) response.warnings = sanitizeMessages(warnings, \"warnings\", details, name, void 0);\n if (watchFiles != null) response.watchFiles = sanitizeStringArray(watchFiles, \"watchFiles\");\n if (watchDirs != null) response.watchDirs = sanitizeStringArray(watchDirs, \"watchDirs\");\n break;\n }\n } catch (e) {\n response = { id: id2, errors: [extractErrorMessageV8(e, streamIn, details, note && note(), name)] };\n break;\n }\n }\n sendResponse(id, response);\n });\n let runOnEndCallbacks = (result, done) => done([], []);\n if (onEndCallbacks.length > 0) {\n runOnEndCallbacks = (result, done) => {\n (() => __async(null, null, function* () {\n const onEndErrors = [];\n const onEndWarnings = [];\n for (const { name, callback, note } of onEndCallbacks) {\n let newErrors;\n let newWarnings;\n try {\n const value = yield callback(result);\n if (value != null) {\n if (typeof value !== \"object\") throw new Error(`Expected onEnd() callback in plugin ${quote(name)} to return an object`);\n let keys = {};\n let errors = getFlag(value, keys, \"errors\", mustBeArray);\n let warnings = getFlag(value, keys, \"warnings\", mustBeArray);\n checkForInvalidFlags(value, keys, `from onEnd() callback in plugin ${quote(name)}`);\n if (errors != null) newErrors = sanitizeMessages(errors, \"errors\", details, name, void 0);\n if (warnings != null) newWarnings = sanitizeMessages(warnings, \"warnings\", details, name, void 0);\n }\n } catch (e) {\n newErrors = [extractErrorMessageV8(e, streamIn, details, note && note(), name)];\n }\n if (newErrors) {\n onEndErrors.push(...newErrors);\n try {\n result.errors.push(...newErrors);\n } catch (e) {\n }\n }\n if (newWarnings) {\n onEndWarnings.push(...newWarnings);\n try {\n result.warnings.push(...newWarnings);\n } catch (e) {\n }\n }\n }\n done(onEndErrors, onEndWarnings);\n }))();\n };\n }\n let scheduleOnDisposeCallbacks = () => {\n for (const cb of onDisposeCallbacks) {\n setTimeout(() => cb(), 0);\n }\n };\n isSetupDone = true;\n return {\n ok: true,\n requestPlugins,\n runOnEndCallbacks,\n scheduleOnDisposeCallbacks\n };\n});\nfunction createObjectStash() {\n const map = /* @__PURE__ */ new Map();\n let nextID = 0;\n return {\n clear() {\n map.clear();\n },\n load(id) {\n return map.get(id);\n },\n store(value) {\n if (value === void 0) return -1;\n const id = nextID++;\n map.set(id, value);\n return id;\n }\n };\n}\nfunction extractCallerV8(e, streamIn, ident) {\n let note;\n let tried = false;\n return () => {\n if (tried) return note;\n tried = true;\n try {\n let lines = (e.stack + \"\").split(\"\\n\");\n lines.splice(1, 1);\n let location2 = parseStackLinesV8(streamIn, lines, ident);\n if (location2) {\n note = { text: e.message, location: location2 };\n return note;\n }\n } catch (e2) {\n }\n };\n}\nfunction extractErrorMessageV8(e, streamIn, stash, note, pluginName) {\n let text = \"Internal error\";\n let location2 = null;\n try {\n text = (e && e.message || e) + \"\";\n } catch (e2) {\n }\n try {\n location2 = parseStackLinesV8(streamIn, (e.stack + \"\").split(\"\\n\"), \"\");\n } catch (e2) {\n }\n return { id: \"\", pluginName, text, location: location2, notes: note ? [note] : [], detail: stash ? stash.store(e) : -1 };\n}\nfunction parseStackLinesV8(streamIn, lines, ident) {\n let at = \" at \";\n if (streamIn.readFileSync && !lines[0].startsWith(at) && lines[1].startsWith(at)) {\n for (let i = 1; i < lines.length; i++) {\n let line = lines[i];\n if (!line.startsWith(at)) continue;\n line = line.slice(at.length);\n while (true) {\n let match = /^(?:new |async )?\\S+ \\((.*)\\)$/.exec(line);\n if (match) {\n line = match[1];\n continue;\n }\n match = /^eval at \\S+ \\((.*)\\)(?:, \\S+:\\d+:\\d+)?$/.exec(line);\n if (match) {\n line = match[1];\n continue;\n }\n match = /^(\\S+):(\\d+):(\\d+)$/.exec(line);\n if (match) {\n let contents;\n try {\n contents = streamIn.readFileSync(match[1], \"utf8\");\n } catch (e) {\n break;\n }\n let lineText = contents.split(/\\r\\n|\\r|\\n|\\u2028|\\u2029/)[+match[2] - 1] || \"\";\n let column = +match[3] - 1;\n let length = lineText.slice(column, column + ident.length) === ident ? ident.length : 0;\n return {\n file: match[1],\n namespace: \"file\",\n line: +match[2],\n column: encodeUTF8(lineText.slice(0, column)).length,\n length: encodeUTF8(lineText.slice(column, column + length)).length,\n lineText: lineText + \"\\n\" + lines.slice(1).join(\"\\n\"),\n suggestion: \"\"\n };\n }\n break;\n }\n }\n }\n return null;\n}\nfunction failureErrorWithLog(text, errors, warnings) {\n let limit = 5;\n text += errors.length < 1 ? \"\" : ` with ${errors.length} error${errors.length < 2 ? \"\" : \"s\"}:` + errors.slice(0, limit + 1).map((e, i) => {\n if (i === limit) return \"\\n...\";\n if (!e.location) return `\nerror: ${e.text}`;\n let { file, line, column } = e.location;\n let pluginText = e.pluginName ? `[plugin: ${e.pluginName}] ` : \"\";\n return `\n${file}:${line}:${column}: ERROR: ${pluginText}${e.text}`;\n }).join(\"\");\n let error = new Error(text);\n for (const [key, value] of [[\"errors\", errors], [\"warnings\", warnings]]) {\n Object.defineProperty(error, key, {\n configurable: true,\n enumerable: true,\n get: () => value,\n set: (value2) => Object.defineProperty(error, key, {\n configurable: true,\n enumerable: true,\n value: value2\n })\n });\n }\n return error;\n}\nfunction replaceDetailsInMessages(messages, stash) {\n for (const message of messages) {\n message.detail = stash.load(message.detail);\n }\n return messages;\n}\nfunction sanitizeLocation(location2, where, terminalWidth) {\n if (location2 == null) return null;\n let keys = {};\n let file = getFlag(location2, keys, \"file\", mustBeString);\n let namespace = getFlag(location2, keys, \"namespace\", mustBeString);\n let line = getFlag(location2, keys, \"line\", mustBeInteger);\n let column = getFlag(location2, keys, \"column\", mustBeInteger);\n let length = getFlag(location2, keys, \"length\", mustBeInteger);\n let lineText = getFlag(location2, keys, \"lineText\", mustBeString);\n let suggestion = getFlag(location2, keys, \"suggestion\", mustBeString);\n checkForInvalidFlags(location2, keys, where);\n if (lineText) {\n const relevantASCII = lineText.slice(\n 0,\n (column && column > 0 ? column : 0) + (length && length > 0 ? length : 0) + (terminalWidth && terminalWidth > 0 ? terminalWidth : 80)\n );\n if (!/[\\x7F-\\uFFFF]/.test(relevantASCII) && !/\\n/.test(lineText)) {\n lineText = relevantASCII;\n }\n }\n return {\n file: file || \"\",\n namespace: namespace || \"\",\n line: line || 0,\n column: column || 0,\n length: length || 0,\n lineText: lineText || \"\",\n suggestion: suggestion || \"\"\n };\n}\nfunction sanitizeMessages(messages, property, stash, fallbackPluginName, terminalWidth) {\n let messagesClone = [];\n let index = 0;\n for (const message of messages) {\n let keys = {};\n let id = getFlag(message, keys, \"id\", mustBeString);\n let pluginName = getFlag(message, keys, \"pluginName\", mustBeString);\n let text = getFlag(message, keys, \"text\", mustBeString);\n let location2 = getFlag(message, keys, \"location\", mustBeObjectOrNull);\n let notes = getFlag(message, keys, \"notes\", mustBeArray);\n let detail = getFlag(message, keys, \"detail\", canBeAnything);\n let where = `in element ${index} of \"${property}\"`;\n checkForInvalidFlags(message, keys, where);\n let notesClone = [];\n if (notes) {\n for (const note of notes) {\n let noteKeys = {};\n let noteText = getFlag(note, noteKeys, \"text\", mustBeString);\n let noteLocation = getFlag(note, noteKeys, \"location\", mustBeObjectOrNull);\n checkForInvalidFlags(note, noteKeys, where);\n notesClone.push({\n text: noteText || \"\",\n location: sanitizeLocation(noteLocation, where, terminalWidth)\n });\n }\n }\n messagesClone.push({\n id: id || \"\",\n pluginName: pluginName || fallbackPluginName,\n text: text || \"\",\n location: sanitizeLocation(location2, where, terminalWidth),\n notes: notesClone,\n detail: stash ? stash.store(detail) : -1\n });\n index++;\n }\n return messagesClone;\n}\nfunction sanitizeStringArray(values, property) {\n const result = [];\n for (const value of values) {\n if (typeof value !== \"string\") throw new Error(`${quote(property)} must be an array of strings`);\n result.push(value);\n }\n return result;\n}\nfunction sanitizeStringMap(map, property) {\n const result = /* @__PURE__ */ Object.create(null);\n for (const key in map) {\n const value = map[key];\n if (typeof value !== \"string\") throw new Error(`key ${quote(key)} in object ${quote(property)} must be a string`);\n result[key] = value;\n }\n return result;\n}\nfunction convertOutputFiles({ path, contents, hash }) {\n let text = null;\n return {\n path,\n contents,\n hash,\n get text() {\n const binary = this.contents;\n if (text === null || binary !== contents) {\n contents = binary;\n text = decodeUTF8(binary);\n }\n return text;\n }\n };\n}\nfunction jsRegExpToGoRegExp(regexp) {\n let result = regexp.source;\n if (regexp.flags) result = `(?${regexp.flags})${result}`;\n return result;\n}\nfunction parseJSON(bytes) {\n let text;\n try {\n text = decodeUTF8(bytes);\n } catch (e) {\n return JSON_parse(bytes);\n }\n return JSON.parse(text);\n}\n\n// lib/npm/browser.ts\nvar version = \"0.28.2\";\nvar build = (options) => ensureServiceIsRunning().build(options);\nvar context = (options) => ensureServiceIsRunning().context(options);\nvar transform = (input, options) => ensureServiceIsRunning().transform(input, options);\nvar formatMessages = (messages, options) => ensureServiceIsRunning().formatMessages(messages, options);\nvar analyzeMetafile = (metafile, options) => ensureServiceIsRunning().analyzeMetafile(metafile, options);\nvar buildSync = () => {\n throw new Error(`The \"buildSync\" API only works in node`);\n};\nvar transformSync = () => {\n throw new Error(`The \"transformSync\" API only works in node`);\n};\nvar formatMessagesSync = () => {\n throw new Error(`The \"formatMessagesSync\" API only works in node`);\n};\nvar analyzeMetafileSync = () => {\n throw new Error(`The \"analyzeMetafileSync\" API only works in node`);\n};\nvar stop = () => {\n if (stopService) stopService();\n return Promise.resolve();\n};\nvar initializePromise;\nvar stopService;\nvar longLivedService;\nvar ensureServiceIsRunning = () => {\n if (longLivedService) return longLivedService;\n if (initializePromise) throw new Error('You need to wait for the promise returned from \"initialize\" to be resolved before calling this');\n throw new Error('You need to call \"initialize\" before calling this');\n};\nvar initialize = (options) => {\n options = validateInitializeOptions(options || {});\n let wasmURL = options.wasmURL;\n let wasmModule = options.wasmModule;\n let useWorker = options.worker !== false;\n if (!wasmURL && !wasmModule) throw new Error('Must provide either the \"wasmURL\" option or the \"wasmModule\" option');\n if (initializePromise) throw new Error('Cannot call \"initialize\" more than once');\n initializePromise = startRunningService(wasmURL || \"\", wasmModule, useWorker);\n initializePromise.catch(() => {\n initializePromise = void 0;\n });\n return initializePromise;\n};\nvar startRunningService = (wasmURL, wasmModule, useWorker) => __async(null, null, function* () {\n let worker;\n let rejectAllWith;\n const rejectAllPromise = new Promise((resolve) => rejectAllWith = resolve);\n if (useWorker) {\n let blob = new Blob([`onmessage=${'((postMessage) => {\\n // Copyright 2018 The Go Authors. All rights reserved.\\n // Use of this source code is governed by a BSD-style\\n // license that can be found in the LICENSE file.\\n var __async = (__this, __arguments, generator) => {\\n return new Promise((resolve, reject) => {\\n var fulfilled = (value) => {\\n try {\\n step(generator.next(value));\\n } catch (e) {\\n reject(e);\\n }\\n };\\n var rejected = (value) => {\\n try {\\n step(generator.throw(value));\\n } catch (e) {\\n reject(e);\\n }\\n };\\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\\n step((generator = generator.apply(__this, __arguments)).next());\\n });\\n };\\n let onmessage;\\n let globalThis = {};\\n for (let o = self; o; o = Object.getPrototypeOf(o))\\n for (let k of Object.getOwnPropertyNames(o))\\n if (!(k in globalThis))\\n Object.defineProperty(globalThis, k, { get: () => self[k] });\\n \"use strict\";\\n (() => {\\n const enosys = () => {\\n const err = new Error(\"not implemented\");\\n err.code = \"ENOSYS\";\\n return err;\\n };\\n if (!globalThis.fs) {\\n let outputBuf = \"\";\\n globalThis.fs = {\\n constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1, O_DIRECTORY: -1 },\\n // unused\\n writeSync(fd, buf) {\\n outputBuf += decoder.decode(buf);\\n const nl = outputBuf.lastIndexOf(\"\\\\n\");\\n if (nl != -1) {\\n console.log(outputBuf.substring(0, nl));\\n outputBuf = outputBuf.substring(nl + 1);\\n }\\n return buf.length;\\n },\\n write(fd, buf, offset, length, position, callback) {\\n if (offset !== 0 || length !== buf.length || position !== null) {\\n callback(enosys());\\n return;\\n }\\n const n = this.writeSync(fd, buf);\\n callback(null, n);\\n },\\n chmod(path, mode, callback) {\\n callback(enosys());\\n },\\n chown(path, uid, gid, callback) {\\n callback(enosys());\\n },\\n close(fd, callback) {\\n callback(enosys());\\n },\\n fchmod(fd, mode, callback) {\\n callback(enosys());\\n },\\n fchown(fd, uid, gid, callback) {\\n callback(enosys());\\n },\\n fstat(fd, callback) {\\n callback(enosys());\\n },\\n fsync(fd, callback) {\\n callback(null);\\n },\\n ftruncate(fd, length, callback) {\\n callback(enosys());\\n },\\n lchown(path, uid, gid, callback) {\\n callback(enosys());\\n },\\n link(path, link, callback) {\\n callback(enosys());\\n },\\n lstat(path, callback) {\\n callback(enosys());\\n },\\n mkdir(path, perm, callback) {\\n callback(enosys());\\n },\\n open(path, flags, mode, callback) {\\n callback(enosys());\\n },\\n read(fd, buffer, offset, length, position, callback) {\\n callback(enosys());\\n },\\n readdir(path, callback) {\\n callback(enosys());\\n },\\n readlink(path, callback) {\\n callback(enosys());\\n },\\n rename(from, to, callback) {\\n callback(enosys());\\n },\\n rmdir(path, callback) {\\n callback(enosys());\\n },\\n stat(path, callback) {\\n callback(enosys());\\n },\\n symlink(path, link, callback) {\\n callback(enosys());\\n },\\n truncate(path, length, callback) {\\n callback(enosys());\\n },\\n unlink(path, callback) {\\n callback(enosys());\\n },\\n utimes(path, atime, mtime, callback) {\\n callback(enosys());\\n }\\n };\\n }\\n if (!globalThis.process) {\\n globalThis.process = {\\n getuid() {\\n return -1;\\n },\\n getgid() {\\n return -1;\\n },\\n geteuid() {\\n return -1;\\n },\\n getegid() {\\n return -1;\\n },\\n getgroups() {\\n throw enosys();\\n },\\n pid: -1,\\n ppid: -1,\\n umask() {\\n throw enosys();\\n },\\n cwd() {\\n throw enosys();\\n },\\n chdir() {\\n throw enosys();\\n }\\n };\\n }\\n if (!globalThis.path) {\\n globalThis.path = {\\n resolve(...pathSegments) {\\n return pathSegments.join(\"/\");\\n }\\n };\\n }\\n if (!globalThis.crypto) {\\n throw new Error(\"globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)\");\\n }\\n if (!globalThis.performance) {\\n throw new Error(\"globalThis.performance is not available, polyfill required (performance.now only)\");\\n }\\n if (!globalThis.TextEncoder) {\\n throw new Error(\"globalThis.TextEncoder is not available, polyfill required\");\\n }\\n if (!globalThis.TextDecoder) {\\n throw new Error(\"globalThis.TextDecoder is not available, polyfill required\");\\n }\\n const encoder = new TextEncoder(\"utf-8\");\\n const decoder = new TextDecoder(\"utf-8\");\\n globalThis.Go = class {\\n constructor() {\\n this.argv = [\"js\"];\\n this.env = {};\\n this.exit = (code) => {\\n if (code !== 0) {\\n console.warn(\"exit code:\", code);\\n }\\n };\\n this._exitPromise = new Promise((resolve) => {\\n this._resolveExitPromise = resolve;\\n });\\n this._pendingEvent = null;\\n this._scheduledTimeouts = /* @__PURE__ */ new Map();\\n this._nextCallbackTimeoutID = 1;\\n const setInt64 = (addr, v) => {\\n this.mem.setUint32(addr + 0, v, true);\\n this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);\\n };\\n const setInt32 = (addr, v) => {\\n this.mem.setUint32(addr + 0, v, true);\\n };\\n const getInt64 = (addr) => {\\n const low = this.mem.getUint32(addr + 0, true);\\n const high = this.mem.getInt32(addr + 4, true);\\n return low + high * 4294967296;\\n };\\n const loadValue = (addr) => {\\n const f = this.mem.getFloat64(addr, true);\\n if (f === 0) {\\n return void 0;\\n }\\n if (!isNaN(f)) {\\n return f;\\n }\\n const id = this.mem.getUint32(addr, true);\\n return this._values[id];\\n };\\n const storeValue = (addr, v) => {\\n const nanHead = 2146959360;\\n if (typeof v === \"number\" && v !== 0) {\\n if (isNaN(v)) {\\n this.mem.setUint32(addr + 4, nanHead, true);\\n this.mem.setUint32(addr, 0, true);\\n return;\\n }\\n this.mem.setFloat64(addr, v, true);\\n return;\\n }\\n if (v === void 0) {\\n this.mem.setFloat64(addr, 0, true);\\n return;\\n }\\n let id = this._ids.get(v);\\n if (id === void 0) {\\n id = this._idPool.pop();\\n if (id === void 0) {\\n id = this._values.length;\\n }\\n this._values[id] = v;\\n this._goRefCounts[id] = 0;\\n this._ids.set(v, id);\\n }\\n this._goRefCounts[id]++;\\n let typeFlag = 0;\\n switch (typeof v) {\\n case \"object\":\\n if (v !== null) {\\n typeFlag = 1;\\n }\\n break;\\n case \"string\":\\n typeFlag = 2;\\n break;\\n case \"symbol\":\\n typeFlag = 3;\\n break;\\n case \"function\":\\n typeFlag = 4;\\n break;\\n }\\n this.mem.setUint32(addr + 4, nanHead | typeFlag, true);\\n this.mem.setUint32(addr, id, true);\\n };\\n const loadSlice = (addr) => {\\n const array = getInt64(addr + 0);\\n const len = getInt64(addr + 8);\\n return new Uint8Array(this._inst.exports.mem.buffer, array, len);\\n };\\n const loadSliceOfValues = (addr) => {\\n const array = getInt64(addr + 0);\\n const len = getInt64(addr + 8);\\n const a = new Array(len);\\n for (let i = 0; i < len; i++) {\\n a[i] = loadValue(array + i * 8);\\n }\\n return a;\\n };\\n const loadString = (addr) => {\\n const saddr = getInt64(addr + 0);\\n const len = getInt64(addr + 8);\\n return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));\\n };\\n const testCallExport = (a, b) => {\\n this._inst.exports.testExport0();\\n return this._inst.exports.testExport(a, b);\\n };\\n const timeOrigin = Date.now() - performance.now();\\n this.importObject = {\\n _gotest: {\\n add: (a, b) => a + b,\\n callExport: testCallExport\\n },\\n gojs: {\\n // Go\\'s SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)\\n // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported\\n // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).\\n // This changes the SP, thus we have to update the SP used by the imported function.\\n // func wasmExit(code int32)\\n \"runtime.wasmExit\": (sp) => {\\n sp >>>= 0;\\n const code = this.mem.getInt32(sp + 8, true);\\n this.exited = true;\\n delete this._inst;\\n delete this._values;\\n delete this._goRefCounts;\\n delete this._ids;\\n delete this._idPool;\\n this.exit(code);\\n },\\n // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)\\n \"runtime.wasmWrite\": (sp) => {\\n sp >>>= 0;\\n const fd = getInt64(sp + 8);\\n const p = getInt64(sp + 16);\\n const n = this.mem.getInt32(sp + 24, true);\\n globalThis.fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));\\n },\\n // func resetMemoryDataView()\\n \"runtime.resetMemoryDataView\": (sp) => {\\n sp >>>= 0;\\n this.mem = new DataView(this._inst.exports.mem.buffer);\\n },\\n // func nanotime1() int64\\n \"runtime.nanotime1\": (sp) => {\\n sp >>>= 0;\\n setInt64(sp + 8, (timeOrigin + performance.now()) * 1e6);\\n },\\n // func walltime() (sec int64, nsec int32)\\n \"runtime.walltime\": (sp) => {\\n sp >>>= 0;\\n const msec = (/* @__PURE__ */ new Date()).getTime();\\n setInt64(sp + 8, msec / 1e3);\\n this.mem.setInt32(sp + 16, msec % 1e3 * 1e6, true);\\n },\\n // func scheduleTimeoutEvent(delay int64) int32\\n \"runtime.scheduleTimeoutEvent\": (sp) => {\\n sp >>>= 0;\\n const id = this._nextCallbackTimeoutID;\\n this._nextCallbackTimeoutID++;\\n this._scheduledTimeouts.set(id, setTimeout(\\n () => {\\n this._resume();\\n while (this._scheduledTimeouts.has(id)) {\\n console.warn(\"scheduleTimeoutEvent: missed timeout event\");\\n this._resume();\\n }\\n },\\n getInt64(sp + 8)\\n ));\\n this.mem.setInt32(sp + 16, id, true);\\n },\\n // func clearTimeoutEvent(id int32)\\n \"runtime.clearTimeoutEvent\": (sp) => {\\n sp >>>= 0;\\n const id = this.mem.getInt32(sp + 8, true);\\n clearTimeout(this._scheduledTimeouts.get(id));\\n this._scheduledTimeouts.delete(id);\\n },\\n // func getRandomData(r []byte)\\n \"runtime.getRandomData\": (sp) => {\\n sp >>>= 0;\\n crypto.getRandomValues(loadSlice(sp + 8));\\n },\\n // func finalizeRef(v ref)\\n \"syscall/js.finalizeRef\": (sp) => {\\n sp >>>= 0;\\n const id = this.mem.getUint32(sp + 8, true);\\n this._goRefCounts[id]--;\\n if (this._goRefCounts[id] === 0) {\\n const v = this._values[id];\\n this._values[id] = null;\\n this._ids.delete(v);\\n this._idPool.push(id);\\n }\\n },\\n // func stringVal(value string) ref\\n \"syscall/js.stringVal\": (sp) => {\\n sp >>>= 0;\\n storeValue(sp + 24, loadString(sp + 8));\\n },\\n // func valueGet(v ref, p string) ref\\n \"syscall/js.valueGet\": (sp) => {\\n sp >>>= 0;\\n const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 32, result);\\n },\\n // func valueSet(v ref, p string, x ref)\\n \"syscall/js.valueSet\": (sp) => {\\n sp >>>= 0;\\n Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));\\n },\\n // func valueDelete(v ref, p string)\\n \"syscall/js.valueDelete\": (sp) => {\\n sp >>>= 0;\\n Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));\\n },\\n // func valueIndex(v ref, i int) ref\\n \"syscall/js.valueIndex\": (sp) => {\\n sp >>>= 0;\\n storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));\\n },\\n // valueSetIndex(v ref, i int, x ref)\\n \"syscall/js.valueSetIndex\": (sp) => {\\n sp >>>= 0;\\n Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));\\n },\\n // func valueCall(v ref, m string, args []ref) (ref, bool)\\n \"syscall/js.valueCall\": (sp) => {\\n sp >>>= 0;\\n try {\\n const v = loadValue(sp + 8);\\n const m = Reflect.get(v, loadString(sp + 16));\\n const args = loadSliceOfValues(sp + 32);\\n const result = Reflect.apply(m, v, args);\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 56, result);\\n this.mem.setUint8(sp + 64, 1);\\n } catch (err) {\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 56, err);\\n this.mem.setUint8(sp + 64, 0);\\n }\\n },\\n // func valueInvoke(v ref, args []ref) (ref, bool)\\n \"syscall/js.valueInvoke\": (sp) => {\\n sp >>>= 0;\\n try {\\n const v = loadValue(sp + 8);\\n const args = loadSliceOfValues(sp + 16);\\n const result = Reflect.apply(v, void 0, args);\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 40, result);\\n this.mem.setUint8(sp + 48, 1);\\n } catch (err) {\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 40, err);\\n this.mem.setUint8(sp + 48, 0);\\n }\\n },\\n // func valueNew(v ref, args []ref) (ref, bool)\\n \"syscall/js.valueNew\": (sp) => {\\n sp >>>= 0;\\n try {\\n const v = loadValue(sp + 8);\\n const args = loadSliceOfValues(sp + 16);\\n const result = Reflect.construct(v, args);\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 40, result);\\n this.mem.setUint8(sp + 48, 1);\\n } catch (err) {\\n sp = this._inst.exports.getsp() >>> 0;\\n storeValue(sp + 40, err);\\n this.mem.setUint8(sp + 48, 0);\\n }\\n },\\n // func valueLength(v ref) int\\n \"syscall/js.valueLength\": (sp) => {\\n sp >>>= 0;\\n setInt64(sp + 16, parseInt(loadValue(sp + 8).length));\\n },\\n // valuePrepareString(v ref) (ref, int)\\n \"syscall/js.valuePrepareString\": (sp) => {\\n sp >>>= 0;\\n const str = encoder.encode(String(loadValue(sp + 8)));\\n storeValue(sp + 16, str);\\n setInt64(sp + 24, str.length);\\n },\\n // valueLoadString(v ref, b []byte)\\n \"syscall/js.valueLoadString\": (sp) => {\\n sp >>>= 0;\\n const str = loadValue(sp + 8);\\n loadSlice(sp + 16).set(str);\\n },\\n // func valueInstanceOf(v ref, t ref) bool\\n \"syscall/js.valueInstanceOf\": (sp) => {\\n sp >>>= 0;\\n this.mem.setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16) ? 1 : 0);\\n },\\n // func copyBytesToGo(dst []byte, src ref) (int, bool)\\n \"syscall/js.copyBytesToGo\": (sp) => {\\n sp >>>= 0;\\n const dst = loadSlice(sp + 8);\\n const src = loadValue(sp + 32);\\n if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {\\n this.mem.setUint8(sp + 48, 0);\\n return;\\n }\\n const toCopy = src.subarray(0, dst.length);\\n dst.set(toCopy);\\n setInt64(sp + 40, toCopy.length);\\n this.mem.setUint8(sp + 48, 1);\\n },\\n // func copyBytesToJS(dst ref, src []byte) (int, bool)\\n \"syscall/js.copyBytesToJS\": (sp) => {\\n sp >>>= 0;\\n const dst = loadValue(sp + 8);\\n const src = loadSlice(sp + 16);\\n if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {\\n this.mem.setUint8(sp + 48, 0);\\n return;\\n }\\n const toCopy = src.subarray(0, dst.length);\\n dst.set(toCopy);\\n setInt64(sp + 40, toCopy.length);\\n this.mem.setUint8(sp + 48, 1);\\n },\\n \"debug\": (value) => {\\n console.log(value);\\n }\\n }\\n };\\n }\\n run(instance) {\\n return __async(this, null, function* () {\\n if (!(instance instanceof WebAssembly.Instance)) {\\n throw new Error(\"Go.run: WebAssembly.Instance expected\");\\n }\\n this._inst = instance;\\n this.mem = new DataView(this._inst.exports.mem.buffer);\\n this._values = [\\n // JS values that Go currently has references to, indexed by reference id\\n NaN,\\n 0,\\n null,\\n true,\\n false,\\n globalThis,\\n this\\n ];\\n this._goRefCounts = new Array(this._values.length).fill(Infinity);\\n this._ids = /* @__PURE__ */ new Map([\\n // mapping from JS values to reference ids\\n [0, 1],\\n [null, 2],\\n [true, 3],\\n [false, 4],\\n [globalThis, 5],\\n [this, 6]\\n ]);\\n this._idPool = [];\\n this.exited = false;\\n let offset = 4096;\\n const strPtr = (str) => {\\n const ptr = offset;\\n const bytes = encoder.encode(str + \"\\\\0\");\\n new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);\\n offset += bytes.length;\\n if (offset % 8 !== 0) {\\n offset += 8 - offset % 8;\\n }\\n return ptr;\\n };\\n const argc = this.argv.length;\\n const argvPtrs = [];\\n this.argv.forEach((arg) => {\\n argvPtrs.push(strPtr(arg));\\n });\\n argvPtrs.push(0);\\n const keys = Object.keys(this.env).sort();\\n keys.forEach((key) => {\\n argvPtrs.push(strPtr(`${key}=${this.env[key]}`));\\n });\\n argvPtrs.push(0);\\n const argv = offset;\\n argvPtrs.forEach((ptr) => {\\n this.mem.setUint32(offset, ptr, true);\\n this.mem.setUint32(offset + 4, 0, true);\\n offset += 8;\\n });\\n const wasmMinDataAddr = 4096 + 8192;\\n if (offset >= wasmMinDataAddr) {\\n throw new Error(\"total length of command line and environment variables exceeds limit\");\\n }\\n this._inst.exports.run(argc, argv);\\n if (this.exited) {\\n this._resolveExitPromise();\\n }\\n yield this._exitPromise;\\n });\\n }\\n _resume() {\\n if (this.exited) {\\n throw new Error(\"Go program has already exited\");\\n }\\n this._inst.exports.resume();\\n if (this.exited) {\\n this._resolveExitPromise();\\n }\\n }\\n _makeFuncWrapper(id) {\\n const go = this;\\n return function() {\\n const event = { id, this: this, args: arguments };\\n go._pendingEvent = event;\\n go._resume();\\n return event.result;\\n };\\n }\\n };\\n })();\\n onmessage = ({ data: wasm }) => {\\n let decoder = new TextDecoder();\\n let fs = globalThis.fs;\\n let stderr = \"\";\\n fs.writeSync = (fd, buffer) => {\\n if (fd === 1) {\\n postMessage(buffer);\\n } else if (fd === 2) {\\n stderr += decoder.decode(buffer);\\n let parts = stderr.split(\"\\\\n\");\\n if (parts.length > 1) console.log(parts.slice(0, -1).join(\"\\\\n\"));\\n stderr = parts[parts.length - 1];\\n } else {\\n throw new Error(\"Bad write\");\\n }\\n return buffer.length;\\n };\\n let stdin = [];\\n let resumeStdin;\\n let stdinPos = 0;\\n onmessage = ({ data }) => {\\n if (data.length > 0) {\\n stdin.push(data);\\n if (resumeStdin) resumeStdin();\\n }\\n return go;\\n };\\n fs.read = (fd, buffer, offset, length, position, callback) => {\\n if (fd !== 0 || offset !== 0 || length !== buffer.length || position !== null) {\\n throw new Error(\"Bad read\");\\n }\\n if (stdin.length === 0) {\\n resumeStdin = () => fs.read(fd, buffer, offset, length, position, callback);\\n return;\\n }\\n let first = stdin[0];\\n let count = Math.max(0, Math.min(length, first.length - stdinPos));\\n buffer.set(first.subarray(stdinPos, stdinPos + count), offset);\\n stdinPos += count;\\n if (stdinPos === first.length) {\\n stdin.shift();\\n stdinPos = 0;\\n }\\n callback(null, count);\\n };\\n let go = new globalThis.Go();\\n go.argv = [\"\", `--service=${\"0.28.2\"}`];\\n tryToInstantiateModule(wasm, go).then(\\n (instance) => {\\n postMessage(null);\\n go.run(instance);\\n },\\n (error) => {\\n postMessage(error);\\n }\\n );\\n return go;\\n };\\n function tryToInstantiateModule(wasm, go) {\\n return __async(this, null, function* () {\\n if (wasm instanceof WebAssembly.Module) {\\n return WebAssembly.instantiate(wasm, go.importObject);\\n }\\n const res = yield fetch(wasm);\\n if (!res.ok) throw new Error(`Failed to download ${JSON.stringify(wasm)}`);\\n if (\"instantiateStreaming\" in WebAssembly && /^application\\\\/wasm($|;)/i.test(res.headers.get(\"Content-Type\") || \"\")) {\\n const result2 = yield WebAssembly.instantiateStreaming(res, go.importObject);\\n return result2.instance;\\n }\\n const bytes = yield res.arrayBuffer();\\n const result = yield WebAssembly.instantiate(bytes, go.importObject);\\n return result.instance;\\n });\\n }\\n return (m) => onmessage(m);\\n })'}(postMessage)`], { type: \"text/javascript\" });\n worker = new Worker(URL.createObjectURL(blob));\n } else {\n let onmessage = ((postMessage) => {\n // Copyright 2018 The Go Authors. All rights reserved.\n // Use of this source code is governed by a BSD-style\n // license that can be found in the LICENSE file.\n var __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n };\n let onmessage;\n let globalThis = {};\n for (let o = self; o; o = Object.getPrototypeOf(o))\n for (let k of Object.getOwnPropertyNames(o))\n if (!(k in globalThis))\n Object.defineProperty(globalThis, k, { get: () => self[k] });\n \"use strict\";\n (() => {\n const enosys = () => {\n const err = new Error(\"not implemented\");\n err.code = \"ENOSYS\";\n return err;\n };\n if (!globalThis.fs) {\n let outputBuf = \"\";\n globalThis.fs = {\n constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1, O_DIRECTORY: -1 },\n // unused\n writeSync(fd, buf) {\n outputBuf += decoder.decode(buf);\n const nl = outputBuf.lastIndexOf(\"\\n\");\n if (nl != -1) {\n console.log(outputBuf.substring(0, nl));\n outputBuf = outputBuf.substring(nl + 1);\n }\n return buf.length;\n },\n write(fd, buf, offset, length, position, callback) {\n if (offset !== 0 || length !== buf.length || position !== null) {\n callback(enosys());\n return;\n }\n const n = this.writeSync(fd, buf);\n callback(null, n);\n },\n chmod(path, mode, callback) {\n callback(enosys());\n },\n chown(path, uid, gid, callback) {\n callback(enosys());\n },\n close(fd, callback) {\n callback(enosys());\n },\n fchmod(fd, mode, callback) {\n callback(enosys());\n },\n fchown(fd, uid, gid, callback) {\n callback(enosys());\n },\n fstat(fd, callback) {\n callback(enosys());\n },\n fsync(fd, callback) {\n callback(null);\n },\n ftruncate(fd, length, callback) {\n callback(enosys());\n },\n lchown(path, uid, gid, callback) {\n callback(enosys());\n },\n link(path, link, callback) {\n callback(enosys());\n },\n lstat(path, callback) {\n callback(enosys());\n },\n mkdir(path, perm, callback) {\n callback(enosys());\n },\n open(path, flags, mode, callback) {\n callback(enosys());\n },\n read(fd, buffer, offset, length, position, callback) {\n callback(enosys());\n },\n readdir(path, callback) {\n callback(enosys());\n },\n readlink(path, callback) {\n callback(enosys());\n },\n rename(from, to, callback) {\n callback(enosys());\n },\n rmdir(path, callback) {\n callback(enosys());\n },\n stat(path, callback) {\n callback(enosys());\n },\n symlink(path, link, callback) {\n callback(enosys());\n },\n truncate(path, length, callback) {\n callback(enosys());\n },\n unlink(path, callback) {\n callback(enosys());\n },\n utimes(path, atime, mtime, callback) {\n callback(enosys());\n }\n };\n }\n if (!globalThis.process) {\n globalThis.process = {\n getuid() {\n return -1;\n },\n getgid() {\n return -1;\n },\n geteuid() {\n return -1;\n },\n getegid() {\n return -1;\n },\n getgroups() {\n throw enosys();\n },\n pid: -1,\n ppid: -1,\n umask() {\n throw enosys();\n },\n cwd() {\n throw enosys();\n },\n chdir() {\n throw enosys();\n }\n };\n }\n if (!globalThis.path) {\n globalThis.path = {\n resolve(...pathSegments) {\n return pathSegments.join(\"/\");\n }\n };\n }\n if (!globalThis.crypto) {\n throw new Error(\"globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)\");\n }\n if (!globalThis.performance) {\n throw new Error(\"globalThis.performance is not available, polyfill required (performance.now only)\");\n }\n if (!globalThis.TextEncoder) {\n throw new Error(\"globalThis.TextEncoder is not available, polyfill required\");\n }\n if (!globalThis.TextDecoder) {\n throw new Error(\"globalThis.TextDecoder is not available, polyfill required\");\n }\n const encoder = new TextEncoder(\"utf-8\");\n const decoder = new TextDecoder(\"utf-8\");\n globalThis.Go = class {\n constructor() {\n this.argv = [\"js\"];\n this.env = {};\n this.exit = (code) => {\n if (code !== 0) {\n console.warn(\"exit code:\", code);\n }\n };\n this._exitPromise = new Promise((resolve) => {\n this._resolveExitPromise = resolve;\n });\n this._pendingEvent = null;\n this._scheduledTimeouts = /* @__PURE__ */ new Map();\n this._nextCallbackTimeoutID = 1;\n const setInt64 = (addr, v) => {\n this.mem.setUint32(addr + 0, v, true);\n this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);\n };\n const setInt32 = (addr, v) => {\n this.mem.setUint32(addr + 0, v, true);\n };\n const getInt64 = (addr) => {\n const low = this.mem.getUint32(addr + 0, true);\n const high = this.mem.getInt32(addr + 4, true);\n return low + high * 4294967296;\n };\n const loadValue = (addr) => {\n const f = this.mem.getFloat64(addr, true);\n if (f === 0) {\n return void 0;\n }\n if (!isNaN(f)) {\n return f;\n }\n const id = this.mem.getUint32(addr, true);\n return this._values[id];\n };\n const storeValue = (addr, v) => {\n const nanHead = 2146959360;\n if (typeof v === \"number\" && v !== 0) {\n if (isNaN(v)) {\n this.mem.setUint32(addr + 4, nanHead, true);\n this.mem.setUint32(addr, 0, true);\n return;\n }\n this.mem.setFloat64(addr, v, true);\n return;\n }\n if (v === void 0) {\n this.mem.setFloat64(addr, 0, true);\n return;\n }\n let id = this._ids.get(v);\n if (id === void 0) {\n id = this._idPool.pop();\n if (id === void 0) {\n id = this._values.length;\n }\n this._values[id] = v;\n this._goRefCounts[id] = 0;\n this._ids.set(v, id);\n }\n this._goRefCounts[id]++;\n let typeFlag = 0;\n switch (typeof v) {\n case \"object\":\n if (v !== null) {\n typeFlag = 1;\n }\n break;\n case \"string\":\n typeFlag = 2;\n break;\n case \"symbol\":\n typeFlag = 3;\n break;\n case \"function\":\n typeFlag = 4;\n break;\n }\n this.mem.setUint32(addr + 4, nanHead | typeFlag, true);\n this.mem.setUint32(addr, id, true);\n };\n const loadSlice = (addr) => {\n const array = getInt64(addr + 0);\n const len = getInt64(addr + 8);\n return new Uint8Array(this._inst.exports.mem.buffer, array, len);\n };\n const loadSliceOfValues = (addr) => {\n const array = getInt64(addr + 0);\n const len = getInt64(addr + 8);\n const a = new Array(len);\n for (let i = 0; i < len; i++) {\n a[i] = loadValue(array + i * 8);\n }\n return a;\n };\n const loadString = (addr) => {\n const saddr = getInt64(addr + 0);\n const len = getInt64(addr + 8);\n return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));\n };\n const testCallExport = (a, b) => {\n this._inst.exports.testExport0();\n return this._inst.exports.testExport(a, b);\n };\n const timeOrigin = Date.now() - performance.now();\n this.importObject = {\n _gotest: {\n add: (a, b) => a + b,\n callExport: testCallExport\n },\n gojs: {\n // Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)\n // may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported\n // function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).\n // This changes the SP, thus we have to update the SP used by the imported function.\n // func wasmExit(code int32)\n \"runtime.wasmExit\": (sp) => {\n sp >>>= 0;\n const code = this.mem.getInt32(sp + 8, true);\n this.exited = true;\n delete this._inst;\n delete this._values;\n delete this._goRefCounts;\n delete this._ids;\n delete this._idPool;\n this.exit(code);\n },\n // func wasmWrite(fd uintptr, p unsafe.Pointer, n int32)\n \"runtime.wasmWrite\": (sp) => {\n sp >>>= 0;\n const fd = getInt64(sp + 8);\n const p = getInt64(sp + 16);\n const n = this.mem.getInt32(sp + 24, true);\n globalThis.fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));\n },\n // func resetMemoryDataView()\n \"runtime.resetMemoryDataView\": (sp) => {\n sp >>>= 0;\n this.mem = new DataView(this._inst.exports.mem.buffer);\n },\n // func nanotime1() int64\n \"runtime.nanotime1\": (sp) => {\n sp >>>= 0;\n setInt64(sp + 8, (timeOrigin + performance.now()) * 1e6);\n },\n // func walltime() (sec int64, nsec int32)\n \"runtime.walltime\": (sp) => {\n sp >>>= 0;\n const msec = (/* @__PURE__ */ new Date()).getTime();\n setInt64(sp + 8, msec / 1e3);\n this.mem.setInt32(sp + 16, msec % 1e3 * 1e6, true);\n },\n // func scheduleTimeoutEvent(delay int64) int32\n \"runtime.scheduleTimeoutEvent\": (sp) => {\n sp >>>= 0;\n const id = this._nextCallbackTimeoutID;\n this._nextCallbackTimeoutID++;\n this._scheduledTimeouts.set(id, setTimeout(\n () => {\n this._resume();\n while (this._scheduledTimeouts.has(id)) {\n console.warn(\"scheduleTimeoutEvent: missed timeout event\");\n this._resume();\n }\n },\n getInt64(sp + 8)\n ));\n this.mem.setInt32(sp + 16, id, true);\n },\n // func clearTimeoutEvent(id int32)\n \"runtime.clearTimeoutEvent\": (sp) => {\n sp >>>= 0;\n const id = this.mem.getInt32(sp + 8, true);\n clearTimeout(this._scheduledTimeouts.get(id));\n this._scheduledTimeouts.delete(id);\n },\n // func getRandomData(r []byte)\n \"runtime.getRandomData\": (sp) => {\n sp >>>= 0;\n crypto.getRandomValues(loadSlice(sp + 8));\n },\n // func finalizeRef(v ref)\n \"syscall/js.finalizeRef\": (sp) => {\n sp >>>= 0;\n const id = this.mem.getUint32(sp + 8, true);\n this._goRefCounts[id]--;\n if (this._goRefCounts[id] === 0) {\n const v = this._values[id];\n this._values[id] = null;\n this._ids.delete(v);\n this._idPool.push(id);\n }\n },\n // func stringVal(value string) ref\n \"syscall/js.stringVal\": (sp) => {\n sp >>>= 0;\n storeValue(sp + 24, loadString(sp + 8));\n },\n // func valueGet(v ref, p string) ref\n \"syscall/js.valueGet\": (sp) => {\n sp >>>= 0;\n const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 32, result);\n },\n // func valueSet(v ref, p string, x ref)\n \"syscall/js.valueSet\": (sp) => {\n sp >>>= 0;\n Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));\n },\n // func valueDelete(v ref, p string)\n \"syscall/js.valueDelete\": (sp) => {\n sp >>>= 0;\n Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));\n },\n // func valueIndex(v ref, i int) ref\n \"syscall/js.valueIndex\": (sp) => {\n sp >>>= 0;\n storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));\n },\n // valueSetIndex(v ref, i int, x ref)\n \"syscall/js.valueSetIndex\": (sp) => {\n sp >>>= 0;\n Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));\n },\n // func valueCall(v ref, m string, args []ref) (ref, bool)\n \"syscall/js.valueCall\": (sp) => {\n sp >>>= 0;\n try {\n const v = loadValue(sp + 8);\n const m = Reflect.get(v, loadString(sp + 16));\n const args = loadSliceOfValues(sp + 32);\n const result = Reflect.apply(m, v, args);\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 56, result);\n this.mem.setUint8(sp + 64, 1);\n } catch (err) {\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 56, err);\n this.mem.setUint8(sp + 64, 0);\n }\n },\n // func valueInvoke(v ref, args []ref) (ref, bool)\n \"syscall/js.valueInvoke\": (sp) => {\n sp >>>= 0;\n try {\n const v = loadValue(sp + 8);\n const args = loadSliceOfValues(sp + 16);\n const result = Reflect.apply(v, void 0, args);\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, result);\n this.mem.setUint8(sp + 48, 1);\n } catch (err) {\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, err);\n this.mem.setUint8(sp + 48, 0);\n }\n },\n // func valueNew(v ref, args []ref) (ref, bool)\n \"syscall/js.valueNew\": (sp) => {\n sp >>>= 0;\n try {\n const v = loadValue(sp + 8);\n const args = loadSliceOfValues(sp + 16);\n const result = Reflect.construct(v, args);\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, result);\n this.mem.setUint8(sp + 48, 1);\n } catch (err) {\n sp = this._inst.exports.getsp() >>> 0;\n storeValue(sp + 40, err);\n this.mem.setUint8(sp + 48, 0);\n }\n },\n // func valueLength(v ref) int\n \"syscall/js.valueLength\": (sp) => {\n sp >>>= 0;\n setInt64(sp + 16, parseInt(loadValue(sp + 8).length));\n },\n // valuePrepareString(v ref) (ref, int)\n \"syscall/js.valuePrepareString\": (sp) => {\n sp >>>= 0;\n const str = encoder.encode(String(loadValue(sp + 8)));\n storeValue(sp + 16, str);\n setInt64(sp + 24, str.length);\n },\n // valueLoadString(v ref, b []byte)\n \"syscall/js.valueLoadString\": (sp) => {\n sp >>>= 0;\n const str = loadValue(sp + 8);\n loadSlice(sp + 16).set(str);\n },\n // func valueInstanceOf(v ref, t ref) bool\n \"syscall/js.valueInstanceOf\": (sp) => {\n sp >>>= 0;\n this.mem.setUint8(sp + 24, loadValue(sp + 8) instanceof loadValue(sp + 16) ? 1 : 0);\n },\n // func copyBytesToGo(dst []byte, src ref) (int, bool)\n \"syscall/js.copyBytesToGo\": (sp) => {\n sp >>>= 0;\n const dst = loadSlice(sp + 8);\n const src = loadValue(sp + 32);\n if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {\n this.mem.setUint8(sp + 48, 0);\n return;\n }\n const toCopy = src.subarray(0, dst.length);\n dst.set(toCopy);\n setInt64(sp + 40, toCopy.length);\n this.mem.setUint8(sp + 48, 1);\n },\n // func copyBytesToJS(dst ref, src []byte) (int, bool)\n \"syscall/js.copyBytesToJS\": (sp) => {\n sp >>>= 0;\n const dst = loadValue(sp + 8);\n const src = loadSlice(sp + 16);\n if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {\n this.mem.setUint8(sp + 48, 0);\n return;\n }\n const toCopy = src.subarray(0, dst.length);\n dst.set(toCopy);\n setInt64(sp + 40, toCopy.length);\n this.mem.setUint8(sp + 48, 1);\n },\n \"debug\": (value) => {\n console.log(value);\n }\n }\n };\n }\n run(instance) {\n return __async(this, null, function* () {\n if (!(instance instanceof WebAssembly.Instance)) {\n throw new Error(\"Go.run: WebAssembly.Instance expected\");\n }\n this._inst = instance;\n this.mem = new DataView(this._inst.exports.mem.buffer);\n this._values = [\n // JS values that Go currently has references to, indexed by reference id\n NaN,\n 0,\n null,\n true,\n false,\n globalThis,\n this\n ];\n this._goRefCounts = new Array(this._values.length).fill(Infinity);\n this._ids = /* @__PURE__ */ new Map([\n // mapping from JS values to reference ids\n [0, 1],\n [null, 2],\n [true, 3],\n [false, 4],\n [globalThis, 5],\n [this, 6]\n ]);\n this._idPool = [];\n this.exited = false;\n let offset = 4096;\n const strPtr = (str) => {\n const ptr = offset;\n const bytes = encoder.encode(str + \"\\0\");\n new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);\n offset += bytes.length;\n if (offset % 8 !== 0) {\n offset += 8 - offset % 8;\n }\n return ptr;\n };\n const argc = this.argv.length;\n const argvPtrs = [];\n this.argv.forEach((arg) => {\n argvPtrs.push(strPtr(arg));\n });\n argvPtrs.push(0);\n const keys = Object.keys(this.env).sort();\n keys.forEach((key) => {\n argvPtrs.push(strPtr(`${key}=${this.env[key]}`));\n });\n argvPtrs.push(0);\n const argv = offset;\n argvPtrs.forEach((ptr) => {\n this.mem.setUint32(offset, ptr, true);\n this.mem.setUint32(offset + 4, 0, true);\n offset += 8;\n });\n const wasmMinDataAddr = 4096 + 8192;\n if (offset >= wasmMinDataAddr) {\n throw new Error(\"total length of command line and environment variables exceeds limit\");\n }\n this._inst.exports.run(argc, argv);\n if (this.exited) {\n this._resolveExitPromise();\n }\n yield this._exitPromise;\n });\n }\n _resume() {\n if (this.exited) {\n throw new Error(\"Go program has already exited\");\n }\n this._inst.exports.resume();\n if (this.exited) {\n this._resolveExitPromise();\n }\n }\n _makeFuncWrapper(id) {\n const go = this;\n return function() {\n const event = { id, this: this, args: arguments };\n go._pendingEvent = event;\n go._resume();\n return event.result;\n };\n }\n };\n })();\n onmessage = ({ data: wasm }) => {\n let decoder = new TextDecoder();\n let fs = globalThis.fs;\n let stderr = \"\";\n fs.writeSync = (fd, buffer) => {\n if (fd === 1) {\n postMessage(buffer);\n } else if (fd === 2) {\n stderr += decoder.decode(buffer);\n let parts = stderr.split(\"\\n\");\n if (parts.length > 1) console.log(parts.slice(0, -1).join(\"\\n\"));\n stderr = parts[parts.length - 1];\n } else {\n throw new Error(\"Bad write\");\n }\n return buffer.length;\n };\n let stdin = [];\n let resumeStdin;\n let stdinPos = 0;\n onmessage = ({ data }) => {\n if (data.length > 0) {\n stdin.push(data);\n if (resumeStdin) resumeStdin();\n }\n return go;\n };\n fs.read = (fd, buffer, offset, length, position, callback) => {\n if (fd !== 0 || offset !== 0 || length !== buffer.length || position !== null) {\n throw new Error(\"Bad read\");\n }\n if (stdin.length === 0) {\n resumeStdin = () => fs.read(fd, buffer, offset, length, position, callback);\n return;\n }\n let first = stdin[0];\n let count = Math.max(0, Math.min(length, first.length - stdinPos));\n buffer.set(first.subarray(stdinPos, stdinPos + count), offset);\n stdinPos += count;\n if (stdinPos === first.length) {\n stdin.shift();\n stdinPos = 0;\n }\n callback(null, count);\n };\n let go = new globalThis.Go();\n go.argv = [\"\", `--service=${\"0.28.2\"}`];\n tryToInstantiateModule(wasm, go).then(\n (instance) => {\n postMessage(null);\n go.run(instance);\n },\n (error) => {\n postMessage(error);\n }\n );\n return go;\n };\n function tryToInstantiateModule(wasm, go) {\n return __async(this, null, function* () {\n if (wasm instanceof WebAssembly.Module) {\n return WebAssembly.instantiate(wasm, go.importObject);\n }\n const res = yield fetch(wasm);\n if (!res.ok) throw new Error(`Failed to download ${JSON.stringify(wasm)}`);\n if (\"instantiateStreaming\" in WebAssembly && /^application\\/wasm($|;)/i.test(res.headers.get(\"Content-Type\") || \"\")) {\n const result2 = yield WebAssembly.instantiateStreaming(res, go.importObject);\n return result2.instance;\n }\n const bytes = yield res.arrayBuffer();\n const result = yield WebAssembly.instantiate(bytes, go.importObject);\n return result.instance;\n });\n }\n return (m) => onmessage(m);\n })((data) => worker.onmessage({ data }));\n let go;\n worker = {\n onmessage: null,\n postMessage: (data) => setTimeout(() => {\n try {\n go = onmessage({ data });\n } catch (error) {\n rejectAllWith(error);\n }\n }),\n terminate() {\n if (go)\n for (let timeout of go._scheduledTimeouts.values())\n clearTimeout(timeout);\n }\n };\n }\n let firstMessageResolve;\n let firstMessageReject;\n const firstMessagePromise = new Promise((resolve, reject) => {\n firstMessageResolve = resolve;\n firstMessageReject = reject;\n });\n worker.onmessage = ({ data: error }) => {\n worker.onmessage = ({ data }) => readFromStdout(data);\n if (error) firstMessageReject(error);\n else firstMessageResolve();\n };\n worker.postMessage(wasmModule || new URL(wasmURL, location.href).toString());\n let { readFromStdout, service } = createChannel({\n writeToStdin(bytes) {\n worker.postMessage(bytes);\n },\n isSync: false,\n hasFS: false,\n esbuild: browser_exports\n });\n yield firstMessagePromise;\n stopService = () => {\n worker.terminate();\n initializePromise = void 0;\n stopService = void 0;\n longLivedService = void 0;\n };\n longLivedService = {\n build: (options) => new Promise((resolve, reject) => {\n rejectAllPromise.then(reject);\n service.buildOrContext({\n callName: \"build\",\n refs: null,\n options,\n isTTY: false,\n defaultWD: \"/\",\n callback: (err, res) => err ? reject(err) : resolve(res)\n });\n }),\n context: (options) => new Promise((resolve, reject) => {\n rejectAllPromise.then(reject);\n service.buildOrContext({\n callName: \"context\",\n refs: null,\n options,\n isTTY: false,\n defaultWD: \"/\",\n callback: (err, res) => err ? reject(err) : resolve(res)\n });\n }),\n transform: (input, options) => new Promise((resolve, reject) => {\n rejectAllPromise.then(reject);\n service.transform({\n callName: \"transform\",\n refs: null,\n input,\n options: options || {},\n isTTY: false,\n fs: {\n readFile(_, callback) {\n callback(new Error(\"Internal error\"), null);\n },\n writeFile(_, callback) {\n callback(null);\n }\n },\n callback: (err, res) => err ? reject(err) : resolve(res)\n });\n }),\n formatMessages: (messages, options) => new Promise((resolve, reject) => {\n rejectAllPromise.then(reject);\n service.formatMessages({\n callName: \"formatMessages\",\n refs: null,\n messages,\n options,\n callback: (err, res) => err ? reject(err) : resolve(res)\n });\n }),\n analyzeMetafile: (metafile, options) => new Promise((resolve, reject) => {\n rejectAllPromise.then(reject);\n service.analyzeMetafile({\n callName: \"analyzeMetafile\",\n refs: null,\n metafile: typeof metafile === \"string\" ? metafile : JSON.stringify(metafile),\n options,\n callback: (err, res) => err ? reject(err) : resolve(res)\n });\n })\n };\n});\nvar browser_default = browser_exports;\n})(typeof module===\"object\"?module:{set exports(x){(typeof self!==\"undefined\"?self:this).esbuild=x}});\n", "import {\n DEFAULT_OUTPUT, ManifestAssetCatalog, Registry, resolveProjectDocument, type AssetManifest,\n type FrameRange, type ProjectDocument, type RenderIssue, type VisualDocument, type Size2D, type StorageAdapter, type Theme,\n} from \"@motionscript/core\";\nimport {\n renderTimeline,\n type VideoFrameSink,\n} from \"./frame-loop\";\nimport {\n AudioBufferSource,\n BufferTarget,\n CanvasSource,\n canEncodeVideo,\n Output,\n type Quality,\n type VideoCodec,\n} from 'mediabunny';\nimport type { BrowserRenderContext } from \"./engine\";\nimport { loadRenderer, type RendererWasmOption } from \"./renderer\";\nimport { WebAudioMixer } from \"./audio/mixer\";\nimport { deliver } from \"./deliver\";\nimport {\n audioTrackSource, DEFAULT_AUDIO_BITRATE, ensureAudioEncoder, formatSpec, type VideoFormat,\n} from \"./formats\";\n\n/** Reports export progress in [0, 1]; video encoding occupies most of the range, audio mixing/finalize the tail. */\nexport type ExportProgressCallback = (progress: number) => void;\n\n/**\n * How the video track is encoded.\n *\n * Every field is a straight pass-through to mediabunny's `VideoEncodingConfig`,\n * defaulted here rather than there so an export has one obvious place to look.\n */\nexport type VideoEncoderOptions = {\n /**\n * Which codec the video track is encoded with. Defaults to the format's own:\n * `'avc'` (H.264) for MP4, which every player, editor and upload target\n * accepts, and `'vp9'` for WebM.\n *\n * `'hevc'` and `'av1'` reconstruct sharp edges far better at the same\n * bitrate, which is what a listing of syntax-highlighted code or a hairline\n * stroke is made of — worth reaching for when the file is going somewhere\n * that decodes them. Both are still 4:2:0, so they narrow the gap rather\n * than close it. Availability depends on the platform's encoders; an\n * unsupported choice, or one the container cannot hold (`'avc'` in WebM),\n * falls back to the format's default rather than failing the export.\n */\n codec?: 'avc' | 'hevc' | 'av1' | 'vp9' | 'vp8';\n /**\n * Which encoder implementation WebCodecs should prefer.\n *\n * Defaults to `'no-preference'`, which lets each platform use its own\n * hardware encoder (VideoToolbox on macOS, Media Foundation/NVENC on\n * Windows, VA-API on Linux). That is typically several times faster than the\n * software path *and* it is the only configuration in which this sink's\n * zero-readback design actually holds: a software encoder needs the pixels\n * on the CPU, so it forces a full GPU→CPU copy of every frame that a\n * hardware encoder reads directly off the canvas.\n *\n * Pass `'prefer-software'` when byte-identical output across machines\n * matters more than speed — different hardware encoders tune quality and\n * colour differently at the same nominal bitrate, so the same settings do\n * not produce the same file.\n */\n hardwareAcceleration?: 'no-preference' | 'prefer-hardware' | 'prefer-software';\n /**\n * Target bitrate in bits per second, or one of mediabunny's subjective\n * `Quality` levels.\n *\n * Defaults to {@link motionGraphicsBitrate}, which is deliberately *not*\n * mediabunny's `QUALITY_VERY_HIGH`: that level is frame-rate blind, so a\n * 60 fps export got the same ~12 Mbps at 1080p as a 30 fps one and paid for\n * it with ringing along every glyph edge and banding across every gradient.\n * See that function for the reasoning.\n */\n bitrate?: number | Quality;\n /** Defaults to mediabunny's `'variable'`. `'constant'` is the reproducible-output choice. */\n bitrateMode?: 'constant' | 'variable';\n /**\n * Seconds between key frames. Defaults to 1.\n *\n * Shorter than mediabunny's 2, because a frame's error is carried by every\n * inter frame that references it: on synthetic content, where a flat\n * background makes a shimmer obvious, a keyframe twice as often visibly\n * resets the drift. It also halves the seek granularity, which matters for a\n * clip an editor is going to scrub.\n */\n keyFrameInterval?: number;\n /**\n * WebCodecs performance/quality trade-off. Defaults to `'quality'`, which\n * also guarantees no frame is dropped — the only correct setting for a file\n * being written rather than streamed.\n */\n latencyMode?: 'quality' | 'realtime';\n /**\n * A hint about what the frames contain, per\n * [mst-content-hint](https://w3c.github.io/mst-content-hint/#video-content-hints).\n *\n * Defaults to `'detail'`: encoders that honour it bias towards preserving\n * sharp edges and fine texture over smoothing motion, which is what motion\n * graphics are. Ignored where it is not implemented.\n */\n contentHint?: string;\n};\n\n/**\n * Bits per pixel per frame the default bitrate is built from.\n *\n * Rendered motion graphics are the hard case for a codec tuned on camera\n * footage: hard glyph edges, large flat fields, and gradients with no sensor\n * noise to hide the quantisation in. They compress *worse* than live action at\n * the same perceived quality, not better, so the figure here is well above what\n * a streaming preset would use — this is a master being rendered once, not a\n * bitstream being pushed down a pipe.\n */\nconst BITS_PER_PIXEL = 0.2;\n/** Floor, so a tiny viewport still gets enough bits to be legible. */\nconst MIN_VIDEO_BITRATE = 2_000_000;\n/**\n * Ceiling. Past this the returns are gone and the levels start excluding\n * hardware decoders — 4K60 lands here, and AVC level 5.1 (which every consumer\n * device implements) tops out at 240 Mbps, well clear of it.\n */\nconst MAX_VIDEO_BITRATE = 100_000_000;\n\n/**\n * The default video bitrate for an export of this size and frame rate.\n *\n * Scaling with **both** axes is the point. mediabunny's `Quality` levels scale\n * with resolution only, so doubling the frame rate halved the bits available per\n * frame while leaving the number unchanged — which is exactly the configuration\n * that produced clean stills and a mushy video from the very same renderer.\n */\nexport function motionGraphicsBitrate(width: number, height: number, fps: number): number {\n const raw = width * height * fps * BITS_PER_PIXEL;\n return Math.round(Math.min(MAX_VIDEO_BITRATE, Math.max(MIN_VIDEO_BITRATE, raw)));\n}\n\n/** How the mixed audio track is encoded. */\nexport type AudioEncoderOptions = {\n /** Bitrate in bits per second for AAC, Opus and MP3; WAV ignores it. Defaults to 192 kbps. */\n bitrate?: number;\n /** Mixdown sample rate in Hz. Defaults to the mixer's own (44100); Opus is resampled to 48 kHz. */\n sampleRate?: number;\n};\n\n/** See {@link VideoEncoderOptions.keyFrameInterval}. */\nconst DEFAULT_KEY_FRAME_INTERVAL = 1;\n/** See {@link ExportParams.supersample}. */\nconst DEFAULT_SUPERSAMPLE = 2;\n\nexport type ExportParams = RendererWasmOption & {\n /** A project, or a lone still or composition as the one track of one. */\n document: ProjectDocument | VisualDocument;\n /** The vocabulary its clips compile against. Defaults to what the library ships. */\n registry?: Registry;\n /** Win over the document's own; 1920×1080 at 60 fps when neither says. */\n viewport?: Size2D;\n fps?: number;\n scale?: number;\n /** The container, and with it the default codecs: H.264 and AAC for `'mp4'` (the default), VP9 and Opus for `'webm'`. */\n format?: VideoFormat;\n /** Defaults to `export.<extension>`. */\n filename?: string;\n manifest?: AssetManifest;\n /** Theme for a document that carries none of its own. */\n theme?: Theme;\n /**\n * Set false to produce a silent file — no audio track is added to the\n * container and the mix is skipped entirely. Defaults to true.\n */\n includeAudio?: boolean;\n /** Video encoder settings; see {@link VideoEncoderOptions} for the defaults. */\n video?: VideoEncoderOptions;\n /** Audio encoder settings; ignored when `includeAudio` is false. */\n audio?: AudioEncoderOptions;\n /**\n * Encode only these frames (`end` excluded), timestamped from 0 and silent:\n * one segment of a split export, for `concatVideoSegments` to join. Mix\n * the audio once with `mixTimelineAudio` instead.\n */\n frames?: FrameRange;\n onProgress?: ExportProgressCallback;\n signal?: AbortSignal;\n /**\n * What the renderer drew but not as the document says, once per kind,\n * feature and node. A lost GPU device fails the export with a\n * `RenderBackendError` instead.\n */\n onIssue?: (issue: RenderIssue) => void;\n /**\n * Render each frame at this multiple of the output resolution and downsample\n * it before encoding. **Defaults to 2**; pass 1 to turn it off.\n *\n * The one lever that improves an export at a *fixed* output size. Every\n * codec a browser can encode is 4:2:0 — colour is stored at half resolution\n * on both axes, and no bitrate buys that back — so the colour fringing along\n * a saturated glyph or a hard edge is a property of the format, not of the\n * settings. Handing the encoder an already-downsampled frame does not undo\n * the subsampling, but it does mean every chroma sample averages four real\n * pixels instead of one, which is what removes most of the crawl on fine\n * detail and much of the banding on gradients.\n *\n * Measured against a correctly-sampled reference frame of a syntax-highlighted\n * listing, `2` lands 2.7 dB closer than a 1× encode — and 1.3 dB closer than\n * an *unencoded* 1× still, which is why it is the default despite costing\n * `supersample²` times the render work per frame plus a rescale. Pass 1 when\n * turnaround matters more than the file, and note that exporting at\n * `scale: 2` is cheaper than supersampling *and* better whenever the extra\n * resolution is wanted in the file itself.\n *\n * Clamped so the render surface stays inside {@link MAX_RENDER_AXIS}, since a\n * supersampled 4K export is already drawing 8K frames.\n */\n supersample?: number;\n /**\n * When true, the encoded bytes are returned instead of triggering a\n * browser download. Used by headless drivers (e.g. the CLI) that capture\n * the output themselves and write it to disk; leave unset for the\n * interactive player, which downloads via an `<a>` element.\n */\n returnBytes?: boolean;\n}\n\nconst EMPTY_MANIFEST: AssetManifest = {\n image: {},\n video: {},\n audio: {},\n font: {},\n};\n\n// ── Audio mixing ─────────────────────────────────────────────────────────────\n//\n// The mix itself lives in ./audio/mixer, shared with `mixTimelineAudio` so a\n// split export and a whole one cannot mix differently.\n\n// ── Video sink ───────────────────────────────────────────────────────────────\n\n/**\n * mediabunny/WebCodecs implementation of the frame sink, writing whichever\n * container `format` names.\n *\n * Wraps the very `<canvas>` the renderer draws into, so `addFrame` costs nothing but\n * a timestamp — WebCodecs pulls the pixels from the canvas itself, with no\n * GPU→CPU readback. That is why the seam signals a frame rather than passing one.\n *\n * The readback claim holds only while the encoder is a hardware one, which is\n * why {@link VideoEncoderOptions.hardwareAcceleration} defaults to letting the\n * platform choose: a software encoder has to be handed CPU pixels, so it drags\n * a full-frame copy off the GPU on every single frame.\n */\nexport class MediabunnyVideoSink implements VideoFrameSink<AudioBuffer> {\n private readonly target = new BufferTarget();\n private readonly output: Output;\n private readonly video: CanvasSource;\n private audio: AudioBufferSource | null = null;\n\n constructor(\n canvas: HTMLCanvasElement,\n /** Encoded output size, which is the canvas' own unless supersampling is on. */\n output: { width: number; height: number },\n private readonly format: VideoFormat,\n encoding: ResolvedVideoEncoding,\n private readonly audioOptions: AudioEncoderOptions = {},\n ) {\n const downsampling = output.width !== canvas.width || output.height !== canvas.height;\n this.video = new CanvasSource(canvas, {\n codec: encoding.codec,\n bitrate: encoding.bitrate,\n hardwareAcceleration: encoding.hardwareAcceleration,\n keyFrameInterval: encoding.keyFrameInterval,\n latencyMode: encoding.latencyMode,\n contentHint: encoding.contentHint,\n ...(encoding.bitrateMode !== undefined && { bitrateMode: encoding.bitrateMode }),\n // `fit` is exact here — the supersampled canvas is a whole multiple\n // of the output — but mediabunny requires it whenever both axes are\n // given, so it is stated rather than inferred.\n ...(downsampling && { transform: { width: output.width, height: output.height, fit: 'fill' as const } }),\n });\n this.output = new Output({ format: formatSpec(format).container(), target: this.target });\n }\n\n async start(info: { fps: number; hasAudio: boolean }): Promise<void> {\n this.output.addVideoTrack(this.video, { frameRate: info.fps });\n // Tracks must be declared before the muxer starts, which is why the\n // orchestrator reports this rather than leaving it to be inferred.\n if (info.hasAudio) {\n await ensureAudioEncoder(this.format);\n this.audio = audioTrackSource(this.format, this.audioOptions.bitrate ?? DEFAULT_AUDIO_BITRATE);\n this.output.addAudioTrack(this.audio);\n }\n await this.output.start();\n }\n\n async addFrame(timestamp: number, duration: number): Promise<void> {\n await this.video.add(timestamp, duration);\n }\n\n async addAudio(mixed: AudioBuffer): Promise<void> {\n if (!this.audio) return;\n await this.audio.add(mixed);\n }\n\n async finalize(): Promise<Uint8Array> {\n this.video.close();\n this.audio?.close();\n await this.output.finalize();\n const buffer = this.target.buffer;\n if (!buffer) throw new Error('Export produced no data');\n return new Uint8Array(buffer);\n }\n}\n\n// ── Main export ──────────────────────────────────────────────────────────────\n\n/** Round up to the nearest even integer — see the call site. */\nfunction evenUp(n: number): number {\n const rounded = Math.round(n);\n return rounded % 2 === 0 ? rounded : rounded + 1;\n}\n\n/**\n * Longest axis the render surface is allowed to reach.\n *\n * Supersampling multiplies the surface, not the output: a 4K export at\n * `supersample: 2` is drawing 8K frames, and the next step up asks for a\n * 15360-wide WebGL surface that most drivers will not give and none will give\n * cheaply. 8192 is the smallest `MAX_TEXTURE_SIZE` in wide circulation, so a\n * surface inside it is one every machine that can run the export at all can\n * also allocate.\n */\nconst MAX_RENDER_AXIS = 8192;\n\n/**\n * How far the frame can actually be supersampled at this output size.\n *\n * Reduced rather than refused: an export that quietly renders at 1× is a\n * slightly softer file, and one that throws because the default was too\n * ambitious for a 4K project is no file at all.\n */\nfunction fittedSupersample(requested: number, output: { width: number; height: number }): number {\n const longest = Math.max(output.width, output.height);\n let factor = Math.max(1, Math.round(requested));\n while (factor > 1 && longest * factor > MAX_RENDER_AXIS) factor--;\n return factor;\n}\n\n/**\n * The codec to actually encode with: the one asked for if the container holds\n * it and this platform can encode it at this size, else the format's default,\n * else its fallback (`'avc'` for MP4, `'vp8'` for WebM).\n *\n * Which encoders a machine has varies by OS, browser and GPU, and an export that\n * dies at the muxer for want of an HEVC encoder is worse than one that quietly\n * produces H.264. The fallback is not probed: there is nothing to fall back to.\n */\nasync function resolveCodec(\n requested: VideoCodec | undefined,\n format: VideoFormat,\n size: { width: number; height: number },\n fps: number,\n): Promise<VideoCodec> {\n const { codecs, fallback } = formatSpec(format).video!;\n let wanted = requested ?? codecs[0];\n if (!codecs.includes(wanted)) {\n console.warn(`[motionscript] ${format.toUpperCase()} cannot hold ${wanted}; exporting as ${CODEC_NAMES[codecs[0]]} instead.`);\n wanted = codecs[0];\n }\n for (const codec of new Set([wanted, codecs[0], fallback])) {\n if (codec === fallback || await canEncode(codec, size, fps)) {\n if (codec !== wanted) {\n console.warn(`[motionscript] No ${wanted} encoder available; exporting as ${CODEC_NAMES[codec]} instead.`);\n }\n return codec;\n }\n }\n return fallback;\n}\n\nconst CODEC_NAMES: Record<VideoCodec, string> = { avc: 'H.264', hevc: 'HEVC', vp9: 'VP9', av1: 'AV1', vp8: 'VP8' };\n\nasync function canEncode(codec: VideoCodec, size: { width: number; height: number }, fps: number): Promise<boolean> {\n try {\n return await canEncodeVideo(codec, {\n width: size.width,\n height: size.height,\n bitrate: motionGraphicsBitrate(size.width, size.height, fps),\n });\n } catch {\n // A probe that throws is a probe that answered \"no\".\n return false;\n }\n}\n\n/**\n * Every encoder setting, decided. A split export pins one of these across its\n * segments, since `concatVideoSegments` refuses parts encoded differently. With\n * a numeric `bitrate` (see {@link plainVideoEncoding}) it is plain data and\n * crosses a process boundary.\n */\nexport interface ResolvedVideoEncoding {\n codec: VideoCodec;\n /** A `Quality` is left for the encoder to size, as an export always has. */\n bitrate: number | Quality;\n hardwareAcceleration: NonNullable<VideoEncoderOptions['hardwareAcceleration']>;\n keyFrameInterval: number;\n latencyMode: NonNullable<VideoEncoderOptions['latencyMode']>;\n contentHint: string;\n bitrateMode?: VideoEncoderOptions['bitrateMode'];\n}\n\n/** {@link VideoEncoderOptions} with its defaults applied against the encoded size and rate. */\nexport async function resolveVideoEncoding(\n video: VideoEncoderOptions | undefined,\n format: VideoFormat,\n output: { width: number; height: number },\n fps: number,\n): Promise<ResolvedVideoEncoding> {\n const codec = await resolveCodec(video?.codec, format, output, fps);\n return {\n codec,\n bitrate: video?.bitrate ?? motionGraphicsBitrate(output.width, output.height, fps),\n hardwareAcceleration: video?.hardwareAcceleration ?? 'no-preference',\n keyFrameInterval: video?.keyFrameInterval ?? DEFAULT_KEY_FRAME_INTERVAL,\n latencyMode: video?.latencyMode ?? 'quality',\n contentHint: video?.contentHint ?? 'detail',\n ...(video?.bitrateMode !== undefined && { bitrateMode: video.bitrateMode }),\n };\n}\n\n/**\n * The encoding with a `Quality` turned into the bits per second mediabunny would\n * give it at this size, since a class instance cannot cross a `MessagePort`.\n */\nexport function plainVideoEncoding(\n encoding: ResolvedVideoEncoding,\n output: { width: number; height: number },\n): ResolvedVideoEncoding & { bitrate: number } {\n const { bitrate } = encoding;\n if (typeof bitrate === 'number') return { ...encoding, bitrate };\n const quality = bitrate as unknown as { _toVideoBitrate(c: VideoCodec, w: number, h: number): number };\n return { ...encoding, bitrate: quality._toVideoBitrate(encoding.codec, output.width, output.height) };\n}\n\n/** The encoded size, rounded up to even, and how far each frame is supersampled. */\nexport function exportGeometry(viewport: Size2D, scale: number, supersample: number) {\n // Every block-based codec works in macroblocks, so an odd dimension is\n // padded by the encoder with a smeared strip that was never drawn.\n const output = { width: evenUp(viewport.width * scale), height: evenUp(viewport.height * scale) };\n const oversample = fittedSupersample(supersample, output);\n return { output, oversample, renderScale: scale * oversample };\n}\n\n/** A hidden canvas with a mounted render context, reusable across renders of one project. */\nexport interface ExportSurface {\n canvas: HTMLCanvasElement;\n renderContext: BrowserRenderContext;\n storageAdapter: StorageAdapter;\n assetCatalog: ManifestAssetCatalog;\n dispose(): void;\n}\n\n/**\n * Open the canvas, renderer, storage and render context an export draws with,\n * resolving once the surface can draw (a frame drawn before an asynchronously\n * started surface is ready encodes blank). The canvas is a whole multiple of the\n * output, so the downsample is exact.\n */\nexport async function openExportSurface(params: {\n canvasSize: { width: number; height: number };\n viewport: Size2D;\n fps: number;\n manifest: AssetManifest;\n} & RendererWasmOption): Promise<ExportSurface> {\n const canvas = document.createElement('canvas');\n canvas.width = params.canvasSize.width;\n canvas.height = params.canvasSize.height;\n canvas.style.display = 'none';\n document.body.appendChild(canvas);\n try {\n const assetCatalog = new ManifestAssetCatalog(params.manifest);\n const renderer = await loadRenderer(params);\n const storageAdapter = renderer.createStorageAdapter({ catalog: assetCatalog, viewport: params.viewport, fps: params.fps });\n const renderContext = renderer.createRenderContext(storageAdapter);\n renderContext.mount(canvas);\n await renderContext.whenMounted?.();\n return {\n canvas, renderContext, storageAdapter, assetCatalog,\n dispose: () => {\n renderContext.dispose();\n canvas.remove();\n },\n };\n } catch (error) {\n canvas.remove();\n throw error;\n }\n}\n\n/**\n * Renders a document frame-by-frame to an offscreen canvas and muxes the result\n * into an MP4 or WebM via mediabunny.\n *\n * The frame loop itself — discovery, state evaluation, the warm-and-re-render retry\n * that keeps every frame accurate, audio scheduling, progress and cancellation —\n * lives in `renderTimeline` (frame-loop.ts). What this function\n * supplies is the browser-specific half: a canvas to draw into, a WebCodecs sink,\n * a Web Audio mixer, and the `<a download>` delivery.\n */\nexport async function exportVideo(params: ExportParams): Promise<Uint8Array | void> {\n const {\n // Not `document`, which would shadow the DOM global this function uses.\n document: source,\n registry = new Registry(),\n scale = 1,\n format = 'mp4',\n manifest = EMPTY_MANIFEST,\n theme,\n includeAudio = true,\n video,\n audio = {},\n frames,\n onProgress,\n signal,\n rendererWasmUrl,\n supersample = DEFAULT_SUPERSAMPLE,\n returnBytes = false,\n } = params;\n\n const spec = formatSpec(format);\n if (spec.kind !== 'video') throw new RangeError(`exportVideo writes video; \"${format}\" is audio, which exportAudio writes.`);\n const filename = params.filename ?? `export.${spec.extension}`;\n const project = resolveProjectDocument(source, params, DEFAULT_OUTPUT);\n if (project.tracks.length === 0) return;\n signal?.throwIfAborted();\n const viewport = project.viewport!;\n const fps = project.fps!;\n\n const { output, oversample, renderScale } = exportGeometry(viewport, scale, supersample);\n const surface = await openExportSurface({\n canvasSize: { width: output.width * oversample, height: output.height * oversample },\n viewport, fps, manifest, rendererWasmUrl,\n });\n\n let bytes: Uint8Array | undefined;\n try {\n const encoding = await resolveVideoEncoding(video, format, output, fps);\n bytes = await renderTimeline<AudioBuffer>({\n project, registry, theme, scale: renderScale, includeAudio, frames,\n renderContext: surface.renderContext, storageAdapter: surface.storageAdapter, assetCatalog: surface.assetCatalog,\n sink: new MediabunnyVideoSink(surface.canvas, output, format, encoding, audio),\n mixer: new WebAudioMixer(audio.sampleRate, surface.assetCatalog),\n onProgress,\n onIssue: params.onIssue,\n signal,\n }) as Uint8Array | undefined;\n } finally {\n surface.dispose();\n }\n\n if (!bytes) return;\n return deliver(bytes, { returnBytes, filename, mimeType: spec.mimeType });\n}\n", "import {\n AssetCatalog, AssetManager, AudioSink, type AudioRequest, type BuildError, type CanvasRenderContext2D, ClipStore, MeasureContext2D,\n AssetTimeline, type AssetTimelineResult, type FrameRange, type ProjectDocument, type Registry,\n isFatalRenderIssue, RenderBackendError, type RenderIssue, renderIssueKey, renderSettled, SETTLE_PASSES, setTheme, toRenderIssue,\n type FrameSpec, type Size2D, spansCovering, StateEvaluator, type StorageAdapter, type Theme, yieldToScheduler,\n} from \"@motionscript/core\";\n\n/**\n * Rendering a timeline is portable; *encoding* it is not.\n *\n * Everything about driving the frames — discovery, state evaluation, asset\n * windows, the bounded warm-and-re-render retry that makes a frame accurate,\n * audio scheduling, progress, cancellation — is the same work whatever the\n * output format. Only the codec differs, so it is injected as a `VideoFrameSink`\n * (exporter.ts: mediabunny over WebCodecs).\n */\n\n/** Image formats a still can be encoded to. */\nexport type ScreenshotFormat = \"png\" | \"jpeg\";\n\nexport type { FrameSpec };\n\n/** One scheduled audio request, with the absolute time its track starts at. */\nexport interface ScheduledAudioRequest {\n request: AudioRequest;\n /**\n * Seconds to add to the request's own times, which are clip-relative: its\n * track's start. Getting it wrong produces an export that looks right and\n * drifts out of sync, which no pixel comparison catches.\n */\n globalOffset: number;\n}\n\n/**\n * Where finished frames go.\n *\n * `TAudio` ties the sink to its {@link AudioMixer}: what a mixer produces is\n * platform-specific (a Web Audio `AudioBuffer`, interleaved PCM, a temp file) and\n * only its own sink consumes it, so this module relays it without naming it.\n */\nexport interface VideoFrameSink<TAudio = unknown> {\n /**\n * Called once before the first frame, with the resolved output geometry.\n *\n * `hasAudio` is here rather than left for the sink to infer because a muxer\n * generally has to declare its tracks before writing any, and whether the\n * timeline schedules any audio is only known after discovery — which happens\n * inside the orchestrator, after the sink was constructed.\n */\n start(info: {\n width: number;\n height: number;\n fps: number;\n totalFrames: number;\n hasAudio: boolean;\n }): Promise<void>;\n\n /**\n * One frame has been drawn and the surface flushed. Times are in seconds.\n *\n * **Deliberately does not receive pixels.** A browser sink wraps the canvas\n * the renderer already drew into and lets WebCodecs pull from it directly, with no\n * readback; handing a buffer here instead would force a full GPU→CPU\n * `readPixels` on every frame of every export. A sink that *does* need bytes\n * (ffmpeg over stdin) reads them itself, because it holds the render target it\n * was constructed with. Do not \"simplify\" this signature.\n */\n addFrame(timestamp: number, duration: number): Promise<void>;\n\n /** Mixed audio for the whole timeline, if any was produced. */\n addAudio?(mixed: TAudio): Promise<void>;\n\n /** Finish the container. Returns encoded bytes, or nothing if the sink delivered them itself. */\n finalize(): Promise<Uint8Array | void>;\n}\n\n/** Mixes every scheduled request into one timeline-length buffer. */\nexport interface AudioMixer<TAudio = unknown> {\n mix(requests: readonly ScheduledAudioRequest[], totalDuration: number): Promise<TAudio | null>;\n}\n\n/**\n * Audio is mixed offline at the end of a run (or irrelevant, for a still), so the\n * `AssetManager` just needs an `AudioSink`-shaped sink that does nothing during\n * the per-frame pass.\n */\nexport class NoopAudioSink extends AudioSink {\n /** Nothing here records a request, so `AssetManager` can skip the whole sync. */\n override get schedulesAudio(): boolean { return false; }\n\n has(_src: string): boolean { return true; }\n async append(_src: string, _data: ArrayBuffer): Promise<void> { }\n retain(_keep: ReadonlySet<string>): void { }\n schedule(_requests: readonly AudioRequest[]): void { }\n syncTo(_clipTime: number): void { }\n play(_time: number, _speed: number, _reverse: boolean): void { }\n stop(): void { }\n}\n\n/** The platform pieces both entry points need. */\n/**\n * What the frame loop draws with. Any backend's context and adapter: the loop\n * uses only core's base members, so another renderer exports through it too.\n */\ninterface RenderHarness {\n renderContext: CanvasRenderContext2D & { pixelRatio: number };\n /** The same adapter the context was built with. */\n storageAdapter: StorageAdapter;\n assetCatalog: AssetCatalog;\n}\n\n/** Fields shared by the video and still entry points. */\ninterface CommonParams extends RenderHarness {\n /** Its fps and viewport resolved — see `Session`. */\n project: ProjectDocument;\n /** The vocabulary its clips compile against. */\n registry: Registry;\n /** Theme for a project that carries none of its own. */\n theme?: Theme;\n /**\n * What the backend drew but not as the document says (a feature it lacks,\n * a shader that does not compile, a GPU error), once per kind, feature and\n * node. A lost device or a crashed backend is not reported here: the render\n * throws a {@link RenderBackendError} instead.\n */\n onIssue?: (issue: RenderIssue) => void;\n}\n\n/**\n * Hand the context's issues since the last call to `onIssue`, once per key in\n * `seen`, and throw on one that means the frames drawn are not to be trusted.\n */\nfunction drainIssues(renderContext: CanvasRenderContext2D, seen: Set<string>, onIssue?: (issue: RenderIssue) => void): void {\n for (const raw of renderContext.takeRenderIssues()) {\n const issue = toRenderIssue(raw);\n if (isFatalRenderIssue(issue)) throw new RenderBackendError(issue);\n const key = renderIssueKey(issue);\n if (seen.has(key)) continue;\n seen.add(key);\n onIssue?.(issue);\n }\n}\n\n/** Draw one frame, settling and re-rendering until it is accurate. See `renderSettled`. */\nasync function renderWarmFrame(\n { renderContext, storageAdapter }: RenderHarness,\n draw: () => void,\n frame: number,\n): Promise<void> {\n const outcome = await renderSettled(() => renderContext.execute(draw), storageAdapter, () => true);\n if (outcome === \"exhausted\") {\n console.warn(`[export] frame ${frame} still had pending decodes after ${SETTLE_PASSES} renders; it may not be exact.`);\n }\n}\n\n/**\n * Switch the adapter to decoding exactly what each frame draws, so a frame is\n * the same pixels whatever was rendered on this adapter before it. Returns the\n * restore: an adapter lent by a live preview must not come back pinned to it.\n */\nfunction exactDecodes(storageAdapter: StorageAdapter): () => void {\n const previous = storageAdapter.getDecodePolicy();\n storageAdapter.setDecodePolicy(\"exact\");\n return () => storageAdapter.setDecodePolicy(previous);\n}\n\nfunction outputOf(project: ProjectDocument): { fps: number; viewport: Size2D } {\n const { fps, viewport } = project;\n if (fps === undefined || viewport === undefined) {\n throw new Error(\"Rendering takes a project whose fps and viewport are resolved — see Session.\");\n }\n return { fps, viewport };\n}\n\n/** `frames`, or the whole timeline; a range that is empty or leaves the timeline is refused rather than clamped. */\nfunction checkedRange(frames: FrameRange | undefined, totalFrames: number): FrameRange {\n if (!frames) return { start: 0, end: totalFrames };\n const { start, end } = frames;\n if (!Number.isInteger(start) || !Number.isInteger(end) || start < 0 || end <= start || end > totalFrames) {\n throw new RangeError(`Frames ${start} to ${end} are not a range inside this timeline's ${totalFrames} frames.`);\n }\n return { start, end };\n}\n\n/** Build the discovery + evaluator pair both entry points drive, over one store so each track builds once. */\nfunction prepare(params: CommonParams) {\n const { project, registry, assetCatalog, renderContext } = params;\n const { fps, viewport } = outputOf(project);\n // The theme is process-global, so anything else drawing in this page may\n // have replaced it; applied before the first build, which resolves tokens.\n const applyTheme = () => setTheme(project.theme ?? params.theme);\n applyTheme();\n // The render context *is* the measurer — `RenderContext2D` extends\n // `MeasureContext2D` so a node measures and draws through one object. Named\n // rather than cast so the compiler checks it; this package has no test suite\n // to catch it otherwise.\n const measurer: MeasureContext2D = renderContext;\n const scope = { registry, viewport, fps, assets: assetCatalog, measurer };\n const loads: { manager?: AssetManager } = {};\n const store = new ClipStore(project, scope, { isReady: (key) => loads.manager?.isReady(key) ?? false });\n const precomper = new AssetTimeline(project, scope, { store });\n const stateEvaluator = new StateEvaluator(project, scope, store);\n return { store, precomper, stateEvaluator, measurer, fps, viewport, loads, applyTheme };\n}\n\n/**\n * Load the layout gates of `trackIds`, then rebuild any of them whose compile\n * measured a face before it was resident — every build here runs before a\n * single asset has loaded.\n */\nasync function settleLayoutGates(store: ClipStore, manager: AssetManager, trackIds: readonly string[]): Promise<void> {\n const gates = trackIds.flatMap((id) => store.layoutGates(id).filter((record) => !manager.isReady(record.src)));\n if (gates.length > 0) await manager.loadRecords(gates);\n store.settleGates(trackIds);\n}\n\n/**\n * Collect every audio request with the absolute offset it plays at. See\n * {@link ScheduledAudioRequest.globalOffset}.\n *\n * Exported because a **split** export has to mix its audio somewhere other than\n * alongside its frames: the video is rendered in pieces by separate workers, and\n * concatenating separately-encoded AAC would put the encoder's priming delay at\n * every join. The coordinator mixes once over the whole timeline instead — and\n * must schedule it exactly as this does. A second implementation that drifted by\n * a track offset would produce a file that plays perfectly and is out of sync.\n */\nexport function collectAudio(precomp: AssetTimelineResult): ScheduledAudioRequest[] {\n const out: ScheduledAudioRequest[] = [];\n for (const track of precomp.tracks) {\n const globalOffset = track.startFrame / precomp.fps;\n for (const request of track.audioRequests) out.push({ request, globalOffset });\n }\n return out;\n}\n\nexport interface RenderTimelineParams<TAudio> extends CommonParams {\n scale?: number;\n sink: VideoFrameSink<TAudio>;\n mixer?: AudioMixer<TAudio>;\n /**\n * Set false to render a silent file: no mix, and no audio track declared on\n * the container at all.\n *\n * Distinct from muting. The audio is still discovered — the pass that finds\n * it is the one that finds the frames' assets — it simply is not encoded.\n */\n includeAudio?: boolean;\n /**\n * Render only these frames, timestamped from 0, with no audio: one segment of a\n * split export. Only the tracks they cover are discovered.\n */\n frames?: FrameRange;\n onProgress?: (progress: number) => void;\n signal?: AbortSignal;\n}\n\n/**\n * Drive every frame of `project` (or of `frames`) into `sink`, then mix audio and finalize.\n *\n * The caller owns the render context and its surface — this neither creates nor\n * disposes them, because how a surface comes to exist is exactly the thing that\n * differs between backends.\n */\nexport async function renderTimeline<TAudio>(\n params: RenderTimelineParams<TAudio>,\n): Promise<Uint8Array | void> {\n const { scale = 1, sink, mixer, onProgress, signal, includeAudio = true } = params;\n const harness: RenderHarness = params;\n const { renderContext, storageAdapter } = harness;\n\n if (params.project.tracks.length === 0) return;\n signal?.throwIfAborted();\n\n renderContext.pixelRatio = scale;\n const { store, precomper, stateEvaluator, measurer, fps, viewport, loads, applyTheme } = prepare(params);\n const restorePolicy = exactDecodes(storageAdapter);\n const seen = new Set<string>();\n try {\n // Not this render's: a device lost before it started was recovered from before it draws.\n renderContext.takeRenderIssues();\n const { start, end } = checkedRange(params.frames, precomper.result().totalFrames);\n const trackIds = params.frames\n ? store.spans.filter((span) => span.startFrame < end && span.endFrame >= start).map((span) => span.id)\n : params.project.tracks.map((track) => track.id);\n if (params.frames) for (const id of trackIds) store.discover(id);\n const precomp = params.frames ? precomper.result() : precomper.run();\n const { totalDuration } = precomp;\n const frameCount = end - start;\n // Before the sink starts, so a refused export encodes nothing.\n assertDrawable(store, precomp, start, end - 1);\n const assetManager = loads.manager = new AssetManager(precomp, storageAdapter, new NoopAudioSink());\n await settleLayoutGates(store, assetManager, trackIds);\n const scheduled = collectAudio(precomp);\n const wantsAudio = includeAudio && !params.frames && scheduled.length > 0 && mixer !== undefined;\n\n await sink.start({\n width: viewport.width * scale,\n height: viewport.height * scale,\n fps,\n totalFrames: frameCount,\n hasAudio: wantsAudio,\n });\n\n const frameDuration = 1 / fps;\n let globalTime = 0;\n // An export is the most perfectly monotonic forward walk of a timeline there\n // is — exactly the access pattern an adapter's look-ahead decode window is\n // built for. Left at the default (`false`, i.e. \"paused\") every video frame\n // instead takes the random-access branch: a seek + decode the render has to\n // wait on, followed by a *second* full render of the frame once it lands (see\n // `renderWarmFrame`). Telling the adapter we are playing turns that into one\n // sequential decode pass per clip.\n //\n // Restored in the `finally` so a cancelled export doesn't leave an adapter the\n // caller still owns believing a playhead is running.\n storageAdapter.setPlaying(true);\n try {\n for (let f = start; f < end; f++) {\n signal?.throwIfAborted();\n\n await assetManager.loadAt(f);\n applyTheme();\n stateEvaluator.stateAt(f);\n stateEvaluator.layout(measurer);\n await renderWarmFrame(harness, () => stateEvaluator.render(renderContext), f);\n drainIssues(renderContext, seen, params.onIssue);\n\n await sink.addFrame(globalTime, frameDuration);\n globalTime += frameDuration;\n const done = f - start + 1;\n // Video occupies most of the range; the audio mix and finalize are the tail.\n onProgress?.((done / frameCount) * (wantsAudio ? 0.85 : 1));\n\n // Hand the host back its event loop periodically so a long export stays\n // interruptible. Core's yield is feature-detected and prefers a real\n // macrotask over a clamped setTimeout, in the browser and in Node alike.\n if ((f + 1) % 4 === 0) await yieldToScheduler();\n }\n } finally {\n storageAdapter.setPlaying(false);\n }\n\n if (wantsAudio) {\n const mixed = await mixer!.mix(scheduled, totalDuration);\n if (mixed !== null && sink.addAudio) await sink.addAudio(mixed);\n onProgress?.(0.97);\n }\n\n // The last frame's device may have been lost after it was drawn.\n drainIssues(renderContext, seen, params.onIssue);\n const bytes = await sink.finalize();\n onProgress?.(1);\n return bytes;\n } finally {\n restorePolicy();\n stateEvaluator.dispose();\n store.dispose();\n }\n}\n\nexport interface DrawFrameParams extends CommonParams {\n scale?: number;\n frame: FrameSpec;\n}\n\nexport interface DrawnFrame {\n /** The frame actually drawn, after clamping the request into range. */\n frame: number;\n totalFrames: number;\n}\n\n/**\n * Every track covering {@link frame} failed to build. Drawn anyway, it would be\n * a blank frame — the consequence, with the cause hidden — so a still and an\n * export both refuse it.\n */\nexport class NothingToDrawError extends Error {\n override readonly name = \"NothingToDrawError\";\n\n constructor(\n readonly frame: number,\n /** One per track covering the frame. */\n readonly failures: readonly BuildError[],\n ) {\n const causes = failures.map((failure) => ` ${failure.trackId}: ${failure.message}`).join(\"\\n\");\n super(`Frame ${frame} has nothing to draw — every track on it failed to build:\\n${causes}`);\n }\n}\n\n/**\n * Draw one frame of `project` into the caller's render context and leave it on\n * the surface.\n *\n * Same discovery/evaluator/warm-retry path as {@link renderTimeline}, so a still\n * is the same render the video would produce at that frame — and only the tracks\n * on that frame are discovered, since a track's span is known without it.\n *\n * The drawing is shared while what happens to the frame varies: a still encodes\n * it, a live preview leaves it on a visible canvas. The context is the\n * caller's throughout — this neither creates, resizes nor disposes it — so a host\n * holding one surface can call this repeatedly and keep both the surface and the\n * storage adapter's decode cache warm.\n */\nexport async function drawFrameAt(params: DrawFrameParams): Promise<DrawnFrame> {\n const { scale = 1, frame, project } = params;\n const harness: RenderHarness = params;\n const { renderContext, storageAdapter } = harness;\n\n if (project.tracks.length === 0) throw new Error(\"The project has no tracks to render.\");\n\n renderContext.pixelRatio = scale;\n const { store, precomper, stateEvaluator, measurer, loads } = prepare(params);\n const restorePolicy = exactDecodes(storageAdapter);\n try {\n const { totalFrames } = precomper.result();\n const requested =\n frame.kind === \"first\" ? 0\n : frame.kind === \"last\" ? totalFrames - 1\n : frame.frame;\n const targetFrame = Math.max(0, Math.min(totalFrames - 1, Math.floor(requested)));\n const precomp = precomper.ensureCovering(targetFrame);\n assertDrawable(store, precomp, targetFrame);\n\n const assetManager = loads.manager = new AssetManager(precomp, storageAdapter, new NoopAudioSink());\n await settleLayoutGates(store, assetManager, spansCovering(store.spans, targetFrame).map((span) => span.id));\n await assetManager.loadAt(targetFrame);\n stateEvaluator.stateAt(targetFrame);\n stateEvaluator.layout(measurer);\n renderContext.takeRenderIssues();\n await renderWarmFrame(harness, () => stateEvaluator.render(renderContext), targetFrame);\n drainIssues(renderContext, new Set(), params.onIssue);\n\n return { frame: targetFrame, totalFrames };\n } finally {\n restorePolicy();\n // The pass flushed the surface before returning, so the pixels survive the\n // tree being torn down here. In `finally` so a throw mid-draw doesn't leak\n // a live scene graph.\n stateEvaluator.dispose();\n store.dispose();\n }\n}\n\n/**\n * Throw a {@link NothingToDrawError} for the first frame in `first..last` whose\n * every track failed to build. Only a build that threw counts: `buildErrors` also\n * carries a node's failed declaration, and a track with one still draws.\n */\nfunction assertDrawable(store: ClipStore, precomp: AssetTimelineResult, first: number, last = first): void {\n const failed = new Map(precomp.buildErrors\n .filter((error) => store.failed(error.trackId))\n .map((error) => [error.trackId, error]));\n if (failed.size === 0) return;\n for (let frame = first; frame <= last; frame++) {\n const covering = spansCovering(store.spans, frame);\n if (covering.length > 0 && covering.every((span) => failed.has(span.id))) {\n throw new NothingToDrawError(frame, covering.map((span) => failed.get(span.id)!));\n }\n }\n}\n", "// Encodes core's Scene3D into the word stream ms-render3d decodes\n// (crates/render3d/src/scene.rs; format in docs-3d-renderer.md).\n//\n// The encoder stays thin: it writes the descriptors' own values (NaN for an\n// unset number, so the renderer applies three's defaults), parses colours\n// with core's parseColor (gamma-encoded sRGB; the renderer linearizes), and\n// calls core's own helpers where core already owns the answer: camera\n// placement, cylinder radii, rounded boxes and parametric surfaces (both\n// evaluate to buffers here).\n\nimport {\n resolveTexture3D, type Texture3D, type ImageTexture3D, type DataTexture3D, type SurfaceTexture3D,\n cylinderRadii, evaluateParametric, evaluateRoundedBox, parseColor,\n resolveCameraPlacement, resolveShadowOptions3D, segmentsOf,\n type BufferGeometry3D, type CameraData3D, type Color, type Geometry3D,\n type LightData3D, type Material3D, type Scene3D, type Transform3D,\n} from \"@motionscript/core\";\n\nexport const MAGIC = 0x52334431;\nexport const VERSION = 3;\n\ntype Vec = { x: number; y: number; z: number };\ntype VecIn = Vec | readonly number[] | number | undefined;\n\nfunction vec(v: VecIn): Vec {\n if (v === undefined) return { x: 0, y: 0, z: 0 };\n if (typeof v === \"number\") return { x: v, y: v, z: v };\n if (Array.isArray(v)) return { x: v[0] ?? 0, y: v[1] ?? 0, z: v[2] ?? 0 };\n const o = v as Vec;\n return { x: o.x ?? 0, y: o.y ?? 0, z: o.z ?? 0 };\n}\n\nconst EULER: Record<string, number> = { XYZ: 0, YXZ: 1, ZXY: 2, ZYX: 3, YZX: 4, XZY: 5 };\nconst TONE: Record<string, number> = { none: 0, linear: 1, reinhard: 2, cineon: 3, aces: 4, agx: 5, neutral: 6 };\nconst GEOMETRY: Record<string, number> = {\n box: 0, sphere: 1, plane: 2, cylinder: 3, cone: 4, torus: 5, torusKnot: 6, circle: 7, ring: 8, buffer: 9,\n capsule: 10, polyhedron: 11, lathe: 12, tube: 13, edges: 14, wireframe: 15,\n};\nconst POLYHEDRON: Record<string, number> = { tetrahedron: 0, octahedron: 1, icosahedron: 2, dodecahedron: 3 };\nconst MATERIAL: Record<string, number> = {\n basic: 0, standard: 1, physical: 2, lambert: 3, phong: 4, normal: 5, points: 6, lineBasic: 7,\n lineDashed: 8, sprite: 9, shadow: 10, toon: 11, matcap: 12, depth: 13, shader: 14,\n};\nconst LIGHT: Record<string, number> = { ambient: 0, hemisphere: 1, directional: 2, point: 3, spot: 4, area: 5 };\nconst FACES: Record<string, number> = { front: 0, back: 1, both: 2 };\nconst BLEND: Record<string, number> = { normal: 0, additive: 1, subtractive: 2, multiply: 3, none: 4 };\nconst MAP_KEYS = [\"map\", \"gradientMap\", \"alphaMap\", \"aoMap\", \"normalMap\", \"roughnessMap\", \"metalnessMap\", \"emissionMap\", \"envMap\", \"lightMap\", \"displacementMap\"];\n\n/** What a scene recorded that this encoder or the renderer does not draw yet. */\nexport interface EncodeReport {\n unsupported: Set<string>;\n}\n\n/** A texture the host must provide to the renderer under `id`. */\nexport interface TextureRequest {\n id: number;\n srgb: boolean;\n texture: ImageTexture3D | DataTexture3D | SurfaceTexture3D;\n}\n\n/**\n * Texture identity across frames: an image by `src`, data and surfaces by descriptor object. The host uploads\n * every request in `pending` (pixels for images and data, the 2D raster for\n * surfaces) and clears it.\n */\nexport class TextureTable {\n private byKey = new Map<unknown, Map<boolean, number>>();\n private next = 1;\n readonly pending: TextureRequest[] = [];\n readonly all = new Map<number, TextureRequest>();\n\n id(texture: Texture3D, srgb: boolean): number {\n const resolved = resolveTexture3D(texture);\n const key = \"src\" in resolved ? resolved.src : resolved;\n let slot = this.byKey.get(key);\n if (!slot) this.byKey.set(key, (slot = new Map()));\n let id = slot.get(srgb);\n if (id === undefined) {\n id = this.next++;\n slot.set(srgb, id);\n const req = { id, srgb, texture: resolved };\n this.pending.push(req);\n this.all.set(id, req);\n }\n return id;\n }\n}\n\nclass Writer {\n private buf = new ArrayBuffer(1 << 16);\n private u32 = new Uint32Array(this.buf);\n private f32 = new Float32Array(this.buf);\n n = 0;\n\n private room(k: number): void {\n if (this.n + k <= this.u32.length) return;\n let size = this.buf.byteLength * 2;\n while (size / 4 < this.n + k) size *= 2;\n const next = new ArrayBuffer(size);\n new Uint32Array(next).set(this.u32.subarray(0, this.n));\n this.buf = next;\n this.u32 = new Uint32Array(next);\n this.f32 = new Float32Array(next);\n }\n u(v: number): void { this.room(1); this.u32[this.n++] = v >>> 0; }\n f(v: number | undefined): void { this.room(1); this.f32[this.n++] = v === undefined ? NaN : v; }\n v3(v: Vec): void { this.f(v.x); this.f(v.y); this.f(v.z); }\n floats(a: ArrayLike<number>): void {\n this.room(a.length);\n for (let i = 0; i < a.length; i++) this.f32[this.n++] = a[i];\n }\n words(a: ArrayLike<number>): void {\n this.room(a.length);\n for (let i = 0; i < a.length; i++) this.u32[this.n++] = a[i] >>> 0;\n }\n color(c: Color | undefined): void {\n if (c === undefined) { this.u(0); this.f(0); this.f(0); this.f(0); this.f(0); return; }\n const [r, g, b, a] = typeof c === \"string\" ? parseColor(c) : (c as readonly number[]);\n this.u(1); this.f(r); this.f(g); this.f(b); this.f(a ?? 1);\n }\n segments(s: number | readonly number[] | undefined): void {\n if (s === undefined) { this.u(0); this.f(NaN); this.f(NaN); this.f(NaN); return; }\n if (typeof s === \"number\") { this.u(1); this.f(s); this.f(NaN); this.f(NaN); return; }\n this.u(2); this.f(s[0]); this.f(s[1]); this.f(s[2]);\n }\n result(): Uint32Array { return this.u32.slice(0, this.n); }\n /** Words `from..n` as a map key. */\n key(from: number): string { return Array.prototype.join.call(this.u32.subarray(from, this.n), \",\"); }\n copy(from: number): Uint32Array { return this.u32.slice(from, this.n); }\n same(from: number, words: Uint32Array): boolean {\n if (this.n - from !== words.length) return false;\n const u = this.u32;\n for (let i = 0; i < words.length; i++) if (u[from + i] !== words[i]) return false;\n return true;\n }\n set(i: number, v: number): void { this.u32[i] = v >>> 0; }\n append(other: Writer): void {\n this.room(other.n);\n this.u32.set(other.u32.subarray(0, other.n), this.n);\n this.n += other.n;\n }\n}\n\nfunction writeTransform(w: Writer, t: Transform3D | undefined): void {\n if (!t) { w.u(0); return; }\n let flags = 0;\n if (t.position !== undefined) flags |= 1;\n if (t.rotation !== undefined) flags |= 2;\n if (t.quaternion !== undefined) flags |= 4;\n if (t.scale !== undefined) flags |= 8;\n if (t.lookAt !== undefined) flags |= 16;\n if (t.visible === false) flags |= 32;\n if (t.shadow !== undefined) flags |= 64;\n if (t.renderOrder !== undefined) flags |= 128;\n w.u(flags);\n if (flags & 1) w.v3(vec(t.position as VecIn));\n if (flags & 2) {\n w.v3(vec(t.rotation as VecIn));\n w.u(EULER[(t.rotation as { order?: string }).order ?? \"XYZ\"] ?? 0);\n }\n if (flags & 4) { const q = t.quaternion!; w.f(q.x); w.f(q.y); w.f(q.z); w.f(q.w); }\n if (flags & 8) w.v3(vec(t.scale as VecIn));\n if (flags & 16) w.v3(vec(t.lookAt as VecIn));\n if (flags & 64) {\n const s = t.shadow;\n w.u(s === false ? 0 : s === true ? 1 : s === \"cast\" ? 2 : s === \"receive\" ? 3 : 4);\n }\n if (flags & 128) w.f(t.renderOrder);\n}\n\nfunction writeBuffer(w: Writer, b: BufferGeometry3D): void {\n const n = Math.floor(b.position.length / 3);\n const flags = (b.normal ? 1 : 0) | (b.uv ? 2 : 0) | (b.color ? 4 : 0) | (b.index ? 8 : 0)\n | (b.computeNormals ? 16 : 0);\n w.u(GEOMETRY.buffer);\n w.u(flags);\n w.u(n);\n w.u(b.index?.length ?? 0);\n w.floats(b.position);\n if (b.normal) w.floats(b.normal);\n if (b.uv) w.floats(b.uv);\n if (b.color) w.floats(b.color);\n if (b.index) w.words(b.index);\n}\n\nfunction writeGeometry(w: Writer, g: Geometry3D, report: EncodeReport): void {\n switch (g.type) {\n case \"box\": {\n if ((g.cornerRadius ?? 0) > 0) {\n const [sx, sy, sz] = segmentsOf(g.segments, [1, 1, 1]);\n writeBuffer(w, evaluateRoundedBox({\n width: g.width ?? 1, height: g.height ?? 1, depth: g.depth ?? 1,\n radius: g.cornerRadius!, segments: [sx, sy, sz],\n }));\n return;\n }\n w.u(GEOMETRY.box); w.f(g.width); w.f(g.height); w.f(g.depth); w.segments(g.segments);\n return;\n }\n case \"sphere\":\n w.u(GEOMETRY.sphere); w.f(g.radius); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep); w.f(g.startLatitude); w.f(g.latitudeSweep);\n return;\n case \"plane\":\n w.u(GEOMETRY.plane); w.f(g.width); w.f(g.height); w.segments(g.segments);\n return;\n case \"cylinder\": {\n const [top, bottom] = cylinderRadii(g.radius);\n w.u(GEOMETRY.cylinder); w.f(top); w.f(bottom); w.f(g.height); w.segments(g.segments);\n w.u(g.capped === false ? 0 : 1); w.f(g.startAngle); w.f(g.sweep);\n return;\n }\n case \"cone\":\n w.u(GEOMETRY.cone); w.f(g.radius); w.f(g.height); w.segments(g.segments);\n w.u(g.capped === false ? 0 : 1); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"torus\":\n w.u(GEOMETRY.torus); w.f(g.radius); w.f(g.thickness); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"torusKnot\":\n w.u(GEOMETRY.torusKnot); w.f(g.radius); w.f(g.thickness); w.segments(g.segments);\n w.f(g.windings?.[0]); w.f(g.windings?.[1]);\n return;\n case \"circle\":\n w.u(GEOMETRY.circle); w.f(g.radius); w.segments(g.segments); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"ring\":\n w.u(GEOMETRY.ring); w.f(g.radius); w.f(g.innerRadius); w.segments(g.segments);\n w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"buffer\":\n writeBuffer(w, g);\n return;\n case \"parametric\":\n writeBuffer(w, evaluateParametric(g));\n return;\n case \"capsule\":\n w.u(GEOMETRY.capsule); w.f(g.radius); w.f(g.height); w.segments(g.segments);\n return;\n case \"polyhedron\": {\n // A polyhedron's segments are a detail count where 0 (unset) is\n // the plain solid.\n w.u(GEOMETRY.polyhedron); w.u(POLYHEDRON[g.shape ?? \"icosahedron\"] ?? 2); w.f(g.radius);\n w.f(g.segments === undefined ? 0 : segmentsOf(g.segments, [1])[0]);\n return;\n }\n case \"lathe\":\n w.u(GEOMETRY.lathe); w.u(g.points.length);\n for (const p of g.points) { const v = vec(p as VecIn); w.f(v.x); w.f(v.y); }\n w.segments(g.segments); w.f(g.startAngle); w.f(g.sweep);\n return;\n case \"tube\":\n w.u(GEOMETRY.tube); w.u(g.points.length);\n for (const p of g.points) w.v3(vec(p as VecIn));\n w.u(g.closed ? 1 : 0); w.f(g.radius); w.segments(g.segments);\n return;\n case \"edges\":\n w.u(GEOMETRY.edges); w.f(g.thresholdAngle);\n writeGeometry(w, g.source, report);\n return;\n case \"wireframe\":\n w.u(GEOMETRY.wireframe);\n writeGeometry(w, g.source, report);\n return;\n default:\n report.unsupported.add(`geometry:${g.type}`);\n w.u(255);\n }\n}\n\n/** Fixed: keyed by its own words. Rounded: a box evaluated to a buffer, keyed\n * by its parameters. Slot: buffer data, keyed by where it is drawn. */\nfunction classify(g: Geometry3D): \"fixed\" | \"rounded\" | \"slot\" {\n switch (g.type) {\n case \"buffer\": case \"parametric\": return \"slot\";\n case \"box\": return (g.cornerRadius ?? 0) > 0 ? \"rounded\" : \"fixed\";\n case \"edges\": case \"wireframe\": return classify(g.source) === \"fixed\" ? \"fixed\" : \"slot\";\n default: return \"fixed\";\n }\n}\n\n/** A geometry's structure without its data, as the reconciler's `geometrySignature`. */\nfunction signature(g: Geometry3D): string {\n const bag = g as unknown as Record<string, unknown>;\n let out: string = g.type;\n for (const k of Object.keys(bag).sort()) {\n const v = bag[k];\n if (k === \"type\" || k === \"revision\" || k === \"staticData\" || v === undefined || typeof v === \"function\") continue;\n if (k === \"source\") out += `|source=${signature(v as Geometry3D)}`;\n else if (ArrayBuffer.isView(v) || (Array.isArray(v) && v.length > 3)) out += `|${k}#${(v as ArrayLike<number>).length}`;\n else out += `|${k}=${typeof v === \"object\" ? JSON.stringify(v) : String(v)}`;\n }\n return out;\n}\n\ninterface Slot {\n id: number;\n revision: number | undefined;\n /** A buffer's arrays, compared by identity when a revision or `staticData` vouches for them. */\n arrays: readonly unknown[];\n words: Uint32Array;\n}\n\nfunction arraysOf(g: Geometry3D): readonly unknown[] {\n if (g.type !== \"buffer\") return [];\n return [g.position, g.normal, g.uv, g.color, g.index, g.computeNormals];\n}\n\n/**\n * Geometry the renderer keeps across frames (stream v3). A geometry is sent\n * once as a def (id and geometry) and drawn by reference (geometry type 16).\n * An id's content never changes: new content takes a new id, and an id no\n * draw refers to in a frame is dropped, here and by the renderer, at that\n * frame. One table per renderer scene, beside its {@link TextureTable}.\n *\n * Fixed-shape geometry is keyed by its words. A buffer or parametric surface\n * is keyed by its slot, as the reconciler keys a drawable\n * (`<node>|<kind>|<signature>|<nth>`): an unchanged `revision` (and, for a\n * buffer, the same arrays) reuses the def without evaluating or copying it;\n * otherwise its fresh words are compared with the slot's last ones.\n */\nexport class GeometryTable {\n private next = 1;\n private byKey = new Map<string, number>();\n private slots = new Map<string, Slot>();\n private live = new Set<number>();\n private nth = new Map<string, number>();\n private defs = new Writer();\n private count = 0;\n\n /** Starts a frame. */\n begin(): void {\n this.live.clear();\n this.nth.clear();\n this.defs.n = 0;\n this.count = 0;\n }\n\n /** Ends a frame: writes its new defs and forgets what it didn't draw. */\n end(w: Writer): void {\n w.u(this.count);\n w.append(this.defs);\n for (const [k, id] of this.byKey) if (!this.live.has(id)) this.byKey.delete(k);\n for (const [k, s] of this.slots) if (!this.live.has(s.id)) this.slots.delete(k);\n }\n\n /** The def id for `g`, drawn by an op of `kind` in node scope `scope`. */\n ref(g: Geometry3D, scope: string, kind: string, report: EncodeReport): number {\n const d = this.defs;\n const shape = classify(g);\n if (shape !== \"slot\") {\n let key: string | undefined;\n if (shape === \"rounded\") {\n const b = g as Extract<Geometry3D, { type: \"box\" }>;\n key = `rounded|${b.width}|${b.height}|${b.depth}|${b.cornerRadius}|${JSON.stringify(b.segments)}`;\n const known = this.byKey.get(key);\n if (known !== undefined) return this.use(known);\n }\n const start = d.n;\n d.u(0);\n writeGeometry(d, g, report);\n key ??= d.key(start + 1);\n const known = this.byKey.get(key);\n if (known !== undefined) {\n d.n = start;\n return this.use(known);\n }\n const id = this.add(start);\n this.byKey.set(key, id);\n return id;\n }\n const base = `${scope}|${kind}|${signature(g)}`;\n const n = this.nth.get(base) ?? 0;\n this.nth.set(base, n + 1);\n const key = `${base}|${n}`;\n const slot = this.slots.get(key);\n const revision = (g as { revision?: number }).revision;\n const arrays = arraysOf(g);\n if (slot && slot.revision === revision) {\n if (g.type === \"parametric\" && revision !== undefined) return this.use(slot.id);\n if (g.type === \"buffer\" && (revision !== undefined || g.staticData === true)\n && arrays.every((a, i) => a === slot.arrays[i])) return this.use(slot.id);\n }\n const start = d.n;\n d.u(0);\n writeGeometry(d, g, report);\n if (slot && d.same(start + 1, slot.words)) {\n d.n = start;\n slot.revision = revision;\n slot.arrays = arrays;\n return this.use(slot.id);\n }\n const id = this.add(start);\n this.slots.set(key, { id, revision, arrays, words: d.copy(start + 1) });\n return id;\n }\n\n private use(id: number): number {\n this.live.add(id);\n return id;\n }\n\n /** The def written at `start` (its id word first) becomes a new id. */\n private add(start: number): number {\n const id = this.next++;\n this.defs.set(start, id);\n this.count++;\n return this.use(id);\n }\n}\n\nconst WRAP: Record<string, number> = { clamp: 0, repeat: 1, mirror: 2 };\n\nfunction pair(v: unknown, d: number): [number, number] {\n if (v === undefined) return [d, d];\n if (Array.isArray(v)) return [v[0] ?? d, v[1] ?? d];\n const o = v as { x?: number; y?: number };\n return [o.x ?? d, o.y ?? d];\n}\n\n/** The map slot: id, three's `Texture.matrix` (setUvTransform), sampler flags. */\nfunction writeMap(w: Writer, map: Texture3D | undefined, textures: TextureTable | undefined, report: EncodeReport): void {\n if (map === undefined || !textures) {\n if (map !== undefined) report.unsupported.add(\"texture:map\");\n w.u(0); w.u(0); w.f(1); w.f(0); w.f(0); w.f(0); w.f(1); w.f(0); w.u(0);\n return;\n }\n const t = resolveTexture3D(map);\n const srgb = t.colorSpace !== \"linear\";\n w.u(1);\n w.u(textures.id(map, srgb));\n const [tx, ty] = pair(t.offset, 0);\n const [sx, sy] = pair(t.repeat, 1);\n const [cx, cy] = pair(t.center, 0);\n const r = ((t.rotation ?? 0) * Math.PI) / 180;\n const c = Math.cos(r), s = Math.sin(r);\n w.f(sx * c); w.f(sx * s); w.f(-sx * (c * cx + s * cy) + cx + tx);\n w.f(-sy * s); w.f(sy * c); w.f(-sy * (-s * cx + c * cy) + cy + ty);\n // Images and surfaces are DataTextures with flipY (true unless stated);\n // plain data textures keep three's DataTexture default, false.\n const flip = t.flipY ?? !(\"data\" in t);\n w.u((WRAP[t.wrapS ?? \"clamp\"] ?? 0) | ((WRAP[t.wrapT ?? \"clamp\"] ?? 0) << 2) | (flip ? 16 : 0)\n | (t.magFilter === \"nearest\" ? 32 : 0) | (t.minFilter === \"nearest\" ? 64 : 0));\n}\n\nfunction writeMaterial(w: Writer, m: Material3D, report: EncodeReport, textures?: TextureTable): void {\n const bag = m as unknown as Record<string, unknown>;\n w.u(MATERIAL[m.type] ?? 1);\n if (![\"basic\", \"standard\", \"physical\", \"lambert\", \"phong\", \"normal\", \"lineBasic\", \"lineDashed\", \"sprite\", \"shadow\", \"points\", \"toon\", \"depth\"].includes(m.type)) {\n report.unsupported.add(`material:${m.type}`);\n }\n for (const k of MAP_KEYS) if (k !== \"map\" && k !== \"gradientMap\" && bag[k] !== undefined) report.unsupported.add(`texture:${k}`);\n if (bag.gradientMap !== undefined && m.type !== \"toon\") report.unsupported.add(\"texture:gradientMap\");\n // Physical draws as standard plus clearcoat and transmission; the other lobes are unsupported.\n for (const k of [\"sheen\", \"iridescence\", \"anisotropy\", \"dispersion\"]) {\n if (typeof bag[k] === \"number\" && (bag[k] as number) > 0) report.unsupported.add(`physical:${k}`);\n }\n w.color(bag.color as Color | undefined);\n w.f(bag.opacity as number | undefined);\n w.f(bag.roughness as number | undefined);\n w.f(bag.metalness as number | undefined);\n w.color(bag.emission as Color | undefined);\n w.f(bag.emissionStrength as number | undefined);\n w.f(bag.envMapIntensity as number | undefined);\n let flags = 0;\n if (bag.transparent === true) flags |= 1;\n if (bag.wireframe === true) flags |= 4;\n if (bag.vertexColors === true) flags |= 8;\n if (bag.shading === \"flat\") flags |= 16;\n if (bag.toneMapped === false) flags |= 32;\n if (bag.visible === false) flags |= 64;\n if (bag.depthTest === false) flags |= 128;\n if (bag.depthWrite !== undefined) flags |= 256 | (bag.depthWrite ? 512 : 0);\n if (bag.sizeAttenuation === false) flags |= 1024;\n w.u(flags);\n w.u(FACES[(bag.faces as string) ?? \"front\"] ?? 0);\n w.u(BLEND[(bag.blend as string) ?? \"normal\"] ?? 0);\n w.f(bag.alphaTest as number | undefined);\n w.f(bag.size as number | undefined);\n w.color(bag.specular as Color | undefined);\n w.f(bag.shininess as number | undefined);\n writeMap(w, bag.map as Texture3D | undefined, textures, report);\n // v2: physical layers, dashes, the toon gradient.\n w.f(bag.clearcoat as number | undefined);\n w.f(bag.clearcoatRoughness as number | undefined);\n w.f(bag.transmission as number | undefined);\n w.f(bag.thickness as number | undefined);\n w.f(bag.ior as number | undefined);\n w.f(bag.attenuationDistance as number | undefined);\n w.color(bag.attenuationColor as Color | undefined);\n w.f(bag.dashSize as number | undefined);\n w.f(bag.gapSize as number | undefined);\n w.f(bag.scale as number | undefined);\n writeMap(w, m.type === \"toon\" ? bag.gradientMap as Texture3D | undefined : undefined, textures, report);\n}\n\nfunction writeLight(w: Writer, l: LightData3D, t: Transform3D | undefined): void {\n const bag = l as unknown as Record<string, unknown>;\n w.u(LIGHT[l.type] ?? 0);\n w.color(bag.color as Color | undefined);\n w.f(l.intensity);\n w.color(bag.sky as Color | undefined);\n w.color(bag.ground as Color | undefined);\n w.f(bag.distance as number | undefined);\n w.f(bag.decay as number | undefined);\n w.f(bag.angle as number | undefined);\n w.f(bag.penumbra as number | undefined);\n const target = bag.target as VecIn;\n w.u(target === undefined ? 0 : 1);\n w.v3(vec(target));\n const declared = bag.shadow as Parameters<typeof resolveShadowOptions3D>[0];\n const options = declared === undefined ? null : resolveShadowOptions3D(declared);\n w.u(options ? 1 : 0);\n w.f(options?.softness);\n w.f(options?.extent);\n w.f(bag.width as number | undefined);\n w.f(bag.height as number | undefined);\n writeTransform(w, t);\n}\n\nfunction writeCamera(w: Writer, c: CameraData3D): void {\n w.u(c.type === \"orthographic\" ? 1 : 0);\n const placement = resolveCameraPlacement(c);\n writeTransform(w, { ...c, position: placement.position, lookAt: placement.lookAt });\n w.f(c.type === \"perspective\" ? c.fov : undefined);\n w.f(c.zoom);\n w.f(c.type === \"orthographic\" ? c.frustumHeight : undefined);\n w.f(c.near);\n w.f(c.far);\n w.f(c.distance);\n}\n\n/**\n * Encodes a recorded scene. `report` collects what will not draw. With\n * `geometries`, geometry goes by reference to defs the renderer keeps (pass\n * the same table every frame of one renderer scene); without, inline.\n */\nexport function encodeScene3D(\n scene: Scene3D,\n report: EncodeReport = { unsupported: new Set() },\n textures?: TextureTable,\n geometries?: GeometryTable,\n): Uint32Array {\n const w = new Writer();\n geometries?.begin();\n // The node scopes the ops sit in (core puts the node id on a push's `key`).\n const scopes: string[] = [\"\"];\n const geometry = (g: Geometry3D, kind: string) => {\n if (!geometries) return writeGeometry(w, g, report);\n w.u(16);\n w.u(geometries.ref(g, scopes[scopes.length - 1], kind, report));\n };\n w.u(MAGIC);\n w.u(VERSION);\n\n const tone = scene.toneSettings();\n w.u(TONE[tone?.mapping ?? \"aces\"] ?? 4);\n w.f(tone?.exposure);\n const shadows = scene.shadowSettings();\n w.u(shadows?.enabled === true ? 1 : 0);\n w.u(shadows?.quality === \"low\" ? 0 : shadows?.quality === \"high\" ? 2 : 1);\n const fog = scene.fogDescriptor();\n w.u(!fog ? 0 : fog.density !== undefined ? 2 : 1);\n w.color(fog?.color);\n w.f(fog?.near);\n w.f(fog?.far);\n w.f(fog?.density);\n const env = scene.environmentDescriptor();\n w.u(env?.preset === \"studio\" ? 1 : 0);\n w.f(env?.intensity);\n w.u(env?.background ? 1 : 0);\n w.f(env?.blur);\n if (scene.postEffects().length > 0) report.unsupported.add(\"post\");\n\n const ops = scene.ops();\n w.u(ops.length);\n for (const op of ops) {\n switch (op.kind) {\n case \"push\": {\n const key = (op.transform as { key?: unknown } | undefined)?.key;\n scopes.push(key === undefined ? `${scopes[scopes.length - 1]}/${scopes.length}` : String(key));\n w.u(1); writeTransform(w, op.transform);\n break;\n }\n case \"pop\": if (scopes.length > 1) scopes.pop(); w.u(2); break;\n case \"light\":\n w.u(3); writeLight(w, op.light, op.transform);\n break;\n case \"camera\": w.u(4); writeCamera(w, op.camera); break;\n case \"mesh\": {\n w.u(5);\n geometry(op.geometry, op.kind);\n const list = Array.isArray(op.material) ? (op.material as readonly Material3D[]) : [op.material as Material3D];\n w.u(Array.isArray(op.material) ? list.length : 1);\n for (const m of list) writeMaterial(w, m, report, textures);\n writeTransform(w, op.transform);\n break;\n }\n case \"instances\": {\n w.u(6);\n geometry(op.geometry, op.kind);\n writeMaterial(w, op.material, report, textures);\n writeTransform(w, op.transform);\n w.u(op.instances.length);\n for (const t of op.instances) writeTransform(w, t);\n const colors = op.colors ?? [];\n w.u(colors.length);\n for (const c of colors) {\n const [r, g, b, a] = typeof c === \"string\" ? parseColor(c) : (c as readonly number[]);\n w.f(r); w.f(g); w.f(b); w.f(a ?? 1);\n }\n break;\n }\n case \"points\":\n w.u(7); geometry(op.geometry, op.kind); writeMaterial(w, op.material, report, textures);\n writeTransform(w, op.transform);\n break;\n case \"line\":\n w.u(8); geometry(op.geometry, op.kind); writeMaterial(w, op.material, report, textures);\n w.u(op.mode === \"segments\" ? 1 : op.mode === \"loop\" ? 2 : 0);\n writeTransform(w, op.transform);\n break;\n case \"sprite\":\n w.u(9); writeMaterial(w, op.material, report, textures); writeTransform(w, op.transform);\n break;\n case \"model\":\n report.unsupported.add(\"model\");\n w.u(10); writeTransform(w, op.transform);\n break;\n }\n }\n if (geometries) geometries.end(w);\n else w.u(0);\n return w.result();\n}\n", "/* @ts-self-types=\"./ms_renderer.d.ts\" */\n\nexport class MsText {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n MsTextFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_mstext_free(ptr, 0);\n }\n /**\n * Glyph outline → `[verbCount, verbs…, x0, y0, x1, y1, …]` in px, y down.\n * @param {number} font\n * @param {number} glyph\n * @param {number} size\n * @param {number} weight\n * @returns {Float32Array}\n */\n glyph_path(font, glyph, size, weight) {\n const ret = wasm.mstext_glyph_path(this.__wbg_ptr, font, glyph, size, weight);\n var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Paragraph layout in paragraph space; see [`encode`]. `align`: 0 left,\n * 1 right, 2 center, 3 justify, 4 start, 5 end. `max_width <= 0` = no wrap.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} line_height\n * @param {number} align\n * @param {number} max_width\n * @param {number} box_width\n * @returns {Float32Array}\n */\n layout(text, runs, families, line_height, align, max_width, box_width) {\n const val4 = +line_height;\n const val5 = +align;\n const val6 = +max_width;\n const val7 = +box_width;\n let ptr0, len0, ptr1, len1, ptr2, len2;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_layout(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val4, val5, val6, val7);\n var v8 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v8;\n }\n /**\n * `measureText` → `[width, height]`.\n * @param {string} text\n * @param {number} size\n * @param {string} family\n * @param {number} weight\n * @param {number} letter_spacing\n * @param {number} slant\n * @returns {Float32Array}\n */\n measure_text(text, size, family, weight, letter_spacing, slant) {\n const val3 = +size;\n const val4 = +weight;\n const val5 = +letter_spacing;\n const val6 = +slant;\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_measure_text(this.__wbg_ptr, ptr0, len0, val3, ptr1, len1, val4, val5, val6);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n constructor() {\n const ret = wasm.mstext_new();\n this.__wbg_ptr = ret;\n MsTextFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Registers font bytes under `family`; returns the font id, or -1.\n * @param {Uint8Array | number[]} bytes\n * @param {string} family\n * @returns {number}\n */\n register_font(bytes, family) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_register_font(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n return ret;\n }\n /**\n * @param {Uint32Array | number[]} ids\n */\n set_default_fallbacks(ids) {\n const ptr0 = passArray32ToWasm0(ids, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.mstext_set_default_fallbacks(this.__wbg_ptr, ptr0, len0);\n }\n /**\n * @param {string} family\n * @param {Uint32Array | number[]} ids\n */\n set_family_fallbacks(family, ids) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArray32ToWasm0(ids, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n wasm.mstext_set_family_fallbacks(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n }\n /**\n * `layoutTextBlock` → `[width, height, lineCount, per line: start, end,\n * top, bottom, caretCount, carets…]`, or empty for no layout.\n * `font_size` NaN = autofit. `valign`: 0 top, 1 center, 2 bottom.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} font_size\n * @param {number} min_font_size\n * @param {number} line_height\n * @param {number} align\n * @param {number} valign\n * @param {boolean} wrap\n * @param {number} width\n * @param {number} height\n * @returns {Float32Array}\n */\n text_block(text, runs, families, font_size, min_font_size, line_height, align, valign, wrap, width, height) {\n const val4 = +font_size;\n const val5 = +min_font_size;\n const val6 = +line_height;\n const val7 = +align;\n const val8 = +valign;\n const val9 = +wrap;\n const val10 = +width;\n const val11 = +height;\n let ptr0, len0, ptr1, len1, ptr2, len2;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_text_block(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val4, val5, val6, val7, val8, val9, val10, val11);\n var v12 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v12;\n }\n /**\n * Text on a path: shapes one unwrapped left-aligned line and places it\n * along `points` (a polyline, `[x0, y0, x1, y1, …]`) per `align`.\n * Returns 7 numbers per glyph: the glyph id, then its affine matrix\n * `[a, b, c, d, e, f]` (see `PlacedGlyph::matrix`). Newlines become\n * spaces; the whitespace around them is collapsed by the caller, since it\n * changes run lengths.\n * @param {string} text\n * @param {Float32Array | number[]} runs\n * @param {string} families\n * @param {number} line_height\n * @param {number} align\n * @param {Float32Array | number[]} points\n * @returns {Float32Array}\n */\n text_on_path(text, runs, families, line_height, align, points) {\n const val5 = +line_height;\n const val6 = +align;\n let ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passArrayF32ToWasm0(runs, wasm.__wbindgen_malloc);\n len1 = WASM_VECTOR_LEN;\n ptr2 = passStringToWasm0(families, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len2 = WASM_VECTOR_LEN;\n ptr3 = passArrayF32ToWasm0(points, wasm.__wbindgen_malloc);\n len3 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr3) { wasm.__wbindgen_free(ptr3, len3 * 4, 4); }\n if (ptr2) { wasm.__wbindgen_free(ptr2, len2 * 1, 1); }\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 4, 4); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.mstext_text_on_path(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2, val5, val6, ptr3, len3);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n}\nif (Symbol.dispose) MsText.prototype[Symbol.dispose] = MsText.prototype.free;\n\nexport class Renderer {\n static __wrap(ptr) {\n const obj = Object.create(Renderer.prototype);\n obj.__wbg_ptr = ptr;\n RendererFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n RendererFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_renderer_free(ptr, 0);\n }\n /**\n * @returns {string}\n */\n adapter_info() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.renderer_adapter_info(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * Applies the first `words` words of the delta buffer to the scene.\n * @param {number} words\n */\n apply(words) {\n const ret = wasm.renderer_apply(this.__wbg_ptr, words);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Creates a renderer drawing into an `HTMLCanvasElement` or `OffscreenCanvas`.\n * @param {any} canvas\n * @param {number} width\n * @param {number} height\n * @returns {Promise<Renderer>}\n */\n static create(canvas, width, height) {\n const ret = wasm.renderer_create(canvas, width, height);\n return ret;\n }\n /**\n * Pointer (byte offset into WASM memory) of a word buffer holding at least\n * `min_words` words. May reallocate, so callers re-read the pointer and\n * refresh their views after calling it.\n * @param {number} min_words\n * @returns {number}\n */\n delta_buffer(min_words) {\n const ret = wasm.renderer_delta_buffer(this.__wbg_ptr, min_words);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n delta_capacity() {\n const ret = wasm.renderer_delta_capacity(this.__wbg_ptr);\n return ret >>> 0;\n }\n /**\n * Names of the built-in effects, in `OP_EFFECTS` index order.\n * @returns {string[]}\n */\n effect_names() {\n const ret = wasm.renderer_effect_names(this.__wbg_ptr);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Drops the shared device and its pipelines, so the next `prewarm` or\n * `create` asks for a new one. For a host that learnt of a lost device\n * before wgpu's own callback ran.\n */\n static forget_device() {\n wasm.renderer_forget_device();\n }\n /**\n * @param {number} id\n */\n free_image(id) {\n wasm.renderer_free_image(this.__wbg_ptr, id);\n }\n /**\n * The `GPUDevice` this renderer draws with.\n * @returns {any}\n */\n gpu_device() {\n const ret = wasm.renderer_gpu_device(this.__wbg_ptr);\n return ret;\n }\n /**\n * Forces the next render to rebuild the frame program even if no delta\n * arrived, to measure the full CPU path.\n */\n invalidate() {\n wasm.renderer_invalidate(this.__wbg_ptr);\n }\n /**\n * core's `measureText`: `[width, height]`.\n * @param {string} text\n * @param {number} size\n * @param {string} family\n * @param {number} weight\n * @param {number} letter_spacing\n * @param {number} slant\n * @returns {Float32Array}\n */\n measure_text(text, size, family, weight, letter_spacing, slant) {\n const val3 = +size;\n const val4 = +weight;\n const val5 = +letter_spacing;\n const val6 = +slant;\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.renderer_measure_text(this.__wbg_ptr, ptr0, len0, val3, ptr1, len1, val4, val5, val6);\n var v7 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v7;\n }\n /**\n * Gets the GPU device every renderer on the page shares ready, ahead of the first `create`.\n * @returns {Promise<void>}\n */\n static prewarm() {\n const ret = wasm.renderer_prewarm();\n return ret;\n }\n /**\n * Renders the scene offscreen and resolves to RGBA8 pixels (row-major,\n * tightly packed). The promise yields a `Uint8Array`.\n * @returns {Promise<any>}\n */\n read_pixels() {\n const ret = wasm.renderer_read_pixels(this.__wbg_ptr);\n return ret;\n }\n /**\n * Registers font bytes under a family name; returns the font id, or\n * -1 if the bytes aren't a font.\n * @param {Uint8Array | number[]} bytes\n * @param {string} family\n * @returns {number}\n */\n register_font(bytes, family) {\n let ptr0, len0, ptr1, len1;\n try {\n ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_malloc);\n len0 = WASM_VECTOR_LEN;\n ptr1 = passStringToWasm0(family, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n len1 = WASM_VECTOR_LEN;\n } catch (e) {\n if (ptr1) { wasm.__wbindgen_free(ptr1, len1 * 1, 1); }\n if (ptr0) { wasm.__wbindgen_free(ptr0, len0 * 1, 1); }\n throw e;\n }\n const ret = wasm.renderer_register_font(this.__wbg_ptr, ptr0, len0, ptr1, len1);\n return ret;\n }\n /**\n * Renders the current scene to the canvas.\n */\n render() {\n const ret = wasm.renderer_render(this.__wbg_ptr);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {number} width\n * @param {number} height\n */\n resize(width, height) {\n wasm.renderer_resize(this.__wbg_ptr, width, height);\n }\n /**\n * Scene `scene`'s texture `tex` (an encoder texture id) is image\n * `image`: an uploaded image or a surface.\n * @param {number} scene\n * @param {number} tex\n * @param {number} image\n * @param {boolean} srgb\n */\n scene3d_bind(scene, tex, image, srgb) {\n wasm.renderer_scene3d_bind(this.__wbg_ptr, scene, tex, image, srgb);\n }\n /**\n * Scene `scene`'s texture `tex` from straight RGBA8 rows (a data texture).\n * @param {number} scene\n * @param {number} tex\n * @param {Uint8Array | number[]} rgba\n * @param {number} width\n * @param {number} height\n * @param {boolean} srgb\n */\n scene3d_pixels(scene, tex, rgba, width, height, srgb) {\n const val2 = +scene;\n const val3 = +tex;\n const val4 = +width;\n const val5 = +height;\n const val6 = +srgb;\n const ptr0 = passArray8ToWasm0(rgba, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.renderer_scene3d_pixels(this.__wbg_ptr, val2, val3, ptr0, len0, val4, val5, val6);\n }\n /**\n * What the last 3D scenes recorded that `ms-render3d` doesn't draw.\n * @param {number} id\n * @returns {string[]}\n */\n scene3d_skipped(id) {\n const ret = wasm.renderer_scene3d_skipped(this.__wbg_ptr, id);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * @param {boolean} linear\n * @param {boolean} dither\n */\n set_options(linear, dither) {\n wasm.renderer_set_options(this.__wbg_ptr, linear, dither);\n }\n /**\n * A 3D scene (the word stream `web/src/r3d/encode.ts` writes from\n * core's `Scene3D`) as image `id`, drawn at `width`×`height` px on\n * this renderer's device and sampled by image paints like any image.\n * @param {number} id\n * @param {number} width\n * @param {number} height\n * @param {Uint32Array | number[]} words\n */\n set_scene3d(id, width, height, words) {\n const val2 = +id;\n const val3 = +width;\n const val4 = +height;\n const ptr0 = passArray32ToWasm0(words, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.renderer_set_scene3d(this.__wbg_ptr, val2, val3, val4, ptr0, len0);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Image `id` is the 2D subtree under node `root` (a detached group),\n * drawn at `width`×`height` px whenever the scene changes: a\n * `Tex.surface` source for 3D maps, and an image for image paints.\n * @param {number} id\n * @param {number} root\n * @param {number} width\n * @param {number} height\n */\n set_surface(id, root, width, height) {\n wasm.renderer_set_surface(this.__wbg_ptr, id, root, width, height);\n }\n /**\n * Validates user shader `source` (`kind` 0 = fill, 1 = effect) and,\n * when valid, adds it as program `id` on this device. Its draws are\n * skipped until `shader_build`; the caller compiles the pipelines\n * asynchronously first (see `web/src/user-shaders.ts`). Returns the\n * report `validate_shader` does, as JSON.\n * @param {number} id\n * @param {number} kind\n * @param {string} source\n * @returns {string}\n */\n shader_add(id, kind, source) {\n let deferred4_0;\n let deferred4_1;\n try {\n const val2 = +id;\n const val3 = +kind;\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.renderer_shader_add(this.__wbg_ptr, val2, val3, ptr0, len0);\n deferred4_0 = ret[0];\n deferred4_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n }\n }\n /**\n * Creates program `id`'s pipelines; from the next render it draws.\n * @param {number} id\n */\n shader_build(id) {\n wasm.renderer_shader_build(this.__wbg_ptr, id);\n }\n /**\n * The output formats of a user program's pipelines, in order (WebGPU names).\n * @param {number} kind\n * @returns {string[]}\n */\n shader_formats(kind) {\n const ret = wasm.renderer_shader_formats(this.__wbg_ptr, kind);\n var v1 = getArrayJsValueFromWasm0(ret[0], ret[1]);\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * @param {number} id\n */\n shader_remove(id) {\n wasm.renderer_shader_remove(this.__wbg_ptr, id);\n }\n /**\n * [build ms, encode+submit ms, apply ms, prims, ops, layers, passes,\n * draws, culled, outlines built this frame, pool textures, pool MiB,\n * cached outline segments, prims reused from recorded subtrees,\n * prims left on the GPU from the previous build, 3D decode + set ms,\n * 3D draw CPU ms, 3D map refresh ms, surfaces redrawn, surfaces]\n * @returns {Float64Array}\n */\n stats() {\n const ret = wasm.renderer_stats(this.__wbg_ptr);\n var v1 = getArrayF64FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 8, 8);\n return v1;\n }\n /**\n * core's `layoutTextBlock` for a text node already in the scene, flat:\n * `[width, height, lineCount, then per line: start, end, top,\n * bottom, caretCount, carets…]`; empty when there is none.\n * @param {number} id\n * @returns {Float32Array}\n */\n text_block_layout(id) {\n const ret = wasm.renderer_text_block_layout(this.__wbg_ptr, id);\n var v1 = getArrayF32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v1;\n }\n /**\n * Uploads image `id` from an `ImageBitmap`, `VideoFrame`,\n * `HTMLImageElement`, `HTMLVideoElement`, `HTMLCanvasElement` or\n * `OffscreenCanvas` (a GPU copy). Call again with each new video\n * frame; the texture is reused. `mipmaps` for still images.\n * @param {number} id\n * @param {any} source\n * @param {boolean} mipmaps\n */\n upload_image(id, source, mipmaps) {\n const ret = wasm.renderer_upload_image(this.__wbg_ptr, id, source, mipmaps);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * Resolves once the GPU has finished all submitted work.\n * @returns {Promise<any>}\n */\n wait_gpu() {\n const ret = wasm.renderer_wait_gpu(this.__wbg_ptr);\n return ret;\n }\n}\nif (Symbol.dispose) Renderer.prototype[Symbol.dispose] = Renderer.prototype.free;\n\n/**\n * Called with the message when the renderer panics, just before the trap.\n * @param {Function | null} [listener]\n */\nexport function set_panic_listener(listener) {\n wasm.set_panic_listener(isLikeNone(listener) ? 0 : addToExternrefTable0(listener));\n}\n\n/**\n * `panic = \"abort\"` traps, and the instance is not safe to call again\n * (a `RefCell` may be left borrowed), so the host is told what happened\n * before the trap unwinds into whichever call it was. Unwinding on\n * wasm32 needs a nightly std.\n */\nexport function start() {\n wasm.start();\n}\n\n/**\n * Validates a user shader without a device: `kind` 0 = fill, 1 = effect.\n * JSON `{ ok, diagnostics: [{ line, column, length, message }], fields:\n * [{ name, offset, scalar, components, elements, stride, type }], size, wgsl }`;\n * `line` is 1-based in `source`, 0 for a problem outside it.\n * @param {number} kind\n * @param {string} source\n * @returns {string}\n */\nexport function validate_shader(kind, source) {\n let deferred3_0;\n let deferred3_1;\n try {\n const val2 = +kind;\n const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.validate_shader(val2, ptr0, len0);\n deferred3_0 = ret[0];\n deferred3_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);\n }\n}\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_208446807d0d1e30: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_Window_2805651c516cb7aa: function(arg0) {\n const ret = arg0.Window;\n return ret;\n },\n __wbg_WorkerGlobalScope_174390815d0a4893: function(arg0) {\n const ret = arg0.WorkerGlobalScope;\n return ret;\n },\n __wbg___wbindgen_debug_string_f249a2a76caa9a55: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_is_function_741ff2bb612836f5: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_c22311b1cc228e3a: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_string_fc456fee5d3317de: function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n },\n __wbg___wbindgen_is_undefined_be5b34249ff1fc15: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_throw_4c88d8bf264fd984: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg__wbg_cb_unref_09736879a3f67559: function(arg0) {\n arg0._wbg_cb_unref();\n },\n __wbg_beginRenderPass_597e3973321fd369: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.beginRenderPass(arg1);\n return ret;\n }, arguments); },\n __wbg_call_40b008ba32f73991: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_call_a410eb4b59ed5965: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_clearBuffer_3d5a3057c3c8a9bf: function(arg0, arg1, arg2, arg3) {\n arg0.clearBuffer(arg1, arg2, arg3);\n },\n __wbg_clearBuffer_82ba999c294f42fb: function(arg0, arg1, arg2) {\n arg0.clearBuffer(arg1, arg2);\n },\n __wbg_configure_8e04ab1a867d31e1: function() { return handleError(function (arg0, arg1) {\n arg0.configure(arg1);\n }, arguments); },\n __wbg_copyExternalImageToTexture_9d1383f644366eae: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n arg0.copyExternalImageToTexture(arg1, arg2, arg3);\n }, arguments); },\n __wbg_copyTextureToBuffer_2a1eda98bb347f8c: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n arg0.copyTextureToBuffer(arg1, arg2, arg3);\n }, arguments); },\n __wbg_createBindGroupLayout_5699617270d84042: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createBindGroupLayout(arg1);\n return ret;\n }, arguments); },\n __wbg_createBindGroup_f539b26ca341308f: function(arg0, arg1) {\n const ret = arg0.createBindGroup(arg1);\n return ret;\n },\n __wbg_createBuffer_b8c5b520d2c822b8: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createBuffer(arg1);\n return ret;\n }, arguments); },\n __wbg_createCommandEncoder_3352d1ffc36c6fc0: function(arg0, arg1) {\n const ret = arg0.createCommandEncoder(arg1);\n return ret;\n },\n __wbg_createPipelineLayout_6eab52c327118937: function(arg0, arg1) {\n const ret = arg0.createPipelineLayout(arg1);\n return ret;\n },\n __wbg_createRenderPipeline_58390ba302107691: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createRenderPipeline(arg1);\n return ret;\n }, arguments); },\n __wbg_createSampler_9bd91d7e928c0060: function(arg0, arg1) {\n const ret = arg0.createSampler(arg1);\n return ret;\n },\n __wbg_createShaderModule_cefa51336cb288ae: function(arg0, arg1) {\n const ret = arg0.createShaderModule(arg1);\n return ret;\n },\n __wbg_createTexture_2c95e64f50008aea: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createTexture(arg1);\n return ret;\n }, arguments); },\n __wbg_createView_96e5e405cc3c01e8: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.createView(arg1);\n return ret;\n }, arguments); },\n __wbg_description_7a568e202a00293f: function(arg0, arg1) {\n const ret = arg1.description;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_destroy_249478e98a7943d5: function(arg0) {\n arg0.destroy();\n },\n __wbg_destroy_637537007d9eaa44: function(arg0) {\n arg0.destroy();\n },\n __wbg_displayHeight_fb2700c23cca6739: function(arg0) {\n const ret = arg0.displayHeight;\n return ret;\n },\n __wbg_displayWidth_9e9d6031a3036613: function(arg0) {\n const ret = arg0.displayWidth;\n return ret;\n },\n __wbg_document_3b5c3071b43e97ee: function(arg0) {\n const ret = arg0.document;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_drawIndexed_638959aae942557c: function(arg0, arg1, arg2, arg3, arg4, arg5) {\n arg0.drawIndexed(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4, arg5 >>> 0);\n },\n __wbg_draw_086a9578fc9898c2: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.draw(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);\n },\n __wbg_end_b57473834b877409: function(arg0) {\n arg0.end();\n },\n __wbg_error_757e9472f8410341: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_finish_09ec094c10f41e7b: function(arg0) {\n const ret = arg0.finish();\n return ret;\n },\n __wbg_finish_ec1c191f66a895b1: function(arg0, arg1) {\n const ret = arg0.finish(arg1);\n return ret;\n },\n __wbg_getContext_1938edb9a972f63d: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n }, arguments); },\n __wbg_getContext_d93f904b714852ae: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n }, arguments); },\n __wbg_getCurrentTexture_c3b1727224d7f6e6: function() { return handleError(function (arg0) {\n const ret = arg0.getCurrentTexture();\n return ret;\n }, arguments); },\n __wbg_getMappedRange_28e816a763520e01: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getMappedRange(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_getPreferredCanvasFormat_0ef5034c8902201b: function(arg0) {\n const ret = arg0.getPreferredCanvasFormat();\n return (__wbindgen_enum_GpuTextureFormat.indexOf(ret) + 1 || 102) - 1;\n },\n __wbg_get_0c55869fe53c7d14: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_gpu_514705c6dd1f0dab: function(arg0) {\n const ret = arg0.gpu;\n return ret;\n },\n __wbg_height_a587c99454238459: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_height_a6466ebf29036658: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_height_ac6f1c3f49c13fe2: function(arg0) {\n const ret = arg0.height;\n return ret;\n },\n __wbg_info_8554cb7af37427b6: function(arg0) {\n const ret = arg0.info;\n return ret;\n },\n __wbg_instanceof_HtmlCanvasElement_89f280683e987b9e: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLCanvasElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_HtmlImageElement_f22acd64d72ae23a: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLImageElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_HtmlVideoElement_64f13b58baf30810: function(arg0) {\n let result;\n try {\n result = arg0 instanceof HTMLVideoElement;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_ImageBitmap_536fdba57df2c6ac: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ImageBitmap;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_OffscreenCanvas_fcf6ec01367f54ec: function(arg0) {\n let result;\n try {\n result = arg0 instanceof OffscreenCanvas;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_VideoFrame_cd5d3aac6098cfc2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof VideoFrame;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Window_5cf453f5639aa1a2: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isFallbackAdapter_6a4fa7356d18310b: function(arg0) {\n const ret = arg0.isFallbackAdapter;\n return ret;\n },\n __wbg_label_fceb40a43a358e62: function(arg0, arg1) {\n const ret = arg1.label;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_length_186163212ffe79c3: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_limits_4e444eb8c2e61c45: function(arg0) {\n const ret = arg0.limits;\n return ret;\n },\n __wbg_limits_98515cc885d709ef: function(arg0) {\n const ret = arg0.limits;\n return ret;\n },\n __wbg_lost_25273dba897db03c: function(arg0) {\n const ret = arg0.lost;\n return ret;\n },\n __wbg_mapAsync_b0597127f5037286: function(arg0, arg1, arg2, arg3) {\n const ret = arg0.mapAsync(arg1 >>> 0, arg2, arg3);\n return ret;\n },\n __wbg_maxBindGroupsPlusVertexBuffers_1face4afb5363937: function(arg0) {\n const ret = arg0.maxBindGroupsPlusVertexBuffers;\n return ret;\n },\n __wbg_maxBindGroups_a0b7e55762f095b9: function(arg0) {\n const ret = arg0.maxBindGroups;\n return ret;\n },\n __wbg_maxBindingsPerBindGroup_ec9067be38d6ec72: function(arg0) {\n const ret = arg0.maxBindingsPerBindGroup;\n return ret;\n },\n __wbg_maxBufferSize_a9ce15e541c64cd2: function(arg0) {\n const ret = arg0.maxBufferSize;\n return ret;\n },\n __wbg_maxColorAttachmentBytesPerSample_44089e129e1a2a1d: function(arg0) {\n const ret = arg0.maxColorAttachmentBytesPerSample;\n return ret;\n },\n __wbg_maxColorAttachments_6bd8156394ba618c: function(arg0) {\n const ret = arg0.maxColorAttachments;\n return ret;\n },\n __wbg_maxComputeInvocationsPerWorkgroup_7b086f15ef868934: function(arg0) {\n const ret = arg0.maxComputeInvocationsPerWorkgroup;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeX_8bbe505e0ac8dc18: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeX;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeY_7228ed3935eecc31: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeY;\n return ret;\n },\n __wbg_maxComputeWorkgroupSizeZ_6092b56a967f6f8d: function(arg0) {\n const ret = arg0.maxComputeWorkgroupSizeZ;\n return ret;\n },\n __wbg_maxComputeWorkgroupStorageSize_4773e3bd3936df36: function(arg0) {\n const ret = arg0.maxComputeWorkgroupStorageSize;\n return ret;\n },\n __wbg_maxComputeWorkgroupsPerDimension_79222bf8e8a90fbd: function(arg0) {\n const ret = arg0.maxComputeWorkgroupsPerDimension;\n return ret;\n },\n __wbg_maxDynamicStorageBuffersPerPipelineLayout_3ab5762b1b2c7fc2: function(arg0) {\n const ret = arg0.maxDynamicStorageBuffersPerPipelineLayout;\n return ret;\n },\n __wbg_maxDynamicUniformBuffersPerPipelineLayout_722da31d0de1c256: function(arg0) {\n const ret = arg0.maxDynamicUniformBuffersPerPipelineLayout;\n return ret;\n },\n __wbg_maxInterStageShaderVariables_821096d4b3020715: function(arg0) {\n const ret = arg0.maxInterStageShaderVariables;\n return ret;\n },\n __wbg_maxSampledTexturesPerShaderStage_c6aea9e05c0a02ca: function(arg0) {\n const ret = arg0.maxSampledTexturesPerShaderStage;\n return ret;\n },\n __wbg_maxSamplersPerShaderStage_3aa30f6c002d3a99: function(arg0) {\n const ret = arg0.maxSamplersPerShaderStage;\n return ret;\n },\n __wbg_maxStorageBufferBindingSize_84a2c2433627fca2: function(arg0) {\n const ret = arg0.maxStorageBufferBindingSize;\n return ret;\n },\n __wbg_maxStorageBuffersPerShaderStage_25b96748df28dc20: function(arg0) {\n const ret = arg0.maxStorageBuffersPerShaderStage;\n return ret;\n },\n __wbg_maxStorageTexturesPerShaderStage_53ed734f26e6c1ad: function(arg0) {\n const ret = arg0.maxStorageTexturesPerShaderStage;\n return ret;\n },\n __wbg_maxTextureArrayLayers_9ec487f1ce102992: function(arg0) {\n const ret = arg0.maxTextureArrayLayers;\n return ret;\n },\n __wbg_maxTextureDimension1D_faef91b2e9fa6740: function(arg0) {\n const ret = arg0.maxTextureDimension1D;\n return ret;\n },\n __wbg_maxTextureDimension2D_3a923eb2df4d9124: function(arg0) {\n const ret = arg0.maxTextureDimension2D;\n return ret;\n },\n __wbg_maxTextureDimension3D_943321fe5945464e: function(arg0) {\n const ret = arg0.maxTextureDimension3D;\n return ret;\n },\n __wbg_maxUniformBufferBindingSize_21e89ff761d576db: function(arg0) {\n const ret = arg0.maxUniformBufferBindingSize;\n return ret;\n },\n __wbg_maxUniformBuffersPerShaderStage_19a0bfb0189f7254: function(arg0) {\n const ret = arg0.maxUniformBuffersPerShaderStage;\n return ret;\n },\n __wbg_maxVertexAttributes_49aef6c51d07a280: function(arg0) {\n const ret = arg0.maxVertexAttributes;\n return ret;\n },\n __wbg_maxVertexBufferArrayStride_f68c4029e6f047ec: function(arg0) {\n const ret = arg0.maxVertexBufferArrayStride;\n return ret;\n },\n __wbg_maxVertexBuffers_ce9f15a623f9aac7: function(arg0) {\n const ret = arg0.maxVertexBuffers;\n return ret;\n },\n __wbg_message_5223ba7df7256eac: function(arg0, arg1) {\n const ret = arg1.message;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_minStorageBufferOffsetAlignment_529f1f52e61188fc: function(arg0) {\n const ret = arg0.minStorageBufferOffsetAlignment;\n return ret;\n },\n __wbg_minUniformBufferOffsetAlignment_519e26287e1996a3: function(arg0) {\n const ret = arg0.minUniformBufferOffsetAlignment;\n return ret;\n },\n __wbg_naturalHeight_fb7d27a9642e796c: function(arg0) {\n const ret = arg0.naturalHeight;\n return ret;\n },\n __wbg_naturalWidth_c3b5a9ac32cd185e: function(arg0) {\n const ret = arg0.naturalWidth;\n return ret;\n },\n __wbg_navigator_9641ab32fa612dd1: function(arg0) {\n const ret = arg0.navigator;\n return ret;\n },\n __wbg_navigator_c17f443a6fe5d38d: function(arg0) {\n const ret = arg0.navigator;\n return ret;\n },\n __wbg_new_2bfd0f45e60518b1: function() { return handleError(function (arg0, arg1) {\n const ret = new OffscreenCanvas(arg0 >>> 0, arg1 >>> 0);\n return ret;\n }, arguments); },\n __wbg_new_ba40181b3f24ac80: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = 0;\n }\n },\n __wbg_new_bb74001155cb8ca8: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_cd4348290afae586: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_typed_6b60b99917da27d6: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_typed_e09da9dae6ee5935: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = 0;\n }\n },\n __wbg_new_with_byte_offset_and_length_3cd32055a417f095: function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n },\n __wbg_new_with_length_01b143a7e5dd5a3e: function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n },\n __wbg_now_84237b99fa85a391: function() {\n const ret = performance.now();\n return ret;\n },\n __wbg_onSubmittedWorkDone_1190213cee1ecf7e: function(arg0) {\n const ret = arg0.onSubmittedWorkDone();\n return ret;\n },\n __wbg_prototypesetcall_13162965d1fe7aa3: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_querySelectorAll_6c1bd81d448fb480: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.querySelectorAll(getStringFromWasm0(arg1, arg2));\n return ret;\n }, arguments); },\n __wbg_queueMicrotask_1e8503a8a690f0a3: function(arg0) {\n const ret = arg0.queueMicrotask;\n return ret;\n },\n __wbg_queueMicrotask_4a1a4d8dd332373b: function(arg0) {\n queueMicrotask(arg0);\n },\n __wbg_queue_e250e2ebc49b39e0: function(arg0) {\n const ret = arg0.queue;\n return ret;\n },\n __wbg_reason_53e762e714b67b72: function(arg0) {\n const ret = arg0.reason;\n return (__wbindgen_enum_GpuDeviceLostReason.indexOf(ret) + 1 || 3) - 1;\n },\n __wbg_renderer_new: function(arg0) {\n const ret = Renderer.__wrap(arg0);\n return ret;\n },\n __wbg_requestAdapter_a539af006419f2e9: function(arg0, arg1) {\n const ret = arg0.requestAdapter(arg1);\n return ret;\n },\n __wbg_requestDevice_5cb8a582e55d08cb: function(arg0, arg1) {\n const ret = arg0.requestDevice(arg1);\n return ret;\n },\n __wbg_resolve_dbf78ab4942478b0: function(arg0) {\n const ret = Promise.resolve(arg0);\n return ret;\n },\n __wbg_setBindGroup_418c3e0eb6943ce0: function(arg0, arg1, arg2) {\n arg0.setBindGroup(arg1 >>> 0, arg2);\n },\n __wbg_setBindGroup_82d014e8f799f053: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.setBindGroup(arg1 >>> 0, arg2, getArrayU32FromWasm0(arg3, arg4), arg5, arg6 >>> 0);\n }, arguments); },\n __wbg_setIndexBuffer_241097e303986c14: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setIndexBuffer(arg1, __wbindgen_enum_GpuIndexFormat[arg2], arg3, arg4);\n },\n __wbg_setPipeline_b6f981027e02cd16: function(arg0, arg1) {\n arg0.setPipeline(arg1);\n },\n __wbg_setScissorRect_889235eeb784732b: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setScissorRect(arg1 >>> 0, arg2 >>> 0, arg3 >>> 0, arg4 >>> 0);\n },\n __wbg_setVertexBuffer_6db3b60e99280744: function(arg0, arg1, arg2, arg3) {\n arg0.setVertexBuffer(arg1 >>> 0, arg2, arg3);\n },\n __wbg_setVertexBuffer_cbf4ca1627c02f4c: function(arg0, arg1, arg2, arg3, arg4) {\n arg0.setVertexBuffer(arg1 >>> 0, arg2, arg3, arg4);\n },\n __wbg_setViewport_c0be08dcc8965ccf: function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.setViewport(arg1, arg2, arg3, arg4, arg5, arg6);\n },\n __wbg_set_118fefd528ab0a79: function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n },\n __wbg_set_2793479888329cb6: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_set_a_1c94f1413a06c773: function(arg0, arg1) {\n arg0.a = arg1;\n },\n __wbg_set_access_b0a6fbebfbe53242: function(arg0, arg1) {\n arg0.access = __wbindgen_enum_GpuStorageTextureAccess[arg1];\n },\n __wbg_set_address_mode_u_a39aefdf030758ae: function(arg0, arg1) {\n arg0.addressModeU = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_address_mode_v_999ec6ed4d587e8c: function(arg0, arg1) {\n arg0.addressModeV = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_address_mode_w_a936c884ccf08234: function(arg0, arg1) {\n arg0.addressModeW = __wbindgen_enum_GpuAddressMode[arg1];\n },\n __wbg_set_alpha_84214d12347c6647: function(arg0, arg1) {\n arg0.alpha = arg1;\n },\n __wbg_set_alpha_mode_278c6649365aff36: function(arg0, arg1) {\n arg0.alphaMode = __wbindgen_enum_GpuCanvasAlphaMode[arg1];\n },\n __wbg_set_alpha_to_coverage_enabled_1e879520cab4bb05: function(arg0, arg1) {\n arg0.alphaToCoverageEnabled = arg1 !== 0;\n },\n __wbg_set_array_layer_count_bd7a074559a0abaa: function(arg0, arg1) {\n arg0.arrayLayerCount = arg1 >>> 0;\n },\n __wbg_set_array_stride_f64_b132c6a79afeae43: function(arg0, arg1) {\n arg0.arrayStride = arg1;\n },\n __wbg_set_aspect_1db857832468d61f: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_aspect_3b0dceed92671cc1: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_aspect_8c866a3891032753: function(arg0, arg1) {\n arg0.aspect = __wbindgen_enum_GpuTextureAspect[arg1];\n },\n __wbg_set_attributes_67bbc44b08e038d6: function(arg0, arg1, arg2) {\n arg0.attributes = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_b_a93bcfdd1c29a0bd: function(arg0, arg1) {\n arg0.b = arg1;\n },\n __wbg_set_base_array_layer_e745f84c2e5437e2: function(arg0, arg1) {\n arg0.baseArrayLayer = arg1 >>> 0;\n },\n __wbg_set_base_mip_level_fe08854fab09de85: function(arg0, arg1) {\n arg0.baseMipLevel = arg1 >>> 0;\n },\n __wbg_set_beginning_of_pass_write_index_a13b608f19d6a2f0: function(arg0, arg1) {\n arg0.beginningOfPassWriteIndex = arg1 >>> 0;\n },\n __wbg_set_bind_group_layouts_383f681565a30d8a: function(arg0, arg1, arg2) {\n arg0.bindGroupLayouts = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_binding_bd7d6b01bb08823a: function(arg0, arg1) {\n arg0.binding = arg1 >>> 0;\n },\n __wbg_set_binding_dbed4a234264971a: function(arg0, arg1) {\n arg0.binding = arg1 >>> 0;\n },\n __wbg_set_blend_1f3e5b36f9c246cb: function(arg0, arg1) {\n arg0.blend = arg1;\n },\n __wbg_set_buffer_292fb3c30928dc50: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffer_76841cdbff393f1d: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffer_91f4e8e05066c37a: function(arg0, arg1) {\n arg0.buffer = arg1;\n },\n __wbg_set_buffers_47665c552e27672c: function(arg0, arg1, arg2) {\n arg0.buffers = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_bytes_per_row_4ef9c2c51932b041: function(arg0, arg1) {\n arg0.bytesPerRow = arg1 >>> 0;\n },\n __wbg_set_bytes_per_row_75441352f606ebc8: function(arg0, arg1) {\n arg0.bytesPerRow = arg1 >>> 0;\n },\n __wbg_set_clear_value_gpu_color_dict_303e0009591e5d26: function(arg0, arg1) {\n arg0.clearValue = arg1;\n },\n __wbg_set_code_130aebc49c4cadd3: function(arg0, arg1, arg2) {\n arg0.code = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_color_6d2de56a2224ec57: function(arg0, arg1) {\n arg0.color = arg1;\n },\n __wbg_set_color_attachments_e83f79badceda8b4: function(arg0, arg1, arg2) {\n arg0.colorAttachments = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_compare_159af15eb77dbcd2: function(arg0, arg1) {\n arg0.compare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_compare_4db27ced1edc0322: function(arg0, arg1) {\n arg0.compare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_count_4d1e9559a7f1b993: function(arg0, arg1) {\n arg0.count = arg1 >>> 0;\n },\n __wbg_set_cull_mode_31293d13bc064271: function(arg0, arg1) {\n arg0.cullMode = __wbindgen_enum_GpuCullMode[arg1];\n },\n __wbg_set_depth_bias_b30728f3ab3f643e: function(arg0, arg1) {\n arg0.depthBias = arg1;\n },\n __wbg_set_depth_bias_clamp_5b58fd4819283038: function(arg0, arg1) {\n arg0.depthBiasClamp = arg1;\n },\n __wbg_set_depth_bias_slope_scale_8b8b20db6b43c43b: function(arg0, arg1) {\n arg0.depthBiasSlopeScale = arg1;\n },\n __wbg_set_depth_clear_value_1165941523836019: function(arg0, arg1) {\n arg0.depthClearValue = arg1;\n },\n __wbg_set_depth_compare_81dd71de7e433cc2: function(arg0, arg1) {\n arg0.depthCompare = __wbindgen_enum_GpuCompareFunction[arg1];\n },\n __wbg_set_depth_fail_op_ddf822c573cdf0c1: function(arg0, arg1) {\n arg0.depthFailOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_depth_load_op_ca270acab0c1ca69: function(arg0, arg1) {\n arg0.depthLoadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_depth_or_array_layers_e59f3988a095ccac: function(arg0, arg1) {\n arg0.depthOrArrayLayers = arg1 >>> 0;\n },\n __wbg_set_depth_read_only_49ca399f98b97955: function(arg0, arg1) {\n arg0.depthReadOnly = arg1 !== 0;\n },\n __wbg_set_depth_stencil_41e94739225cb2c3: function(arg0, arg1) {\n arg0.depthStencil = arg1;\n },\n __wbg_set_depth_stencil_attachment_36ce3695dfcb6b85: function(arg0, arg1) {\n arg0.depthStencilAttachment = arg1;\n },\n __wbg_set_depth_store_op_6cd6bdde49f9050d: function(arg0, arg1) {\n arg0.depthStoreOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_depth_write_enabled_4b5da11c77fbdab7: function(arg0, arg1) {\n arg0.depthWriteEnabled = arg1 !== 0;\n },\n __wbg_set_device_1940fd5f9e2a7fee: function(arg0, arg1) {\n arg0.device = arg1;\n },\n __wbg_set_dimension_88d0c9f16bb079fb: function(arg0, arg1) {\n arg0.dimension = __wbindgen_enum_GpuTextureDimension[arg1];\n },\n __wbg_set_dimension_bab9530fa3e311d8: function(arg0, arg1) {\n arg0.dimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_dst_factor_80c13f29a3e117cb: function(arg0, arg1) {\n arg0.dstFactor = __wbindgen_enum_GpuBlendFactor[arg1];\n },\n __wbg_set_end_of_pass_write_index_793fcfe3141dc357: function(arg0, arg1) {\n arg0.endOfPassWriteIndex = arg1 >>> 0;\n },\n __wbg_set_entries_552f52b2aa3b346d: function(arg0, arg1, arg2) {\n arg0.entries = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_entries_d9929dbfa2aaa9a7: function(arg0, arg1, arg2) {\n arg0.entries = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_entry_point_0eacf7b26b3637b0: function(arg0, arg1, arg2) {\n arg0.entryPoint = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_entry_point_bb3692db4a6065d0: function(arg0, arg1, arg2) {\n arg0.entryPoint = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_external_texture_1bef5ba626275d0a: function(arg0, arg1) {\n arg0.externalTexture = arg1;\n },\n __wbg_set_fail_op_739cc3815d38c95f: function(arg0, arg1) {\n arg0.failOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_feb3714f475485ba: function(arg0, arg1, arg2) {\n arg0.set(getArrayU8FromWasm0(arg1, arg2));\n },\n __wbg_set_flip_y_ab62f34abbe69be1: function(arg0, arg1) {\n arg0.flipY = arg1 !== 0;\n },\n __wbg_set_format_1119b9930bd324e1: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_443ea19e2d25a1e2: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_459792306baadae5: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_46b1c6b3acc10b24: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_5a62f31a4690f935: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuVertexFormat[arg1];\n },\n __wbg_set_format_efec4f7d9471ddbb: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_format_fd579d96fa4e468c: function(arg0, arg1) {\n arg0.format = __wbindgen_enum_GpuTextureFormat[arg1];\n },\n __wbg_set_fragment_bea523f8973c326e: function(arg0, arg1) {\n arg0.fragment = arg1;\n },\n __wbg_set_front_face_30951d0404e9e6d4: function(arg0, arg1) {\n arg0.frontFace = __wbindgen_enum_GpuFrontFace[arg1];\n },\n __wbg_set_g_90eacc6608e549f8: function(arg0, arg1) {\n arg0.g = arg1;\n },\n __wbg_set_has_dynamic_offset_6e5f3385eb579529: function(arg0, arg1) {\n arg0.hasDynamicOffset = arg1 !== 0;\n },\n __wbg_set_height_3f64e19acf29f5fb: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_height_ae0610d318c3428c: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_height_ae24c2f7d580ae0a: function(arg0, arg1) {\n arg0.height = arg1 >>> 0;\n },\n __wbg_set_label_08745022b1ec7b66: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_11c9eb57693a8459: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_20c42b4ebeb250d5: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_22e3966c8d513ba6: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_5347fc976d15e94c: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_644bc1b32c7917b0: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_73c99dab6708c962: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_85a21b5fdd57fd91: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_89d2ffaf598df6a4: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_9e68078b9533426b: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_a80ced9a51c33d0f: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_cba03ffef7ae90a3: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_label_f654bcb731d4d9ca: function(arg0, arg1, arg2) {\n arg0.label = getStringFromWasm0(arg1, arg2);\n },\n __wbg_set_layout_200fc3b143da0a9e: function(arg0, arg1) {\n arg0.layout = arg1;\n },\n __wbg_set_layout_3f0cb99635c33123: function(arg0, arg1) {\n arg0.layout = arg1;\n },\n __wbg_set_layout_gpu_auto_layout_mode_2e8a53f8643b4f69: function(arg0, arg1) {\n arg0.layout = __wbindgen_enum_GpuAutoLayoutMode[arg1];\n },\n __wbg_set_load_op_e8c33d4bdd2772aa: function(arg0, arg1) {\n arg0.loadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_lod_max_clamp_fcbef26e87120fac: function(arg0, arg1) {\n arg0.lodMaxClamp = arg1;\n },\n __wbg_set_lod_min_clamp_f5b6ddca1e4d813f: function(arg0, arg1) {\n arg0.lodMinClamp = arg1;\n },\n __wbg_set_mag_filter_ba0a2f25ad41eea8: function(arg0, arg1) {\n arg0.magFilter = __wbindgen_enum_GpuFilterMode[arg1];\n },\n __wbg_set_mapped_at_creation_8af5b87ccb898bbe: function(arg0, arg1) {\n arg0.mappedAtCreation = arg1 !== 0;\n },\n __wbg_set_mask_0de0e782abec3c25: function(arg0, arg1) {\n arg0.mask = arg1 >>> 0;\n },\n __wbg_set_max_anisotropy_8361213d3df93532: function(arg0, arg1) {\n arg0.maxAnisotropy = arg1;\n },\n __wbg_set_min_binding_size_f64_c6d68d773b7051d3: function(arg0, arg1) {\n arg0.minBindingSize = arg1;\n },\n __wbg_set_min_filter_8aa8b0f7523a0281: function(arg0, arg1) {\n arg0.minFilter = __wbindgen_enum_GpuFilterMode[arg1];\n },\n __wbg_set_mip_level_102afeb158e4f728: function(arg0, arg1) {\n arg0.mipLevel = arg1 >>> 0;\n },\n __wbg_set_mip_level_count_c0ac46de264d83ec: function(arg0, arg1) {\n arg0.mipLevelCount = arg1 >>> 0;\n },\n __wbg_set_mip_level_count_cd650972803ed9eb: function(arg0, arg1) {\n arg0.mipLevelCount = arg1 >>> 0;\n },\n __wbg_set_mip_level_f0c5ed95eedda453: function(arg0, arg1) {\n arg0.mipLevel = arg1 >>> 0;\n },\n __wbg_set_mipmap_filter_1cbdec28d1b54d9d: function(arg0, arg1) {\n arg0.mipmapFilter = __wbindgen_enum_GpuMipmapFilterMode[arg1];\n },\n __wbg_set_mode_51d2c5a5ac0f7ac9: function(arg0, arg1) {\n arg0.mode = __wbindgen_enum_GpuCanvasToneMappingMode[arg1];\n },\n __wbg_set_module_3dec1a50bca7870a: function(arg0, arg1) {\n arg0.module = arg1;\n },\n __wbg_set_module_b42baf3925e2a94a: function(arg0, arg1) {\n arg0.module = arg1;\n },\n __wbg_set_multisample_6af76792fae6efb1: function(arg0, arg1) {\n arg0.multisample = arg1;\n },\n __wbg_set_multisampled_ae3f9f01a324f57c: function(arg0, arg1) {\n arg0.multisampled = arg1 !== 0;\n },\n __wbg_set_offset_f64_15176b737de7dde0: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_18de9c771f307302: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_52f728fc5c98a52c: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_offset_f64_9374d9e912985773: function(arg0, arg1) {\n arg0.offset = arg1;\n },\n __wbg_set_operation_e103287df7ac9cf6: function(arg0, arg1) {\n arg0.operation = __wbindgen_enum_GpuBlendOperation[arg1];\n },\n __wbg_set_origin_gpu_origin_2d_dict_0e541bd50713ae04: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_origin_gpu_origin_3d_dict_26016670147a706c: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_origin_gpu_origin_3d_dict_4e6802818d9d43c7: function(arg0, arg1) {\n arg0.origin = arg1;\n },\n __wbg_set_pass_op_4d08c3105f64a17a: function(arg0, arg1) {\n arg0.passOp = __wbindgen_enum_GpuStencilOperation[arg1];\n },\n __wbg_set_power_preference_6bc1d2697a0e7374: function(arg0, arg1) {\n arg0.powerPreference = __wbindgen_enum_GpuPowerPreference[arg1];\n },\n __wbg_set_premultiplied_alpha_3625f78af5f2fed6: function(arg0, arg1) {\n arg0.premultipliedAlpha = arg1 !== 0;\n },\n __wbg_set_primitive_ef867d733c4efb1c: function(arg0, arg1) {\n arg0.primitive = arg1;\n },\n __wbg_set_query_set_765c4c9ab99342cb: function(arg0, arg1) {\n arg0.querySet = arg1;\n },\n __wbg_set_r_1116d6a5f656263d: function(arg0, arg1) {\n arg0.r = arg1;\n },\n __wbg_set_required_features_5bda1420e19461b2: function(arg0, arg1, arg2) {\n arg0.requiredFeatures = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_required_limits_e78b923d73f9b596: function(arg0, arg1) {\n arg0.requiredLimits = arg1;\n },\n __wbg_set_resolve_target_gpu_texture_view_a7a97a7c04d84698: function(arg0, arg1) {\n arg0.resolveTarget = arg1;\n },\n __wbg_set_resource_0f960a4279e7e400: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_resource_gpu_buffer_binding_53a2189a77dd38be: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_resource_gpu_texture_view_9153a2356b958667: function(arg0, arg1) {\n arg0.resource = arg1;\n },\n __wbg_set_rows_per_image_11e9552fb5c5c5ab: function(arg0, arg1) {\n arg0.rowsPerImage = arg1 >>> 0;\n },\n __wbg_set_rows_per_image_df6af33a5492c1cf: function(arg0, arg1) {\n arg0.rowsPerImage = arg1 >>> 0;\n },\n __wbg_set_sample_count_8262aacc91878e4d: function(arg0, arg1) {\n arg0.sampleCount = arg1 >>> 0;\n },\n __wbg_set_sample_type_563589178fc892fe: function(arg0, arg1) {\n arg0.sampleType = __wbindgen_enum_GpuTextureSampleType[arg1];\n },\n __wbg_set_sampler_ccdca76ef8e642ca: function(arg0, arg1) {\n arg0.sampler = arg1;\n },\n __wbg_set_shader_location_31dc427c303a32aa: function(arg0, arg1) {\n arg0.shaderLocation = arg1 >>> 0;\n },\n __wbg_set_size_f64_3ff72c0d736c42a1: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_size_f64_9b65e4916b2eb111: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_size_gpu_extent_3d_dict_bba6669c79c26190: function(arg0, arg1) {\n arg0.size = arg1;\n },\n __wbg_set_source_b5f82926b86ec9d9: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_canvas_element_a9840c24a328a44e: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_image_element_b2803013cdaaa4f6: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_html_video_element_9fd22376f74c9aff: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_image_data_2d6a4979315db9d8: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_offscreen_canvas_ef8e002b1f9c1fd8: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_source_video_frame_e98ea9a6467ae147: function(arg0, arg1) {\n arg0.source = arg1;\n },\n __wbg_set_src_factor_7e90d4b7d8227fc5: function(arg0, arg1) {\n arg0.srcFactor = __wbindgen_enum_GpuBlendFactor[arg1];\n },\n __wbg_set_stencil_back_6b5aeefbb90ae3ae: function(arg0, arg1) {\n arg0.stencilBack = arg1;\n },\n __wbg_set_stencil_clear_value_56fa848198a9b430: function(arg0, arg1) {\n arg0.stencilClearValue = arg1 >>> 0;\n },\n __wbg_set_stencil_front_4ffeca9473bca095: function(arg0, arg1) {\n arg0.stencilFront = arg1;\n },\n __wbg_set_stencil_load_op_b7a9fe3ad789b6c6: function(arg0, arg1) {\n arg0.stencilLoadOp = __wbindgen_enum_GpuLoadOp[arg1];\n },\n __wbg_set_stencil_read_mask_7cfe0945679de134: function(arg0, arg1) {\n arg0.stencilReadMask = arg1 >>> 0;\n },\n __wbg_set_stencil_read_only_0dde0c073192b5fa: function(arg0, arg1) {\n arg0.stencilReadOnly = arg1 !== 0;\n },\n __wbg_set_stencil_store_op_d320bcbb72456a4c: function(arg0, arg1) {\n arg0.stencilStoreOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_stencil_write_mask_765017d5830ee98a: function(arg0, arg1) {\n arg0.stencilWriteMask = arg1 >>> 0;\n },\n __wbg_set_step_mode_2b1318f00e2ddc02: function(arg0, arg1) {\n arg0.stepMode = __wbindgen_enum_GpuVertexStepMode[arg1];\n },\n __wbg_set_storage_texture_b9e95e260c9d49a3: function(arg0, arg1) {\n arg0.storageTexture = arg1;\n },\n __wbg_set_store_op_e2b740eddfd2713f: function(arg0, arg1) {\n arg0.storeOp = __wbindgen_enum_GpuStoreOp[arg1];\n },\n __wbg_set_strip_index_format_22ddab1b8f352c1d: function(arg0, arg1) {\n arg0.stripIndexFormat = __wbindgen_enum_GpuIndexFormat[arg1];\n },\n __wbg_set_targets_07e15f3cca640faf: function(arg0, arg1, arg2) {\n arg0.targets = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_texture_7b9ace323bfe7938: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_texture_84a5f84f0f451291: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_texture_b35a4d6a35c491fa: function(arg0, arg1) {\n arg0.texture = arg1;\n },\n __wbg_set_timestamp_writes_1d304b9eb09ff227: function(arg0, arg1) {\n arg0.timestampWrites = arg1;\n },\n __wbg_set_tone_mapping_23fcd4f846a61048: function(arg0, arg1) {\n arg0.toneMapping = arg1;\n },\n __wbg_set_topology_b29804e5549370f5: function(arg0, arg1) {\n arg0.topology = __wbindgen_enum_GpuPrimitiveTopology[arg1];\n },\n __wbg_set_type_ac87cc570da17000: function(arg0, arg1) {\n arg0.type = __wbindgen_enum_GpuBufferBindingType[arg1];\n },\n __wbg_set_type_f3d1ad35dc7889f9: function(arg0, arg1) {\n arg0.type = __wbindgen_enum_GpuSamplerBindingType[arg1];\n },\n __wbg_set_unclipped_depth_59155eb615f193fe: function(arg0, arg1) {\n arg0.unclippedDepth = arg1 !== 0;\n },\n __wbg_set_usage_5ba672bf81ba9859: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_b0070c2ce47149a6: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_bac3cabe90090275: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_usage_f3e1a48118ff483a: function(arg0, arg1) {\n arg0.usage = arg1 >>> 0;\n },\n __wbg_set_vertex_00b1e17dc3fe7fb3: function(arg0, arg1) {\n arg0.vertex = arg1;\n },\n __wbg_set_view_dimension_e9e9cd07d7ad686d: function(arg0, arg1) {\n arg0.viewDimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_view_dimension_eb197c35c45e572c: function(arg0, arg1) {\n arg0.viewDimension = __wbindgen_enum_GpuTextureViewDimension[arg1];\n },\n __wbg_set_view_formats_2540cdb8dde31055: function(arg0, arg1, arg2) {\n arg0.viewFormats = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_view_formats_845b425c1d19e1af: function(arg0, arg1, arg2) {\n arg0.viewFormats = getArrayJsValueViewFromWasm0(arg1, arg2);\n },\n __wbg_set_view_gpu_texture_view_9a3c34ba4d1969b8: function(arg0, arg1) {\n arg0.view = arg1;\n },\n __wbg_set_view_gpu_texture_view_efa644c1ce3c4deb: function(arg0, arg1) {\n arg0.view = arg1;\n },\n __wbg_set_visibility_65413465e7b24eb6: function(arg0, arg1) {\n arg0.visibility = arg1 >>> 0;\n },\n __wbg_set_width_5f89a551b5472887: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_width_a2410cafbdefeb5a: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_width_eb3001e1dcabb909: function(arg0, arg1) {\n arg0.width = arg1 >>> 0;\n },\n __wbg_set_write_mask_39ce121635fd4296: function(arg0, arg1) {\n arg0.writeMask = arg1 >>> 0;\n },\n __wbg_set_x_b078c58009aa57bd: function(arg0, arg1) {\n arg0.x = arg1 >>> 0;\n },\n __wbg_set_x_d851b2611b154969: function(arg0, arg1) {\n arg0.x = arg1 >>> 0;\n },\n __wbg_set_y_3df92c4bcff23616: function(arg0, arg1) {\n arg0.y = arg1 >>> 0;\n },\n __wbg_set_y_76a6f85fc60d74e5: function(arg0, arg1) {\n arg0.y = arg1 >>> 0;\n },\n __wbg_set_z_3633c53887a9ff5e: function(arg0, arg1) {\n arg0.z = arg1 >>> 0;\n },\n __wbg_stack_575c4e0918581b9c: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 1, len1, true);\n getDataViewMemory0().setInt32((arg0 >>> 0) + 4 * 0, ptr1, true);\n },\n __wbg_static_accessor_GLOBAL_THIS_003ee833af9699fc: function() {\n const ret = typeof globalThis === 'undefined' ? undefined : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_GLOBAL_e4293fb22cbe77da: function() {\n const ret = typeof global === 'undefined' ? undefined : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_SELF_53bb20457401453d: function() {\n const ret = typeof self === 'undefined' ? undefined : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_WINDOW_b5e0810bfecb7feb: function() {\n const ret = typeof window === 'undefined' ? undefined : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_subgroupMaxSize_3586e822dc3603f6: function(arg0) {\n const ret = arg0.subgroupMaxSize;\n return ret;\n },\n __wbg_subgroupMinSize_17f758985cdd1dab: function(arg0) {\n const ret = arg0.subgroupMinSize;\n return ret;\n },\n __wbg_submit_077c85cc28e36892: function(arg0, arg1, arg2) {\n arg0.submit(getArrayJsValueViewFromWasm0(arg1, arg2));\n },\n __wbg_then_3a4f899454bcf8c9: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_then_656f253a5dd7d8ea: function(arg0, arg1, arg2) {\n const ret = arg0.then(arg1, arg2);\n return ret;\n },\n __wbg_then_e3f7f2d365708be8: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_unconfigure_835307f58dc68d80: function(arg0) {\n arg0.unconfigure();\n },\n __wbg_unmap_6a96b14c9ef5f7f5: function(arg0) {\n arg0.unmap();\n },\n __wbg_videoHeight_0d108b7f03cde4ef: function(arg0) {\n const ret = arg0.videoHeight;\n return ret;\n },\n __wbg_videoWidth_34b4e257cb35c6ca: function(arg0) {\n const ret = arg0.videoWidth;\n return ret;\n },\n __wbg_width_000813f5f73b7341: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_width_babc5dc7654771b1: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_width_f84552448726a9a9: function(arg0) {\n const ret = arg0.width;\n return ret;\n },\n __wbg_writeBuffer_d7640e64ceb69371: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n arg0.writeBuffer(arg1, arg2, getArrayU8FromWasm0(arg3, arg4), arg5, arg6);\n }, arguments); },\n __wbg_writeTexture_dba1e801af087dfd: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {\n arg0.writeTexture(arg1, getArrayU8FromWasm0(arg2, arg3), arg4, arg5);\n }, arguments); },\n __wbindgen_generic_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [Externref], shim_idx: 586, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_);\n return ret;\n },\n __wbindgen_generic_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"GPUDevice\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_);\n return ret;\n },\n __wbindgen_generic_0000000000000003: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"GPUDeviceLostInfo\")], shim_idx: 539, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_);\n return ret;\n },\n __wbindgen_generic_0000000000000004: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"any\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46);\n return ret;\n },\n __wbindgen_generic_0000000000000005: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref(\"undefined\")], shim_idx: 535, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47);\n return ret;\n },\n __wbindgen_generic_0000000000000006: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return ret;\n },\n __wbindgen_generic_0000000000000007: function(arg0, arg1) {\n // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref(\"Uint8Array\")`.\n const ret = getArrayU8FromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_generic_0000000000000008: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n table.set(0, undefined);\n table.set(1024, undefined);\n table.set(1025, null);\n table.set(1026, true);\n table.set(1027, false);\n },\n };\n return {\n __proto__: null,\n \"./ms_renderer_bg.js\": import0,\n };\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_(arg0, arg1, arg2) {\n wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_(arg0, arg1, arg2);\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(arg0, arg1, arg2, arg3) {\n wasm.wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_(arg0, arg1, arg2, arg3);\n}\n\n\nconst __wbindgen_enum_GpuAddressMode = [\"clamp-to-edge\", \"repeat\", \"mirror-repeat\"];\n\n\nconst __wbindgen_enum_GpuAutoLayoutMode = [\"auto\"];\n\n\nconst __wbindgen_enum_GpuBlendFactor = [\"zero\", \"one\", \"src\", \"one-minus-src\", \"src-alpha\", \"one-minus-src-alpha\", \"dst\", \"one-minus-dst\", \"dst-alpha\", \"one-minus-dst-alpha\", \"src-alpha-saturated\", \"constant\", \"one-minus-constant\", \"src1\", \"one-minus-src1\", \"src1-alpha\", \"one-minus-src1-alpha\"];\n\n\nconst __wbindgen_enum_GpuBlendOperation = [\"add\", \"subtract\", \"reverse-subtract\", \"min\", \"max\"];\n\n\nconst __wbindgen_enum_GpuBufferBindingType = [\"uniform\", \"storage\", \"read-only-storage\"];\n\n\nconst __wbindgen_enum_GpuCanvasAlphaMode = [\"opaque\", \"premultiplied\"];\n\n\nconst __wbindgen_enum_GpuCanvasToneMappingMode = [\"standard\", \"extended\"];\n\n\nconst __wbindgen_enum_GpuCompareFunction = [\"never\", \"less\", \"equal\", \"less-equal\", \"greater\", \"not-equal\", \"greater-equal\", \"always\"];\n\n\nconst __wbindgen_enum_GpuCullMode = [\"none\", \"front\", \"back\"];\n\n\nconst __wbindgen_enum_GpuDeviceLostReason = [\"unknown\", \"destroyed\"];\n\n\nconst __wbindgen_enum_GpuFilterMode = [\"nearest\", \"linear\"];\n\n\nconst __wbindgen_enum_GpuFrontFace = [\"ccw\", \"cw\"];\n\n\nconst __wbindgen_enum_GpuIndexFormat = [\"uint16\", \"uint32\"];\n\n\nconst __wbindgen_enum_GpuLoadOp = [\"load\", \"clear\"];\n\n\nconst __wbindgen_enum_GpuMipmapFilterMode = [\"nearest\", \"linear\"];\n\n\nconst __wbindgen_enum_GpuPowerPreference = [\"low-power\", \"high-performance\"];\n\n\nconst __wbindgen_enum_GpuPrimitiveTopology = [\"point-list\", \"line-list\", \"line-strip\", \"triangle-list\", \"triangle-strip\"];\n\n\nconst __wbindgen_enum_GpuSamplerBindingType = [\"filtering\", \"non-filtering\", \"comparison\"];\n\n\nconst __wbindgen_enum_GpuStencilOperation = [\"keep\", \"zero\", \"replace\", \"invert\", \"increment-clamp\", \"decrement-clamp\", \"increment-wrap\", \"decrement-wrap\"];\n\n\nconst __wbindgen_enum_GpuStorageTextureAccess = [\"write-only\", \"read-only\", \"read-write\"];\n\n\nconst __wbindgen_enum_GpuStoreOp = [\"store\", \"discard\"];\n\n\nconst __wbindgen_enum_GpuTextureAspect = [\"all\", \"stencil-only\", \"depth-only\"];\n\n\nconst __wbindgen_enum_GpuTextureDimension = [\"1d\", \"2d\", \"3d\"];\n\n\nconst __wbindgen_enum_GpuTextureFormat = [\"r8unorm\", \"r8snorm\", \"r8uint\", \"r8sint\", \"r16unorm\", \"r16snorm\", \"r16uint\", \"r16sint\", \"r16float\", \"rg8unorm\", \"rg8snorm\", \"rg8uint\", \"rg8sint\", \"r32uint\", \"r32sint\", \"r32float\", \"rg16unorm\", \"rg16snorm\", \"rg16uint\", \"rg16sint\", \"rg16float\", \"rgba8unorm\", \"rgba8unorm-srgb\", \"rgba8snorm\", \"rgba8uint\", \"rgba8sint\", \"bgra8unorm\", \"bgra8unorm-srgb\", \"rgb9e5ufloat\", \"rgb10a2uint\", \"rgb10a2unorm\", \"rg11b10ufloat\", \"rg32uint\", \"rg32sint\", \"rg32float\", \"rgba16unorm\", \"rgba16snorm\", \"rgba16uint\", \"rgba16sint\", \"rgba16float\", \"rgba32uint\", \"rgba32sint\", \"rgba32float\", \"stencil8\", \"depth16unorm\", \"depth24plus\", \"depth24plus-stencil8\", \"depth32float\", \"depth32float-stencil8\", \"bc1-rgba-unorm\", \"bc1-rgba-unorm-srgb\", \"bc2-rgba-unorm\", \"bc2-rgba-unorm-srgb\", \"bc3-rgba-unorm\", \"bc3-rgba-unorm-srgb\", \"bc4-r-unorm\", \"bc4-r-snorm\", \"bc5-rg-unorm\", \"bc5-rg-snorm\", \"bc6h-rgb-ufloat\", \"bc6h-rgb-float\", \"bc7-rgba-unorm\", \"bc7-rgba-unorm-srgb\", \"etc2-rgb8unorm\", \"etc2-rgb8unorm-srgb\", \"etc2-rgb8a1unorm\", \"etc2-rgb8a1unorm-srgb\", \"etc2-rgba8unorm\", \"etc2-rgba8unorm-srgb\", \"eac-r11unorm\", \"eac-r11snorm\", \"eac-rg11unorm\", \"eac-rg11snorm\", \"astc-4x4-unorm\", \"astc-4x4-unorm-srgb\", \"astc-5x4-unorm\", \"astc-5x4-unorm-srgb\", \"astc-5x5-unorm\", \"astc-5x5-unorm-srgb\", \"astc-6x5-unorm\", \"astc-6x5-unorm-srgb\", \"astc-6x6-unorm\", \"astc-6x6-unorm-srgb\", \"astc-8x5-unorm\", \"astc-8x5-unorm-srgb\", \"astc-8x6-unorm\", \"astc-8x6-unorm-srgb\", \"astc-8x8-unorm\", \"astc-8x8-unorm-srgb\", \"astc-10x5-unorm\", \"astc-10x5-unorm-srgb\", \"astc-10x6-unorm\", \"astc-10x6-unorm-srgb\", \"astc-10x8-unorm\", \"astc-10x8-unorm-srgb\", \"astc-10x10-unorm\", \"astc-10x10-unorm-srgb\", \"astc-12x10-unorm\", \"astc-12x10-unorm-srgb\", \"astc-12x12-unorm\", \"astc-12x12-unorm-srgb\"];\n\n\nconst __wbindgen_enum_GpuTextureSampleType = [\"float\", \"unfilterable-float\", \"depth\", \"sint\", \"uint\"];\n\n\nconst __wbindgen_enum_GpuTextureViewDimension = [\"1d\", \"2d\", \"2d-array\", \"cube\", \"cube-array\", \"3d\"];\n\n\nconst __wbindgen_enum_GpuVertexFormat = [\"uint8\", \"uint8x2\", \"uint8x4\", \"sint8\", \"sint8x2\", \"sint8x4\", \"unorm8\", \"unorm8x2\", \"unorm8x4\", \"snorm8\", \"snorm8x2\", \"snorm8x4\", \"uint16\", \"uint16x2\", \"uint16x4\", \"sint16\", \"sint16x2\", \"sint16x4\", \"unorm16\", \"unorm16x2\", \"unorm16x4\", \"snorm16\", \"snorm16x2\", \"snorm16x4\", \"float16\", \"float16x2\", \"float16x4\", \"float32\", \"float32x2\", \"float32x3\", \"float32x4\", \"uint32\", \"uint32x2\", \"uint32x3\", \"uint32x4\", \"sint32\", \"sint32x2\", \"sint32x3\", \"sint32x4\", \"unorm10-10-10-2\", \"unorm8x4-bgra\"];\n\n\nconst __wbindgen_enum_GpuVertexStepMode = [\"vertex\", \"instance\"];\nconst MsTextFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_mstext_free(ptr, 1));\nconst RendererFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_renderer_free(ptr, 1));\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nconst CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(state => wasm.__wbindgen_destroy_closure(state.a, state.b));\n\nfunction debugString(val) {\n switch (typeof val) {\n // primitive types\n case 'number':\n case 'boolean':\n case 'undefined':\n return `${val}`;\n case 'string':\n return JSON.stringify(val);\n case 'bigint':\n return `${val}n`;\n case 'symbol':\n return val.description !== undefined\n ? `Symbol(${val.description})`\n : 'Symbol';\n case 'function':\n return typeof val.name === 'string' && val.name !== ''\n ? `Function(${val.name})`\n : 'Function';\n case 'object': {\n if (val === null) {\n return 'null';\n }\n // objects\n if (Array.isArray(val)) {\n return '[' + Array.from(val, debugString).join(', ') + ']';\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n\n const toStringOutput = toString.call(val);\n // Test for built-in\n const className = /\\[object ([^\\]]+)\\]/.exec(toStringOutput)?.[1];\n\n // Failed to match the standard '[object ClassName]'\n if (className === undefined) {\n return toStringOutput;\n }\n if (className === 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n }\n // Per MDN: 'This list of values is exhaustive.'\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof#description\n }\n}\n\nfunction getArrayF32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayF64FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);\n}\n\nfunction getArrayJsValueFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n wasm.__externref_drop_slice(ptr, len);\n return result;\n}\n\nfunction getArrayJsValueViewFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n const mem = getDataViewMemory0();\n const result = [];\n for (let i = ptr; i < ptr + 4 * len; i += 4) {\n result.push(wasm.__wbindgen_externrefs.get(mem.getUint32(i, true)));\n }\n return result;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nlet cachedFloat32ArrayMemory0 = null;\nfunction getFloat32ArrayMemory0() {\n if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {\n cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);\n }\n return cachedFloat32ArrayMemory0;\n}\n\nlet cachedFloat64ArrayMemory0 = null;\nfunction getFloat64ArrayMemory0() {\n if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {\n cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet cachedUint32ArrayMemory0 = null;\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction makeMutClosure(arg0, arg1, f) {\n const state = { a: arg0, b: arg1, cnt: 1 };\n const real = (...args) => {\n\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n state.a = a;\n real._wbg_cb_unref();\n }\n };\n real._wbg_cb_unref = () => {\n if (--state.cnt === 0) {\n wasm.__wbindgen_destroy_closure(state.a, state.b);\n state.a = 0;\n CLOSURE_DTORS.unregister(state);\n }\n };\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction passArray32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getUint32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1, 1) >>> 0;\n getUint8ArrayMemory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passArrayF32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getFloat32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(bytes) {\n numBytesDecoded += bytes.length;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true });\n cachedTextDecoder.decode();\n numBytesDecoded = bytes.length;\n }\n return cachedTextDecoder.decode(bytes);\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedFloat32ArrayMemory0 = null;\n cachedFloat64ArrayMemory0 = null;\n cachedUint32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (!module.ok) {\n throw new Error(`failed to fetch Wasm: ${module.status} ${module.statusText} fetching '${module.url}'`);\n }\n\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nlet __wbg_init_promise;\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n if (__wbg_init_promise === undefined) {\n __wbg_init_promise = __wbg_init_once(module_or_path);\n __wbg_init_promise.catch(() => { __wbg_init_promise = undefined; });\n }\n return __wbg_init_promise;\n}\n\nasync function __wbg_init_once(module_or_path) {\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('ms_renderer_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n", "import type { DotGridFillResolved, FractalNoiseFillResolved, GridFillResolved, NoiseFillResolved, Scene3D, StripeFillResolved } from \"@motionscript/core\";\n// The document both backends draw: a small Figma-like node tree. It stands in\n// for what core's evaluator hands a renderer each frame (transforms, sizes,\n// paints, the Graphics2D op lists of component renders).\n//\n// Mutations go through `touch`, which records a per-node dirty mask. Only the\n// retained backend reads the masks.\n\nexport type RGBA = [number, number, number, number];\nexport type Mat = [number, number, number, number, number, number];\n/**\n * A projective transform: `Mat`'s a b c d e f plus the perspective row g h i,\n * mapping (x, y) to ((a·x + c·y + e) / w, (b·x + d·y + f) / w) with\n * w = g·x + h·y + i — the engine's Matrix2D [a c e / b d f / g h i].\n */\nexport type Mat3 = [number, number, number, number, number, number, number, number, number];\n/** A node transform: affine (the fast path) or projective. */\nexport type Xform = Mat | Mat3;\n\nexport interface Stop {\n offset: number;\n color: RGBA;\n}\n\nexport type TileMode = \"clamp\" | \"repeat\" | \"mirror\" | \"decal\";\n\n/** An image or video frame the backend samples; `version` bumps when a video frame changes. */\nexport interface ImageAsset {\n id: number;\n width: number;\n height: number;\n /** Null for a 3D scene, which the renderer draws itself. */\n source: ImageBitmap | VideoFrame | HTMLCanvasElement | OffscreenCanvas | null;\n /** A core `Scene3D` drawn into this image at width × height logical px\n * (× the viewport scale): the shape's device size. */\n scene3d?: Scene3D;\n /** Device px per logical px a 3D scene renders at (default: the viewport's). */\n scale3d?: number;\n /** What the 3D scene's textures come from: images by their `src`, and\n * `Tex.surface` textures by descriptor (each a surface asset). */\n links3d?: { images?: Record<string, ImageAsset>; surfaces?: Map<object, ImageAsset> };\n /** A `Tex.surface` source: this detached subtree drawn at width × height\n * px (pixel ratio 1, as the engine's default), origin top-left. */\n surface?: Node;\n mipmaps: boolean;\n version: number;\n}\n\n/** Media fit modes: fill = cover, fit = contain. */\nexport type ImageFit = \"fill\" | \"fit\" | \"stretch\" | \"tile\";\n\nexport type Paint =\n | { kind: \"solid\"; color: RGBA }\n | { kind: \"linear\"; from: [number, number]; to: [number, number]; stops: Stop[]; tile?: TileMode }\n | { kind: \"radial\"; center: [number, number]; radius: number; stops: Stop[]; tile?: TileMode }\n /** Angles in degrees, clockwise from +x (y-down). */\n | { kind: \"sweep\"; center: [number, number]; startAngle: number; endAngle: number; stops: Stop[]; tile?: TileMode }\n /** An image placed in `box` (x, y, w, h, local units) by `fit`. */\n | { kind: \"image\"; image: ImageAsset; fit?: ImageFit; box: [number, number, number, number];\n /** Image px → local, overriding fit/box (adapter/geometry/image-matrix.ts). */\n matrix?: Mat; tile?: TileMode }\n /** One of the engine's procedural fills, resolved by @motionscript/core,\n * over the shape's bounds `box` (x, y, w, h, local units). */\n | { kind: \"procedural\"; fill: ProceduralFill; box: [number, number, number, number] }\n /** A user WGSL fill (DESIGN.md §6.1) over `box` (x, y, w, h, local units):\n * its source, `Params` values by name, the node's elapsed seconds, and the\n * image `sample_texture` reads. */\n | { kind: \"shader\"; source: string; uniforms: Record<string, number | number[]>; box: [number, number, number, number]; time: number; texture?: ImageAsset };\n\nexport type ProceduralFill =\n | DotGridFillResolved | GridFillResolved | StripeFillResolved | NoiseFillResolved | FractalNoiseFillResolved;\n\nexport interface StrokeStyle {\n paint: Paint;\n width: number;\n join?: \"miter\" | \"round\" | \"bevel\";\n cap?: \"butt\" | \"round\" | \"square\";\n miter?: number;\n dash?: number[];\n dashPhase?: number;\n}\n\nexport interface Shadow {\n dx: number;\n dy: number;\n sigma: number;\n spread: number;\n color: RGBA;\n}\n\nexport type Filter =\n | { kind: \"blur\"; sigma: number }\n | { kind: \"dropShadow\"; dx: number; dy: number; sigma: number; color: RGBA };\n\nexport const BLEND_MODES = [\n \"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"colorDodge\", \"colorBurn\",\n \"hardLight\", \"softLight\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\", \"plus\",\n] as const;\nexport type BlendMode = (typeof BLEND_MODES)[number];\n\nexport const VERB = { move: 0, line: 1, quad: 2, cubic: 3, close: 4 } as const;\n\nexport interface PathData {\n verbs: Uint8Array;\n points: Float32Array;\n}\n\nexport type Kind = \"group\" | \"rect\" | \"ellipse\" | \"path\" | \"compound\" | \"text\";\nexport const KIND_CODE: Record<Kind, number> = { group: 0, rect: 1, ellipse: 2, path: 3, compound: 4, text: 5 };\n\nexport interface TextRunSpec {\n text: string;\n family: string;\n size: number;\n weight?: number;\n italic?: boolean;\n letterSpacing?: number;\n decoration?: \"underline\" | \"lineThrough\";\n /** This run's own fill (rich text spans); default: the node's fill. */\n paint?: Paint;\n}\n\n/**\n * A text block, as core's TextState/RichTextState reaches the renderer. The\n * node's local space is block-local: the block is centred on the origin.\n */\nexport interface TextSpec {\n runs: TextRunSpec[];\n align?: \"left\" | \"right\" | \"center\" | \"justify\";\n verticalAlign?: \"top\" | \"center\" | \"bottom\";\n /** Wrap at `width` (when > 0); otherwise `width` only anchors alignment. */\n wrap?: boolean;\n width?: number;\n height?: number;\n /** 0 = the font's own line height, else a multiple of each run's size. */\n lineHeight?: number;\n /** Single-run text: fit the box (`width` × `height`), wrapping at `minFontSize` when `wrap`. */\n fontSize?: \"autofit\";\n minFontSize?: number;\n /** Text on a path (path space = the node's local space; one line). */\n path?: PathData;\n}\n\n/** How a compound member combines with the members before it. */\nexport type MemberOp = \"union\" | \"cut\" | \"intersect\" | \"exclude\";\nexport const MEMBER_OP: Record<MemberOp, number> = { union: 0, cut: 1, intersect: 2, exclude: 3 };\n\n/**\n * One member of a compound shape (core's Graphics2D shape union, a boolean\n * group). Members apply in order: unioned with the result so far, cut out of\n * it, intersected with it or excluded (xor) from it.\n */\nexport interface Member {\n kind: \"rect\" | \"ellipse\" | \"path\";\n /** Shorthand for `op: \"cut\"`. */\n cut?: boolean;\n op?: MemberOp;\n transform?: Mat;\n w?: number;\n h?: number;\n radii?: [number, number, number, number];\n path?: PathData;\n evenOdd?: boolean;\n}\n\n/** `invertAlphaEroded` / `alphaDilated`: the mask shrunk / grown by one device px first. */\nexport type MaskMode = \"alpha\" | \"luminance\" | \"invertAlpha\" | \"invertLuminance\" | \"invertAlphaEroded\" | \"alphaDilated\";\nexport const MASK_CODE: Record<MaskMode, number> = { alpha: 1, luminance: 2, invertAlpha: 3, invertLuminance: 4, invertAlphaEroded: 5, alphaDilated: 6 };\n\nexport const D = {\n CREATE: 1 << 0,\n CHILDREN: 1 << 1,\n TRANSFORM: 1 << 2,\n SIZE: 1 << 3,\n RADII: 1 << 4,\n FILL: 1 << 5,\n STROKE: 1 << 6,\n SHADOWS: 1 << 7,\n OPACITY: 1 << 8,\n BLEND: 1 << 9,\n CLIP: 1 << 10,\n FILTER: 1 << 11,\n PATH: 1 << 12,\n MEMBERS: 1 << 13,\n MASK: 1 << 14,\n TEXT: 1 << 15,\n EFFECTS: 1 << 16,\n ALL: (1 << 17) - 1,\n} as const;\n\nexport class Node {\n children: Node[] = [];\n transform: Xform = [1, 0, 0, 1, 0, 0];\n opacity = 1;\n blend: BlendMode = \"normal\";\n w = 0;\n h = 0;\n radii: [number, number, number, number] = [0, 0, 0, 0];\n fill?: Paint;\n stroke?: StrokeStyle;\n shadows: Shadow[] = [];\n /** Rounded-rect clip, or a path clip when `path` is set (x/y/w/h/r ignored). */\n clip?: { x: number; y: number; w: number; h: number; r: number; path?: PathData; evenOdd?: boolean };\n /** Group mask: the first child masks the rest. */\n mask?: MaskMode;\n members?: Member[];\n text?: TextSpec;\n /** core NodeEffects (built with core's `Effects`), in authored order. */\n effects?: object[];\n /** Seconds the node's effects animate with (its elapsed time). */\n effectTime?: number;\n /** The box effects measure against (local x, y, w, h); default: the content bounds. */\n effectBox?: [number, number, number, number];\n filter?: Filter;\n path?: PathData;\n evenOdd = false;\n dirty = D.ALL;\n\n constructor(readonly id: number, readonly kind: Kind) {}\n}\n\ntype Props = Partial<Omit<Node, \"id\" | \"kind\" | \"children\" | \"dirty\">>;\n\nexport class Doc {\n readonly root: Node;\n readonly nodes: Node[] = [];\n readonly images: ImageAsset[] = [];\n readonly dirty = new Set<Node>();\n private nextId = 0;\n\n constructor(readonly width: number, readonly height: number, readonly background: RGBA) {\n this.root = this.make(\"group\", {});\n }\n\n private make(kind: Kind, props: Props): Node {\n const n = new Node(this.nextId++, kind);\n Object.assign(n, props);\n this.nodes.push(n);\n this.dirty.add(n);\n return n;\n }\n\n add(parent: Node, kind: Kind, props: Props): Node {\n const n = this.make(kind, props);\n parent.children.push(n);\n this.touch(parent, D.CHILDREN);\n return n;\n }\n\n group(parent: Node, props: Props = {}) {\n return this.add(parent, \"group\", props);\n }\n rect(parent: Node, props: Props) {\n return this.add(parent, \"rect\", props);\n }\n ellipse(parent: Node, props: Props) {\n return this.add(parent, \"ellipse\", props);\n }\n pathNode(parent: Node, props: Props) {\n return this.add(parent, \"path\", props);\n }\n compound(parent: Node, props: Props) {\n return this.add(parent, \"compound\", props);\n }\n textNode(parent: Node, props: Props) {\n return this.add(parent, \"text\", props);\n }\n\n addImage(source: ImageAsset[\"source\"], width: number, height: number, opts: { mipmaps?: boolean } = {}): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source, mipmaps: opts.mipmaps ?? true, version: 1 };\n this.images.push(asset);\n return asset;\n }\n\n addScene3D(scene: Scene3D, width: number, height: number, links3d?: ImageAsset[\"links3d\"]): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source: null, mipmaps: false, version: 1, scene3d: scene, links3d };\n this.images.push(asset);\n return asset;\n }\n\n /** A group outside the drawn tree, for a surface's content. */\n detached(props: Props = {}): Node {\n return this.make(\"group\", props);\n }\n\n addSurface(root: Node, width: number, height: number): ImageAsset {\n const asset: ImageAsset = { id: this.images.length, width, height, source: null, mipmaps: false, version: 1, surface: root };\n this.images.push(asset);\n return asset;\n }\n\n touch(n: Node, bits: number) {\n n.dirty |= bits;\n this.dirty.add(n);\n }\n\n /** Marks every node fully dirty (a backend attached after the fact). */\n touchAll() {\n for (const n of this.nodes) this.touch(n, D.ALL);\n }\n}\n\n// ── matrices ─────────────────────────────────────────────────────────────────\n\nexport function mat(tx: number, ty: number, rot = 0, scale = 1, px = 0, py = 0): Mat {\n // translate(tx,ty) · rotate(rot) · scale(scale) · translate(-px,-py)\n const c = Math.cos(rot) * scale;\n const s = Math.sin(rot) * scale;\n return [c, s, -s, c, tx - (c * px - s * py), ty - (s * px + c * py)];\n}\n\nexport function translate(x: number, y: number): Mat {\n return [1, 0, 0, 1, x, y];\n}\n\n/** True when `m` carries a perspective row (not 0 0 1). */\nexport function isProjective(m: Xform): m is Mat3 {\n return m.length === 9 && (m[6] !== 0 || m[7] !== 0 || m[8] !== 1);\n}\n\n/** `m` as a row-major 3×3 [a c e / b d f / g h i]. */\nfunction rowMajor(m: Xform): number[] {\n return m.length === 9 ? [m[0], m[2], m[4], m[1], m[3], m[5], m[6], m[7], m[8]] : [m[0], m[2], m[4], m[1], m[3], m[5], 0, 0, 1];\n}\n\n/** `p · c` (apply `c` first), projective. */\nexport function mul3(p: Xform, c: Xform): Mat3 {\n const P = rowMajor(p), C = rowMajor(c);\n const r = new Array<number>(9);\n for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) r[i * 3 + j] = P[i * 3] * C[j] + P[i * 3 + 1] * C[3 + j] + P[i * 3 + 2] * C[6 + j];\n return [r[0], r[3], r[1], r[4], r[2], r[5], r[6], r[7], r[8]];\n}\n\n/** `p · c`, staying affine (six numbers) when both are. */\nexport function mulX(p: Xform, c: Xform): Xform {\n if (p.length === 9 || c.length === 9) return mul3(p, c);\n return [\n p[0] * c[0] + p[2] * c[1], p[1] * c[0] + p[3] * c[1],\n p[0] * c[2] + p[2] * c[3], p[1] * c[2] + p[3] * c[3],\n p[0] * c[4] + p[2] * c[5] + p[4], p[1] * c[4] + p[3] * c[5] + p[5],\n ];\n}\n\n// ── paths ────────────────────────────────────────────────────────────────────\n\nexport class PathBuilder {\n private verbs: number[] = [];\n private pts: number[] = [];\n moveTo(x: number, y: number) {\n this.verbs.push(VERB.move);\n this.pts.push(x, y);\n return this;\n }\n lineTo(x: number, y: number) {\n this.verbs.push(VERB.line);\n this.pts.push(x, y);\n return this;\n }\n quadTo(x1: number, y1: number, x: number, y: number) {\n this.verbs.push(VERB.quad);\n this.pts.push(x1, y1, x, y);\n return this;\n }\n cubicTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number) {\n this.verbs.push(VERB.cubic);\n this.pts.push(x1, y1, x2, y2, x, y);\n return this;\n }\n close() {\n this.verbs.push(VERB.close);\n return this;\n }\n build(): PathData {\n return { verbs: Uint8Array.from(this.verbs), points: Float32Array.from(this.pts) };\n }\n}\n\n/** Path data mapped through an affine transform (Béziers map control point by control point). */\nexport function transformPath(d: PathData, m: Mat): PathData {\n const pts = new Float32Array(d.points.length);\n for (let i = 0; i < pts.length; i += 2) {\n const x = d.points[i], y = d.points[i + 1];\n pts[i] = m[0] * x + m[2] * y + m[4];\n pts[i + 1] = m[1] * x + m[3] * y + m[5];\n }\n return { verbs: d.verbs, points: pts };\n}\n\n/** Control-point bounds of a path: x0 y0 x1 y1. */\nexport function pathBounds(d: PathData): [number, number, number, number] {\n let x0 = Infinity, y0 = Infinity, x1 = -Infinity, y1 = -Infinity;\n for (let i = 0; i < d.points.length; i += 2) {\n x0 = Math.min(x0, d.points[i]); x1 = Math.max(x1, d.points[i]);\n y0 = Math.min(y0, d.points[i + 1]); y1 = Math.max(y1, d.points[i + 1]);\n }\n return Number.isFinite(x0) ? [x0, y0, x1, y1] : [0, 0, 0, 0];\n}\n\nexport function memberOp(m: Member): MemberOp {\n return m.op ?? (m.cut ? \"cut\" : \"union\");\n}\n\n/**\n * Where an image paint puts the image: image pixel (u, v) lands at local\n * (ox + u·sx, oy + v·sy). Same rules as `computeImageMatrix` for the plain\n * cases: fill covers the box (centred), fit is contained\n * (centred, transparent outside), stretch maps the image onto the box, tile\n * repeats it at its natural size from the box origin.\n */\n/** Image px → local, and the tile mode, for an image paint. */\nexport function imageMatrix(p: Extract<Paint, { kind: \"image\" }>): { m: Mat; tile: TileMode } {\n if (p.matrix) return { m: p.matrix, tile: p.tile ?? \"clamp\" };\n const { sx, sy, ox, oy, tile } = imagePlacement(p);\n return { m: [sx, 0, 0, sy, ox, oy], tile };\n}\n\nexport function imagePlacement(p: Extract<Paint, { kind: \"image\" }>): { sx: number; sy: number; ox: number; oy: number; tile: TileMode } {\n const [x, y, w, h] = p.box;\n const iw = p.image.width, ih = p.image.height;\n const fit = p.fit ?? \"fill\";\n if (fit === \"stretch\") return { sx: w / iw, sy: h / ih, ox: x, oy: y, tile: \"clamp\" };\n if (fit === \"tile\") return { sx: 1, sy: 1, ox: x, oy: y, tile: \"repeat\" };\n const s = fit === \"fill\" ? Math.max(w / iw, h / ih) : Math.min(w / iw, h / ih);\n return { sx: s, sy: s, ox: x + (w - iw * s) / 2, oy: y + (h - ih * s) / 2, tile: fit === \"fill\" ? \"clamp\" : \"decal\" };\n}\n", "// Writer for the delta protocol (crates/renderer/src/protocol.rs). Words go\n// straight into the renderer's buffer inside WASM linear memory: no\n// intermediate JS array, one `apply` call per flush.\n\nexport const OP = {\n CREATE: 1,\n DESTROY: 2,\n CHILDREN: 3,\n TRANSFORM: 4,\n SIZE: 5,\n RADII: 6,\n FILL: 7,\n STROKE: 8,\n SHADOWS: 9,\n OPACITY: 10,\n BLEND: 11,\n CLIP: 12,\n FILTER: 13,\n PATH: 14,\n MEMBERS: 15,\n MASK: 16,\n TEXT: 17,\n EFFECTS: 18,\n TRANSFORM3: 19,\n DEF_PAINT: 20,\n DEF_PATH: 21,\n DEF_DASH: 22,\n FREE_PATH: 24,\n ROOT: 30,\n VIEWPORT: 31,\n} as const;\n\nexport const NONE = 0xffffffff;\n\ninterface DeltaSink {\n delta_buffer(minWords: number): number;\n delta_capacity(): number;\n apply(words: number): void;\n}\n\nexport class DeltaWriter {\n private u32!: Uint32Array;\n private f32!: Float32Array;\n private pos = 0;\n private cap = 0;\n /** Words written since the last `takeCount`. */\n written = 0;\n\n constructor(private readonly sink: DeltaSink, private readonly memory: WebAssembly.Memory) {\n this.refresh(0);\n }\n\n private refresh(minWords: number) {\n const ptr = this.sink.delta_buffer(minWords);\n this.cap = this.sink.delta_capacity();\n this.u32 = new Uint32Array(this.memory.buffer, ptr, this.cap);\n this.f32 = new Float32Array(this.memory.buffer, ptr, this.cap);\n }\n\n /** Reserve room for a record of `n` words. */\n begin(n: number) {\n if (this.u32.buffer !== this.memory.buffer) this.refresh(0);\n if (this.pos + n > this.cap) {\n this.flush();\n if (n > this.cap) this.refresh(n);\n }\n }\n\n u(v: number) {\n this.u32[this.pos++] = v >>> 0;\n }\n\n f(v: number) {\n this.f32[this.pos++] = v;\n }\n\n flush() {\n if (this.pos > 0) {\n this.written += this.pos;\n this.sink.apply(this.pos);\n this.pos = 0;\n }\n // `apply` may grow WASM memory, which detaches our views.\n if (this.u32.buffer !== this.memory.buffer) this.refresh(0);\n }\n\n takeCount() {\n const n = this.written;\n this.written = 0;\n return n;\n }\n}\n", "// The generic packer: a port names its pass's parameters, and this lays them\n// out, encodes them and writes them, by name. scripts/gen-effect-params.mjs\n// generates the matching WGSL accessors (`param_<name>()`) from the same\n// layout, so the TS and WGSL sides never agree by position.\nimport { describeEffect, resolveEffectAxis, resolveEffectColor, type EffectParamDescriptor } from \"@motionscript/core\";\nimport type { EffectPort, Packed } from \"./_port\";\n\n/** Floats a pass can take (`EffectU.p` in _header.wgsl). */\nexport const MAX_PARAMS = 64;\n\nexport type ScalarType = \"f32\" | \"vec2f\" | \"vec3f\" | \"vec4f\";\n/** A WGSL-side type: a scalar/vector, or a fixed-length array of them. */\nexport type FieldType = ScalarType | { array: number; of: ScalarType };\n\n/**\n * One parameter of a pass.\n *\n * `\"param\"` is the core spec's parameter of the same name, encoded by its kind\n * (a number as is, a colour as straight RGBA, a point or axis as a vec2, a\n * boolean as 0/1, an enum as its index in the spec's options). A derived field\n * computes its value and names the spec parameters it reads in `uses`.\n */\nexport type Field<E, C> =\n | \"param\"\n | { type: FieldType; uses?: readonly string[]; value(effect: E, ctx: C): number | readonly number[] };\n\nexport interface PortSpec<E, C> {\n /** core's effect `type`; also the WGSL file name. */\n type: string;\n surface: \"shader\" | \"filter\";\n backdropOnly?: boolean;\n /** The pass's parameters, in layout order. */\n params: Record<string, Field<E, C>>;\n /** Spec parameters read on the host side only (a no-op check, `reach`, `blur`, an atlas). */\n uses?: readonly string[];\n /** Per-effect work shared by the fields and `extras`, or null for a no-op. Defaults to `{}`. */\n prepare?(effect: E): C | null;\n /** Everything a pass takes besides its parameters. */\n extras?(effect: E, ctx: C): Omit<Packed, \"params\">;\n cases(): object[];\n}\n\nexport interface LaidOutField {\n name: string;\n type: FieldType;\n /** Offset into the pass's floats. */\n offset: number;\n floats: number;\n}\n\nconst WIDTH: Record<ScalarType, number> = { f32: 1, vec2f: 2, vec3f: 3, vec4f: 4 };\n\nexport const fieldFloats = (type: FieldType) => (typeof type === \"string\" ? WIDTH[type] : type.array * WIDTH[type.of]);\n\nconst KIND_TYPE: Partial<Record<EffectParamDescriptor[\"kind\"], ScalarType>> = {\n number: \"f32\",\n boolean: \"f32\",\n enum: \"f32\",\n color: \"vec4f\",\n vec2: \"vec2f\",\n axis: \"vec2f\",\n};\n\nfunction encode(p: EffectParamDescriptor, value: unknown): number | readonly number[] {\n switch (p.kind) {\n case \"number\": return value as number;\n case \"boolean\": return value ? 1 : 0;\n case \"enum\": return Math.max(0, p.options!.indexOf(value as string | number));\n case \"color\": return resolveEffectColor(value as Parameters<typeof resolveEffectColor>[0]);\n case \"vec2\": { const v = value as { x: number; y: number }; return [v.x, v.y]; }\n case \"axis\": { const v = resolveEffectAxis(value as Parameters<typeof resolveEffectAxis>[0]); return [v.x, v.y]; }\n default: throw new Error(`effect param \"${p.name}\" (${p.kind}) has no default encoding; give it a value()`);\n }\n}\n\n/** The spec parameter a `\"param\"` field names, or a thrown error naming what is wrong. */\nfunction specParam(type: string, name: string): EffectParamDescriptor {\n const p = describeEffect(type)?.params.find((q) => q.name === name);\n if (!p) throw new Error(`effect \"${type}\": \"${name}\" is not a parameter of its core spec`);\n if (!KIND_TYPE[p.kind]) throw new Error(`effect \"${type}\": \"${name}\" (${p.kind}) has no default encoding`);\n return p;\n}\n\n/** The pass's parameters with their WGSL types and offsets. Throws past {@link MAX_PARAMS}. */\nexport function layout(spec: Pick<PortSpec<any, any>, \"type\" | \"params\">): LaidOutField[] {\n let offset = 0;\n const out = Object.entries(spec.params).map(([name, field]) => {\n const type = field === \"param\" ? KIND_TYPE[specParam(spec.type, name).kind]! : field.type;\n const floats = fieldFloats(type);\n const f = { name, type, offset, floats };\n offset += floats;\n return f;\n });\n if (offset > MAX_PARAMS) throw new Error(`effect \"${spec.type}\" lays out ${offset} params; a pass takes ${MAX_PARAMS}`);\n return out;\n}\n\n/** An {@link EffectPort} whose `pack` writes `spec.params` by name. */\nexport function definePort<E, C = Record<string, never>>(spec: PortSpec<E, C>): EffectPort<E> & { spec: PortSpec<E, C> } {\n const fields = layout(spec);\n const total = fields.reduce((n, f) => n + f.floats, 0);\n const encoders = fields.map((f) => {\n const field = spec.params[f.name];\n if (field !== \"param\") return field.value;\n const p = specParam(spec.type, f.name);\n return (e: E) => encode(p, (e as Record<string, unknown>)[f.name]);\n });\n return {\n type: spec.type,\n surface: spec.surface,\n backdropOnly: spec.backdropOnly,\n spec,\n cases: spec.cases,\n pack(effect) {\n const ctx = spec.prepare ? spec.prepare(effect) : ({} as C);\n if (ctx === null) return null;\n const params = new Array<number>(total).fill(0);\n fields.forEach((f, i) => {\n const v = encoders[i](effect, ctx);\n const n = typeof v === \"number\" ? 1 : v.length;\n if (n > f.floats) throw new Error(`effect \"${spec.type}\": \"${f.name}\" is ${n} floats, laid out as ${f.floats}`);\n if (typeof v === \"number\") params[f.offset] = v;\n else for (let k = 0; k < n; k++) params[f.offset + k] = v[k];\n });\n return { params, ...(spec.extras ? spec.extras(effect, ctx) : {}) };\n },\n };\n}\n", "import { definePort } from \"./_pack.ts\";\n\n// Scale alpha by `amount` (clamped to 0-1).\nexport default definePort<{ type: \"alpha\"; amount: number }>({\n type: \"alpha\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, Math.max(0, Math.min(1, e.amount)), 0] },\n },\n cases: () => [],\n});\n", "import { Effects, resolveAsciiCharset, type AsciiEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The atlas is baked with the 2D canvas, in a face the page has loaded into\n// document.fonts. The module neither fetches faces nor awaits at top level: a\n// published module that did would request URLs from the host's origin, and an\n// IIFE bundle of it would not build.\nconst FALLBACK_FAMILY = \"Inter\";\nconst available = (family: string) => typeof document !== \"undefined\" && document.fonts.check(`12px \"${family}\"`);\n\n// glyph-atlas.ts: cell = clamp(round(max(8, size * 2)), 4, 64); at most 256 glyphs.\nconst bakedCell = (size: number) => Math.max(4, Math.min(64, Math.round(Math.max(8, size * 2))));\n\n// Supersampling factor for the bake. 1 draws at the atlas size; larger values were tried\n// (unsnapped baseline, box-filtered) and rendered the glyphs too thin.\nconst SS = 1;\n\nfunction bake(charset: string, family: string, cell: number) {\n const glyphs = [...charset].slice(0, 256);\n const big = cell * SS;\n const canvas = new OffscreenCanvas(big * glyphs.length, big);\n const ctx = canvas.getContext(\"2d\", { willReadFrequently: true })!;\n ctx.fillStyle = \"#000\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = \"#fff\";\n ctx.font = `${cell * 0.8 * SS}px \"${family}\"`;\n ctx.textBaseline = \"alphabetic\";\n ctx.textAlign = \"left\";\n ctx.fontKerning = \"none\";\n glyphs.forEach((g, i) => {\n const advance = ctx.measureText(g).width;\n ctx.fillText(g, i * big + (big - advance) / 2, big * 0.78);\n });\n const src = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n const width = cell * glyphs.length;\n const pixels = new Uint8ClampedArray(width * cell * 4);\n for (let y = 0; y < cell; y++) {\n for (let x = 0; x < width; x++) {\n let sum = 0;\n for (let dy = 0; dy < SS; dy++) for (let dx = 0; dx < SS; dx++) sum += src[((y * SS + dy) * canvas.width + x * SS + dx) * 4];\n const v = sum / (SS * SS);\n const o = (y * width + x) * 4;\n pixels[o] = pixels[o + 1] = pixels[o + 2] = v;\n pixels[o + 3] = 255;\n }\n }\n return { glyphs: glyphs.length, pixels, width };\n}\n\nexport default definePort<AsciiEffect, { family: string; cell: number; charset: string; atlas: ReturnType<typeof bake> }>({\n type: \"ascii\",\n surface: \"shader\",\n params: {\n size: \"param\",\n glyphs: { type: \"f32\", uses: [\"charset\", \"fontFamily\"], value: (_e, c) => c.atlas.glyphs },\n cell: { type: \"f32\", value: (_e, c) => c.cell },\n ink: \"param\",\n background: \"param\",\n colored: \"param\",\n },\n prepare(e) {\n const charset = resolveAsciiCharset(e.charset);\n if (charset.length === 0) return null;\n // The engine falls back to the first registered family for one it lacks (\"monospace\").\n const family = available(e.fontFamily) ? e.fontFamily : FALLBACK_FAMILY;\n const cell = bakedCell(e.size);\n return { family, cell, charset, atlas: bake(charset, family, cell) };\n },\n extras: (_e, c) => ({\n aux: { key: `ascii|${c.family}|${c.cell}|${c.charset}`, width: c.atlas.width, height: c.cell, pixels: c.atlas.pixels },\n }),\n cases: () => [\n Effects.ascii().list[0],\n Effects.ascii({ size: 10, charset: \"hex\", fontFamily: \"Fira Mono\", ink: \"#6f6\", background: \"#001\", colored: false }).list[0],\n Effects.ascii({ size: 14, colored: true, background: \"transparent\", ink: \"white\" }).list[0],\n Effects.ascii({ size: 8, ink: \"black\", background: \"white\", charset: \" .oO@\" }).list[0],\n ],\n});\n", "import { Effects, type BitCrushEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's hardware palettes.\nconst PALETTES: Record<string, readonly string[]> = {\n gameboy: [\"#0f380f\", \"#306230\", \"#8bac0f\", \"#9bbc0f\"],\n cga: [\"#000000\", \"#55ffff\", \"#ff55ff\", \"#ffffff\"],\n nes: [\n \"#000000\", \"#fcfcfc\", \"#bcbcbc\", \"#7c7c7c\",\n \"#0000fc\", \"#0078f8\", \"#3cbcfc\", \"#a4e4fc\",\n \"#b8f818\", \"#00b800\", \"#005800\", \"#f83800\",\n \"#e40058\", \"#f878f8\", \"#f8b800\", \"#503000\",\n ],\n};\n\n// The engine bakes each channel as a 4-decimal literal.\nconst channels = (hex: string) => {\n const n = parseInt(hex.slice(1), 16);\n return [16, 8, 0].map((s) => Number((((n >> s) & 0xff) / 255).toFixed(4)));\n};\n\nexport default definePort<BitCrushEffect, { palette: readonly string[] }>({\n type: \"bitCrush\",\n surface: \"shader\",\n params: {\n bits: \"param\",\n amount: \"param\",\n count: { type: \"f32\", uses: [\"palette\"], value: (_e, c) => c.palette.length },\n palette: { type: { array: 16, of: \"vec3f\" }, value: (_e, c) => c.palette.flatMap(channels) },\n },\n prepare(e) {\n if (!(e.amount > 0)) return null;\n if (e.palette === \"none\" && e.bits >= 8) return null;\n return { palette: e.palette === \"none\" ? [] : PALETTES[e.palette] };\n },\n cases: () => [\n Effects.bitCrush().list[0],\n Effects.bitCrush({ palette: \"gameboy\" }).list[0],\n Effects.bitCrush({ palette: \"nes\", amount: 0.7 }).list[0],\n Effects.bitCrush({ palette: \"cga\" }).list[0],\n ],\n});\n", "import { Effects, resolveEffectAxis, type BlockDisplaceEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BlockDisplaceEffect>({\n type: \"blockDisplace\",\n surface: \"shader\",\n params: { amount: \"param\", size: \"param\", density: \"param\", seed: \"param\", axis: \"param\" },\n prepare(e) {\n if (!(e.amount > 0) || !(e.density > 0)) return null;\n const axis = resolveEffectAxis(e.axis);\n return axis.x === 0 && axis.y === 0 ? null : {};\n },\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n return { reach: e.amount * Math.max(Math.abs(axis.x), Math.abs(axis.y)) };\n },\n cases: () => [\n Effects.blockDisplace().list[0],\n Effects.blockDisplace({ amount: 40, size: 10, density: 0.6, seed: 3 }).list[0],\n Effects.blockDisplace({ amount: 30, size: 24, axis: \"y\", seed: 1 }).list[0],\n ],\n});\n", "import { Effects, type BloomEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BloomEffect, { t: number; scale: number; sigma: number }>({\n type: \"bloom\",\n surface: \"filter\",\n params: {\n // The engine's threshold matrix: out = (in − t) / (1 − t).\n scale: { type: \"f32\", uses: [\"threshold\"], value: (_e, c) => c.scale },\n bias: { type: \"f32\", value: (_e, c) => -c.t * c.scale },\n intensity: \"param\",\n },\n uses: [\"radius\"],\n prepare(e) {\n if (e.radius <= 0 || e.intensity <= 0) return null;\n const t = Math.max(0, Math.min(1, e.threshold));\n return { t, scale: t < 1 ? 1 / (1 - t) : 1, sigma: e.radius / 2 };\n },\n extras: (_e, c) => ({ blur: [c.sigma, c.sigma, 0], reach: 3 * c.sigma }),\n cases: () => [\n Effects.bloom().list[0],\n Effects.bloom({ threshold: 0.4, radius: 24, intensity: 1.5 }).list[0],\n Effects.bloom({ threshold: 0, radius: 6, intensity: 0.6 }).list[0],\n ],\n});\n", "import { Effects, type BlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BlurEffect>({\n type: \"blur\",\n surface: \"filter\",\n params: {},\n uses: [\"radius\"],\n // A zero-sigma blur is the identity.\n prepare: (e) => (e.radius > 0 ? {} : null),\n extras(e) {\n // Sigma is half the authored radius.\n const sigma = e.radius / 2;\n return { blur: [sigma, sigma, 0], reach: 3 * sigma };\n },\n cases: () => [Effects.blur(8).list[0], Effects.blur(24).list[0], Effects.blur(2).list[0]],\n});\n", "import { Effects, type BulgeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<BulgeEffect>({\n type: \"bulge\",\n surface: \"shader\",\n params: { strength: \"param\", center: \"param\" },\n prepare: (e) => (e.strength === 0 ? null : {}),\n extras(e) {\n // A pinch (k < 0) folds the far field back into the box: it draws out to\n // where f(r) = r(1 + k r²)/(1 + k) falls back to -1. The packer doesn't\n // know the box, so reach assumes a ~360 px half extent.\n // An off-centre lens also draws past the box on its far side.\n let reach = 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5) * 360;\n if (e.strength < 0) {\n const k = e.strength * 0.8;\n let r = 1;\n while (r < 4 && (r * (1 + k * r * r)) / (1 + k) > -1) r += 0.01;\n reach = Math.min((r - 1 + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800);\n }\n return { reach };\n },\n cases: () => [\n Effects.bulge(0.6).list[0],\n Effects.bulge(-0.7).list[0],\n Effects.bulge({ strength: 0.9, center: { x: 0.3, y: 0.6 } }).list[0],\n ],\n});\n", "import { Effects, type ChromaticAberrationEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's ghost matrices.\nconst RED = [1.4, -0.2, -0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0];\nconst BLUE = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.2, -0.2, 1.4, 0, 0, 0, 0, 0, 1, 0];\n\nexport default definePort<ChromaticAberrationEffect>({\n type: \"chromaticAberration\",\n surface: \"filter\",\n params: {\n red: { type: { array: 20, of: \"f32\" }, value: () => RED },\n blue: { type: { array: 20, of: \"f32\" }, value: () => BLUE },\n offset: {\n type: \"vec2f\",\n uses: [\"amount\", \"angle\"],\n value(e) {\n const rad = (e.angle * Math.PI) / 180;\n return [Math.cos(rad) * e.amount, Math.sin(rad) * e.amount];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 ? null : {}),\n extras: (e) => ({ reach: e.amount }),\n cases: () => [\n Effects.chromaticAberration().list[0],\n Effects.chromaticAberration({ amount: 8, angle: 45 }).list[0],\n Effects.chromaticAberration({ amount: 2.5, angle: 200 }).list[0],\n ],\n});\n", "import { Effects, type ColorAdjustmentEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's composition.\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\n// outer × inner, both 4×5 with an implicit last row [0,0,0,0,1].\nfunction multiply(outer: number[], inner: number[]): number[] {\n const out = new Array(20).fill(0);\n for (let i = 0; i < 4; i++) {\n for (let j = 0; j < 5; j++) {\n let sum = 0;\n for (let k = 0; k < 4; k++) sum += outer[i * 5 + k] * inner[k * 5 + j];\n if (j === 4) sum += outer[i * 5 + 4];\n out[i * 5 + j] = sum;\n }\n }\n return out;\n}\n\nconst diag = (s: number, o: number) => [s, 0, 0, 0, o, 0, s, 0, 0, o, 0, 0, s, 0, o, 0, 0, 0, 1, 0];\nconst offsets = (r: number, g: number, b: number) => [1, 0, 0, 0, r, 0, 1, 0, 0, g, 0, 0, 1, 0, b, 0, 0, 0, 1, 0];\n\nfunction saturation(s: number): number[] {\n const i = 1 - s;\n return [\n s + i * LR, i * LG, i * LB, 0, 0,\n i * LR, s + i * LG, i * LB, 0, 0,\n i * LR, i * LG, s + i * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n}\n\nfunction hue(deg: number): number[] {\n const rad = (deg * Math.PI) / 180;\n const c = Math.cos(rad), s = Math.sin(rad);\n return [\n LR + c * (1 - LR) + s * -LR, LG + c * -LG + s * -LG, LB + c * -LB + s * (1 - LB), 0, 0,\n LR + c * -LR + s * 0.143, LG + c * (1 - LG) + s * 0.140, LB + c * -LB + s * -0.283, 0, 0,\n LR + c * -LR + s * -(1 - LR), LG + c * -LG + s * LG, LB + c * (1 - LB) + s * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n}\n\nexport default definePort<ColorAdjustmentEffect, { matrix: number[] }>({\n type: \"colorAdjustment\",\n surface: \"filter\",\n params: {\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"brightness\", \"contrast\", \"saturation\", \"hue\", \"vibrance\", \"temperature\", \"tint\", \"shadows\", \"highlights\"],\n value: (_e, c) => c.matrix,\n },\n },\n prepare(e) {\n let mat = diag(1, 0);\n let any = false;\n const apply = (m: number[]) => { mat = multiply(m, mat); any = true; };\n const b = e.brightness ?? 0;\n if (b !== 0) apply(diag(1, b));\n const c = e.contrast ?? 1;\n if (c !== 1) apply(diag(c, 0.5 * (1 - c)));\n const s = e.saturation ?? 1;\n if (s !== 1) apply(saturation(s));\n const h = ((e.hue ?? 0) % 360 + 360) % 360;\n if (h !== 0) apply(hue(h));\n const v = e.vibrance ?? 0;\n if (v !== 0) apply(saturation(1 + v * 0.7));\n const t = e.temperature ?? 0;\n if (t !== 0) apply(offsets(t * 0.1, 0, -t * 0.1));\n const ti = e.tint ?? 0;\n if (ti !== 0) apply(offsets(ti * 0.05, -ti * 0.1, ti * 0.05));\n const sh = e.shadows ?? 0;\n if (sh !== 0) apply(diag(1 - 0.2 * sh, 0.2 * sh));\n const hi = e.highlights ?? 0;\n if (hi !== 0) apply(diag(1 + 0.2 * hi, -0.1 * hi));\n return any ? { matrix: mat } : null;\n },\n cases: () => [\n Effects.colorAdjustment({ brightness: 0.1, contrast: 1.3, saturation: 1.4 }).list[0],\n Effects.colorAdjustment({ hue: 120, vibrance: 0.5 }).list[0],\n Effects.colorAdjustment({ temperature: 0.6, tint: -0.4, shadows: 0.5, highlights: -0.5 }).list[0],\n Effects.colorAdjustment({ contrast: 0.6, saturation: 0 }).list[0],\n ],\n});\n", "import { definePort } from \"./_pack.ts\";\n\n// The authored 4×5 matrix as is.\nexport default definePort<{ type: \"colorMatrix\"; matrix: ArrayLike<number> }>({\n type: \"colorMatrix\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => Array.from(e.matrix).slice(0, 20) },\n },\n cases: () => [],\n});\n", "import { Effects, type CurvesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's resampling: the curve as\n// 33 evenly spaced outputs over 0–1.\nconst SEGMENTS = 32;\n\nfunction evalCurve(points: [number, number][], x: number): number {\n if (points.length === 0) return x;\n if (x <= points[0][0]) return points[0][1];\n const last = points[points.length - 1];\n if (x >= last[0]) return last[1];\n for (let i = 0; i < points.length - 1; i++) {\n const [x0, y0] = points[i];\n const [x1, y1] = points[i + 1];\n if (x >= x0 && x <= x1) return y0 + (y1 - y0) * (x1 === x0 ? 0 : (x - x0) / (x1 - x0));\n }\n return x;\n}\n\nfunction ramp(points: [number, number][]): number[] {\n const sorted = [...points].sort((a, b) => a[0] - b[0]);\n const out: number[] = [];\n for (let i = 0; i <= SEGMENTS; i++) {\n const y = evalCurve(sorted, i / SEGMENTS);\n out.push(Number.isFinite(y) ? Math.max(0, Math.min(1, y)) : i / SEGMENTS);\n }\n return out;\n}\n\nconst MASKS: Record<string, number[]> = { r: [1, 0, 0, 0], g: [0, 1, 0, 0], b: [0, 0, 1, 0], a: [0, 0, 0, 1] };\n\nexport default definePort<CurvesEffect, { values: number[] }>({\n type: \"curves\",\n surface: \"shader\",\n params: {\n mask: { type: \"vec4f\", uses: [\"channel\"], value: (e) => MASKS[e.channel ?? \"rgb\"] ?? [1, 1, 1, 0] },\n curve: { type: { array: SEGMENTS + 1, of: \"f32\" }, uses: [\"points\"], value: (_e, c) => c.values },\n },\n prepare(e) {\n const values = ramp(e.points ?? []);\n return values.every((y, i) => Math.abs(y - i / SEGMENTS) < 1e-4) ? null : { values };\n },\n cases: () => [\n Effects.curves({ points: [[0, 0], [0.25, 0.15], [0.75, 0.88], [1, 1]] }).list[0],\n Effects.curves({ points: [[0, 0.2], [0.5, 0.7], [1, 1]], channel: \"r\" }).list[0],\n Effects.curves({ points: [[0, 0], [0.6, 0.3], [1, 0.8]], channel: \"a\" }).list[0],\n ],\n});\n", "import { Effects, type DirectionalBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<DirectionalBlurEffect, { sigma: number; rad: number }>({\n type: \"directionalBlur\",\n surface: \"filter\",\n params: {\n sigma: { type: \"f32\", uses: [\"radius\"], value: (_e, c) => c.sigma },\n axis: { type: \"vec2f\", uses: [\"angle\"], value: (_e, c) => [Math.cos(c.rad), Math.sin(c.rad)] },\n },\n prepare: (e) => (e.radius <= 0 ? null : { sigma: e.radius / 2, rad: (e.angle * Math.PI) / 180 }),\n extras: (_e, c) => ({ blur: [c.sigma, 0, c.rad], reach: 3 * c.sigma }),\n cases: () => [\n Effects.directionalBlur(20).list[0],\n Effects.directionalBlur({ radius: 30, angle: 45 }).list[0],\n Effects.directionalBlur({ radius: 12, angle: 100 }).list[0],\n Effects.directionalBlur({ radius: 120, angle: -20 }).list[0],\n ],\n});\n", "import { Effects, type DitherEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// The engine's 64x64 void-and-cluster table, verbatim.\nconst BLUE_NOISE_BASE64 =\n \"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\";\n\nconst ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst SIZE = 64;\n\nlet table: Uint8ClampedArray | null = null;\nfunction blueNoiseRgba(): Uint8ClampedArray {\n if (table) return table;\n const text = BLUE_NOISE_BASE64.replace(/[^A-Za-z0-9+/]/g, \"\");\n const bytes = new Uint8Array((text.length * 3) >> 2);\n let acc = 0, bits = 0, written = 0;\n for (let i = 0; i < text.length; i++) {\n acc = (acc << 6) | ALPHABET.indexOf(text[i]);\n bits += 6;\n if (bits >= 8) { bits -= 8; bytes[written++] = (acc >> bits) & 0xff; }\n }\n const out = new Uint8ClampedArray(SIZE * SIZE * 4);\n for (let i = 0; i < SIZE * SIZE; i++) out.fill(bytes[i], i * 4, i * 4 + 3), (out[i * 4 + 3] = 255);\n return (table = out);\n}\n\nexport default definePort<DitherEffect>({\n type: \"dither\",\n surface: \"shader\",\n params: {\n levels: \"param\",\n scale: \"param\",\n monochrome: \"param\",\n noise: \"param\",\n matrix: { type: \"f32\", value: (e) => e.matrix },\n },\n prepare: (e) => (e.levels >= 256 ? null : {}),\n extras: (e) => ({\n aux: e.noise === \"blue\" ? { key: \"dither-blue-noise\", width: SIZE, height: SIZE, pixels: blueNoiseRgba() } : undefined,\n }),\n cases: () => [\n Effects.dither().list[0],\n Effects.dither({ levels: 4, matrix: 8, scale: 2, monochrome: true }).list[0],\n Effects.dither({ noise: \"blue\", levels: 3 }).list[0],\n Effects.dither({ matrix: 2, levels: 6, scale: 3 }).list[0],\n ],\n});\n", "import { Effects, resolveEffectColor, type DropShadowEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<DropShadowEffect, { ox: number; oy: number; sigma: number; spread: number }>({\n type: \"dropShadow\",\n surface: \"shader\",\n params: {\n offset: { type: \"vec2f\", uses: [\"offsetX\", \"offsetY\"], value: (_e, c) => [c.ox, c.oy] },\n sigma: { type: \"f32\", uses: [\"blur\"], value: (_e, c) => c.sigma },\n color: \"param\",\n spread: { type: \"f32\", value: (_e, c) => c.spread },\n },\n prepare(e) {\n if (resolveEffectColor(e.color)[3] <= 0) return null;\n const ox = e.offsetX;\n const oy = -e.offsetY; // scene is y-up, the pass y-down\n const sigma = Math.max(0, e.blur) / 2;\n const spread = Math.max(0, e.spread);\n if (ox === 0 && oy === 0 && sigma === 0 && spread === 0) return null;\n return { ox, oy, sigma, spread };\n },\n extras: (_e, c) => ({ reach: Math.hypot(c.ox, c.oy) + 3 * c.sigma + c.spread }),\n cases: () => [\n Effects.dropShadow().list[0],\n Effects.dropShadow({ offsetX: 10, offsetY: 10, blur: 24, color: \"#0008\" }).list[0],\n Effects.dropShadow({ offsetX: 0, offsetY: 0, blur: 0, spread: 6, color: \"#f40\" }).list[0],\n Effects.dropShadow({ offsetX: -12, offsetY: -6, blur: 40, spread: 4, color: \"#04f\" }).list[0],\n ],\n});\n", "import { Effects, resolveEffectColor, type DuotoneEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\nexport default definePort<DuotoneEffect>({\n type: \"duotone\",\n surface: \"filter\",\n params: {\n // The engine's duotone matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\", \"shadows\", \"highlights\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n const shadows = resolveEffectColor(e.shadows);\n const highlights = resolveEffectColor(e.highlights);\n const row = (i: number) => {\n const d = (highlights[i] - shadows[i]) * a;\n const r = [d * LR, d * LG, d * LB, 0, shadows[i] * a];\n r[i] += 1 - a;\n return r;\n };\n return [...row(0), ...row(1), ...row(2), 0, 0, 0, 1, 0];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 ? null : {}),\n cases: () => [\n Effects.duotone().list[0],\n Effects.duotone({ shadows: \"#1a0b3d\", highlights: \"#ffcc66\" }).list[0],\n Effects.duotone({ amount: 0.5, shadows: \"#003344\", highlights: \"#ff6699\" }).list[0],\n ],\n});\n", "import { Effects, type EdgesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<EdgesEffect>({\n type: \"edges\",\n surface: \"shader\",\n params: { strength: \"param\", kernel: \"param\", colored: \"param\" },\n prepare: (e) => (e.strength > 0 ? {} : null),\n // Edges light up one tap (a device px) past the silhouette.\n extras: () => ({ reach: 1 }),\n cases: () => [\n Effects.edges().list[0],\n Effects.edges({ strength: 2, kernel: \"prewitt\", colored: true }).list[0],\n Effects.edges({ strength: 1.5, kernel: \"laplacian\" }).list[0],\n ],\n});\n", "import { definePort } from \"./_pack.ts\";\n\n// Scale rgb by `amount`.\nexport default definePort<{ type: \"exposure\"; amount: number }>({\n type: \"exposure\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, value: (e) => [e.amount, 0, 0, 0, 0, 0, e.amount, 0, 0, 0, 0, 0, e.amount, 0, 0, 0, 0, 0, 1, 0] },\n },\n cases: () => [],\n});\n", "import { Effects, type GlassEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst clamp01 = (v: number) => Math.min(1, Math.max(0, v));\n\n// The engine's constants.\nconst DISPERSION_SPAN = 0.35;\nconst LIGHT_GAIN = 1;\nconst SHADE_NEAR = 0.1;\nconst SHADE_FAR = 0.06;\nconst SHADE_REACH = 0.7;\nconst SPLAY_REACH = 0.3;\nconst SPLAY_THINNING = 0.25;\n\nexport default definePort<GlassEffect, { light: number; splay: number; frost: number }>({\n type: \"glass\",\n surface: \"shader\",\n // The engine's handler only answers for the backdrop.\n backdropOnly: true,\n params: {\n depth: \"param\",\n refraction: { type: \"f32\", value: (e) => Math.max(0, e.refraction / 100) },\n spread: { type: \"f32\", uses: [\"dispersion\"], value: (e) => clamp01(e.dispersion / 100) * DISPERSION_SPAN },\n light: {\n type: \"vec2f\",\n uses: [\"lightAngle\"],\n value(e) {\n const radians = (e.lightAngle * Math.PI) / 180;\n return [Math.sin(radians), -Math.cos(radians)];\n },\n },\n rim: { type: \"f32\", uses: [\"lightIntensity\"], value: (_e, c) => c.light * LIGHT_GAIN },\n shade_near: { type: \"f32\", uses: [\"splay\"], value: (_e, c) => c.light * SHADE_NEAR * (1 - SPLAY_THINNING * c.splay) },\n shade_far: { type: \"f32\", value: (_e, c) => c.light * SHADE_FAR * (1 - SPLAY_THINNING * c.splay) },\n shade_reach: { type: \"f32\", value: (_e, c) => SHADE_REACH + SPLAY_REACH * c.splay },\n frost: { type: \"f32\", value: (_e, c) => c.frost },\n },\n prepare(e) {\n if (!(e.depth > 0)) return null;\n return {\n light: Math.max(0, e.lightIntensity / 100),\n splay: clamp01(e.splay / 100),\n // Figma's frost is a blur radius, twice the sigma.\n frost: Math.max(0, e.frost) * 0.5,\n };\n },\n extras: (_e, c) => ({\n // The frost blur reads past the outline; refraction pulls inward.\n reach: 3 * c.frost + 2,\n blur: c.frost > 0 ? [c.frost, c.frost, 0] : undefined,\n field: true,\n }),\n cases: () => [\n Effects.glass().list[0],\n Effects.glass({ dispersion: 0, frost: 0, depth: 30 }).list[0],\n ],\n});\n", "import { Effects, type GlowEffect, resolveEffectAxis, resolveEffectColor, type Color } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\n// core's blend names, in blend_mode's index order (_header.wgsl).\nconst BLEND = [\"normal\", \"multiply\", \"screen\", \"overlay\", \"darken\", \"lighten\", \"color-dodge\", \"color-burn\",\n \"hard-light\", \"soft-light\", \"difference\", \"exclusion\", \"hue\", \"saturation\", \"color\", \"luminosity\"];\n\nexport default definePort<GlowEffect, { colors: Color[] }>({\n type: \"glow\",\n surface: \"shader\",\n params: {\n channel: \"param\",\n threshold: \"param\",\n spread: { type: \"f32\", value: (e) => Math.max(0, e.spread) },\n intensity: \"param\",\n tint: \"param\",\n original: \"param\",\n blend: { type: \"f32\", value: (e) => Math.max(0, BLEND.indexOf(e.blend)) },\n count: { type: \"f32\", value: (_e, c) => c.colors.length },\n cycles: \"param\",\n phase: { type: \"f32\", value: (e) => e.phase / 360 },\n mirror: { type: \"f32\", uses: [\"loopStyle\"], value: (e) => (e.loopStyle === \"mirror\" ? 1 : 0) },\n stops: {\n type: { array: 8, of: \"f32\" },\n value(e, c) {\n const out: number[] = [];\n let previous = 0;\n for (let i = 0; i < c.colors.length; i++) {\n previous = Math.max(previous, Math.min(1, e.stops[i] ?? i / Math.max(1, c.colors.length - 1)));\n out.push(previous);\n }\n return out;\n },\n },\n colors: { type: { array: 8, of: \"vec4f\" }, uses: [\"color\"], value: (_e, c) => c.colors.flatMap((x) => resolveEffectColor(x)) },\n },\n uses: [\"radius\", \"axis\"],\n prepare(e) {\n // The engine's renderInputs declines these (the node paints untouched).\n if ((e.radius <= 0 && e.spread <= 0) || e.intensity <= 0) return null;\n return { colors: (e.tint === \"solid\" ? [e.color] : e.colors).slice(0, 8) };\n },\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n const sigma = Math.max(0, e.radius) / 2;\n // Glow spreads past the content by its blur and spread.\n return { blur: [sigma * axis.x, sigma * axis.y, 0], reach: 3 * sigma + Math.max(0, e.spread) };\n },\n cases: () => [\n Effects.glow().list[0],\n Effects.glow({ radius: 12, threshold: 0.3, intensity: 1.5, original: \"front\" }).list[0],\n Effects.glow({ channel: \"alpha\", radius: 20, spread: 4, tint: \"solid\", color: \"#4cf\" }).list[0],\n Effects.glow({ radius: 30, tint: \"ramp\", colors: [\"#ff3\", \"#f0f\", \"#0ff\"], stops: [0, 0.5, 1], blend: \"lighten\" }).list[0],\n ],\n});\n", "import { Effects, type GrainEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<GrainEffect>({\n type: \"grain\",\n surface: \"shader\",\n // `animated` folds floor(time * 1000) into the seed; the harness renders at t = 0.\n params: { amount: \"param\", size: \"param\", seed: \"param\", colored: \"param\", animated: \"param\" },\n prepare: (e) => (e.amount > 0 ? {} : null),\n cases: () => [\n Effects.grain().list[0],\n Effects.grain({ amount: 0.5, size: 3, seed: 7, colored: true }).list[0],\n Effects.grain({ amount: 0.15, size: 2 }).list[0],\n ],\n});\n", "import { Effects, type GrayscaleEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\n\nexport default definePort<GrayscaleEffect>({\n type: \"grayscale\",\n surface: \"filter\",\n params: {\n // The engine's 4×5 matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n return [\n 1 - a + a * LR, a * LG, a * LB, 0, 0,\n a * LR, 1 - a + a * LG, a * LB, 0, 0,\n a * LR, a * LG, 1 - a + a * LB, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n },\n },\n },\n cases: () => [Effects.grayscale(1).list[0], Effects.grayscale(0.5).list[0]],\n});\n", "import { Effects, type HalftoneEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<HalftoneEffect>({\n type: \"halftone\",\n surface: \"shader\",\n params: {\n size: \"param\",\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n shape: \"param\",\n separation: \"param\",\n },\n // A sub-pixel pitch is a no-op in the engine; the pass checks it (needs the scale).\n // A cell whose centre is inside the node draws its dot across the edge: up to a pitch.\n extras: (e) => ({ reach: e.size }),\n cases: () => [\n Effects.halftone().list[0],\n Effects.halftone({ size: 10, angle: 20, shape: \"line\", separation: \"rgb\" }).list[0],\n Effects.halftone({ size: 12, shape: \"cross\", separation: \"cmyk\" }).list[0],\n ],\n});\n", "import { Effects, type InvertEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst LR = 0.2126, LG = 0.7152, LB = 0.0722;\nconst IDENTITY = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n\n// The engine's fully inverted matrix per channel.\nfunction fullMatrix(channel: InvertEffect[\"channel\"]): number[] {\n switch (channel) {\n case \"red\": return [-1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n case \"green\": return [1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];\n case \"blue\": return [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0];\n case \"alpha\": return [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 1];\n case \"hue\": return [\n 2 * LR - 1, 2 * LG, 2 * LB, 0, 0,\n 2 * LR, 2 * LG - 1, 2 * LB, 0, 0,\n 2 * LR, 2 * LG, 2 * LB - 1, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n case \"luminance\": return [\n 1 - 2 * LR, -2 * LG, -2 * LB, 0, 1,\n -2 * LR, 1 - 2 * LG, -2 * LB, 0, 1,\n -2 * LR, -2 * LG, 1 - 2 * LB, 0, 1,\n 0, 0, 0, 1, 0,\n ];\n default: return [-1, 0, 0, 0, 1, 0, -1, 0, 0, 1, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0];\n }\n}\n\nexport default definePort<InvertEffect, { matrix: number[] }>({\n type: \"invert\",\n surface: \"filter\",\n params: {\n matrix: { type: { array: 20, of: \"f32\" }, uses: [\"channel\", \"strength\"], value: (_e, c) => c.matrix },\n },\n prepare(e) {\n const s = Math.max(0, Math.min(1, e.strength));\n if (s === 0) return null;\n const target = fullMatrix(e.channel);\n return { matrix: IDENTITY.map((v, i) => v + (target[i] - v) * s) };\n },\n // An alpha invert turns transparent black opaque everywhere it is drawn,\n // not just over the content: reach\n // far enough to cover the canvas.\n extras: (_e, c) => (c.matrix[19] > 0 ? { reach: 4096 } : {}),\n cases: () => [\n Effects.invert().list[0],\n Effects.invert({ channel: \"hue\", strength: 0.7 }).list[0],\n Effects.invert({ channel: \"luminance\" }).list[0],\n Effects.invert({ channel: \"alpha\", strength: 0.5 }).list[0],\n ],\n});\n", "import { Effects, type KaleidoscopeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<KaleidoscopeEffect, { segments: number }>({\n type: \"kaleidoscope\",\n surface: \"shader\",\n params: {\n wedge: { type: \"f32\", uses: [\"segments\"], value: (_e, c) => (2 * Math.PI) / c.segments },\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n offset: \"param\",\n amount: { type: \"f32\", value: (e) => Math.max(0, Math.min(1, e.amount)) },\n center: \"param\",\n },\n prepare(e) {\n const segments = Math.round(e.segments);\n return segments < 2 || e.amount <= 0 ? null : { segments };\n },\n // The fold keeps r (shifted by offset), so it draws out to ≤ √2\n // normalised. Reach assumes a ~360 px half extent.\n extras: (e) => ({\n reach: Math.min((Math.SQRT2 - 1 + Math.abs(e.offset) + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800),\n }),\n cases: () => [\n Effects.kaleidoscope().list[0],\n Effects.kaleidoscope({ segments: 8, angle: 20, offset: 0.15 }).list[0],\n Effects.kaleidoscope({ segments: 3, amount: 0.6, center: { x: 0.4, y: 0.55 } }).list[0],\n ],\n});\n", "import { Effects, type LutEffect } from \"@motionscript/core\";\nimport type { AuxTexture } from \"./_port\";\nimport { definePort } from \"./_pack.ts\";\n\n// Baked per table identity.\nconst baked = new WeakMap<Float32Array, AuxTexture>();\nlet serial = 0;\n\nconst toByte = (v: number) => (Number.isFinite(v) ? Math.max(0, Math.min(255, Math.round(v * 255))) : 0);\n\n// The cube unrolled into an N²×N strip: texel (r + b·N, g) holds (r, g, b).\n// Entries past the table's end stay black, as the engine leaves them.\nfunction bake(table: Float32Array, n: number): AuxTexture {\n const hit = baked.get(table);\n if (hit && hit.height === n) return hit;\n const width = n * n;\n const pixels = new Uint8ClampedArray(width * n * 4);\n for (let b = 0; b < n; b++) {\n for (let g = 0; g < n; g++) {\n for (let r = 0; r < n; r++) {\n const s = ((b * n + g) * n + r) * 3;\n const d = (g * width + b * n + r) * 4;\n pixels[d + 3] = 255;\n if (s + 2 >= table.length) continue;\n pixels[d] = toByte(table[s]);\n pixels[d + 1] = toByte(table[s + 1]);\n pixels[d + 2] = toByte(table[s + 2]);\n }\n }\n }\n const aux = { key: `lut-${serial++}`, width, height: n, pixels };\n baked.set(table, aux);\n return aux;\n}\n\n// A test look: a lifted, teal-and-orange grade with channel crosstalk.\nfunction look(n: number): Float32Array {\n const t = new Float32Array(n * n * n * 3);\n for (let b = 0; b < n; b++) {\n for (let g = 0; g < n; g++) {\n for (let r = 0; r < n; r++) {\n const [R, G, B] = [r / (n - 1), g / (n - 1), b / (n - 1)];\n const i = ((b * n + g) * n + r) * 3;\n t[i] = 0.05 + 0.95 * Math.pow(R, 0.8);\n t[i + 1] = 0.85 * G + 0.1 * B + 0.03;\n t[i + 2] = 1 - Math.pow(1 - B, 1.4) * 0.9 - 0.08 * R;\n }\n }\n }\n return t;\n}\n\nlet tables: [Float32Array, Float32Array] | null = null;\n\nexport default definePort<LutEffect>({\n type: \"lut\",\n surface: \"shader\",\n params: { size: \"param\", amount: \"param\" },\n uses: [\"table\"],\n prepare: (e) => (e.amount <= 0 || !Number.isInteger(e.size) || e.size < 2 ? null : {}),\n extras: (e) => ({ aux: bake(e.table, e.size) }),\n cases: () => {\n tables ??= [look(17), look(33)];\n return [\n Effects.lut({ table: tables[1], size: 33 }).list[0],\n Effects.lut({ table: tables[0], size: 17, amount: 0.6 }).list[0],\n ];\n },\n});\n", "import { Effects, type MagnifyEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<MagnifyEffect>({\n type: \"magnify\",\n surface: \"shader\",\n // magnify draws nothing.\n backdropOnly: true,\n params: { scale: \"param\", center: \"param\" },\n prepare: (e) => (e.scale === 1 || e.scale <= 0 ? null : {}),\n // Magnifying samples inside the box; shrinking samples outside it, by\n // up to (1/scale − 1) of the half extent (assumed ~360 px, as bulge).\n extras: (e) => ({ reach: e.scale < 1 ? Math.min((1 / e.scale - 1) * 360, 800) : 0 }),\n cases: () => [\n Effects.magnify({ scale: 2 }).list[0],\n Effects.magnify({ scale: 1.6, center: { x: 0.3, y: 0.7 } }).list[0],\n ],\n});\n", "import { Effects, type OilPaintEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<OilPaintEffect>({\n type: \"oilPaint\",\n surface: \"shader\",\n params: { radius: \"param\" },\n // The engine returns null when the radius rounds below 1 device px; the\n // scale isn't known here, so sub-pixel radii fall through to a no-op in WGSL.\n prepare: (e) => (e.radius > 0 ? {} : null),\n extras: (e) => ({ reach: e.radius }),\n cases: () => [\n Effects.oilPaint().list[0],\n Effects.oilPaint({ radius: 5 }).list[0],\n Effects.oilPaint({ radius: 1.5 }).list[0],\n ],\n});\n", "import { Effects, resolveEffectColor, type OutlineEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nconst POSITION = { outside: 0, inside: 1, center: 2 };\n\nexport default definePort<OutlineEffect, { position: number }>({\n type: \"outline\",\n surface: \"shader\",\n params: {\n width: \"param\",\n position: { type: \"f32\", value: (_e, c) => c.position },\n color: \"param\",\n },\n prepare(e) {\n if (!(e.width > 0) || resolveEffectColor(e.color)[3] <= 0) return null;\n return { position: POSITION[e.position] ?? 0 };\n },\n extras: (e, c) => ({ reach: c.position === 1 ? 0 : c.position === 2 ? e.width / 2 : e.width }),\n cases: () => [\n Effects.outline().list[0],\n Effects.outline({ width: 8, color: \"#f80\", position: \"inside\" }).list[0],\n Effects.outline({ width: 6, color: \"#0cf\", position: \"center\" }).list[0],\n ],\n});\n", "import { Effects, type PixelateEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<PixelateEffect>({\n type: \"pixelate\",\n surface: \"filter\",\n params: { blocks: \"param\", sharpColors: \"param\" },\n // Blended blocks fade out over half a block past the grid's edge (the\n // engine's linear upsample of a decal grid). A block's size depends on\n // the box, which the packer doesn't see: reach a generous fixed amount.\n // The grid is anchored at the box's top-left, as the engine's is for a\n // node laid out around its own centre.\n extras: (e) => ({ reach: e.sharpColors ? 0 : 100 }),\n cases: () => [\n Effects.pixelate(40).list[0],\n Effects.pixelate({ blocks: { x: 40, y: 24 }, sharpColors: false }).list[0],\n Effects.pixelate({ blocks: { x: 12.5, y: 40 / 3 } }).list[0],\n ],\n});\n", "import { Effects, type PosterizeEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<PosterizeEffect>({\n type: \"posterize\",\n surface: \"shader\",\n params: { levels: \"param\" },\n prepare: (e) => (e.levels < 2 ? null : {}),\n cases: () => [Effects.posterize().list[0], Effects.posterize(2).list[0], Effects.posterize(7).list[0]],\n});\n", "import { Effects, type ProgressiveBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ProgressiveBlurEffect, { start0: number }>({\n type: \"progressiveBlur\",\n surface: \"shader\",\n params: {\n center: \"param\",\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const a = (e.angle * Math.PI) / 180;\n return [Math.cos(a), Math.sin(a)];\n },\n },\n radius: \"param\",\n start_radius: { type: \"f32\", uses: [\"startRadius\"], value: (_e, c) => c.start0 },\n start: \"param\",\n end: \"param\",\n shape: \"param\",\n samples: { type: \"f32\", value: (e) => Math.max(2, Math.min(32, Math.round(e.samples))) },\n },\n prepare(e) {\n const start0 = e.startRadius ?? 0;\n return e.radius <= 0 && start0 <= 0 ? null : { start0 };\n },\n extras: (e, c) => ({ reach: Math.max(e.radius, c.start0, 0) }),\n cases: () => [\n Effects.progressiveBlur().list[0],\n Effects.progressiveBlur({ radius: 30, angle: 0, start: 0.3, end: 0.9, samples: 28 }).list[0],\n Effects.progressiveBlur({ radius: 28, startRadius: 4, shape: \"radial\", center: { x: 0.4, y: 0.5 } }).list[0],\n ],\n});\n", "import { Effects, type RadialBlurEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<RadialBlurEffect>({\n type: \"radialBlur\",\n surface: \"shader\",\n params: {\n amount: \"param\",\n style: \"param\",\n center: \"param\",\n samples: { type: \"f32\", value: (e) => Math.round(Math.max(2, Math.min(32, e.samples))) },\n },\n prepare: (e) => (e.amount > 0 ? {} : null),\n extras(e) {\n // Taps pull in material from farther in (zoom: out to 1/(1 - amount/2) of\n // the box; spin: round to the corners), so the smear spills past the box.\n // Reach assumes a ~360 px half extent (the packer doesn't see the box).\n const spill = e.style === \"spin\" ? Math.SQRT2 - 1 : 1 / Math.max(1 - e.amount / 2, 0.25) - 1;\n return { reach: Math.min((spill + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800) };\n },\n cases: () => [\n Effects.radialBlur().list[0],\n Effects.radialBlur({ amount: 0.8, style: \"spin\", samples: 24 }).list[0],\n Effects.radialBlur({ amount: 0.3, center: { x: 0.3, y: 0.4 }, samples: 8 }).list[0],\n ],\n});\n", "import { Effects, type RgbShiftEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<RgbShiftEffect>({\n type: \"rgbShift\",\n surface: \"shader\",\n params: { red: \"param\", green: \"param\", blue: \"param\" },\n prepare(e) {\n const { red, green, blue } = e;\n return !red.x && !red.y && !green.x && !green.y && !blue.x && !blue.y ? null : {};\n },\n extras: ({ red, green, blue }) => ({\n reach: Math.max(Math.abs(red.x), Math.abs(red.y), Math.abs(green.x), Math.abs(green.y), Math.abs(blue.x), Math.abs(blue.y)),\n }),\n cases: () => [\n Effects.rgbShift().list[0],\n Effects.rgbShift({ amount: 12 }).list[0],\n Effects.rgbShift({ red: { x: 6, y: -4 }, green: { x: -3, y: 5 }, blue: { x: 0, y: 9 } }).list[0],\n ],\n});\n", "import { Effects, type ScanlinesEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ScanlinesEffect>({\n type: \"scanlines\",\n surface: \"shader\",\n params: {\n spacing: \"param\",\n thickness: \"param\",\n darkness: \"param\",\n offset: \"param\",\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const r = (e.angle * Math.PI) / 180;\n return [Math.cos(r), Math.sin(r)];\n },\n },\n },\n prepare: (e) => (e.darkness > 0 ? {} : null),\n cases: () => [\n Effects.scanlines().list[0],\n Effects.scanlines({ spacing: 7, thickness: 0.3, darkness: 0.8, offset: 2, angle: 30 }).list[0],\n Effects.scanlines({ spacing: 5, thickness: 0.7, angle: 90 }).list[0],\n ],\n});\n", "import { Effects, resolveEffectAxis, type ScatterEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ScatterEffect>({\n type: \"scatter\",\n surface: \"shader\",\n params: {\n offset: {\n type: \"vec2f\",\n uses: [\"strength\", \"axis\"],\n value(e) {\n const axis = resolveEffectAxis(e.axis);\n return [e.strength * axis.x, e.strength * axis.y];\n },\n },\n },\n prepare: (e) => (e.strength > 0 ? {} : null),\n extras(e) {\n const axis = resolveEffectAxis(e.axis);\n return { reach: e.strength * Math.max(Math.abs(axis.x), Math.abs(axis.y)) };\n },\n cases: () => [\n Effects.scatter().list[0],\n Effects.scatter({ strength: 24, axis: \"x\" }).list[0],\n Effects.scatter({ strength: 6, axis: \"y\" }).list[0],\n ],\n});\n", "import { Effects, type SharpenEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<SharpenEffect>({\n type: \"sharpen\",\n surface: \"shader\",\n params: { amount: \"param\", radius: { type: \"f32\", value: (e) => Math.max(e.radius, 0) } },\n prepare: (e) => (e.amount === 0 ? null : {}),\n cases: () => [\n Effects.sharpen().list[0],\n Effects.sharpen({ amount: 2.5, radius: 3 }).list[0],\n ],\n});\n", "import { Effects, type StreakEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<StreakEffect, { t: number; scale: number; sigma: number; rad: number }>({\n type: \"streak\",\n surface: \"filter\",\n params: {\n // The engine's threshold matrix: out = (in − t) / (1 − t).\n scale: { type: \"f32\", uses: [\"threshold\"], value: (_e, c) => c.scale },\n bias: { type: \"f32\", value: (_e, c) => -c.t * c.scale },\n intensity: \"param\",\n sigma: { type: \"f32\", uses: [\"length\"], value: (_e, c) => c.sigma },\n axis: { type: \"vec2f\", uses: [\"angle\"], value: (_e, c) => [Math.cos(c.rad), Math.sin(c.rad)] },\n },\n prepare(e) {\n if (e.intensity <= 0 || e.length <= 0) return null;\n const t = Math.max(0, Math.min(1, e.threshold));\n return { t, scale: t < 1 ? 1 / (1 - t) : 1, sigma: e.length / 2, rad: (e.angle * Math.PI) / 180 };\n },\n extras: (_e, c) => ({ blur: [c.sigma, 0.01, c.rad], reach: 3 * c.sigma }),\n cases: () => [\n Effects.streak().list[0],\n Effects.streak({ angle: 30, length: 80, threshold: 0.5, intensity: 1.5 }).list[0],\n Effects.streak({ angle: 90, length: 60, threshold: 0.3, intensity: 0.7 }).list[0],\n ],\n});\n", "import { Effects, type ThresholdEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<ThresholdEffect>({\n type: \"threshold\",\n surface: \"shader\",\n params: { level: \"param\", smoothness: \"param\" },\n cases: () => [\n Effects.threshold().list[0],\n Effects.threshold({ level: 0.3, smoothness: 0 }).list[0],\n Effects.threshold({ level: 0.6, smoothness: 0.4 }).list[0],\n ],\n});\n", "import { Effects, type TwirlEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<TwirlEffect>({\n type: \"twirl\",\n surface: \"shader\",\n params: {\n angle: { type: \"f32\", value: (e) => (e.angle * Math.PI) / 180 },\n radius: \"param\",\n center: \"param\",\n },\n prepare: (e) => (e.angle === 0 || e.radius <= 0 ? null : {}),\n extras(e) {\n // Rotation keeps r, so the swirl draws out to where a rotated point still\n // lands in the box (≤ √2 normalised). Reach assumes a ~360 px half extent.\n const r = Math.min(e.radius, Math.SQRT2);\n return { reach: Math.min((Math.max(r - 1, 0) + 2 * Math.hypot(e.center.x - 0.5, e.center.y - 0.5)) * 360, 800) };\n },\n cases: () => [\n Effects.twirl().list[0],\n Effects.twirl({ angle: -120, radius: 0.6 }).list[0],\n Effects.twirl({ angle: 300, radius: 1.4, center: { x: 0.35, y: 0.55 } }).list[0],\n ],\n});\n", "import { Effects, resolveEffectColor, type VignetteEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<VignetteEffect>({\n type: \"vignette\",\n surface: \"shader\",\n params: { color: \"param\", amount: \"param\", radius: \"param\", softness: \"param\" },\n prepare: (e) => (e.amount <= 0 || resolveEffectColor(e.color)[3] <= 0 ? null : {}),\n cases: () => [\n Effects.vignette().list[0],\n Effects.vignette({ amount: 0.9, radius: 0.4, softness: 0.3 }).list[0],\n Effects.vignette({ amount: 0.7, color: \"#ff8800\", radius: 0.6, softness: 0.8 }).list[0],\n ],\n});\n", "import { Effects, type VintageEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<VintageEffect>({\n type: \"vintage\",\n surface: \"filter\",\n params: {\n // The engine's 4×5 matrix.\n matrix: {\n type: { array: 20, of: \"f32\" },\n uses: [\"amount\", \"warmth\"],\n value(e) {\n const a = Math.max(0, Math.min(1, e.amount));\n const w = Math.max(-1, Math.min(1, e.warmth));\n const lerp = (identity: number, sepia: number) => identity + (sepia - identity) * a;\n const warmR = w > 0 ? w * 0.15 : 0;\n const warmB = w < 0 ? -w * 0.15 : 0;\n const coolR = w < 0 ? -w * 0.05 : 0;\n const coolB = w > 0 ? w * 0.05 : 0;\n return [\n lerp(1, 0.393), lerp(0, 0.769), lerp(0, 0.189), 0, warmR - coolR,\n lerp(0, 0.349), lerp(1, 0.686), lerp(0, 0.168), 0, 0,\n lerp(0, 0.272), lerp(0, 0.534), lerp(1, 0.131), 0, -warmB + coolB,\n 0, 0, 0, 1, 0,\n ];\n },\n },\n },\n prepare: (e) => (e.amount <= 0 && e.warmth === 0 ? null : {}),\n cases: () => [\n Effects.vintage().list[0],\n Effects.vintage({ amount: 0.5, warmth: -0.8 }).list[0],\n Effects.vintage({ amount: 0, warmth: 1 }).list[0],\n ],\n});\n", "import { Effects, type WaveEffect } from \"@motionscript/core\";\nimport { definePort } from \"./_pack.ts\";\n\nexport default definePort<WaveEffect>({\n type: \"wave\",\n surface: \"shader\",\n params: {\n amplitude: \"param\",\n wavelength: { type: \"f32\", value: (e) => Math.max(e.wavelength, 0.01) },\n phase: { type: \"f32\", value: (e) => (((e.phase % 360) + 360) % 360) * Math.PI / 180 },\n direction: {\n type: \"vec2f\",\n uses: [\"angle\"],\n value(e) {\n const radians = (e.angle * Math.PI) / 180;\n return [Math.cos(radians), Math.sin(radians)];\n },\n },\n shape: \"param\",\n center: \"param\",\n },\n prepare: (e) => (e.amplitude.x === 0 && e.amplitude.y === 0 ? null : {}),\n extras: (e) => ({ reach: Math.max(Math.abs(e.amplitude.x), Math.abs(e.amplitude.y)) }),\n cases: () => [\n Effects.wave().list[0],\n Effects.wave({ amplitude: { x: 8, y: 14 }, wavelength: 60, phase: 70, angle: 35 }).list[0],\n Effects.wave({ amplitude: 16, shape: \"radial\", wavelength: 80, center: { x: 0.4, y: 0.6 } }).list[0],\n ],\n});\n", "// The contract every effect port implements: one WGSL file in\n// crates/renderer/src/effects/<type>.wgsl plus one file here, both named after\n// core's effect `type`, the latter a `definePort` (_pack.ts) naming the pass's\n// parameters. Both sides are discovered automatically (build.rs and\n// `import.meta.glob`), so adding an effect never touches a shared file.\n\n/** An extra texture an effect samples via `aux_texel` (a LUT, noise, an atlas). */\nexport interface AuxTexture {\n /** Cache key: the same key reuses the uploaded texture. */\n key: string;\n width: number;\n height: number;\n /** RGBA8, straight (unpremultiplied) alpha, row-major. */\n pixels: Uint8ClampedArray;\n}\n\nexport interface Packed {\n /** Up to `MAX_PARAMS` (64) floats, laid out by `definePort` and read in WGSL through the generated `param_<name>()`. */\n params: number[];\n /** Logical px the effect can draw past its input (the layer grows by it). */\n reach?: number;\n /** Blur feeding `blurred()`: sigma along `angle`, sigma across it (logical px), angle in radians. */\n blur?: [number, number, number];\n aux?: AuxTexture;\n /** Read the node outline's inside distance field (`field(p)`, `max_distance()` in WGSL). */\n field?: boolean;\n}\n\nexport interface EffectPort<E = any> {\n /** core's effect `type`; also the WGSL file name. */\n type: string;\n /**\n * The engine's path for this effect (core's `surface`). The engine applies\n * every shader-surface effect (in order) before every filter-surface one,\n * whatever the authored order; the adapter reproduces that.\n */\n surface: \"shader\" | \"filter\";\n /** The engine runs it only as a backdrop effect (`mode: \"backdrop\"`). */\n backdropOnly?: boolean;\n /** Authored effect (with core's defaults filled in) → WGSL inputs, or null for a no-op. */\n pack(effect: E): Packed | null;\n /** Effects for the parity harness, built with core's `Effects` builder. */\n cases(): object[];\n}\n\nexport const PORTS: Map<string, EffectPort> = new Map(\n Object.entries(import.meta.glob<{ default: EffectPort }>(\"./*.ts\", { eager: true }))\n .filter(([path]) => !path.includes(\"/_\"))\n .map(([, m]) => [m.default.type, m.default]),\n);\n", "// User shaders: WGSL fills and effects written against the contract in\n// DESIGN.md §6.3. naga (in the WASM) validates and reflects a source at once;\n// the browser then compiles its pipelines asynchronously, and only when they\n// are ready does the renderer draw with them. A frame never waits: until then\n// the fill draws nothing and the effect passes its input through.\n\nimport { validate_shader } from \"../pkg/ms_renderer.js\";\nimport type { Renderer } from \"../pkg/ms_renderer.js\";\n\nexport type ShaderScope = \"fill\" | \"effect\";\n\n/** One problem in an author's source. `line`/`column` are 1-based; 0 = not in the source. */\nexport interface ShaderDiagnostic {\n line: number;\n column: number;\n length: number;\n message: string;\n /** `naga`: the renderer's validation; `browser`: the GPU's own compile. */\n source: \"naga\" | \"browser\";\n}\n\n/** One member of the source's `struct Params`, as WGSL's uniform layout places it. */\nexport interface ShaderField {\n name: string;\n /** Byte offset in `Params`. */\n offset: number;\n /** 0 f32, 1 i32, 2 u32. */\n scalar: number;\n /** Components per element (1–4). */\n components: number;\n /** Elements (array length or matrix columns), `stride` bytes apart. */\n elements: number;\n stride: number;\n /** The WGSL type (`vec3<f32>`, `array<vec4<f32>, 4>`). */\n type: string;\n}\n\nexport interface ShaderReport {\n ok: boolean;\n diagnostics: ShaderDiagnostic[];\n fields: ShaderField[];\n /** Size of `Params` in bytes. */\n size: number;\n /** The assembled module (header, renderer code, the author's). */\n wgsl?: string;\n}\n\nconst KIND = { fill: 0, effect: 1 } as const;\n\nfunction parse(json: string): ShaderReport {\n const r = JSON.parse(json) as ShaderReport;\n for (const d of r.diagnostics) d.source = \"naga\";\n return r;\n}\n\n/** Validates a source with naga; needs the renderer's WASM loaded (`loadRendererWasm`). */\nexport function validateShader(scope: ShaderScope, source: string): ShaderReport {\n return parse(validate_shader(KIND[scope], source));\n}\n\ntype Values = Record<string, number | readonly number[]>;\n\n/**\n * Named values as `Params` bytes (as u32 words, so integer bit patterns cross\n * intact). A field without a value reads as 0; a value with no field is ignored.\n */\nexport function packParams(fields: readonly ShaderField[], size: number, values: Values): Uint32Array {\n const words = new Uint32Array(Math.ceil(size / 4));\n const f32 = new Float32Array(words.buffer);\n const i32 = new Int32Array(words.buffer);\n for (const f of fields) {\n const v = values[f.name];\n if (v === undefined) continue;\n const flat = typeof v === \"number\" ? [v] : v.flat(Infinity as 1) as number[];\n for (let e = 0; e < f.elements; e++) {\n for (let c = 0; c < f.components; c++) {\n const x = flat[e * f.components + c];\n if (x === undefined) continue;\n const at = (f.offset + e * f.stride + c * 4) >> 2;\n if (at >= words.length) continue;\n if (f.scalar === 0) f32[at] = x;\n else if (f.scalar === 1) i32[at] = Math.round(x);\n else words[at] = Math.max(0, Math.round(x));\n }\n }\n }\n return words;\n}\n\nexport type ProgramState = \"compiling\" | \"ready\" | \"failed\";\n\nexport interface UserProgram {\n id: number;\n scope: ShaderScope;\n report: ShaderReport;\n state: ProgramState;\n /** The browser's own messages (`getCompilationInfo`), once compiled. */\n browser: ShaderDiagnostic[];\n /** Settles when the program is ready or has failed. */\n settled: Promise<void>;\n}\n\n/** Max programs kept per device before the least recently used go. */\nconst MAX_PROGRAMS = 64;\n\n/**\n * How long the browser may take to compile a program and its pipelines. A\n * compile that never settles would hold an export waiting on it forever.\n */\nexport const COMPILE_TIMEOUT_MS = 10_000;\n\nfunction withinTimeout<T>(work: Promise<T>, what: string): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`the browser took over ${COMPILE_TIMEOUT_MS / 1000} s to ${what}`)), COMPILE_TIMEOUT_MS);\n });\n return Promise.race([work, timeout]).finally(() => clearTimeout(timer));\n}\n\n/** One device's user programs, by scope and source. */\nexport class UserShaders {\n private programs = new Map<string, UserProgram>();\n private nextId = 0;\n private pending = new Set<Promise<void>>();\n\n /** `onReady` runs when a program becomes drawable, so its host can draw again. */\n constructor(private readonly r: Renderer, private readonly onReady: () => void) {}\n\n /** The program for `source`, added (and compiling) on first use. */\n program(scope: ShaderScope, source: string): UserProgram {\n const key = `${scope}\\n${source}`;\n const known = this.programs.get(key);\n if (known) {\n // Most recently used last.\n this.programs.delete(key);\n this.programs.set(key, known);\n return known;\n }\n if (this.programs.size >= MAX_PROGRAMS) {\n const [oldKey, old] = this.programs.entries().next().value!;\n this.programs.delete(oldKey);\n if (old.state !== \"compiling\") this.r.shader_remove(old.id);\n }\n const id = this.nextId++;\n const report = parse(this.r.shader_add(id, KIND[scope], source));\n const p: UserProgram = { id, scope, report, state: report.ok ? \"compiling\" : \"failed\", browser: [], settled: Promise.resolve() };\n if (report.ok) {\n const settled = this.compile(p).finally(() => this.pending.delete(settled));\n this.pending.add(settled);\n p.settled = settled;\n }\n this.programs.set(key, p);\n return p;\n }\n\n /** Whether a program is still compiling. */\n hasPending(): boolean {\n return this.pending.size > 0;\n }\n\n /** Settles once every program added so far is ready or has failed (export waits on this). */\n async whenReady(): Promise<void> {\n while (this.pending.size) await Promise.all([...this.pending]);\n }\n\n /**\n * The browser's compile of the module, then its pipelines, asynchronously\n * (`createRenderPipelineAsync`, descriptors mirroring gpu.rs). The\n * renderer's own pipelines are created after, from the same descriptors,\n * which the browser serves from its cache.\n */\n private async compile(p: UserProgram): Promise<void> {\n const device = this.r.gpu_device() as any;\n const wgsl = p.report.wgsl!;\n try {\n if (device) {\n const module = device.createShaderModule({ code: wgsl });\n const info = await withinTimeout<{ messages: any[] }>(module.getCompilationInfo(), \"compile it\");\n p.browser = browserDiagnostics(info.messages, wgsl);\n if (info.messages.some((m: { type: string }) => m.type === \"error\")) {\n p.state = \"failed\";\n this.r.shader_remove(p.id);\n return;\n }\n const formats = this.r.shader_formats(KIND[p.scope]);\n const warm = await withinTimeout(Promise.all(formats.map((f) => device.createRenderPipelineAsync(pipelineDesc(device, module, p.scope, f)).catch(() => null))), \"build its pipelines\");\n this.r.shader_build(p.id);\n void warm;\n } else {\n this.r.shader_build(p.id);\n }\n p.state = \"ready\";\n this.onReady();\n } catch (e) {\n p.state = \"failed\";\n p.browser.push({ line: 0, column: 0, length: 0, message: `error: ${String((e as Error)?.message ?? e)}`, source: \"browser\" });\n }\n }\n}\n\n/** `GPUCompilationMessage`s located in the author's code (after the marker line). */\nfunction browserDiagnostics(messages: readonly any[], wgsl: string): ShaderDiagnostic[] {\n const marker = wgsl.indexOf(\"// ── the author's code ──\\n\");\n const userLine = marker < 0 ? 0 : wgsl.slice(0, marker).split(\"\\n\").length + 1;\n return messages.map((m) => {\n const line = m.lineNum >= userLine && userLine > 0 ? m.lineNum - userLine + 1 : 0;\n return { line, column: line ? m.linePos : 0, length: m.length ?? 0, message: `${m.type}: ${m.message}`, source: \"browser\" as const };\n });\n}\n\nconst VIS = 3; // VERTEX | FRAGMENT\n\n/**\n * gpu.rs's bind group layouts for user pipelines, by group, one entry per\n * binding from 0. `layout_parity_test.rs` holds them equal to gpu.rs's.\n */\nexport const USER_LAYOUTS = {\n fill: [\n [\"uniform\", \"storage\", \"storage\", \"storage\", \"storage\", \"storage\", \"unfilterable-2d-array\", \"storage\"],\n [\"texture\", \"sampler\"],\n [\"uniform\"],\n ],\n effect: [\n [\"texture\", \"texture\", \"texture\", \"sampler\", \"sampler\", \"uniform\", \"texture\"],\n [\"uniform\"],\n ],\n} as const;\n\nconst ENTRY: Record<string, object> = {\n uniform: { buffer: { type: \"uniform\", hasDynamicOffset: true } },\n storage: { buffer: { type: \"read-only-storage\" } },\n texture: { texture: { sampleType: \"float\", viewDimension: \"2d\" } },\n sampler: { sampler: { type: \"filtering\" } },\n \"unfilterable-2d-array\": { texture: { sampleType: \"unfilterable-float\", viewDimension: \"2d-array\" } },\n};\n\nfunction layouts(device: any, scope: ShaderScope): any[] {\n return USER_LAYOUTS[scope].map((group) => device.createBindGroupLayout({ entries: group.map((kind, binding) => ({ binding, visibility: VIS, ...ENTRY[kind] })) }));\n}\n\nfunction pipelineDesc(device: any, module: any, scope: ShaderScope, format: string): object {\n const over = { srcFactor: \"one\", dstFactor: \"one-minus-src-alpha\", operation: \"add\" };\n const fill = scope === \"fill\";\n return {\n layout: device.createPipelineLayout({ bindGroupLayouts: layouts(device, scope) }),\n vertex: { module, entryPoint: fill ? \"ms_vs_quad\" : \"ms_vs_effect\", buffers: [] },\n primitive: { topology: \"triangle-list\", cullMode: \"none\" },\n multisample: { count: 1 },\n fragment: {\n module,\n entryPoint: fill ? \"ms_fs_prim\" : \"ms_fs_effect\",\n targets: [{ format, ...(fill ? { blend: { color: over, alpha: over } } : {}), writeMask: 0xf }],\n },\n };\n}\n\n/** Core's blend names → the effect header's `blend_mode` index (+1 on the wire; 0 = replace). */\nexport const EFFECT_BLEND: Record<string, number> = {\n normal: 0, multiply: 1, screen: 2, overlay: 3, darken: 4, lighten: 5, \"color-dodge\": 6, \"color-burn\": 7,\n \"hard-light\": 8, \"soft-light\": 9, difference: 10, exclusion: 11, hue: 12, saturation: 13, color: 14, luminosity: 15,\n};\n\n/** What a host is told about a shader stored with `language: \"sksl\"` from before Motion Script ran only WGSL. */\nexport const SKSL_FILL = \"A shader fill is written in SkSL, which Motion Script no longer runs, so it draws nothing. Port it to WGSL (fn fill(in: FillIn) -> vec4f).\";\nexport const SKSL_EFFECT = \"A shader effect is written in SkSL, which Motion Script no longer runs, so it is skipped. Port it to WGSL (fn effect(in: EffectIn) -> vec4f).\";\n", "// Backend adapter for the Rust/wgpu renderer: turns document changes into\n// deltas. Paints, paths and dash patterns are interned so each distinct value\n// crosses into WASM once.\n\nimport { encodeScene3D, GeometryTable, TextureTable } from \"./r3d/encode\";\nimport init, { Renderer } from \"../pkg/ms_renderer.js\";\nimport { BLEND_MODES, D, Doc, type ImageAsset, imageMatrix, isProjective, KIND_CODE, MASK_CODE, MEMBER_OP, memberOp, Node, type Paint, type PathData, pathBounds } from \"./doc\";\nimport { DeltaWriter, NONE, OP } from \"./protocol\";\nimport { type AuxTexture, type Packed, PORTS } from \"./effects/_port\";\nimport { isWgslShader, normalizeUniforms } from \"@motionscript/core\";\nimport { EFFECT_BLEND, packParams, SKSL_EFFECT, type UserProgram, UserShaders } from \"./user-shaders\";\n\n/** An `OP_EFFECTS` index at or above this is a user program (gpu.rs `USER_EFFECT`). */\nconst USER_EFFECT = 0x4000_0000;\n\n/** A core `shader` effect as the backend reads it. */\ninterface UserEffect { source: string; language?: string; reach?: number; uniforms?: unknown; mode?: string; blendMode?: string; clip?: boolean }\n\nlet wasm: Promise<{ memory: WebAssembly.Memory }> | null = null;\n\n/** Loads the renderer's WASM once; `url` overrides where it is served from. The first call wins. */\nexport function loadRendererWasm(url?: string | URL): Promise<{ memory: WebAssembly.Memory }> {\n wasm ??= init(url ? { module_or_path: url } : undefined) as unknown as Promise<{ memory: WebAssembly.Memory }>;\n return wasm;\n}\n\nlet device: Promise<void> | null = null;\n\n/**\n * Gets the GPU device every renderer on the page shares (gpu.rs `prewarm`).\n * Every `init` waits on it, so two surfaces mounting together ask once; a\n * failure is forgotten, so the next mount asks again.\n */\nexport function prewarmDevice(): Promise<void> {\n device ??= loadRendererWasm().then(() => Renderer.prewarm()).catch((e) => {\n device = null;\n throw e;\n });\n return device;\n}\n\n/** Forgets the shared device (lost), so the next `prewarmDevice` or mount asks for a new one. */\nexport function forgetDevice(): void {\n device = null;\n if (wasm) Renderer.forget_device();\n}\n\nconst JOIN = { miter: 0, round: 1, bevel: 2 } as const;\nconst CAP = { butt: 0, round: 1, square: 2 } as const;\nconst TILE = { clamp: 0, repeat: 1, mirror: 2, decal: 3 } as const;\nconst MEMBER_KIND = { rect: 1, ellipse: 2, path: 3 } as const;\nconst ALIGN = { left: 0, right: 1, center: 2, justify: 3 } as const;\nconst VALIGN = { top: 0, center: 1, bottom: 2 } as const;\nconst utf8 = new TextEncoder();\n/** Syncs an unused path or paint is kept before its id is freed for reuse. */\nconst KEEP_UNUSED = 120;\n\n/** A path or paint definition and the sync that last used it. */\ninterface Interned { id: number; used: number; live: boolean }\n\nfunction hashWords(words: ArrayLike<number>): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < words.length; i++) h = Math.imul(h ^ words[i], 0x01000193);\n return h >>> 0;\n}\n\n/** FNV-1a over a path's verbs and point bits, twice with different seeds. */\nfunction pathKey(d: PathData): string {\n const bits = new Uint32Array(d.points.buffer, d.points.byteOffset, d.points.length);\n let a = 0x811c9dc5, b = 0x01000193 ^ d.points.length;\n for (let i = 0; i < d.verbs.length; i++) {\n a = Math.imul(a ^ d.verbs[i], 0x01000193);\n b = Math.imul(b ^ d.verbs[i], 0x5bd1e995);\n }\n for (let i = 0; i < bits.length; i++) {\n a = Math.imul(a ^ bits[i], 0x01000193);\n b = Math.imul(b ^ bits[i], 0x5bd1e995);\n }\n return `${d.verbs.length}:${bits.length}:${a >>> 0}:${b >>> 0}`;\n}\n\nexport class WgpuBackend {\n readonly name = \"wgpu\";\n private r!: Renderer;\n private w!: DeltaWriter;\n private paintIds = new WeakMap<Paint, Interned>();\n private paintByKey = new Map<string, Interned>();\n private freePaints: number[] = [];\n private pathIds = new WeakMap<PathData, Interned>();\n private pathByKey = new Map<string, Interned>();\n private freePaths: number[] = [];\n /** Counts syncs; what a definition's `used` is measured against. */\n private generation = 0;\n /**\n * Free paths and reuse paint ids nothing has used for a while. Only for a\n * caller that hands over a new document every frame (every node rewritten,\n * so every live definition is marked used); a retained document's\n * untouched nodes would lose theirs.\n */\n collectUnused = false;\n private dashIds = new Map<string, number>();\n private nextPaint = 0;\n private nextPath = 0;\n private nextDash = 0;\n private synced = false;\n private viewport = { w: 0, h: 0 };\n lastDeltaWords = 0;\n\n async init(canvas: HTMLCanvasElement, width: number, height: number) {\n const exports = await loadRendererWasm();\n // A failure surfaces from `create`, which asks again.\n await prewarmDevice().catch(() => {});\n this.r = await Renderer.create(canvas, width, height);\n this.w = new DeltaWriter(this.r, exports.memory);\n this.effectIndex = new Map(this.r.effect_names().map((n, i) => [n, i]));\n this.viewport = { w: width, h: height };\n this.shaders = new UserShaders(this.r, () => this.onShaderReady?.());\n }\n\n /** User WGSL programs on this device. */\n shaders!: UserShaders;\n /** Called when a user shader finishes compiling, so the host can draw again. */\n onShaderReady?: () => void;\n /** User shader problems seen while syncing, by message; drained by the host. */\n readonly shaderIssues = new Set<string>();\n\n /** Settles once every user shader seen so far is ready or failed (an export waits on this). */\n whenShadersReady(): Promise<void> {\n return this.shaders.whenReady();\n }\n\n private userProgram(scope: \"fill\" | \"effect\", source: string): UserProgram {\n const p = this.shaders.program(scope, source);\n const d = p.report.diagnostics[0] ?? p.browser.find((m) => m.message.startsWith(\"error\"));\n if (p.state === \"failed\" && d) {\n this.shaderIssues.add(`A WGSL shader ${scope} does not compile${d.line ? ` (line ${d.line}:${d.column})` : \"\"}: ${d.message}`);\n }\n return p;\n }\n\n adapterInfo() {\n return this.r.adapter_info();\n }\n\n /** The `GPUDevice` this backend draws with (the page's shared one). */\n gpuDevice(): unknown {\n return this.r.gpu_device();\n }\n\n setOptions(linear: boolean, dither: boolean) {\n this.r.set_options(linear, dither);\n }\n\n resize(width: number, height: number) {\n this.r.resize(width, height);\n this.viewport = { w: width, h: height };\n this.synced = false;\n }\n\n private paint(p: Paint | undefined): number {\n if (!p) return NONE;\n const known = this.paintIds.get(p);\n if (known?.live) {\n known.used = this.generation;\n return known.id;\n }\n // Image paints key on the asset id, not its bytes or source.\n const key = p.kind === \"image\" ? `image:${p.image.id}:${p.fit ?? \"fill\"}:${p.box.join(\",\")}:${p.matrix?.join(\",\") ?? \"\"}:${p.tile ?? \"\"}`\n : p.kind === \"shader\" ? `shader:${this.userProgram(\"fill\", p.source).id}:${p.box.join(\",\")}:${p.time}:${p.texture?.id ?? \"\"}:${JSON.stringify(p.uniforms)}`\n : JSON.stringify(p);\n let entry = this.paintByKey.get(key);\n if (entry) entry.used = this.generation;\n else {\n entry = { id: this.freePaints.pop() ?? this.nextPaint++, used: this.generation, live: true };\n this.paintByKey.set(key, entry);\n const id = entry.id;\n const w = this.w;\n if (p.kind === \"procedural\") {\n this.procedural(id, p);\n this.paintIds.set(p, entry);\n return id;\n }\n if (p.kind === \"shader\") {\n this.shaderPaint(id, p);\n this.paintIds.set(p, entry);\n return id;\n }\n const stops = p.kind === \"solid\" || p.kind === \"image\" ? [] : p.stops;\n w.begin(12 + stops.length * 5);\n w.u(OP.DEF_PAINT);\n w.u(id);\n if (p.kind === \"solid\") {\n w.u(0);\n for (let i = 0; i < 4; i++) w.f(0);\n for (const c of p.color) w.f(c);\n } else if (p.kind === \"image\") {\n // Local → normalized uv (the inverse of image px → local, over\n // the image size): geom = a b c d, color = e f id 0.\n const { m, tile } = imageMatrix(p);\n const det = m[0] * m[3] - m[1] * m[2] || 1;\n const W = p.image.width, H = p.image.height;\n const ia = m[3] / det, ib = -m[1] / det, ic = -m[2] / det, id = m[0] / det;\n const ie = (m[2] * m[5] - m[3] * m[4]) / det, iff = (m[1] * m[4] - m[0] * m[5]) / det;\n w.u(4 | (TILE[tile] << 8));\n w.f(ia / W); w.f(ib / H); w.f(ic / W); w.f(id / H);\n w.f(ie / W); w.f(iff / H); w.f(p.image.id); w.f(0);\n } else {\n const kind = p.kind === \"linear\" ? 1 : p.kind === \"radial\" ? 2 : 3;\n w.u(kind | (TILE[p.tile ?? \"clamp\"] << 8));\n if (p.kind === \"linear\") {\n w.f(p.from[0]); w.f(p.from[1]); w.f(p.to[0]); w.f(p.to[1]);\n } else if (p.kind === \"radial\") {\n w.f(p.center[0]); w.f(p.center[1]); w.f(p.radius); w.f(0);\n } else {\n w.f(p.center[0]); w.f(p.center[1]); w.f(p.startAngle); w.f(p.endAngle);\n }\n for (const c of stops[0].color) w.f(c);\n }\n w.u(stops.length);\n for (const s of stops) {\n w.f(s.offset);\n for (const c of s.color) w.f(c);\n }\n }\n this.paintIds.set(p, entry);\n return entry.id;\n }\n\n /** The engine's procedural fills as paint kinds 5–9: geom/color plus raw\n * vec4 parameter slots carried as stops (see prim.wgsl). */\n /** Paint kind 10: geom = box, color = time, texture image (−1 = none), program; stops = `Params` words. */\n private shaderPaint(id: number, p: Extract<Paint, { kind: \"shader\" }>) {\n const prog = this.userProgram(\"fill\", p.source);\n const words = prog.report.ok ? packParams(prog.report.fields, prog.report.size, p.uniforms) : new Uint32Array(0);\n const stops = Math.ceil(words.length / 4);\n const w = this.w;\n w.begin(12 + stops * 5);\n w.u(OP.DEF_PAINT); w.u(id); w.u(10);\n for (const v of p.box) w.f(v);\n w.f(p.time); w.f(p.texture ? p.texture.id : -1); w.f(prog.id); w.f(0);\n w.u(stops);\n for (let s = 0; s < stops; s++) {\n w.f(0);\n for (let k = 0; k < 4; k++) w.u(words[s * 4 + k] ?? 0);\n }\n }\n\n private procedural(id: number, p: Extract<Paint, { kind: \"procedural\" }>) {\n const f = p.fill;\n const [bx, by, bw, bh] = p.box;\n let kind: number, geom: number[], color: number[];\n const slots: number[][] = [];\n const ramp: { offset: number; color: number[] }[] = [];\n const q8 = (c: readonly number[]) => [Math.round(c[0] * 255) / 255, Math.round(c[1] * 255) / 255, Math.round(c[2] * 255) / 255, c[3]];\n if (f.type === \"dotGrid\") {\n kind = 5;\n geom = [bx + f.offset.x, by + f.offset.y, Math.max(0.01, f.spacing), Math.max(0, f.radius)];\n color = [...f.color];\n } else if (f.type === \"grid\") {\n kind = 6;\n geom = [bx + f.offset.x, by + f.offset.y, bw, bh];\n color = [...f.color];\n slots.push([Math.max(0.0001, f.divisions), Math.max(1, Math.round(f.subdivisions)), Math.max(0, f.strokeWidth) * 0.5, Math.max(0, f.subdivisionWidth) * 0.5]);\n } else if (f.type === \"stripe\") {\n kind = 7;\n const rad = ((f.angle ?? -45) * Math.PI) / 180;\n geom = [bx, by, Math.max(1, Math.round(f.gap ?? 8)), f.strokeWidth ?? 1];\n color = q8(f.color ?? [0, 0, 0, 1]);\n slots.push([Math.cos(rad), Math.sin(rad), bx, 0]);\n } else if (f.type === \"noise\") {\n kind = 8;\n geom = [bx, by, Math.ceil(bw), Math.ceil(bh)];\n const c = q8(f.color);\n color = [c[0], c[1], c[2], Math.round(f.color[3] * 255) / 255];\n slots.push([Math.max(1, Math.round(f.size.x)), Math.max(1, Math.round(f.size.y)), Math.min(1, Math.max(0, f.density)), Math.round(f.seed)]);\n } else {\n kind = 9;\n geom = [bx, by, bw, bh];\n const rad = (f.angle * Math.PI) / 180;\n const basis = { value: 0, simplex: 1, ridged: 2, worley: 3 }[f.basis] ?? 1;\n slots.push([f.frequency.x, f.frequency.y, f.offset.x, f.offset.y]);\n slots.push([f.lacunarity, f.gain, f.seed, f.contrast]);\n slots.push([Math.cos(rad), Math.sin(rad), basis, f.octaves]);\n const n = Math.max(2, Math.min(8, f.colors.length));\n for (let i = 0; i < n; i++) {\n ramp.push({ offset: f.stops[Math.min(i, f.stops.length - 1)] ?? i / (n - 1), color: [...f.colors[Math.min(i, f.colors.length - 1)]] });\n }\n color = ramp[0].color;\n }\n const n = slots.length + ramp.length;\n const w = this.w;\n w.begin(12 + n * 5);\n w.u(OP.DEF_PAINT);\n w.u(id);\n w.u(kind);\n for (const v of geom) w.f(v);\n for (const v of color) w.f(v);\n w.u(n);\n for (const s of slots) { w.f(0); for (const v of s) w.f(v); }\n for (const s of ramp) { w.f(s.offset); for (const v of s.color) w.f(v); }\n }\n\n private pathId(d: PathData): number {\n const known = this.pathIds.get(d);\n if (known?.live) {\n known.used = this.generation;\n return known.id;\n }\n // By content, so a shape rebuilt unchanged keeps its id, and with it\n // every cache keyed on the path (outline, bands, distance field).\n const key = pathKey(d);\n const same = this.pathByKey.get(key);\n if (same) {\n same.used = this.generation;\n this.pathIds.set(d, same);\n return same.id;\n }\n const entry: Interned = { id: this.freePaths.pop() ?? this.nextPath++, used: this.generation, live: true };\n this.pathByKey.set(key, entry);\n const id = entry.id;\n const w = this.w;\n const vw = Math.ceil(d.verbs.length / 4);\n w.begin(4 + vw + d.points.length);\n w.u(OP.DEF_PATH);\n w.u(id);\n w.u(d.verbs.length);\n w.u(d.points.length / 2);\n for (let i = 0; i < vw; i++) {\n const v = d.verbs;\n const b = i * 4;\n w.u((v[b] ?? 0) | ((v[b + 1] ?? 0) << 8) | ((v[b + 2] ?? 0) << 16) | ((v[b + 3] ?? 0) << 24));\n }\n for (let i = 0; i < d.points.length; i++) w.f(d.points[i]);\n this.pathIds.set(d, entry);\n return id;\n }\n\n /** Frees the paths and paint ids `collectUnused` says nothing uses any more. */\n private sweep() {\n const before = this.generation - KEEP_UNUSED;\n for (const [key, e] of this.pathByKey) {\n if (e.used >= before) continue;\n e.live = false;\n this.pathByKey.delete(key);\n this.w.begin(2);\n this.w.u(OP.FREE_PATH); this.w.u(e.id);\n this.freePaths.push(e.id);\n }\n for (const [key, e] of this.paintByKey) {\n if (e.used >= before) continue;\n e.live = false;\n this.paintByKey.delete(key);\n this.freePaints.push(e.id);\n }\n }\n\n private dash(intervals: number[] | undefined, phase = 0): number {\n if (!intervals || intervals.length === 0) return NONE;\n const key = intervals.join(\",\") + \"@\" + phase;\n let id = this.dashIds.get(key);\n if (id === undefined) {\n id = this.nextDash++;\n this.dashIds.set(key, id);\n const w = this.w;\n w.begin(4 + intervals.length);\n w.u(OP.DEF_DASH);\n w.u(id);\n w.u(intervals.length);\n w.f(phase);\n for (const v of intervals) w.f(v);\n }\n return id;\n }\n\n private writeNode(n: Node, bits: number) {\n const w = this.w;\n const id = n.id;\n if (bits & D.CREATE) {\n w.begin(3);\n w.u(OP.CREATE); w.u(id); w.u(KIND_CODE[n.kind]);\n }\n if (bits & D.TRANSFORM) {\n const t = n.transform;\n if (isProjective(t)) {\n w.begin(11);\n w.u(OP.TRANSFORM3); w.u(id);\n for (const v of t) w.f(v);\n } else {\n // Affine (or a 3×3 with a trivial last row): six numbers.\n w.begin(8);\n w.u(OP.TRANSFORM); w.u(id);\n for (let k = 0; k < 6; k++) w.f(t[k]);\n }\n }\n if (bits & D.EFFECTS && (n.effects?.length || !(bits & D.CREATE))) this.writeEffects(n);\n if (bits & D.OPACITY && (n.opacity !== 1 || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.OPACITY); w.u(id); w.f(n.opacity);\n }\n if (bits & D.BLEND && (n.blend !== \"normal\" || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.BLEND); w.u(id); w.u(BLEND_MODES.indexOf(n.blend));\n }\n if (n.kind === \"group\") {\n if (bits & D.CLIP && (n.clip || !(bits & D.CREATE))) {\n const c = n.clip;\n const pid = c?.path ? this.pathId(c.path) : NONE;\n const r = c?.path ? pathBounds(c.path) : [c?.x ?? 0, c?.y ?? 0, (c?.x ?? 0) + (c?.w ?? 0), (c?.y ?? 0) + (c?.h ?? 0)];\n w.begin(10);\n w.u(OP.CLIP); w.u(id); w.u(c ? 1 : 0);\n for (const v of r) w.f(v);\n w.f(c?.r ?? 0); w.u(pid); w.u(c?.evenOdd ? 1 : 0);\n }\n if (bits & D.MASK && (n.mask || !(bits & D.CREATE))) {\n w.begin(3);\n w.u(OP.MASK); w.u(id); w.u(n.mask ? MASK_CODE[n.mask] : 0);\n }\n if (bits & D.FILTER && (n.filter || !(bits & D.CREATE))) {\n const f = n.filter;\n w.begin(10);\n w.u(OP.FILTER); w.u(id);\n if (!f) {\n w.u(0); for (let i = 0; i < 7; i++) w.f(0);\n } else if (f.kind === \"blur\") {\n w.u(1); w.f(f.sigma); for (let i = 0; i < 6; i++) w.f(0);\n } else {\n w.u(2); w.f(f.sigma); w.f(f.dx); w.f(f.dy); for (const c of f.color) w.f(c);\n }\n }\n if (bits & D.CHILDREN) {\n w.begin(3 + n.children.length);\n w.u(OP.CHILDREN); w.u(id); w.u(n.children.length);\n for (const c of n.children) w.u(c.id);\n }\n return;\n }\n if (bits & D.SIZE) {\n w.begin(4);\n w.u(OP.SIZE); w.u(id); w.f(n.w); w.f(n.h);\n }\n if (bits & D.RADII && n.kind === \"rect\") {\n w.begin(6);\n w.u(OP.RADII); w.u(id);\n for (const v of n.radii) w.f(v);\n }\n if (bits & D.MEMBERS && n.members) {\n const ms = n.members;\n const pids = ms.map((m) => (m.kind === \"path\" && m.path ? this.pathId(m.path) : NONE));\n w.begin(3 + ms.length * 16);\n w.u(OP.MEMBERS); w.u(id); w.u(ms.length);\n ms.forEach((m, k) => {\n w.u(MEMBER_KIND[m.kind]); w.u(MEMBER_OP[memberOp(m)]);\n for (const v of m.transform ?? [1, 0, 0, 1, 0, 0]) w.f(v);\n w.f(m.w ?? 0); w.f(m.h ?? 0);\n for (const v of m.radii ?? [0, 0, 0, 0]) w.f(v);\n w.u(pids[k]); w.u(m.evenOdd ? 1 : 0);\n });\n }\n if (bits & D.TEXT && n.text) {\n const t = n.text;\n const strings = t.runs.map((r) => [utf8.encode(r.family), utf8.encode(r.text)] as const);\n const words = strings.reduce((a, [f, s]) => a + 2 + Math.ceil(f.length / 4) + Math.ceil(s.length / 4) + 6, 0);\n const pathId = t.path ? this.pathId(t.path) : NONE;\n const runPaints = t.runs.map((r) => this.paint(r.paint));\n w.begin(12 + words);\n w.u(OP.TEXT); w.u(id);\n w.u(ALIGN[t.align ?? \"center\"]); w.u(VALIGN[t.verticalAlign ?? \"center\"]); w.u(t.wrap ? 1 : 0);\n w.f(t.fontSize === \"autofit\" ? 0 : t.runs.length === 1 ? t.runs[0].size : 0); w.f(t.minFontSize ?? 0);\n w.f(t.lineHeight ?? 0); w.f(t.width ?? 0); w.f(t.height ?? 0);\n w.u(t.runs.length);\n t.runs.forEach((r, k) => {\n w.u(r.decoration === \"underline\" ? 1 : r.decoration === \"lineThrough\" ? 2 : 0);\n w.u(runPaints[k]);\n w.f(r.size); w.f(r.weight ?? 400); w.u(r.italic ? 1 : 0); w.f(r.letterSpacing ?? 0);\n for (const bytes of strings[k]) {\n w.u(bytes.length);\n for (let i = 0; i < bytes.length; i += 4) {\n w.u((bytes[i] ?? 0) | ((bytes[i + 1] ?? 0) << 8) | ((bytes[i + 2] ?? 0) << 16) | ((bytes[i + 3] ?? 0) << 24));\n }\n }\n });\n w.u(pathId);\n }\n if (bits & D.PATH && n.path) {\n const pid = this.pathId(n.path);\n w.begin(4);\n w.u(OP.PATH); w.u(id); w.u(pid); w.u(n.evenOdd ? 1 : 0);\n }\n if (bits & D.FILL) {\n const p = this.paint(n.fill);\n w.begin(3);\n w.u(OP.FILL); w.u(id); w.u(p);\n }\n if (bits & D.STROKE && (n.stroke || !(bits & D.CREATE))) {\n const s = n.stroke;\n const p = this.paint(s?.paint);\n const dash = this.dash(s?.dash, s?.dashPhase);\n w.begin(8);\n w.u(OP.STROKE); w.u(id); w.u(p);\n w.f(s?.width ?? 0); w.u(JOIN[s?.join ?? \"miter\"]); w.u(CAP[s?.cap ?? \"butt\"]); w.f(s?.miter ?? 4); w.u(dash);\n }\n if (bits & D.SHADOWS && (n.shadows.length || !(bits & D.CREATE))) {\n w.begin(3 + n.shadows.length * 8);\n w.u(OP.SHADOWS); w.u(id); w.u(n.shadows.length);\n for (const s of n.shadows) {\n w.f(s.dx); w.f(s.dy); w.f(s.sigma); w.f(s.spread);\n for (const c of s.color) w.f(c);\n }\n }\n }\n\n private uploaded = new Map<number, number>();\n /** What 3D scenes recorded that the encoder doesn't carry yet. */\n readonly missing3d = new Set<string>();\n /** Per 3D scene asset, its texture ids (stable across versions). */\n private textures3d = new Map<number, TextureTable>();\n /** Per 3D scene asset, the geometry its renderer keeps. */\n private geometries3d = new Map<number, GeometryTable>();\n\n /** Answers a scene's new texture requests: images and surfaces from the\n * image store (converted on the GPU), data textures as pixels. */\n private bindTextures3d(img: ImageAsset, table: TextureTable) {\n for (const req of table.pending.splice(0)) {\n const t = req.texture;\n if (\"data\" in t) {\n this.r.scene3d_pixels(img.id, req.id, Uint8Array.from(t.data as ArrayLike<number>), t.width, t.height, req.srgb);\n continue;\n }\n const source = \"src\" in t ? img.links3d?.images?.[t.src] : img.links3d?.surfaces?.get(t);\n if (source) this.r.scene3d_bind(img.id, req.id, source.id, req.srgb);\n else this.missing3d.add(\"src\" in t ? `image:${t.src}` : \"surface\");\n }\n }\n private scene3dSigs = new Map<number, string>();\n /** The last sync's 3D encode (and signature) time and words. */\n private encode3dMs = 0;\n private words3d = 0;\n private effectIndex = new Map<string, number>();\n private auxIds = new Map<string, number>();\n /** Effect types with no WGSL port, as met. */\n readonly missing = new Set<string>();\n\n /** Effect `type`s this renderer has a WGSL port for. */\n effectTypes(): string[] {\n return [...this.effectIndex.keys()].filter((t) => PORTS.has(t));\n }\n\n private auxId(aux: AuxTexture | undefined): number {\n if (!aux) return NONE;\n let id = this.auxIds.get(aux.key);\n if (id === undefined) {\n id = 1_000_000 + this.auxIds.size;\n const c = new OffscreenCanvas(aux.width, aux.height);\n c.getContext(\"2d\")!.putImageData(new ImageData(new Uint8ClampedArray(aux.pixels), aux.width, aux.height), 0, 0);\n this.r.upload_image(id, c, false);\n this.auxIds.set(aux.key, id);\n }\n return id;\n }\n\n /** OP_EFFECTS: shader-surface effects first, then filter-surface ones (the engine's order). */\n private writeEffects(n: Node) {\n type E = { type: string; clip?: boolean; mode?: string };\n const list = (n.effects ?? []) as E[];\n const packed: { index: number; flags: number; aux: number; p: Packed; words?: Uint32Array }[] = [];\n // Foreground: shader effects, then filters (the engine's order). Backdrop\n // (flag bit 1): the composed filter layer first, then shader effects.\n const passes = [[\"shader\", false], [\"filter\", false], [\"filter\", true], [\"shader\", true]] as const;\n for (const [surface, backdrop] of passes) {\n for (const e of list) {\n if (e.type === \"shader\") {\n // Core's surface: a backdrop shader is a shader-surface effect, a foreground one a filter.\n if ((e.mode === \"backdrop\") !== backdrop || (backdrop ? \"shader\" : \"filter\") !== surface) continue;\n const fx = this.userEffect(e as unknown as UserEffect);\n if (fx) packed.push({ ...fx, flags: (e.clip ? 1 : 0) | (backdrop ? 2 : 0) });\n continue;\n }\n const port = PORTS.get(e.type);\n const index = this.effectIndex.get(e.type);\n if (!port || index === undefined) {\n if (!this.missing.has(e.type)) console.info(`effect \"${e.type}\" has no WGSL port yet; skipped`);\n this.missing.add(e.type);\n continue;\n }\n if (port.surface !== surface || (e.mode === \"backdrop\") !== backdrop) continue;\n if (port.backdropOnly && !backdrop) continue;\n const p = port.pack(e);\n if (!p) continue;\n packed.push({ index, flags: (e.clip ? 1 : 0) | (backdrop ? 2 : 0) | (backdrop && surface === \"filter\" ? 4 : 0) | (p.field ? 8 : 0), aux: this.auxId(p.aux), p });\n }\n }\n const w = this.w;\n const box = n.effectBox ?? [0, 0, 0, 0];\n w.begin(8 + packed.reduce((a, x) => a + 8 + x.p.params.length + (x.words?.length ?? 0), 0));\n w.u(OP.EFFECTS); w.u(n.id);\n for (const v of box) w.f(v);\n w.f(n.effectTime ?? 0);\n w.u(packed.length);\n for (const x of packed) {\n w.u(x.index); w.u(x.flags); w.u(x.aux); w.f(x.p.reach ?? 0);\n const b = x.p.blur ?? [0, 0, 0];\n w.f(b[0]); w.f(b[1]); w.f(b[2]);\n w.u(x.p.params.length + (x.words?.length ?? 0));\n for (const v of x.p.params) w.f(v);\n if (x.words) for (const v of x.words) w.u(v);\n }\n }\n\n /** A user WGSL effect: params = [blend + 1 (0 = replace)], then its `Params` words. */\n private userEffect(e: UserEffect): { index: number; aux: number; p: Packed; words: Uint32Array } | null {\n if (!e.source?.trim()) return null;\n if (!isWgslShader(e)) {\n this.shaderIssues.add(SKSL_EFFECT);\n return null;\n }\n const prog = this.userProgram(\"effect\", e.source);\n if (!prog.report.ok) return null;\n const uniforms = normalizeUniforms(e.uniforms as Parameters<typeof normalizeUniforms>[0]);\n const blend = e.mode !== \"backdrop\" && e.blendMode ? (EFFECT_BLEND[e.blendMode] ?? -1) + 1 : 0;\n return { index: USER_EFFECT + prog.id, aux: NONE, p: { params: [blend], reach: Math.max(0, e.reach ?? 0) }, words: packParams(prog.report.fields, prog.report.size, uniforms) };\n }\n private frameCanvases = new Map<number, OffscreenCanvas>();\n\n /**\n * Video frames go through a (GPU-backed) 2D canvas first. Chrome's WebGPU\n * external-image copy also converts the BT.709 transfer curve to sRGB,\n * lifting darks and mids by up to 10/255; canvas 2D, players and the\n * engine's current video path apply the YUV matrix only. Still a GPU path,\n * no readback.\n */\n private colorCorrect(img: Doc[\"images\"][number]): Doc[\"images\"][number][\"source\"] {\n if (typeof VideoFrame === \"undefined\" || !(img.source instanceof VideoFrame)) return img.source;\n let c = this.frameCanvases.get(img.id);\n if (!c || c.width !== img.width || c.height !== img.height) {\n c = new OffscreenCanvas(img.width, img.height);\n this.frameCanvases.set(img.id, c);\n }\n c.getContext(\"2d\")!.drawImage(img.source, 0, 0);\n return c;\n }\n\n sync(doc: Doc) {\n this.generation++;\n this.encode3dMs = 0;\n this.words3d = 0;\n // Images first: a GPU copy per new asset or video frame version.\n for (const img of doc.images) {\n if (this.uploaded.get(img.id) === img.version) continue;\n if (img.surface) {\n this.r.set_surface(img.id, img.surface.id, img.width, img.height);\n } else if (img.scene3d) {\n const k = this.viewport.w / doc.width;\n const report = { unsupported: new Set<string>() };\n let table = this.textures3d.get(img.id);\n if (!table) this.textures3d.set(img.id, (table = new TextureTable()));\n const [pw, ph] = img.scale3d ? [Math.ceil(img.width * img.scale3d), Math.ceil(img.height * img.scale3d)] : [Math.round(img.width * k), Math.round(img.height * k)];\n const t0 = performance.now();\n let geometries = this.geometries3d.get(img.id);\n if (!geometries) this.geometries3d.set(img.id, (geometries = new GeometryTable()));\n const words = encodeScene3D(img.scene3d, report, table, geometries);\n // A scene handed over again unchanged (every frame, when the\n // caller rebuilds its document) keeps what is already drawn.\n const sig = `${pw}x${ph}:${words.length}:${hashWords(words)}`;\n this.encode3dMs += performance.now() - t0;\n this.words3d += words.length;\n if (this.scene3dSigs.get(img.id) !== sig) {\n try {\n this.r.set_scene3d(img.id, pw, ph, words);\n } catch (e) {\n // The renderer didn't take this frame's defs: start over.\n this.geometries3d.delete(img.id);\n this.scene3dSigs.delete(img.id);\n throw e;\n }\n this.scene3dSigs.set(img.id, sig);\n }\n for (const u of report.unsupported) this.missing3d.add(u);\n this.bindTextures3d(img, table);\n } else this.r.upload_image(img.id, this.colorCorrect(img), img.mipmaps);\n this.uploaded.set(img.id, img.version);\n }\n const w = this.w;\n if (!this.synced) {\n // Full upload: create every node first so CHILDREN can refer to them.\n for (const n of doc.nodes) this.writeNode(n, D.ALL);\n w.begin(2);\n w.u(OP.ROOT); w.u(doc.root.id);\n w.begin(8);\n w.u(OP.VIEWPORT); w.u(this.viewport.w); w.u(this.viewport.h); w.f(this.viewport.w / doc.width);\n for (const c of doc.background) w.f(c);\n this.synced = true;\n } else {\n for (const n of doc.dirty) this.writeNode(n, n.dirty);\n }\n for (const n of doc.dirty) n.dirty = 0;\n doc.dirty.clear();\n if (this.collectUnused && this.generation % 30 === 0) this.sweep();\n w.flush();\n this.lastDeltaWords = w.takeCount();\n }\n\n render() {\n this.r.render();\n }\n\n invalidate() {\n this.r.invalidate();\n }\n\n waitGpu(): Promise<void> {\n return this.r.wait_gpu();\n }\n\n async readPixels(): Promise<Uint8Array> {\n return (await this.r.read_pixels()) as Uint8Array;\n }\n\n stats(): Record<string, number> {\n const s = this.r.stats();\n return {\n buildMs: s[0], encodeMs: s[1], applyMs: s[2], prims: s[3], ops: s[4], layers: s[5],\n passes: s[6], draws: s[7], culled: s[8], tessellated: s[9], poolTextures: s[10],\n poolMiB: s[11], geomVertices: s[12], reusedPrims: s[13], cleanPrims: s[14], deltaWords: this.lastDeltaWords,\n scene3dEncodeMs: this.encode3dMs, scene3dWords: this.words3d, scene3dSetMs: s[15], scene3dDrawMs: s[16], scene3dMapsMs: s[17], surfacesDrawn: s[18], surfaces: s[19],\n };\n }\n\n registerFont(bytes: Uint8Array, family: string) {\n this.r.register_font(bytes, family);\n }\n\n destroy() {\n this.r.free();\n }\n}\n", "// Draws a frame from core's own pieces around the adapter's render context: build the clips, evaluate state\n// at the frame, lay out, and render until no decode is pending.\n\nimport {\n AssetManager, AudioSink, ClipStore, AssetTimeline, ManifestAssetCatalog, type ProjectDocument, type Registry,\n renderSettled, setTheme, StateEvaluator, StorageAdapter,\n} from \"@motionscript/core\";\nimport type { WgpuRenderContext } from \"./context\";\n\nclass SilentAudio extends AudioSink {\n override get schedulesAudio(): boolean { return false; }\n has(): boolean { return true; }\n async append(): Promise<void> {}\n retain(): void {}\n schedule(): void {}\n syncTo(): void {}\n play(): void {}\n stop(): void {}\n}\n\n/** Asset keys as scenes write them (\"./cat.jpg\") and as the manifest lists them (\"cat.jpg\"). */\nexport const assetKey = (src: string) => src.replace(/^\\.?\\//, \"\");\n\n/** A decoded image the doc can paint with. */\nexport interface Decoded { bitmap: ImageBitmap; bytes: Uint8Array; width: number; height: number }\n\n/** Media for the harness: decoded images by asset key (video and fonts later). */\nexport class AdapterStorage extends StorageAdapter {\n constructor(catalog: never, viewport: never, private urls: Record<string, string>, readonly images: Map<string, Decoded>, private videoUrls: Record<string, string> = {}) {\n super(catalog, viewport);\n }\n async loadImage(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.images.has(key)) return;\n const url = this.urls[key];\n if (!url) return;\n const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());\n let bitmap: ImageBitmap;\n if (key.endsWith(\".svg\")) {\n // createImageBitmap can't decode SVG; an <img> can (at its natural size).\n const img = new Image();\n img.src = URL.createObjectURL(new Blob([bytes as BlobPart], { type: \"image/svg+xml\" }));\n await img.decode();\n bitmap = await createImageBitmap(img);\n } else bitmap = await createImageBitmap(new Blob([bytes as BlobPart]));\n this.images.set(key, { bitmap, bytes, width: bitmap.width, height: bitmap.height });\n }\n /** Open videos by asset key, and their decoded frames by key@time. */\n readonly videos = new Map<string, HTMLVideoElement>();\n readonly frames = new Map<string, ImageBitmap>();\n private pending = new Map<string, { key: string; time: number }>();\n\n async loadVideo(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.videos.has(key) || !this.videoUrls[key]) return;\n const v = document.createElement(\"video\");\n v.muted = true;\n v.preload = \"auto\";\n v.src = this.videoUrls[key];\n await new Promise<void>((resolve, reject) => {\n v.onloadeddata = () => resolve();\n v.onerror = () => reject(new Error(`video ${key} failed to load`));\n });\n this.videos.set(key, v);\n }\n\n /** The frame of `src` at `time` s, or null (queued for warmPendingDecodes). */\n videoFrame(src: string, time: number): ImageBitmap | null {\n const key = assetKey(src);\n const id = `${key}@${time.toFixed(6)}`;\n const f = this.frames.get(id);\n if (f) return f;\n if (this.videos.has(key)) this.pending.set(id, { key, time });\n return null;\n }\n\n override hasPendingDecodes(): boolean {\n return this.pending.size > 0;\n }\n\n override async warmPendingDecodes(): Promise<boolean> {\n if (this.pending.size === 0) return false;\n for (const [id, { key, time }] of [...this.pending]) {\n const v = this.videos.get(key)!;\n await new Promise<void>((resolve) => {\n v.onseeked = () => resolve();\n v.currentTime = time;\n });\n this.frames.set(id, await createImageBitmap(v));\n this.pending.delete(id);\n }\n return true;\n }\n async loadAudio(): Promise<void> {}\n async fetchAudioData(): Promise<ArrayBuffer> { return new ArrayBuffer(0); }\n async loadFont(): Promise<boolean> { return true; }\n}\n\n/** Media the scenes may reference: asset key → URL; videos with their duration (s). */\nexport interface Media { images: Record<string, string>; videos?: Record<string, { url: string; duration: number }> }\n\nexport async function drawFrameAt(project: ProjectDocument, registry: Registry, ctx: WgpuRenderContext, frame: number | \"last\", media: Media = { images: {} }) {\n const { fps, viewport } = project as Required<ProjectDocument>;\n setTheme(project.theme as never);\n const image = Object.fromEntries(Object.entries(media.images).map(([key, src]) => [key, { src, width: 0, height: 0, sizeBytes: 0 }]));\n const videos = media.videos ?? {};\n const video = Object.fromEntries(Object.entries(videos).map(([key, v]) => [key, { src: v.url, width: 0, height: 0, duration: v.duration, sizeBytes: 0 }]));\n const assets = new ManifestAssetCatalog({ image, video, audio: {}, font: {} });\n const storage = new AdapterStorage(assets as never, viewport as never, media.images, ctx.images, Object.fromEntries(Object.entries(videos).map(([k, v]) => [k, v.url])));\n ctx.storage = storage;\n const scope = { registry, viewport, fps, assets, measurer: ctx };\n const loads: { manager?: AssetManager } = {};\n const store = new ClipStore(project, scope as never, { isReady: (key: string) => loads.manager?.isReady(key) ?? false });\n const precomper = new AssetTimeline(project, scope as never, { store });\n const evaluator = new StateEvaluator(project, scope as never, store);\n const { totalFrames } = precomper.result();\n const target = Math.max(0, Math.min(totalFrames - 1, frame === \"last\" ? totalFrames - 1 : Math.floor(frame)));\n const precomp = precomper.ensureCovering(target);\n const manager = (loads.manager = new AssetManager(precomp, storage, new SilentAudio()));\n await manager.loadAt(target);\n evaluator.stateAt(target);\n evaluator.layout(ctx);\n await renderSettled(() => ctx.execute(() => evaluator.render(ctx)), storage, () => true);\n return { frame: target, totalFrames, buildErrors: precomp.buildErrors };\n}\n", "// The engine's StorageAdapter for the wgpu renderer: assets decoded into what\n// the adapter's render context paints with (ImageBitmaps by asset key, video\n// frames by source and time) and font bytes for ms-text. Bytes come through\n// the host's `loadBytes` (a plain fetch by default), so a local store is honoured.\n\nimport { type AssetCatalog, type Size2D, StorageAdapter } from \"@motionscript/core\";\nimport { ALL_FORMATS, BlobSource, Input, VideoSampleSink } from \"mediabunny\";\nimport type { VideoFrames } from \"../adapter/context\";\nimport { assetKey, type Decoded } from \"../adapter/driver\";\n\n/** WebGPU's guaranteed texture edge; larger images are downscaled to fit. */\nconst MAX_TEXTURE_EDGE = 8192;\n/** Decoded frames kept per video (scrubbing back and forth reuses them). */\nconst FRAMES_PER_VIDEO = 12;\n\ninterface VideoTrack {\n duration: number;\n sink: VideoSampleSink;\n input: Input;\n /** Decoded frames by time key, oldest first. */\n frames: Map<string, ImageBitmap>;\n last: ImageBitmap | null;\n}\n\nexport interface FontFile {\n bytes: Uint8Array;\n family: string;\n}\n\nconst timeKey = (time: number) => time.toFixed(4);\n\nasync function fetchBytes(src: string): Promise<Blob> {\n const res = await fetch(src);\n if (!res.ok) throw new Error(`${src}: HTTP ${res.status}`);\n return res.blob();\n}\n\nexport class WgpuStorageAdapter extends StorageAdapter implements VideoFrames {\n readonly images = new Map<string, Decoded>();\n readonly videos = new Map<string, VideoTrack>();\n /** Every font file registered so far, in order; renderers replay them. */\n readonly fonts: FontFile[] = [];\n private fontListeners = new Set<(font: FontFile) => void>();\n private registeredFamilies = new Set<string>();\n private pending = new Map<string, { src: string; time: number }>();\n /** SVGs by asset key, kept to rasterize again at the edge a draw needs. */\n private vectors = new Map<string, { img: HTMLImageElement; edge: number }>();\n /** Vector keys a draw wants sharper, and the long edge (px) it wants. */\n private upgrades = new Map<string, number>();\n /** Other work a settled frame waits for (a surface's shader compiles): a promise while there is some. */\n private settlers = new Set<() => Promise<void> | null>();\n private audioData = new Map<string, Promise<ArrayBuffer>>();\n\n constructor(catalog: AssetCatalog, viewport: Size2D, readonly fps: number, private readonly loadBytes: (src: string) => Promise<Blob> = fetchBytes) {\n super(catalog, viewport);\n }\n\n /** The session's viewport, in scene units. */\n get size(): Size2D {\n return this.viewport;\n }\n\n /** Has `renderSettled` (exports, settled seeks) also wait for what `settler` reports pending. */\n addSettler(settler: () => Promise<void> | null): () => void {\n this.settlers.add(settler);\n return () => this.settlers.delete(settler);\n }\n\n /** Calls `listener` for each font registered from now on. */\n onFont(listener: (font: FontFile) => void): () => void {\n this.fontListeners.add(listener);\n return () => this.fontListeners.delete(listener);\n }\n\n async loadImage(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.images.has(key)) return;\n const url = this.url(src, (c) => c.getImageMeta(src));\n const blob = await this.loadBytes(url);\n let bitmap: ImageBitmap;\n if (blob.type === \"image/svg+xml\" || /\\.svg(\\?|#|$)/i.test(url)) {\n // createImageBitmap can't decode SVG; an <img> can.\n const img = new Image();\n img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(await blob.text())}`;\n await img.decode();\n bitmap = await createImageBitmap(img);\n this.vectors.set(key, { img, edge: Math.max(bitmap.width, bitmap.height) });\n } else {\n bitmap = await createImageBitmap(blob, { colorSpaceConversion: \"none\" });\n }\n const edge = Math.max(bitmap.width, bitmap.height);\n if (edge > MAX_TEXTURE_EDGE) {\n const k = MAX_TEXTURE_EDGE / edge;\n const scaled = await createImageBitmap(bitmap, {\n resizeWidth: Math.max(1, Math.round(bitmap.width * k)),\n resizeHeight: Math.max(1, Math.round(bitmap.height * k)),\n resizeQuality: \"high\",\n });\n bitmap.close();\n bitmap = scaled;\n }\n this.images.set(key, { bitmap, bytes: new Uint8Array(0), width: bitmap.width, height: bitmap.height });\n }\n\n async loadVideo(src: string): Promise<void> {\n const key = assetKey(src);\n if (this.videos.has(key)) return;\n const url = this.url(src, (c) => c.getVideoMeta(src));\n const input = new Input({ source: new BlobSource(await this.loadBytes(url)), formats: ALL_FORMATS });\n const track = await input.getPrimaryVideoTrack();\n if (!track) {\n input.dispose();\n throw new Error(`loadVideo(${src}): no video track`);\n }\n const duration = await input.computeDuration();\n this.videos.set(key, { duration, sink: new VideoSampleSink(track), input, frames: new Map(), last: null });\n }\n\n videoFrame(src: string, time: number): ImageBitmap | null {\n const key = assetKey(src);\n const video = this.videos.get(key);\n if (!video) return null;\n const exact = video.frames.get(timeKey(time));\n if (exact) return exact;\n // By time as well: an echo asks for several frames of one clip at once.\n this.pending.set(`${key}@${timeKey(time)}`, { src: key, time });\n // The nearest earlier answer keeps playback from flashing empty while\n // the exact frame decodes; a settled render waits for it.\n return video.last;\n }\n\n /**\n * A draw of `src` covering `edge` device px along its long side. An SVG\n * has no resolution of its own, so one drawn larger than its raster is\n * rasterized again, at the next power-of-two multiple of its natural size.\n */\n wantImageEdge(src: string, edge: number): void {\n const key = assetKey(src);\n const vector = this.vectors.get(key);\n const image = this.images.get(key);\n if (!vector || !image || edge <= vector.edge) return;\n const natural = Math.max(image.width, image.height);\n const level = Math.min(MAX_TEXTURE_EDGE, natural * 2 ** Math.ceil(Math.log2(edge / natural)));\n if (level > vector.edge && level > (this.upgrades.get(key) ?? 0)) this.upgrades.set(key, level);\n }\n\n override hasPendingUpgrades(): boolean {\n return this.upgrades.size > 0;\n }\n\n override async warmPendingUpgrades(): Promise<boolean> {\n if (this.upgrades.size === 0) return false;\n const jobs = [...this.upgrades];\n this.upgrades.clear();\n for (const [key, edge] of jobs) {\n const vector = this.vectors.get(key), image = this.images.get(key);\n if (!vector || !image) continue;\n const k = edge / Math.max(image.width, image.height);\n const canvas = new OffscreenCanvas(Math.max(1, Math.round(image.width * k)), Math.max(1, Math.round(image.height * k)));\n canvas.getContext(\"2d\")!.drawImage(vector.img, 0, 0, canvas.width, canvas.height);\n const old = image.bitmap;\n // The natural size stays what places it; only the raster grows.\n image.bitmap = await createImageBitmap(canvas);\n vector.edge = edge;\n // Still painted by a doc until the next frame replaces it.\n queueMicrotask(() => old.close());\n }\n return true;\n }\n\n override hasPendingDecodes(): boolean {\n return this.pending.size > 0;\n }\n\n override async warmPendingDecodes(): Promise<boolean> {\n const other = [...this.settlers].map((s) => s()).filter((p) => p !== null);\n if (this.pending.size === 0 && other.length === 0) return false;\n const jobs = [...this.pending.values()];\n this.pending.clear();\n await Promise.all([...jobs.map(({ src, time }) => this.decodeFrame(src, time)), ...other]);\n return true;\n }\n\n private async decodeFrame(src: string, time: number): Promise<void> {\n const video = this.videos.get(src);\n if (!video) return;\n const sample = await video.sink.getSample(time);\n if (!sample) return;\n const frame = sample.toVideoFrame();\n let bitmap: ImageBitmap;\n try {\n bitmap = await createImageBitmap(frame);\n } finally {\n frame.close();\n sample.close();\n }\n video.frames.set(timeKey(time), bitmap);\n video.last = bitmap;\n while (video.frames.size > FRAMES_PER_VIDEO) {\n const [oldest, old] = video.frames.entries().next().value!;\n video.frames.delete(oldest);\n // Still painted by a doc until the next frame replaces it.\n if (old !== video.last) queueMicrotask(() => old.close());\n }\n }\n\n async loadAudio(): Promise<void> {}\n\n fetchAudioData(src: string): Promise<ArrayBuffer> {\n let data = this.audioData.get(src);\n if (!data) {\n // A video's own soundtrack is asked for under the video's key.\n const url = this.url(src, (c) => {\n try {\n return c.getAudioMeta(src);\n } catch {\n return c.getVideoMeta(src);\n }\n });\n data = (async () => (await this.loadBytes(url)).arrayBuffer())();\n this.audioData.set(src, data);\n data.catch(() => this.audioData.delete(src));\n }\n return data.then((b) => b.slice(0));\n }\n\n async loadFont(key: string, fontFamily: string): Promise<boolean> {\n if (this.registeredFamilies.has(fontFamily)) return true;\n const metas = this.catalog.getFontFamilyMetas(fontFamily);\n if (metas.length === 0) {\n if (this.getDecodePolicy() === \"interactive\") console.warn(`[WgpuStorageAdapter] No font manifest entry for \"${key}\".`);\n return false;\n }\n const sources = [...new Set(metas.map((m) => m.src))];\n const files = await Promise.all(sources.map(async (s) => new Uint8Array(await (await this.loadBytes(s)).arrayBuffer())));\n if (this.registeredFamilies.has(fontFamily)) return true;\n for (const bytes of files) {\n const font = { bytes, family: fontFamily };\n this.fonts.push(font);\n for (const listener of this.fontListeners) listener(font);\n }\n this.registeredFamilies.add(fontFamily);\n return true;\n }\n\n override dispose(): void {\n for (const image of this.images.values()) image.bitmap.close();\n this.images.clear();\n for (const video of this.videos.values()) {\n for (const frame of video.frames.values()) frame.close();\n video.input.dispose();\n }\n this.videos.clear();\n this.pending.clear();\n this.vectors.clear();\n this.upgrades.clear();\n this.fontListeners.clear();\n super.dispose();\n }\n\n /** The address a source's bytes live at: the manifest's, else the source itself. */\n private url(src: string, meta: (catalog: AssetCatalog) => { src?: string }): string {\n try {\n return meta(this.catalog).src || src;\n } catch {\n return src;\n }\n }\n}\n", "import type { Bounds } from \"./base\";\n\n/** The placement fields `computeImageMatrix` reads off an image or video fill. */\nexport interface MediaPlacement {\n fit?: string;\n crop?: { left: number; right: number; top: number; bottom: number };\n zoom?: number;\n anchor?: { x: number; y: number };\n matrix?: Float32Array | number[][];\n}\n\n/**\n * The image→shape matrix (row-major 3×3 as 9 numbers) from intrinsic source\n * pixels, the space `tile`, `crop` and a raw `matrix` are authored in. Four\n * stages compose in order: crop picks a window treated as the whole image, fit\n * sets the base scale for it, zoom multiplies that, and anchor is both the zoom\n * focal point and the alignment where the image doesn't cover.\n */\nexport function computeImageMatrix(imgW: number, imgH: number, fill: MediaPlacement, bounds: Bounds | null): number[] {\n if (fill.matrix) {\n if (fill.matrix instanceof Float32Array) return Array.from(fill.matrix);\n return (fill.matrix as number[][]).flat();\n }\n const zoom = fill.zoom ?? 1;\n if (!bounds) return [zoom, 0, 0, 0, zoom, 0, 0, 0, 1];\n\n const mode = fill.fit ?? \"fill\";\n const boxW = bounds.right - bounds.left;\n const boxH = bounds.bottom - bounds.top;\n // A repeating texture repeats the whole image, so a tile ignores the crop.\n const crop = mode === \"tile\" ? undefined : fill.crop;\n const srcX = crop ? crop.left * imgW : 0;\n const srcY = crop ? crop.top * imgH : 0;\n const srcW = crop ? imgW * (1 - crop.left - crop.right) : imgW;\n const srcH = crop ? imgH * (1 - crop.top - crop.bottom) : imgH;\n if (srcW <= 0 || srcH <= 0) return [zoom, 0, bounds.left, 0, zoom, bounds.top, 0, 0, 1];\n\n let sx: number, sy: number;\n if (mode === \"fit\") {\n sx = sy = Math.min(boxW / srcW, boxH / srcH);\n } else if (mode === \"stretch\") {\n sx = boxW / srcW; sy = boxH / srcH;\n } else if (mode === \"tile\") {\n sx = sy = 1;\n } else {\n sx = sy = Math.max(boxW / srcW, boxH / srcH);\n }\n sx *= zoom; sy *= zoom;\n // A repeating texture has no corner to pin, so a tile keeps its origin.\n if (mode === \"tile\") return [sx, 0, bounds.left, 0, sy, bounds.top, 0, 0, 1];\n\n // The anchor is [-1, 1] y-up (the pivot space); texture space is [0, 1] y-down.\n const anchor = fill.anchor ?? { x: 0, y: 0 };\n const ax = (anchor.x + 1) / 2;\n const ay = (1 - anchor.y) / 2;\n const tx = bounds.left + ax * (boxW - srcW * sx) - srcX * sx;\n const ty = bounds.top + ay * (boxH - srcH * sy) - srcY * sy;\n return [sx, 0, tx, 0, sy, ty, 0, 0, 1];\n}\n", "// core's resolved fills, strokes and shadows to the doc's paints, resolved\n// against a shape's bounds.\n\nimport type { FillResolved, ShadowResolved } from \"@motionscript/core\";\nimport { isWgslShader } from \"@motionscript/core\";\nimport { computeImageMatrix } from \"./geometry/image-matrix\";\nimport type { ImageAsset, Mat, Paint, Shadow, Stop } from \"../doc\";\n\ntype Bounds = [number, number, number, number];\n\n/** A normalized point to pixels: −1..1, y up (+1 = top). */\nfunction norm(nx: number, ny: number, b: Bounds): [number, number] {\n const cx = (b[0] + b[2]) / 2, cy = (b[1] + b[3]) / 2;\n return [cx + nx * ((b[2] - b[0]) / 2), cy - ny * ((b[3] - b[1]) / 2)];\n}\n\nfunction stops(colors: readonly (readonly number[])[], at: readonly number[]): Stop[] {\n return colors.map((c, i) => ({ offset: at[i] ?? i / Math.max(1, colors.length - 1), color: [c[0], c[1], c[2], c[3]] }));\n}\n\n/** A fill layer as a doc paint, or null when this adapter doesn't map it yet. */\n/** What a fill may need from the frame's doc. */\nexport interface PaintAssets {\n image(src: string): ImageAsset | null;\n /** A 3D scene rendered at `ratio` device px per logical px over `w`×`h`. */\n scene3d(scene: unknown, w: number, h: number, ratio: number): ImageAsset;\n /** The current device scale (canvas3d sizes its buffer by it). */\n deviceScale(): number;\n /** An image drawn `edge` device px along its long side (a vector may rasterize sharper). */\n imageEdge?(src: string, edge: number): void;\n /** A video fill's frame at the node's elapsed time (or at `time` s), or null while it decodes. */\n video(fill: unknown, time?: number): ImageAsset | null;\n /** The current node's elapsed seconds (a shader fill's `time`). */\n time?(): number;\n /** Sees each WGSL shader fill drawn, to check its uniforms against its `Params`. */\n checkShader?(fill: unknown): void;\n}\n\nexport function fillPaint(f: FillResolved, bounds: Bounds, missing: Set<string>, assets?: PaintAssets): Paint | null {\n const any = f as any;\n const image = assets ? (src: string) => assets.image(src) : undefined;\n switch (any.type) {\n case \"video\": {\n const asset = assets?.video(any);\n if (!asset) {\n missing.add(\"fill:video-not-decoded\");\n return null;\n }\n const r = computeImageMatrix(asset.width, asset.height, any, { left: bounds[0], top: bounds[1], right: bounds[2], bottom: bounds[3] });\n const fit = any.fit ?? \"fill\";\n const tile = fit === \"tile\" ? \"repeat\" : fit !== \"fit\" && (any.zoom ?? 1) >= 1 ? \"clamp\" : \"decal\";\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], matrix: [r[0], r[3], r[1], r[4], r[2], r[5]], tile };\n }\n case \"canvas3D\": {\n if (!assets) return null;\n const w = bounds[2] - bounds[0], h = bounds[3] - bounds[1];\n if (!(w > 0) || !(h > 0)) return null;\n // canvas3d.ts: min(maxPixelRatio ?? 2, max(deviceScale, 1)), stretched over the box.\n const ratio = Math.min(any.maxPixelRatio ?? 2, Math.max(assets.deviceScale(), 1));\n const asset = assets.scene3d(any.scene, w, h, ratio);\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], w, h], fit: \"stretch\" };\n }\n case \"image\": {\n const asset = image?.(any.src);\n if (!asset) {\n missing.add(\"fill:image-not-loaded\");\n return null;\n }\n // makeImageShader: computeImageMatrix places it; tile repeats, a\n // covering fit clamps, anything that may leave a gap is decal.\n const r = computeImageMatrix(asset.width, asset.height, any, { left: bounds[0], top: bounds[1], right: bounds[2], bottom: bounds[3] });\n const m: Mat = [r[0], r[3], r[1], r[4], r[2], r[5]];\n if (assets?.imageEdge) {\n const scale = assets.deviceScale();\n assets.imageEdge(any.src, Math.max(asset.width * Math.hypot(m[0], m[1]), asset.height * Math.hypot(m[2], m[3])) * scale);\n }\n const fit = any.fit ?? \"fill\";\n const tile = fit === \"tile\" ? \"repeat\" : fit !== \"fit\" && (any.zoom ?? 1) >= 1 ? \"clamp\" : \"decal\";\n return { kind: \"image\", image: asset, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], matrix: m, tile };\n }\n case \"solid\":\n return { kind: \"solid\", color: [any.color[0], any.color[1], any.color[2], any.color[3]] };\n case \"linear-gradient\":\n return { kind: \"linear\", from: norm(any.start.x, any.start.y, bounds), to: norm(any.end.x, any.end.y, bounds), stops: stops(any.colors, any.stops) };\n case \"conic-gradient\": {\n // A sweep from startAngle over a full turn, clamped.\n const start = any.startAngle ?? 0;\n const even = any.stops.length === any.colors.length ? any.stops : [];\n return { kind: \"sweep\", center: norm(any.center.x, any.center.y, bounds), startAngle: start, endAngle: start + 360, stops: stops(any.colors, even) };\n }\n case \"radial-gradient\":\n return { kind: \"radial\", center: norm(any.center.x, any.center.y, bounds), radius: any.radius, stops: stops(any.colors, any.stops) };\n case \"shader\": {\n // Nothing to draw yet (a host's picker before a shader is chosen).\n if (!any.source?.trim()) return null;\n // WGSL only: a stored SkSL fill draws nothing (reported as fill:shader-sksl).\n if (!isWgslShader(any)) break;\n assets?.checkShader?.(any);\n const texture = any.textures?.[0] ? image?.(any.textures[0].src) : undefined;\n if (any.textures?.[0] && !texture) {\n missing.add(\"fill:image-not-loaded\");\n return null;\n }\n return {\n kind: \"shader\", source: any.source, uniforms: any.uniforms ?? {}, time: assets?.time?.() ?? 0,\n box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]], ...(texture ? { texture } : {}),\n };\n }\n case \"dotGrid\": case \"grid\": case \"stripe\": case \"noise\": case \"fractalNoise\":\n return { kind: \"procedural\", fill: any, box: [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]] };\n }\n missing.add(any.type === \"shader\" ? \"fill:shader-sksl\" : `fill:${any.type}`);\n return null;\n}\n\n/** A drop shadow with one solid fill, as the doc's leaf shadows carry it. */\nexport function shadowOf(s: ShadowResolved, missing: Set<string>): Shadow | null {\n const f = s.fill[0] as any;\n const c = f?.type === \"solid\" ? f.color : [0, 0, 0, 1];\n // sigma = blur / 2; offset in y-up author space.\n return { dx: s.offset?.x ?? 0, dy: -(s.offset?.y ?? 0), sigma: s.blur / 2, spread: s.spread, color: [c[0], c[1], c[2], c[3] * (f?.opacity ?? 1)] };\n}\n", "// A WGSL shader's uniforms are bound to its `struct Params` by name, so a\n// value naming no member is dropped and a member with no value reads 0: a\n// renamed member silently zeroes. Both are reported as `params` issues.\n\nimport { normalizeUniforms, shaderContractOf, WGSL_CONTRACT, type RenderIssue } from \"@motionscript/core\";\nimport { type ShaderScope, validateShader } from \"../user-shaders\";\n\n/** Member names per scope and source (null: the source does not compile, reported elsewhere). */\nconst members = new Map<string, readonly string[] | null>();\nconst MAX_SOURCES = 64;\n\nfunction membersOf(scope: ShaderScope, source: string): readonly string[] | null {\n const key = `${scope}\\n${source}`;\n let known = members.get(key);\n if (known === undefined) {\n try {\n const report = validateShader(scope, source);\n known = report.ok ? report.fields.map((f) => f.name) : null;\n } catch {\n // The WASM is not loaded.\n return null;\n }\n if (members.size >= MAX_SOURCES) members.delete(members.keys().next().value!);\n } else {\n members.delete(key);\n }\n members.set(key, known);\n return known;\n}\n\n/** What a WGSL fill or effect's uniforms and its `Params` disagree on, and a contract newer than this renderer's. */\nexport function shaderParamIssues(scope: ShaderScope, shader: { source?: string; language?: string; contract?: number; uniforms?: unknown }): RenderIssue[] {\n const source = shader.source ?? \"\";\n const contract = shaderContractOf(shader);\n if (!source.trim() || contract === undefined) return [];\n const out: RenderIssue[] = [];\n if (contract > WGSL_CONTRACT) {\n out.push({\n kind: \"shader\", feature: `${scope}:contract-${contract}`,\n message: `A WGSL shader ${scope} is written for shader contract ${contract}; this renderer implements ${WGSL_CONTRACT}, so it may not draw as intended.`,\n });\n }\n const names = membersOf(scope, source);\n if (!names) return out;\n const values = normalizeUniforms((shader.uniforms ?? {}) as Parameters<typeof normalizeUniforms>[0]);\n for (const name of Object.keys(values)) {\n if (!names.includes(name)) {\n out.push({ kind: \"params\", feature: `params:${name}`, message: `A WGSL shader ${scope} is given \"${name}\", which names no member of its struct Params, so the value is ignored.` });\n }\n }\n for (const name of names) {\n if (!(name in values)) {\n out.push({ kind: \"params\", feature: `params:${name}`, message: `A WGSL shader ${scope}'s Params.${name} is given no value, so it reads 0.` });\n }\n }\n return out;\n}\n", "// Contour measurement on PathData, and what is built with it: trimPath keeps\n// the [start, end] fraction of the contours' total length, each cut exactly\n// (curves split at the parameter whose arc length matches; a segment is never\n// closed), and dash fitting cuts a pattern's \"on\" runs out of them.\n\nimport { pathOps } from \"@motionscript/core\";\nimport { type PathData, PathBuilder, VERB } from \"../doc\";\n\ntype Seg = { kind: \"line\" | \"quad\" | \"cubic\"; p: number[]; len: number; table: number[] };\n\nconst SAMPLES = 32;\n\nfunction at(s: Seg, t: number): [number, number] {\n const p = s.p, u = 1 - t;\n if (s.kind === \"line\") return [p[0] + (p[2] - p[0]) * t, p[1] + (p[3] - p[1]) * t];\n if (s.kind === \"quad\") return [u * u * p[0] + 2 * u * t * p[2] + t * t * p[4], u * u * p[1] + 2 * u * t * p[3] + t * t * p[5]];\n return [\n u * u * u * p[0] + 3 * u * u * t * p[2] + 3 * u * t * t * p[4] + t * t * t * p[6],\n u * u * u * p[1] + 3 * u * u * t * p[3] + 3 * u * t * t * p[5] + t * t * t * p[7],\n ];\n}\n\nfunction measure(kind: Seg[\"kind\"], p: number[]): Seg {\n const table = [0];\n const n = kind === \"line\" ? 1 : SAMPLES;\n const s: Seg = { kind, p, len: 0, table };\n let prev = at(s, 0);\n for (let i = 1; i <= n; i++) {\n const q = at(s, i / n);\n table.push(table[i - 1] + Math.hypot(q[0] - prev[0], q[1] - prev[1]));\n prev = q;\n }\n s.len = table[n];\n return s;\n}\n\n/** Parameter at arc length d along the segment. */\nfunction tAt(s: Seg, d: number): number {\n const n = s.table.length - 1;\n if (d <= 0) return 0;\n if (d >= s.len) return 1;\n let i = 1;\n while (s.table[i] < d) i++;\n const a = s.table[i - 1], b = s.table[i];\n return (i - 1 + (b > a ? (d - a) / (b - a) : 0)) / n;\n}\n\n/** The part of a segment between parameters t0 < t1, as control points. */\nfunction slice(s: Seg, t0: number, t1: number): number[] {\n const p = s.p;\n if (s.kind === \"line\") return [...at(s, t0), ...at(s, t1)];\n // de Casteljau split at t1, then the left part at t0 / t1.\n const split = (pts: number[], t: number): [number[], number[]] => {\n const k = pts.length / 2;\n const rows: number[][] = [pts];\n for (let r = 1; r < k; r++) {\n const prev = rows[r - 1], row: number[] = [];\n for (let j = 0; j < prev.length - 2; j += 2) row.push(prev[j] + (prev[j + 2] - prev[j]) * t, prev[j + 1] + (prev[j + 3] - prev[j + 1]) * t);\n rows.push(row);\n }\n const left: number[] = [], right: number[] = [];\n for (let r = 0; r < k; r++) left.push(rows[r][0], rows[r][1]);\n for (let r = k - 1; r >= 0; r--) right.push(rows[r][rows[r].length - 2], rows[r][rows[r].length - 1]);\n return [left, right];\n };\n const [left] = t1 < 1 ? split(p, t1) : [p];\n if (t0 <= 0) return left;\n return split(left, t0 / t1)[1];\n}\n\nfunction contours(path: PathData): { segs: Seg[]; closed: boolean }[] {\n const out: { segs: Seg[]; closed: boolean }[] = [];\n let cur: { segs: Seg[]; closed: boolean } | null = null;\n let x = 0, y = 0, sx = 0, sy = 0, k = 0;\n const pts = path.points;\n for (const v of path.verbs) {\n if (v === VERB.move) {\n x = sx = pts[k++]; y = sy = pts[k++];\n cur = { segs: [], closed: false };\n out.push(cur);\n } else if (v === VERB.line) {\n const nx = pts[k++], ny = pts[k++];\n cur!.segs.push(measure(\"line\", [x, y, nx, ny])); x = nx; y = ny;\n } else if (v === VERB.quad) {\n const p = [x, y, pts[k], pts[k + 1], pts[k + 2], pts[k + 3]]; k += 4;\n cur!.segs.push(measure(\"quad\", p)); x = p[4]; y = p[5];\n } else if (v === VERB.cubic) {\n const p = [x, y, pts[k], pts[k + 1], pts[k + 2], pts[k + 3], pts[k + 4], pts[k + 5]]; k += 6;\n cur!.segs.push(measure(\"cubic\", p)); x = p[6]; y = p[7];\n } else if (v === VERB.close) {\n if (cur) {\n if (x !== sx || y !== sy) cur.segs.push(measure(\"line\", [x, y, sx, sy]));\n cur.closed = true;\n }\n x = sx; y = sy;\n }\n }\n return out.filter((c) => c.segs.length > 0);\n}\n\n/** The path's signed area over its control polygons (> 0: clockwise, y down). */\nexport function signedArea(path: PathData): number {\n let area = 0, k = 0, sx = 0, sy = 0, px = 0, py = 0;\n const pts = path.points;\n const to = (x: number, y: number) => {\n area += px * y - x * py;\n px = x; py = y;\n };\n for (const v of path.verbs) {\n if (v === VERB.move) {\n to(sx, sy);\n sx = px = pts[k++]; sy = py = pts[k++];\n } else if (v !== VERB.close) {\n const n = v === VERB.line ? 1 : v === VERB.quad ? 2 : 3;\n for (let i = 0; i < n; i++, k += 2) to(pts[k], pts[k + 1]);\n }\n }\n to(sx, sy);\n return area / 2;\n}\n\n/** The path traced backwards, contour by contour. */\nexport function reversePath(path: PathData): PathData {\n const b = new PathBuilder();\n const pts = path.points;\n let k = 0, i = 0;\n const verbs = path.verbs;\n while (i < verbs.length) {\n if (verbs[i] !== VERB.move) { i++; continue; }\n // One contour: its segments as [verb, points from its start].\n let x = pts[k++], y = pts[k++];\n const segs: { v: number; p: number[] }[] = [];\n let closed = false;\n for (i++; i < verbs.length && verbs[i] !== VERB.move; i++) {\n const v = verbs[i];\n if (v === VERB.close) { closed = true; continue; }\n const n = v === VERB.line ? 1 : v === VERB.quad ? 2 : 3;\n const p = [x, y];\n for (let j = 0; j < n; j++, k += 2) p.push(pts[k], pts[k + 1]);\n x = p[p.length - 2]; y = p[p.length - 1];\n segs.push({ v, p });\n }\n b.moveTo(x, y);\n for (let s = segs.length - 1; s >= 0; s--) {\n const { v, p } = segs[s];\n if (v === VERB.line) b.lineTo(p[0], p[1]);\n else if (v === VERB.quad) b.quadTo(p[2], p[3], p[0], p[1]);\n else b.cubicTo(p[4], p[5], p[2], p[3], p[0], p[1]);\n }\n if (closed) b.close();\n }\n return b.build();\n}\n\n/** Every contour closed (the shape has an interior to align a stroke against). */\nexport function isClosed(path: PathData): boolean {\n const cs = contours(path);\n return cs.length > 0 && cs.every((c) => c.closed);\n}\n\n/** getSegment(a, z, startWithMoveTo = true) of one contour, appended to `b`; false when nothing was. */\nfunction segment(segs: Seg[], a: number, z: number, b: PathBuilder): boolean {\n let pos = 0, moved = false;\n for (const s of segs) {\n const s0 = pos, s1 = pos + s.len;\n pos = s1;\n if (s1 <= a || s0 >= z) continue;\n const t0 = tAt(s, a - s0), t1 = tAt(s, z - s0);\n const q = slice(s, t0, t1);\n if (!moved) { b.moveTo(q[0], q[1]); moved = true; }\n if (s.kind === \"line\") b.lineTo(q[2], q[3]);\n else if (s.kind === \"quad\") b.quadTo(q[2], q[3], q[4], q[5]);\n else b.cubicTo(q[2], q[3], q[4], q[5], q[6], q[7]);\n }\n return moved;\n}\n\nexport function trimPath(path: PathData, start: number, end: number): PathData {\n const cs = contours(path);\n const total = cs.reduce((n, c) => n + c.segs.reduce((m, s) => m + s.len, 0), 0);\n if (total <= 0) return path;\n const d0 = start * total, d1 = end * total;\n const b = new PathBuilder();\n let acc = 0;\n let any = false;\n for (const c of cs) {\n const len = c.segs.reduce((m, s) => m + s.len, 0);\n const cs0 = acc, ce = acc + len;\n acc = ce;\n if (!(ce > d0 && cs0 < d1)) continue;\n any = segment(c.segs, Math.max(0, d0 - cs0), Math.min(len, d1 - cs0), b) || any;\n }\n return any ? b.build() : { verbs: new Uint8Array(0), points: new Float32Array(0) };\n}\n\n/** Position and unit tangent: x, y, tx, ty. */\nexport type PosTan = [number, number, number, number];\n\n/** One contour, measured. */\nexport interface Contour {\n length: number;\n closed: boolean;\n posTan(d: number): PosTan;\n /** The stretch between two arc lengths, appended to `b` as an open contour. */\n segment(from: number, to: number, b: PathBuilder): boolean;\n}\n\nfunction derivative(s: Seg, t: number): [number, number] {\n const p = s.p, u = 1 - t;\n if (s.kind === \"line\") return [p[2] - p[0], p[3] - p[1]];\n if (s.kind === \"quad\") return [2 * (u * (p[2] - p[0]) + t * (p[4] - p[2])), 2 * (u * (p[3] - p[1]) + t * (p[5] - p[3]))];\n return [\n 3 * (u * u * (p[2] - p[0]) + 2 * u * t * (p[4] - p[2]) + t * t * (p[6] - p[4])),\n 3 * (u * u * (p[3] - p[1]) + 2 * u * t * (p[5] - p[3]) + t * t * (p[7] - p[5])),\n ];\n}\n\n/** The path's contours of non-zero length (ContourMeasureIter, forceClosed = false). */\nexport function measureContours(path: PathData): Contour[] {\n return contours(path).map((c): Contour => {\n const segs = c.segs.filter((s) => s.len > 0);\n const length = segs.reduce((m, s) => m + s.len, 0);\n return {\n length,\n closed: c.closed,\n posTan(d: number): PosTan {\n d = Math.max(0, Math.min(length, d));\n let pos = 0, s = segs[segs.length - 1];\n for (const seg of segs) {\n if (pos + seg.len >= d) { s = seg; break; }\n pos += seg.len;\n }\n const t = tAt(s, d - pos);\n const [x, y] = at(s, t);\n let [tx, ty] = derivative(s, t);\n // A control point on the end leaves no derivative there: step inward.\n if (Math.hypot(tx, ty) < 1e-9) {\n const a = at(s, Math.max(0, t - 1e-3)), b = at(s, Math.min(1, t + 1e-3));\n tx = b[0] - a[0]; ty = b[1] - a[1];\n }\n const n = Math.hypot(tx, ty) || 1;\n return [x, y, tx / n, ty / n];\n },\n segment: (from, to, b) => segment(segs, from, to, b),\n };\n }).filter((c) => c.length > 0);\n}\n\n/** The shortest dash worth cutting from its contour; anything shorter is a dot. */\nconst DOT_LENGTH = 1e-3;\n\n/** One stretch of the dash pattern for the whole path (core's dashScale). */\nexport function dashFit(cs: Contour[], dash: number[]): { scale: number; total: number; open: boolean } | null {\n let total = 0, open = false;\n for (const c of cs) {\n total += c.length;\n if (!c.closed) open = true;\n }\n const scale = pathOps.dashScale(dash, { length: total, closed: true }, total);\n return scale === null ? null : { scale, total, open };\n}\n\n/** The dash pattern's stretch for one contour: closed ones share the path's, open ones fit their own. */\nexport function contourDashScale(c: Contour, dash: number[], fit: { scale: number; total: number }): number {\n return c.closed ? fit.scale : pathOps.dashScale(dash, { length: c.length, closed: false }, fit.total) ?? fit.scale;\n}\n\n/** The dash pattern's \"on\" runs along a contour, [from, to] pairs (StrokeHandler.buildDashedPath). */\nexport function dashRuns(c: Contour, dash: number[], offset: number, scale: number): [number, number][] {\n const scaled = dash.map((d) => d * scale);\n const cycle = scaled.reduce((a, b) => a + b, 0);\n const runs: [number, number][] = [];\n if (!(cycle > 0)) return runs;\n const startOffset = (((offset * scale) % cycle) + cycle) % cycle;\n let i = 0, segStart = 0;\n while (segStart + scaled[i] <= startOffset && i < scaled.length) {\n if (scaled[i] <= DOT_LENGTH && Math.abs(startOffset - segStart) < 1e-6) break;\n segStart += scaled[i];\n i = (i + 1) % scaled.length;\n if (i === 0) break;\n }\n let remaining = scaled[i] - (startOffset - segStart);\n let drawing = i % 2 === 0;\n let t = 0;\n while (t < c.length - 1e-6) {\n const len = Math.min(remaining, c.length - t);\n if (drawing) runs.push([t, t + len]);\n t += len;\n remaining -= len;\n if (remaining <= 1e-6) {\n i = (i + 1) % scaled.length;\n remaining = scaled[i];\n drawing = !drawing;\n }\n }\n // An open contour fit to end on a dot has it exactly at its end.\n if (drawing && remaining <= 1e-6 && !c.closed) runs.push([c.length, c.length]);\n return runs;\n}\n\n/** The dashes as open contours; a dash too short to cut is a dot when `dots` (the dash cap has a shape). */\nexport function dashedPath(cs: Contour[], dash: number[], offset: number, dots: boolean, fit: { scale: number; total: number }): PathData | null {\n const b = new PathBuilder();\n let any = false;\n for (const c of cs) {\n for (const [from, to] of dashRuns(c, dash, offset, contourDashScale(c, dash, fit))) {\n if (to - from > DOT_LENGTH) any = c.segment(from, to, b) || any;\n else if (dots) {\n const [x, y, tx, ty] = c.posTan(from);\n const along = from > c.length - DOT_LENGTH ? -DOT_LENGTH : DOT_LENGTH;\n b.moveTo(x, y).lineTo(x + tx * along, y + ty * along);\n any = true;\n }\n }\n }\n return any ? b.build() : null;\n}\n", "// SVG path data (the strings ./geometry emits) into the doc's PathData. Arcs become cubics.\n\nimport { type PathData, PathBuilder } from \"../doc\";\n\n/** Endpoint-parameterised arc → cubic segments (SVG implementation notes F.6). */\nexport function arcTo(b: PathBuilder, x1: number, y1: number, rx: number, ry: number, phi: number, large: boolean, sweep: boolean, x2: number, y2: number) {\n if (rx === 0 || ry === 0) {\n b.lineTo(x2, y2);\n return;\n }\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const c = Math.cos(phi), s = Math.sin(phi);\n const dx = (x1 - x2) / 2, dy = (y1 - y2) / 2;\n const xp = c * dx + s * dy, yp = -s * dx + c * dy;\n const lam = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lam > 1) {\n rx *= Math.sqrt(lam);\n ry *= Math.sqrt(lam);\n }\n const num = rx * rx * ry * ry - rx * rx * yp * yp - ry * ry * xp * xp;\n const den = rx * rx * yp * yp + ry * ry * xp * xp;\n let k = Math.sqrt(Math.max(0, num / den));\n if (large === sweep) k = -k;\n const cxp = (k * rx * yp) / ry, cyp = (-k * ry * xp) / rx;\n const cx = c * cxp - s * cyp + (x1 + x2) / 2, cy = s * cxp + c * cyp + (y1 + y2) / 2;\n const ang = (ux: number, uy: number, vx: number, vy: number) => Math.atan2(ux * vy - uy * vx, ux * vx + uy * vy);\n const t1 = ang(1, 0, (xp - cxp) / rx, (yp - cyp) / ry);\n let dt = ang((xp - cxp) / rx, (yp - cyp) / ry, (-xp - cxp) / rx, (-yp - cyp) / ry);\n if (!sweep && dt > 0) dt -= 2 * Math.PI;\n else if (sweep && dt < 0) dt += 2 * Math.PI;\n const n = Math.ceil(Math.abs(dt) / (Math.PI / 2) - 1e-9);\n const seg = dt / n;\n const alpha = (4 / 3) * Math.tan(seg / 4);\n // Each point and tangent written out as one expression, the same as a closure\n // would compute it: no array per point on a path every shape draws through.\n for (let i = 0; i < n; i++) {\n const ta = t1 + i * seg, tb = ta + seg;\n const cosA = Math.cos(ta), sinA = Math.sin(ta), cosB = Math.cos(tb), sinB = Math.sin(tb);\n const ax = cx + rx * cosA * c - ry * sinA * s, ay = cy + rx * cosA * s + ry * sinA * c;\n const bx = cx + rx * cosB * c - ry * sinB * s, by = cy + rx * cosB * s + ry * sinB * c;\n const dax = -rx * sinA * c - ry * cosA * s, day = -rx * sinA * s + ry * cosA * c;\n const dbx = -rx * sinB * c - ry * cosB * s, dby = -rx * sinB * s + ry * cosB * c;\n b.cubicTo(ax + alpha * dax, ay + alpha * day, bx - alpha * dbx, by - alpha * dby, i === n - 1 ? x2 : bx, i === n - 1 ? y2 : by);\n }\n}\n\nexport function parseSvgPath(d: string): PathData {\n const b = new PathBuilder();\n const tokens = d.match(/[a-zA-Z]|-?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][-+]?\\d+)?/g) ?? [];\n let i = 0;\n let cmd = \"\";\n let x = 0, y = 0, sx = 0, sy = 0;\n let lcx = 0, lcy = 0, lqx = 0, lqy = 0;\n let prev = \"\";\n const num = () => Number(tokens[i++]);\n const more = () => i < tokens.length && !/[a-zA-Z]/.test(tokens[i]);\n while (i < tokens.length) {\n if (/[a-zA-Z]/.test(tokens[i])) cmd = tokens[i++];\n const rel = cmd === cmd.toLowerCase();\n const C = cmd.toUpperCase();\n const ox = rel ? x : 0, oy = rel ? y : 0;\n switch (C) {\n case \"M\": {\n x = ox + num(); y = oy + num();\n b.moveTo(x, y);\n sx = x; sy = y;\n cmd = rel ? \"l\" : \"L\";\n break;\n }\n case \"L\": x = ox + num(); y = oy + num(); b.lineTo(x, y); break;\n case \"H\": x = (rel ? x : 0) + num(); b.lineTo(x, y); break;\n case \"V\": y = (rel ? y : 0) + num(); b.lineTo(x, y); break;\n case \"C\": {\n const x1 = ox + num(), y1 = oy + num(), x2 = ox + num(), y2 = oy + num();\n x = ox + num(); y = oy + num();\n b.cubicTo(x1, y1, x2, y2, x, y);\n lcx = x2; lcy = y2;\n break;\n }\n case \"S\": {\n const r = prev === \"C\" || prev === \"S\";\n const x1 = r ? 2 * x - lcx : x, y1 = r ? 2 * y - lcy : y;\n const x2 = ox + num(), y2 = oy + num();\n x = ox + num(); y = oy + num();\n b.cubicTo(x1, y1, x2, y2, x, y);\n lcx = x2; lcy = y2;\n break;\n }\n case \"Q\": {\n lqx = ox + num(); lqy = oy + num();\n x = ox + num(); y = oy + num();\n b.quadTo(lqx, lqy, x, y);\n break;\n }\n case \"T\": {\n const r = prev === \"Q\" || prev === \"T\";\n lqx = r ? 2 * x - lqx : x; lqy = r ? 2 * y - lqy : y;\n x = ox + num(); y = oy + num();\n b.quadTo(lqx, lqy, x, y);\n break;\n }\n case \"A\": {\n const rx = num(), ry = num(), phi = (num() * Math.PI) / 180, large = num() !== 0, sweep = num() !== 0;\n const nx = ox + num(), ny = oy + num();\n arcTo(b, x, y, rx, ry, phi, large, sweep, nx, ny);\n x = nx; y = ny;\n break;\n }\n case \"Z\": b.close(); x = sx; y = sy; break;\n default: i++;\n }\n prev = C;\n if (C === \"Z\" && more()) cmd = \"L\";\n }\n return b.build();\n}\n", "// Where a shape's outline is written: SVG's absolute M, L, A (unrotated) and Z,\n// either as the path string or straight into PathData.\n\nimport { type PathData, PathBuilder } from \"../../doc\";\nimport { arcTo, parseSvgPath } from \"../svg-path\";\n\nexport interface PathSink {\n move(x: number, y: number): void;\n line(x: number, y: number): void;\n arc(rx: number, ry: number, large: 0 | 1, sweep: 0 | 1, x: number, y: number): void;\n close(): void;\n}\n\nexport class SvgSink implements PathSink {\n private readonly parts: string[] = [];\n\n move(x: number, y: number): void {\n this.parts.push(`M ${x} ${y}`);\n }\n\n line(x: number, y: number): void {\n this.parts.push(`L ${x} ${y}`);\n }\n\n arc(rx: number, ry: number, large: 0 | 1, sweep: 0 | 1, x: number, y: number): void {\n this.parts.push(`A ${rx} ${ry} 0 ${large} ${sweep} ${x} ${y}`);\n }\n\n close(): void {\n this.parts.push(\"Z\");\n }\n\n toString(): string {\n return this.parts.join(\" \");\n }\n}\n\n/**\n * The outline as `parseSvgPath` reads it from {@link SvgSink}'s string, without\n * the string. A finite number prints and parses back to itself, and the parser\n * adds an absolute coordinate to 0 (so −0 lands as 0); a number that is not\n * finite does not survive the tokenizer, so `ok` turns false and the caller\n * takes the string route.\n */\nclass PathDataSink implements PathSink {\n ok = true;\n private readonly b = new PathBuilder();\n private empty = true;\n private x = 0;\n private y = 0;\n private sx = 0;\n private sy = 0;\n\n move(x: number, y: number): void {\n this.check(x, y);\n this.x = this.sx = 0 + x;\n this.y = this.sy = 0 + y;\n this.b.moveTo(this.x, this.y);\n }\n\n line(x: number, y: number): void {\n this.check(x, y);\n this.x = 0 + x;\n this.y = 0 + y;\n this.b.lineTo(this.x, this.y);\n }\n\n arc(rx: number, ry: number, large: 0 | 1, sweep: 0 | 1, x: number, y: number): void {\n this.check(rx, ry, x, y);\n const nx = 0 + x, ny = 0 + y;\n arcTo(this.b, this.x, this.y, rx + 0, ry + 0, 0, large !== 0, sweep !== 0, nx, ny);\n this.x = nx;\n this.y = ny;\n }\n\n close(): void {\n this.empty = false;\n this.b.close();\n this.x = this.sx;\n this.y = this.sy;\n }\n\n result(): PathData | null {\n return this.empty ? null : this.b.build();\n }\n\n private check(...values: number[]): void {\n this.empty = false;\n for (const v of values) if (!Number.isFinite(v)) this.ok = false;\n }\n}\n\nexport function svgOf(emit: (sink: PathSink) => void): string {\n const sink = new SvgSink();\n emit(sink);\n return sink.toString();\n}\n\n/** What `parseSvgPath(svgOf(emit))` gives (null for an empty string), built directly. */\nexport function pathDataOf(emit: (sink: PathSink) => void): PathData | null {\n const sink = new PathDataSink();\n emit(sink);\n if (sink.ok) return sink.result();\n const svg = svgOf(emit);\n return svg ? parseSvgPath(svg) : null;\n}\n", "// A shape's outline as SVG path strings: its state resolved once, its geometry\n// computed lazily. Shapes bake x/y into the SVG; rotation, scale, trim and the\n// y flip are left to adapter/shapes.ts.\n\nimport type { CornerStyle } from \"@motionscript/core\";\nimport type { PathData } from \"../../doc\";\nimport { parseSvgPath } from \"../svg-path\";\nimport { type PathSink, svgOf } from \"./sink\";\n\nexport interface Bounds {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport abstract class ShapeGeometry<S extends { start: number; end: number }, G> {\n readonly fullState: S;\n private geo: G | undefined;\n\n constructor(state: Partial<S>) {\n this.fullState = this.resolveState(state);\n }\n\n protected abstract resolveState(state: Partial<S>): S;\n protected abstract computeGeometry(): G;\n abstract buildSVGPath(geo: G): string;\n\n /** `buildSVGPath` parsed, or null where it is empty. A shape writing to a {@link PathSink} skips the string. */\n buildPathData(geo: G): PathData | null {\n const svg = this.buildSVGPath(geo);\n return svg ? parseSvgPath(svg) : null;\n }\n\n get geometry(): G {\n return (this.geo ??= this.computeGeometry());\n }\n\n needsTrim(): boolean {\n return this.fullState.start !== 0 || this.fullState.end !== 1;\n }\n\n getTrimRange(): { start: number; end: number } {\n return { start: this.fullState.start, end: this.fullState.end };\n }\n\n /**\n * The closed region an aligned (inside/outside) stroke clips against when\n * the stroked outline is open, as an arc's wedge is; null when the shape\n * defines none of its own.\n */\n buildSVGAlignInterior(_geo: G): string | null {\n return null;\n }\n\n /** Whether the silhouette resizes cleanly for a shadow's spread (rects and ellipses). */\n supportsSpread(): boolean {\n return false;\n }\n\n /** The silhouette grown (positive) or shrunk by `spread` px; null where it collapses or isn't supported. */\n buildSpreadSVGPath(_geo: G, _spread: number): string | null {\n return null;\n }\n\n computeBounds(_geo: G): Bounds | undefined {\n return undefined;\n }\n}\n\n/** Per-corner geometry inputs shared by every shape that rounds its corners. */\nexport interface CornerSpec {\n /** Corner radius in pixels (already clamped/scaled by the caller). */\n radius: number;\n style: CornerStyle;\n}\n\n/**\n * How far from a right-angle corner's apex, along each edge, its curve begins:\n * the radius, for an arc and a chamfer alike.\n */\nexport function cornerReach(c: CornerSpec): number {\n return c.radius > 0 ? c.radius : 0;\n}\n\n/**\n * A right-angle (rect) corner, the pen already at its entry point\n * `apex + d0·radius`; it leaves the pen at `apex + d1·radius`. `d0` points\n * from the apex back along the incoming edge, `d1` along the outgoing one.\n * Nothing for a zero radius (the edge runs on to a sharp apex).\n */\nexport function cornerTo(sink: PathSink, ax: number, ay: number, d0x: number, d0y: number, d1x: number, d1y: number, c: CornerSpec): void {\n if (c.radius <= 0) return;\n cutCornerTo(sink, ax, ay, d0x, d0y, d1x, d1y, c.radius, c.radius, c.style);\n}\n\n/**\n * A corner of any angle, given the cut-back distance `cut` along each edge and\n * the arc `radius` (they differ off a right angle). The pen is at\n * `apex + d0·cut`; it is left at `apex + d1·cut`.\n */\nexport function cutCornerTo(\n sink: PathSink,\n ax: number, ay: number,\n d0x: number, d0y: number,\n d1x: number, d1y: number,\n cut: number, radius: number,\n style: CornerStyle,\n): void {\n const ex = ax + d1x * cut, ey = ay + d1y * cut;\n if (style === \"angled\") return sink.line(ex, ey);\n // The turn direction picks the sweep flag: a clockwise turn is sweep 1.\n const cross = d0x * d1y - d0y * d1x;\n sink.arc(radius, radius, 0, cross < 0 ? 1 : 0, ex, ey);\n}\n\n/** {@link cutCornerTo} as SVG commands. */\nexport function cornerCommandsFromCut(\n ax: number, ay: number,\n d0x: number, d0y: number,\n d1x: number, d1y: number,\n cut: number, radius: number,\n style: CornerStyle,\n): string {\n return svgOf((sink) => cutCornerTo(sink, ax, ay, d0x, d0y, d1x, d1y, cut, radius, style));\n}\n", "import { type EllipseState, withEllipseDescriptor } from \"@motionscript/core\";\nimport type { PathData } from \"../../doc\";\nimport { type Bounds, ShapeGeometry } from \"./base\";\nimport { type PathSink, pathDataOf, svgOf } from \"./sink\";\n\ntype EllipseGeo = {\n cx: number; cy: number;\n halfWidth: number; halfHeight: number;\n sweep: number; isFullShape: boolean;\n startAngle: number;\n /** Inner radius as a fraction (0..1) of the outer. */\n ratio: number;\n};\n\nconst TO_RAD = Math.PI / 180;\n\n/**\n * An ellipse, optionally a partial arc (`sweep` < 360°) and/or with a hole\n * (`ratio` > 0): 0 is a disc or pie wedge, 0.5 a donut or annular sector, and 1\n * leaves nothing to fill, the stroke riding the bare outline or arc.\n */\nexport class EllipseGeometry extends ShapeGeometry<EllipseState, EllipseGeo> {\n protected resolveState(state: Partial<EllipseState>): EllipseState {\n return withEllipseDescriptor(state);\n }\n\n protected computeGeometry(): EllipseGeo {\n const s = this.fullState;\n const sweep = s.sweep ?? 360;\n return {\n cx: s.x, cy: s.y,\n halfWidth: s.width / 2, halfHeight: s.height / 2,\n sweep,\n isFullShape: Math.abs(sweep) >= 360,\n startAngle: s.startAngle ?? 0,\n ratio: Math.max(0, Math.min(1, s.ratio ?? 0)),\n };\n }\n\n // Empty at ratio 1 rather than solid again, so a ratio tween stays\n // continuous at that end; its stroke is `ringOutline`.\n buildSVGPath(geo: EllipseGeo): string {\n return svgOf((sink) => outline(sink, geo));\n }\n\n override buildPathData(geo: EllipseGeo): PathData | null {\n return pathDataOf((sink) => outline(sink, geo));\n }\n\n /** What a ratio-1 ellipse strokes, once: the bare outline or open arc. Null below ratio 1. */\n ringOutline(geo: EllipseGeo): string | null {\n if (geo.ratio < 1) return null;\n return svgOf((sink) => (geo.isFullShape ? fullEllipse(sink, geo.cx, geo.cy, geo.halfWidth, geo.halfHeight, 0) : openArc(sink, geo)));\n }\n\n // At ratio 1 the region is empty, so the band aligns against the whole\n // ellipse or wedge instead.\n override buildSVGAlignInterior(geo: EllipseGeo): string | null {\n if (geo.isFullShape) return geo.ratio >= 1 ? svgOf((sink) => fullEllipse(sink, geo.cx, geo.cy, geo.halfWidth, geo.halfHeight, 0)) : null;\n return svgOf((sink) => (geo.ratio >= 1 || geo.ratio <= 0 ? wedge(sink, geo) : annularSector(sink, geo)));\n }\n\n override supportsSpread(): boolean {\n return true;\n }\n\n // Each half-axis moves by `spread`; only a full ellipse with something to\n // fill bounds a region to grow.\n override buildSpreadSVGPath(geo: EllipseGeo, spread: number): string | null {\n if (!geo.isFullShape || geo.ratio >= 1) return null;\n const halfWidth = geo.halfWidth + spread, halfHeight = geo.halfHeight + spread;\n if (halfWidth <= 0 || halfHeight <= 0) return null;\n return svgOf((sink) => fullEllipse(sink, geo.cx, geo.cy, halfWidth, halfHeight, 0));\n }\n\n override computeBounds(geo: EllipseGeo): Bounds {\n const { cx, cy, halfWidth, halfHeight } = geo;\n return { left: cx - halfWidth, top: cy - halfHeight, right: cx + halfWidth, bottom: cy + halfHeight };\n }\n}\n\nfunction outline(sink: PathSink, geo: EllipseGeo): void {\n const { cx, cy, halfWidth, halfHeight, ratio } = geo;\n if (ratio >= 1) return;\n if (!geo.isFullShape) return ratio <= 0 ? wedge(sink, geo) : annularSector(sink, geo);\n fullEllipse(sink, cx, cy, halfWidth, halfHeight, 0);\n // Wound the other way, so the fill leaves a hole.\n if (ratio > 0) fullEllipse(sink, cx, cy, halfWidth * ratio, halfHeight * ratio, 1);\n}\n\nfunction fullEllipse(sink: PathSink, cx: number, cy: number, rx: number, ry: number, sweepFlag: 0 | 1): void {\n const left = cx - rx, right = cx + rx;\n sink.move(left, cy);\n sink.arc(rx, ry, 1, sweepFlag, right, cy);\n sink.arc(rx, ry, 1, sweepFlag, left, cy);\n sink.close();\n}\n\n/** A partial sweep's outer curve: its start point, and the arc that runs it round. */\nfunction outerArc(geo: EllipseGeo): { sx: number; sy: number; arc: (sink: PathSink) => void } {\n const { cx, cy, halfWidth, halfHeight, startAngle, sweep } = geo;\n const endAngle = startAngle + sweep;\n const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n const sweepFlag = sweep > 0 ? 1 : 0;\n const sx = cx + halfWidth * Math.cos(startAngle * TO_RAD), sy = cy + halfHeight * Math.sin(startAngle * TO_RAD);\n const ex = cx + halfWidth * Math.cos(endAngle * TO_RAD), ey = cy + halfHeight * Math.sin(endAngle * TO_RAD);\n return { sx, sy, arc: (sink) => sink.arc(halfWidth, halfHeight, largeArc, sweepFlag, ex, ey) };\n}\n\nfunction openArc(sink: PathSink, geo: EllipseGeo): void {\n const { sx, sy, arc } = outerArc(geo);\n sink.move(sx, sy);\n arc(sink);\n}\n\nfunction wedge(sink: PathSink, geo: EllipseGeo): void {\n const { sx, sy, arc } = outerArc(geo);\n sink.move(geo.cx, geo.cy);\n sink.line(sx, sy);\n arc(sink);\n sink.close();\n}\n\n/** Out along the outer arc, in to the inner edge, back along the inner arc, closed along the start radius. */\nfunction annularSector(sink: PathSink, geo: EllipseGeo): void {\n const { cx, cy, halfWidth, halfHeight, startAngle, sweep, ratio } = geo;\n const { sx, sy, arc } = outerArc(geo);\n const endAngle = startAngle + sweep;\n const innerW = halfWidth * ratio, innerH = halfHeight * ratio;\n const isx = cx + innerW * Math.cos(startAngle * TO_RAD), isy = cy + innerH * Math.sin(startAngle * TO_RAD);\n const iex = cx + innerW * Math.cos(endAngle * TO_RAD), iey = cy + innerH * Math.sin(endAngle * TO_RAD);\n const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n const innerSweepFlag = sweep > 0 ? 0 : 1;\n sink.move(sx, sy);\n arc(sink);\n sink.line(iex, iey);\n sink.arc(innerW, innerH, largeArc, innerSweepFlag, isx, isy);\n sink.close();\n}\n", "import { type LineState, type Vector2, withLineDescriptor } from \"@motionscript/core\";\nimport { ShapeGeometry } from \"./base\";\n\ntype LineGeo = { points: Vector2[]; radius: number; closed: boolean };\n\nfunction buildLineSvg(points: Vector2[], radius: number, closed: boolean): string {\n if (points.length === 0) return \"M 0 0\";\n if (points.length === 1) return `M ${points[0].x} ${points[0].y}`;\n const r = Math.max(0, radius);\n const parts: string[] = [];\n const count = points.length;\n const dir = (a: Vector2, b: Vector2) => {\n const dx = b.x - a.x, dy = b.y - a.y;\n const len = Math.sqrt(dx * dx + dy * dy);\n return len > 0 ? { dx: dx / len, dy: dy / len, len } : { dx: 0, dy: 0, len: 0 };\n };\n if (r === 0) {\n parts.push(`M ${points[0].x} ${points[0].y}`);\n for (let i = 1; i < count; i++) parts.push(`L ${points[i].x} ${points[i].y}`);\n } else {\n const endIdx = closed ? count : count - 1;\n for (let i = 0; i <= endIdx; i++) {\n const prev = points[(i - 1 + count) % count];\n const curr = points[i % count];\n const next = points[(i + 1) % count];\n if (!closed && i === 0) {\n parts.push(`M ${curr.x} ${curr.y}`);\n continue;\n }\n if (!closed && i === count - 1) {\n parts.push(`L ${curr.x} ${curr.y}`);\n continue;\n }\n const dIn = dir(prev, curr), dOut = dir(curr, next);\n const cutIn = Math.min(r, dIn.len / 2), cutOut = Math.min(r, dOut.len / 2);\n const inX = curr.x - dIn.dx * cutIn, inY = curr.y - dIn.dy * cutIn;\n const outX = curr.x + dOut.dx * cutOut, outY = curr.y + dOut.dy * cutOut;\n parts.push(`${i === 0 && closed ? \"M\" : \"L\"} ${inX} ${inY}`);\n parts.push(`Q ${curr.x} ${curr.y} ${outX} ${outY}`);\n }\n }\n if (closed) parts.push(\"Z\");\n return parts.join(\" \");\n}\n\n/**\n * A polyline (open or closed) through `points`, each corner optionally rounded\n * by cutting back along both edges and joining with a quadratic (the cut\n * clamped to half the edge, so it never overshoots).\n */\nexport class LineGeometry extends ShapeGeometry<LineState, LineGeo> {\n protected resolveState(state: Partial<LineState>): LineState {\n return withLineDescriptor(state);\n }\n\n protected computeGeometry(): LineGeo {\n const { points, radius, closed } = this.fullState;\n return { points, radius, closed };\n }\n\n buildSVGPath(geo: LineGeo): string {\n return buildLineSvg(geo.points, geo.radius, geo.closed);\n }\n}\n", "import { type PathData, type PathState, toPathString, withPathDescriptor } from \"@motionscript/core\";\nimport { ShapeGeometry } from \"./base\";\n\n/** An arbitrary SVG path; adapter/shapes.ts centres it and strokes the contour it fills, `Z` included. */\nexport class PathGeometry extends ShapeGeometry<PathState, { data: PathData }> {\n protected resolveState(state: Partial<PathState>): PathState {\n return withPathDescriptor(state);\n }\n\n protected computeGeometry(): { data: PathData } {\n return { data: this.fullState.data };\n }\n\n buildSVGPath(geo: { data: PathData }): string {\n return toPathString(geo.data);\n }\n}\n", "import { type CornerStyle, type PolygonState, type PolygramState, withPolygonDescriptor, withPolygramDescriptor } from \"@motionscript/core\";\nimport { type Bounds, cornerCommandsFromCut, ShapeGeometry } from \"./base\";\n\ntype PolygonGeo = {\n cx: number; cy: number;\n rx: number; ry: number;\n sides: number;\n /** Polygram only: the inner vertices' radius, as a fraction of the outer. */\n ratio: number;\n cornerRadius: number;\n cornerStyle: CornerStyle;\n};\n\n/**\n * Vertices on an ellipse from the top, clockwise. `rounded(i)` says which\n * vertices `cornerRadius` rounds; each is cut back along both edges, clamped\n * so neighbouring corners never overrun half the edge they share.\n */\nfunction buildSvg(verts: [number, number][], g: PolygonGeo, rounded: (i: number) => boolean): string {\n if (g.cornerRadius <= 0) {\n const parts = verts.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"} ${x} ${y}`);\n parts.push(\"Z\");\n return parts.join(\" \");\n }\n const n = verts.length;\n const parts: string[] = [];\n for (let i = 0; i < n; i++) {\n const curr = verts[i];\n if (!rounded(i)) {\n parts.push(`${parts.length === 0 ? \"M\" : \"L\"} ${curr[0]} ${curr[1]}`);\n continue;\n }\n const prev = verts[(i - 1 + n) % n], next = verts[(i + 1) % n];\n const a0x = prev[0] - curr[0], a0y = prev[1] - curr[1];\n const len0 = Math.hypot(a0x, a0y);\n const u0x = a0x / len0, u0y = a0y / len0;\n const a1x = next[0] - curr[0], a1y = next[1] - curr[1];\n const len1 = Math.hypot(a1x, a1y);\n const u1x = a1x / len1, u1y = a1y / len1;\n const cosAngle = Math.max(-1, Math.min(1, u0x * u1x + u0y * u1y));\n const tanHalf = Math.tan(Math.acos(cosAngle) / 2);\n const t = Math.min(g.cornerRadius / tanHalf, Math.min(len0, len1) / 2);\n const r = t * tanHalf;\n parts.push(`${parts.length === 0 ? \"M\" : \"L\"} ${curr[0] + u0x * t} ${curr[1] + u0y * t}`);\n parts.push(cornerCommandsFromCut(curr[0], curr[1], u0x, u0y, u1x, u1y, t, r, g.cornerStyle));\n }\n parts.push(\"Z\");\n return parts.join(\" \");\n}\n\nconst bounds = (g: PolygonGeo): Bounds => ({ left: g.cx - g.rx, top: g.cy - g.ry, right: g.cx + g.rx, bottom: g.cy + g.ry });\n\n/** A regular polygon inscribed in the box's ellipse, starting at the top vertex. */\nexport class PolygonGeometry extends ShapeGeometry<PolygonState, PolygonGeo> {\n protected resolveState(state: Partial<PolygonState>): PolygonState {\n return withPolygonDescriptor(state);\n }\n\n protected computeGeometry(): PolygonGeo {\n const s = this.fullState;\n return {\n cx: s.x, cy: s.y, rx: s.width / 2, ry: s.height / 2,\n sides: Math.max(3, Math.round(s.sides)), ratio: 1,\n cornerRadius: s.cornerRadius, cornerStyle: s.cornerStyle,\n };\n }\n\n buildSVGPath(g: PolygonGeo): string {\n const step = (2 * Math.PI) / g.sides;\n const verts: [number, number][] = [];\n for (let i = 0; i < g.sides; i++) {\n const a = -Math.PI / 2 + i * step;\n verts.push([g.cx + g.rx * Math.cos(a), g.cy + g.ry * Math.sin(a)]);\n }\n return buildSvg(verts, g, () => true);\n }\n\n override computeBounds(g: PolygonGeo): Bounds {\n return bounds(g);\n }\n}\n\n/** A star: outer vertices alternating with inner ones at `ratio`; only the outer (convex) ones are rounded. */\nexport class PolygramGeometry extends ShapeGeometry<PolygramState, PolygonGeo> {\n protected resolveState(state: Partial<PolygramState>): PolygramState {\n return withPolygramDescriptor(state);\n }\n\n protected computeGeometry(): PolygonGeo {\n const s = this.fullState;\n return {\n cx: s.x, cy: s.y, rx: s.width / 2, ry: s.height / 2,\n sides: Math.max(3, Math.round(s.sides)), ratio: Math.max(0, Math.min(1, s.ratio)),\n cornerRadius: s.cornerRadius, cornerStyle: s.cornerStyle,\n };\n }\n\n buildSVGPath(g: PolygonGeo): string {\n const step = Math.PI / g.sides;\n const verts: [number, number][] = [];\n for (let i = 0; i < g.sides * 2; i++) {\n const a = -Math.PI / 2 + i * step;\n const r = i % 2 === 0 ? 1 : g.ratio;\n verts.push([g.cx + g.rx * r * Math.cos(a), g.cy + g.ry * r * Math.sin(a)]);\n }\n return buildSvg(verts, g, (i) => i % 2 === 0);\n }\n\n override computeBounds(g: PolygonGeo): Bounds {\n return bounds(g);\n }\n}\n", "import { type CornerRadiusResolved, type CornerStyleResolved, type RectState, cornerRadiusOps, cornerStyleOps, withRectDescriptor } from \"@motionscript/core\";\nimport type { PathData } from \"../../doc\";\nimport { type Bounds, cornerReach, type CornerSpec, cornerTo, ShapeGeometry } from \"./base\";\nimport { type PathSink, pathDataOf, svgOf } from \"./sink\";\n\ntype RectGeo = {\n left: number; top: number; right: number; bottom: number;\n tl: CornerSpec; tr: CornerSpec; br: CornerSpec; bl: CornerSpec;\n isZero: boolean;\n};\n\n/** The outline clockwise, each corner its own arc or chamfer `radius` px from the apex. */\nfunction roundedRect(sink: PathSink, l: number, t: number, r: number, b: number, tl: CornerSpec, tr: CornerSpec, br: CornerSpec, bl: CornerSpec): void {\n const rTL = cornerReach(tl), rTR = cornerReach(tr), rBR = cornerReach(br), rBL = cornerReach(bl);\n sink.move(l + rTL, t);\n sink.line(r - rTR, t);\n cornerTo(sink, r, t, -1, 0, 0, 1, tr);\n sink.line(r, b - rBR);\n cornerTo(sink, r, b, 0, -1, -1, 0, br);\n sink.line(l + rBL, b);\n cornerTo(sink, l, b, 1, 0, 0, -1, bl);\n sink.line(l, t + rTL);\n cornerTo(sink, l, t, 0, 1, 1, 0, tl);\n sink.close();\n}\n\nfunction plainRect(sink: PathSink, l: number, t: number, r: number, b: number): void {\n sink.move(l, t);\n sink.line(r, t);\n sink.line(r, b);\n sink.line(l, b);\n sink.close();\n}\n\nfunction outline(sink: PathSink, geo: RectGeo): void {\n const { left, top, right, bottom, tl, tr, br, bl, isZero } = geo;\n if (isZero) plainRect(sink, left, top, right, bottom);\n else roundedRect(sink, left, top, right, bottom, tl, tr, br, bl);\n}\n\n/** Per-corner radii and styles, scaled down together where adjacent corners would overrun a side. */\nexport class RectGeometry extends ShapeGeometry<RectState, RectGeo> {\n protected resolveState(state: Partial<RectState>): RectState {\n return withRectDescriptor(state);\n }\n\n protected computeGeometry(): RectGeo {\n const s = this.fullState;\n const left = s.x - s.width / 2, top = s.y - s.height / 2;\n const right = s.x + s.width / 2, bottom = s.y + s.height / 2;\n const radius: CornerRadiusResolved = cornerRadiusOps.resolve(s.cornerRadius);\n const style: CornerStyleResolved = cornerStyleOps.resolve(s.cornerStyle);\n const tl: CornerSpec = { radius: Math.max(0, radius.topLeft), style: style.topLeft };\n const tr: CornerSpec = { radius: Math.max(0, radius.topRight), style: style.topRight };\n const br: CornerSpec = { radius: Math.max(0, radius.bottomRight), style: style.bottomRight };\n const bl: CornerSpec = { radius: Math.max(0, radius.bottomLeft), style: style.bottomLeft };\n const scale = cornerScale(s.width, s.height, tl, tr, br, bl);\n tl.radius *= scale; tr.radius *= scale; br.radius *= scale; bl.radius *= scale;\n const isZero = cornerRadiusOps.isZero({ topLeft: tl.radius, topRight: tr.radius, bottomRight: br.radius, bottomLeft: bl.radius });\n return { left, top, right, bottom, tl, tr, br, bl, isZero };\n }\n\n buildSVGPath(geo: RectGeo): string {\n return svgOf((sink) => outline(sink, geo));\n }\n\n override buildPathData(geo: RectGeo): PathData | null {\n return pathDataOf((sink) => outline(sink, geo));\n }\n\n override supportsSpread(): boolean {\n return true;\n }\n\n // Each edge moves out by `spread` and each radius grows by it (clamped at\n // 0), as CSS box-shadow spread does, then re-clamped against the new size.\n override buildSpreadSVGPath(geo: RectGeo, spread: number): string | null {\n const left = geo.left - spread, top = geo.top - spread;\n const right = geo.right + spread, bottom = geo.bottom + spread;\n const w = right - left, h = bottom - top;\n if (w <= 0 || h <= 0) return null;\n const tl: CornerSpec = { ...geo.tl, radius: Math.max(0, geo.tl.radius + spread) };\n const tr: CornerSpec = { ...geo.tr, radius: Math.max(0, geo.tr.radius + spread) };\n const br: CornerSpec = { ...geo.br, radius: Math.max(0, geo.br.radius + spread) };\n const bl: CornerSpec = { ...geo.bl, radius: Math.max(0, geo.bl.radius + spread) };\n const scale = cornerScale(w, h, tl, tr, br, bl);\n tl.radius *= scale; tr.radius *= scale; br.radius *= scale; bl.radius *= scale;\n if (tl.radius === 0 && tr.radius === 0 && br.radius === 0 && bl.radius === 0) return svgOf((sink) => plainRect(sink, left, top, right, bottom));\n return svgOf((sink) => roundedRect(sink, left, top, right, bottom, tl, tr, br, bl));\n }\n\n override computeBounds(geo: RectGeo): Bounds {\n return { left: geo.left, top: geo.top, right: geo.right, bottom: geo.bottom };\n }\n}\n\n/** The uniform scale that keeps every pair of adjacent radii within the side they share. */\nfunction cornerScale(w: number, h: number, tl: CornerSpec, tr: CornerSpec, br: CornerSpec, bl: CornerSpec): number {\n const rTL = cornerReach(tl), rTR = cornerReach(tr), rBR = cornerReach(br), rBL = cornerReach(bl);\n const top = rTL + rTR > 0 ? Math.min(1, w / (rTL + rTR)) : 1;\n const bottom = rBL + rBR > 0 ? Math.min(1, w / (rBL + rBR)) : 1;\n const left = rTL + rBL > 0 ? Math.min(1, h / (rTL + rBL)) : 1;\n const right = rTR + rBR > 0 ? Math.min(1, h / (rTR + rBR)) : 1;\n return Math.min(top, bottom, left, right);\n}\n", "// Shape ops to PathData: each shape's geometry (./geometry) emits its outline,\n// straight into PathData where it writes to a sink, else as an SVG path string\n// parsed here. A plain rect or ellipse also says how the renderer can draw it\n// as its own shape (`native`). Shapes are authored y-up, so their position (and\n// an ellipse's angles) flip into the node's y-down space first; a shape's own\n// rotation/scale then turns its outline about its (x, y) plus pivot.\n\nimport { resolvePivotPosition, resolveShapeAlignment, resolveShapePivot, stripShapeAlignmentKeys, toPathString, withTextDescriptor } from \"@motionscript/core\";\nimport type { ShapeGeometry } from \"./geometry/base\";\nimport { EllipseGeometry } from \"./geometry/ellipse\";\nimport { LineGeometry } from \"./geometry/line\";\nimport { PathGeometry } from \"./geometry/path\";\nimport { PolygonGeometry, PolygramGeometry } from \"./geometry/polygon\";\nimport { RectGeometry } from \"./geometry/rect\";\nimport { type Mat, type Member, type PathData, pathBounds, type TextSpec } from \"../doc\";\nimport { trimPath } from \"./path-measure\";\nimport { parseSvgPath } from \"./svg-path\";\n\ntype Any = Record<string, any>;\n\nfunction flipPositionY(state: Any, width: number, height: number): Any {\n const withPivotOffset = resolvePivotPosition(state as never, width, height);\n const { x, y, pivot } = resolveShapeAlignment(withPivotOffset as never, width, height);\n return { ...stripShapeAlignmentKeys(withPivotOffset as never), x, y: -y, pivot };\n}\n\nconst negY = (y: number | undefined) => (y == null ? y : -y);\n\nfunction transformPath(p: PathData, m: [number, number, number, number, number, number]): PathData {\n const pts = new Float32Array(p.points.length);\n for (let i = 0; i < pts.length; i += 2) {\n const x = p.points[i], y = p.points[i + 1];\n pts[i] = m[0] * x + m[2] * y + m[4];\n pts[i + 1] = m[1] * x + m[3] * y + m[5];\n }\n return { ...p, points: pts as never };\n}\n\n/** Rotate/scale about the shape's (x, y) + pivot. */\nfunction shapeTransform(full: Any, p: PathData): PathData {\n const rotation = full.rotation ?? 0, scale = full.scale ?? 1;\n if (rotation === 0 && scale === 1) return p;\n const pivot = full.pivot ?? { x: 0, y: 0 };\n const px = (full.x ?? 0) + pivot.x * ((full.width ?? 0) / 2);\n const py = (full.y ?? 0) - pivot.y * ((full.height ?? 0) / 2);\n const r = (rotation * Math.PI) / 180, c = Math.cos(r) * scale, s = Math.sin(r) * scale;\n // Row-major [a b e; c d f] = column form [a, c, b, d, e, f].\n const a = c, b = -s, cc = s, d = c;\n return transformPath(p, [a, cc, b, d, px - a * px - b * py, py - cc * px - d * py]);\n}\n\n/** A text op as a doc text node: its spec and placement (shapes/text.ts). */\nexport interface TextOut {\n spec: TextSpec;\n transform: Mat;\n /** Box for gradient space: the declared box, or the measured block. */\n size: [number, number];\n}\n\nconst ALIGN: Record<string, TextSpec[\"align\"]> = { left: \"left\", right: \"right\", center: \"center\", justify: \"justify\", start: \"left\", end: \"right\" };\n\n/** buildText's placement: the block laid out about the origin, drawn at\n * (px, py) — shifted by the pivot when there is no declared box — and turned\n * and scaled about the pivot point. */\nexport function textOf(state: Any, measure: (spec: TextSpec) => [number, number]): TextOut | null {\n const f = withTextDescriptor(flipPositionY(state, state.width ?? 0, state.height ?? 0) as never) as Any;\n // Text on a path follows the path verbatim in the node's space (buildText\n // returns before placement: no y flip, no x/y).\n const onPath = f.path != null ? parseSvgPath(toPathString(f.path)) : undefined;\n const autofit = f.fontSize === \"autofit\";\n const spec: TextSpec = {\n runs: [{\n text: f.text, family: f.fontFamily, size: autofit ? 100 : f.fontSize, weight: f.fontWeight,\n italic: f.fontStyle === \"italic\" || f.fontStyle === \"oblique\", letterSpacing: f.letterSpacing,\n decoration: f.textDecoration === \"underline\" ? \"underline\" : f.textDecoration === \"line-through\" ? \"lineThrough\" : undefined,\n }],\n align: ALIGN[f.textAlign] ?? \"left\",\n verticalAlign: f.verticalAlign,\n wrap: f.wrap && f.width > 0,\n width: f.width,\n height: f.height,\n lineHeight: f.lineHeight,\n fontSize: autofit ? \"autofit\" : undefined,\n minFontSize: f.minFontSize,\n path: onPath,\n };\n if (onPath) return { spec, transform: [1, 0, 0, 1, 0, 0], size: [f.width, f.height] };\n const [lw, lh] = measure(spec);\n const pivot = resolveShapePivot(f.pivot) as { x: number; y: number };\n const declared = f.width > 0 && f.height > 0;\n const bw = declared ? f.width : lw, bh = declared ? f.height : lh;\n const px = !declared && pivot.x !== 0 ? f.x - pivot.x * (lw / 2) : f.x;\n const py = !declared && pivot.y !== 0 ? f.y + pivot.y * (lh / 2) : f.y;\n let m: Mat = [1, 0, 0, 1, px, py];\n if ((f.rotation ?? 0) !== 0 || (f.scale ?? 1) !== 1) {\n const cx = px + pivot.x * (bw / 2), cy = py - pivot.y * (bh / 2);\n const r = ((f.rotation ?? 0) * Math.PI) / 180, k = f.scale ?? 1;\n const c = Math.cos(r) * k, sn = Math.sin(r) * k;\n // T(c)·R·S·T(−c)·T(p)\n m = [c, sn, -sn, c, cx + c * (px - cx) - sn * (py - cy), cy + sn * (px - cx) + c * (py - cy)];\n }\n return { spec, transform: m, size: [bw, bh] };\n}\n\n/** What a shape op hands the paint ops. */\nexport interface ShapeOut {\n /** The filled outline (trimmed when the shape is). */\n fill: PathData | null;\n /** What strokes follow: the fill outline unless the shape overrides it. */\n stroke: PathData | null;\n /** The closed region aligned strokes clip against. */\n interior: PathData | null;\n /** The shape's own bounds (gradient space), l t r b. */\n bounds: [number, number, number, number] | null;\n /** Set for a text op: drawn as a text node, not a path. */\n text?: TextOut;\n /** Set for a boolean result or a cut: drawn as one compound node. */\n members?: Member[];\n /** The closed region an aligned stroke clips to when `interior` isn't it (a union's). */\n alignInterior?: Member[];\n /** Trimmed: its outline is a stretch of the shape's. */\n trimmed?: boolean;\n /** The silhouette grown (or shrunk) by a shadow's spread; unset where the\n * shape ignores spread (only rects and ellipses resize cleanly). */\n spread?: (spread: number) => PathData | null;\n /** Set where the renderer can draw the shape as its own rect or ellipse instead of a path. */\n native?: NativeShape;\n}\n\n/** A rect or ellipse as the renderer's own shape: its box in the node's y-down space, corner radii tl tr br bl. */\nexport interface NativeShape {\n kind: \"rect\" | \"ellipse\";\n x: number;\n y: number;\n w: number;\n h: number;\n radii: [number, number, number, number];\n}\n\nfunction parse(svg: string | null | undefined, full: Any): PathData | null {\n if (!svg) return null;\n return shapeTransform(full, parseSvgPath(svg));\n}\n\n// Each outline is built on first read: a shape drawn as a native one never needs it.\nfunction viaGeometry(Shape: new (state: Any) => ShapeGeometry<any, any>, state: Any): ShapeOut {\n const shape = new Shape(state);\n const full = shape.fullState as Any, geo = shape.geometry;\n const range = shape.needsTrim() ? shape.getTrimRange() : null;\n const base = once(() => {\n const outline = shape.buildPathData(geo);\n return outline && shapeTransform(full, outline);\n });\n const fill = once(() => {\n const p = base();\n return p && range ? trimPath(p, range.start, range.end) : p;\n });\n const stroke = once(() => {\n // A ratio-1 ellipse fills nothing; it strokes its bare outline or arc.\n const ring = shape instanceof EllipseGeometry ? shape.ringOutline(geo) : null;\n if (ring == null) return fill();\n const outline = parse(ring, full);\n return outline && range ? trimPath(outline, range.start, range.end) : outline;\n });\n const interior = once(() => {\n const svg = shape.buildSVGAlignInterior(geo);\n return svg != null ? parse(svg, full) : range ? base() : fill();\n });\n const b = shape.computeBounds(geo);\n const spread = shape.supportsSpread() ? (s: number) => parse(shape.buildSpreadSVGPath(geo, s), full) : undefined;\n return {\n get fill() { return fill(); },\n get stroke() { return stroke(); },\n get interior() { return interior(); },\n bounds: b ? [b.left, b.top, b.right, b.bottom] : null,\n spread,\n trimmed: !!range,\n native: range ? undefined : nativeOf(shape, full, geo),\n };\n}\n\nfunction once<T>(make: () => T): () => T {\n let made = false;\n let value: T;\n return () => {\n if (!made) {\n value = make();\n made = true;\n }\n return value;\n };\n}\n\n/**\n * The shape the renderer draws itself: an unturned, unscaled rect whose corners\n * are all rounded (or square) and within half its shorter side, as the renderer\n * clamps them, or a whole ellipse with no hole.\n */\nfunction nativeOf(shape: ShapeGeometry<any, any>, full: Any, geo: Any): NativeShape | undefined {\n if ((full.rotation ?? 0) !== 0 || (full.scale ?? 1) !== 1) return undefined;\n if (shape instanceof EllipseGeometry) {\n if (!geo.isFullShape || geo.ratio > 0) return undefined;\n const w = geo.halfWidth * 2, h = geo.halfHeight * 2;\n if (!(w > 0 && h > 0) || !Number.isFinite(w + h + geo.cx + geo.cy)) return undefined;\n return { kind: \"ellipse\", x: geo.cx - geo.halfWidth, y: geo.cy - geo.halfHeight, w, h, radii: [0, 0, 0, 0] };\n }\n if (shape instanceof RectGeometry) {\n const w = geo.right - geo.left, h = geo.bottom - geo.top;\n if (!(w > 0 && h > 0) || !Number.isFinite(w + h + geo.left + geo.top)) return undefined;\n const corners = [geo.tl, geo.tr, geo.br, geo.bl] as { radius: number; style: string }[];\n const limit = Math.min(w, h) / 2;\n if (corners.some((c) => !(c.radius >= 0 && c.radius <= limit) || (c.radius > 0 && c.style === \"angled\"))) return undefined;\n return { kind: \"rect\", x: geo.left, y: geo.top, w, h, radii: corners.map((c) => c.radius) as NativeShape[\"radii\"] };\n }\n return undefined;\n}\n\n/** A path: data centred on its control-point bounds (or centerBounds), turned about the origin. */\nfunction pathShape(state: Any): ShapeOut {\n const shape = new PathGeometry(state as never);\n const full = shape.fullState as Any;\n const raw = parseSvgPath(shape.buildSVGPath(shape.geometry));\n const [x0, y0, x1, y1] = full.centerBounds ?? pathBounds(raw);\n const ox = -(x0 + (x1 - x0) / 2), oy = -(y0 + (y1 - y0) / 2);\n const centred = transformPath(raw, [1, 0, 0, 1, ox, oy]);\n const base = shapeTransform({ ...full, x: 0, y: 0 }, centred);\n const range = shape.needsTrim() ? shape.getTrimRange() : null;\n const fill = range ? trimPath(base, range.start, range.end) : base;\n return { fill, stroke: fill, interior: range ? base : fill, bounds: null, trimmed: !!range };\n}\n\nconst negPathY = (state: Any): Any => {\n const out: Any = { ...state, y: negY(state.y) };\n if (Array.isArray(state.data)) {\n out.data = state.data.map((c: Any) => {\n switch (c.type) {\n case \"M\": case \"m\": case \"L\": case \"l\": case \"T\": case \"t\": case \"V\": case \"v\": return { ...c, y: -c.y };\n case \"C\": case \"c\": return { ...c, y1: -c.y1, y2: -c.y2, y: -c.y };\n case \"S\": case \"s\": return { ...c, y2: -c.y2, y: -c.y };\n case \"Q\": case \"q\": return { ...c, y1: -c.y1, y: -c.y };\n case \"A\": case \"a\": return { ...c, y: -c.y, sweep: c.sweep === 1 ? 0 : 1 };\n default: return c;\n }\n });\n if (state.centerBounds) {\n const [a, b2, c2, d] = state.centerBounds;\n out.centerBounds = [a, -d, c2, -b2];\n }\n }\n return out;\n};\n\n/** The op's paths in the node's y-down space, or null when unsupported. */\nexport function shapeOf(op: { kind: string; state: Any }): ShapeOut | null {\n const s = op.state;\n switch (op.kind) {\n case \"rect\": return viaGeometry(RectGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"ellipse\": {\n const f = flipPositionY(s, s.width ?? 0, s.height ?? 0);\n if (s.startAngle != null) f.startAngle = -s.startAngle;\n if (s.sweep != null) f.sweep = -s.sweep;\n return viaGeometry(EllipseGeometry, f);\n }\n case \"polygon\": return viaGeometry(PolygonGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"polygram\": return viaGeometry(PolygramGeometry, flipPositionY(s, s.width ?? 0, s.height ?? 0));\n case \"line\": {\n const points = s.points ? s.points.map((p: { x: number; y: number }) => ({ x: p.x, y: -p.y })) : s.points;\n return viaGeometry(LineGeometry, { ...s, y: negY(s.y), points });\n }\n case \"path\": return pathShape(negPathY(s));\n }\n return null;\n}\n", "import { type MotionBlurEffect, type Vector2, resolveEffectAxis, resolveMotionBlurAlignment } from \"@motionscript/core\";\n\n/** A motion blur resolved against a node's velocity into a directional smear. */\nexport interface MotionBlurResolved {\n /** Smear axis in degrees (0 = horizontal), as a directional blur's `angle`. */\n angle: number;\n /** Smear length in px along `angle`. */\n radius: number;\n /** Shutter phase in −1…1: offsets the smear's centre from the node's position. */\n phase: number;\n samples: number;\n}\n\n/** Above this `samples` count a shutter steps the smear into discrete taps rather than blurring it continuously. */\nexport const SAMPLE_THRESHOLD = 32;\n\n/**\n * `velocity · dt` is the node's displacement this frame; `length / 100` the\n * shutter fraction (100% = the whole displacement), scaled per axis by `axis`\n * and by `strength`. Null when the smear would be empty.\n */\nexport function resolveMotionBlur(effect: MotionBlurEffect, velocity: Vector2, dt: number): MotionBlurResolved | null {\n if (dt <= 0 || effect.strength <= 0 || effect.length <= 0) return null;\n const axis = resolveEffectAxis(effect.axis);\n const shutter = effect.length / 100;\n const sx = velocity.x * dt * axis.x * shutter * effect.strength;\n const sy = velocity.y * dt * axis.y * shutter * effect.strength;\n const radius = Math.hypot(sx, sy);\n if (radius < 0.01) return null;\n return {\n angle: (Math.atan2(sy, sx) * 180) / Math.PI,\n radius,\n phase: resolveMotionBlurAlignment(effect.alignment),\n samples: effect.samples,\n };\n}\n", "// End-marker outlines, in the frame of the end they sit on: `u` runs the way the\n// stroke leaves, `v` to its left, and the origin is the path's end. `size` is\n// the marker's length and `weight` the stroke's.\n\nimport type { StrokeMarker } from \"@motionscript/core\";\n\n/** Half-width over length of a pointed head: as wide as it is long. */\nconst SPREAD = 0.5;\nconst SPREAD_LENGTH = Math.hypot(1, SPREAD);\nconst SPREAD_SIN = SPREAD / SPREAD_LENGTH;\nconst SPREAD_COS = 1 / SPREAD_LENGTH;\n\n/** How far up a stealth head its notch reaches, as a share of its length. */\nconst STEALTH_NOTCH = 0.35;\n\n/** A head with its tip on the end, turned by the stretch of path it covers. */\nexport function markerIsPointed(marker: StrokeMarker): boolean {\n return marker === \"arrow\" || marker === \"triangle\" || marker === \"stealth\";\n}\n\n/**\n * How far behind the end the stroke's own band has to stop: a pointed head is\n * narrower than the band near its tip, so the band's square end would show\n * either side of it.\n */\nexport function markerInset(marker: StrokeMarker, size: number, weight: number): number {\n return markerIsPointed(marker) ? Math.min(size, weight / (2 * SPREAD)) : 0;\n}\n\n/** The outline as a flat `[u, v, …]` polygon, or `null` for a disc `size` across centred on the end. */\nexport function markerPolygon(marker: StrokeMarker, size: number, weight: number): number[] | null {\n const half = size / 2;\n switch (marker) {\n case \"dot\":\n return null;\n case \"triangle\":\n return [0, 0, -size, size * SPREAD, -size, -size * SPREAD];\n case \"stealth\":\n return [0, 0, -size, size * SPREAD, -size * (1 - STEALTH_NOTCH), 0, -size, -size * SPREAD];\n case \"arrow\":\n return chevron(size, weight);\n case \"box\":\n return [-half, -half, half, -half, half, half, -half, half];\n case \"diamond\":\n return [half, 0, 0, half, -half, 0, 0, -half];\n case \"bar\":\n return [-weight / 2, -half, weight / 2, -half, weight / 2, half, -weight / 2, half];\n }\n}\n\n// Two limbs `weight` thick meeting in a mitre whose point is the origin. Short\n// of room for a gap between them it is the solid triangle.\nfunction chevron(size: number, weight: number): number[] {\n const outerV = size * SPREAD;\n const innerU = -size - weight * SPREAD_SIN;\n const innerV = outerV - weight * SPREAD_COS;\n if (innerV <= 0) return [0, 0, -size, outerV, -size, -outerV];\n const crotch = -weight / SPREAD_SIN;\n return [0, 0, -size, outerV, innerU, innerV, crotch, 0, innerU, -innerV, -size, -outerV];\n}\n", "// Stroke cap planning and dash fitting on PathData: which path ends want a\n// cap other than the stroker's, where each sits and which way it faces, and\n// the dash pattern stretched to fit the path (dashes cut here as open\n// contours when the band needs its ends fixed up).\n\nimport { isStrokeMarker, type StrokeEnd, type StrokeMarker, type StrokeResolved } from \"@motionscript/core\";\nimport { markerIsPointed, markerPolygon } from \"./geometry/markers\";\nimport { type PathData, PathBuilder } from \"../doc\";\nimport { type Contour, dashedPath, dashFit, contourDashScale, dashRuns, measureContours, type PosTan } from \"./path-measure\";\n\nexport { markerInset } from \"./geometry/markers\";\n\ntype Cap = StrokeResolved[\"cap\"];\n\n/** One end of an open contour, with the unit direction pointing out past it. */\nexport interface PathEnd {\n x: number;\n y: number;\n dx: number;\n dy: number;\n cap: StrokeEnd;\n /** A marker's length, already fitted to its contour. */\n size: number;\n weight: number;\n /** Whether the band reaches the end (a dash gap can leave it bare). */\n reached: boolean;\n}\n\nexport interface StrokePlan {\n /** The cap the stroker draws: the dash cap, or for an undashed stroke the end cap. */\n cap: Cap;\n /** The ends that want another, fixed up after. */\n ends: PathEnd[];\n /** What to stroke instead of the shape's own contour (its cut dashes). */\n source?: PathData;\n /** The fitted pattern the renderer dashes with (unset when `source` carries the dashes). */\n dash?: number[];\n dashPhase?: number;\n}\n\n/** The plan for stroking `path` `width` wide; null when its dashes leave nothing. */\nexport function strokePlan(st: StrokeResolved, path: PathData, width: number, thin: boolean): StrokePlan | null {\n const dashed = !!st.dash?.length;\n const start = st.startCap ?? st.cap, end = st.endCap ?? st.cap;\n const cap: Cap = dashed ? st.cap : isStrokeMarker(end) ? \"butt\" : (end as Cap);\n const differs = start !== cap || end !== cap;\n if (!dashed && !differs) return { cap, ends: [] };\n const cs = measureContours(path);\n const fit = dashed ? dashFit(cs, st.dash!) : null;\n // A degenerate pattern draws the plain stroke (makeUniformDashEffect returns null).\n if (dashed && !fit) return { cap, ends: differs ? capEnds(cs, st, start, end, cap, width, null) : [] };\n if (!fit) return { cap, ends: capEnds(cs, st, start, end, cap, width, null) };\n const runs = (c: Contour) => dashRuns(c, st.dash!, st.dashOffset ?? 0, contourDashScale(c, st.dash!, fit));\n const ends = differs ? capEnds(cs, st, start, end, cap, width, runs) : [];\n // An end capped unlike the rest needs the band, and so do dashes along an\n // open contour (fit per contour) and thin ones; otherwise the renderer\n // dashes with the fitted pattern.\n if (thin || ends.length || fit.open) {\n const source = dashedPath(cs, st.dash!, st.dashOffset ?? 0, st.cap !== \"butt\", fit);\n return source ? { cap, ends, source } : null;\n }\n return { cap, ends, dash: st.dash!.map((d) => d * fit.scale), dashPhase: (st.dashOffset ?? 0) * fit.scale };\n}\n\nfunction capEnds(cs: Contour[], st: StrokeResolved, start: StrokeEnd, end: StrokeEnd, cap: Cap, width: number, runs: ((c: Contour) => [number, number][]) | null): PathEnd[] {\n const ends: PathEnd[] = [];\n const marked = (isStrokeMarker(start) ? 1 : 0) + (isStrokeMarker(end) ? 1 : 0);\n const half = width / 2;\n // band.contains(end − dir·inset): a dash covers the end, or its cap does.\n const inset = Math.min(half, 1) / 2;\n const ext = st.cap !== \"butt\" ? half : 0;\n for (const c of cs) {\n if (c.closed) continue;\n // Two heads share a contour too short for both.\n const size = Math.min(st.capScale * width, c.length / Math.max(1, marked));\n const on = runs?.(c);\n const reached = (d: number) => !on || on.some(([a, b]) => d >= a - ext - 1e-6 && d <= b + ext + 1e-6);\n if (start !== cap) pushEnd(ends, c.posTan(0), c.posTan(size), -1, start, size, width, reached(inset));\n if (end !== cap) pushEnd(ends, c.posTan(c.length), c.posTan(c.length - size), 1, end, size, width, reached(c.length - inset));\n }\n return ends;\n}\n\n// `inner` is the point a marker's length back along the contour: a pointed\n// head is turned by the chord to it, so its base sits on a curved path.\nfunction pushEnd(ends: PathEnd[], [x, y, tx, ty]: PosTan, inner: PosTan, outward: 1 | -1, cap: StrokeEnd, size: number, weight: number, reached: boolean) {\n let dx = outward * tx, dy = outward * ty;\n if (isStrokeMarker(cap) && markerIsPointed(cap) && Math.hypot(x - inner[0], y - inner[1]) > 1e-6) {\n dx = x - inner[0];\n dy = y - inner[1];\n }\n const length = Math.hypot(dx, dy);\n if (length < 1e-9) return;\n ends.push({ x, y, dx: dx / length, dy: dy / length, cap, size, weight, reached });\n}\n\n// Every end shape winds the same way, so several merged into one path union\n// under the non-zero rule instead of cancelling where they overlap.\n\n/** The rectangle past `end`: `depth` along its outward direction, `half` to either side. */\nexport function endBox({ x, y, dx, dy }: PathEnd, depth: number, half: number): PathData {\n const nx = -dy * half, ny = dx * half, ex = dx * depth, ey = dy * depth;\n return new PathBuilder().moveTo(x - nx, y - ny).lineTo(x - nx + ex, y - ny + ey).lineTo(x + nx + ex, y + ny + ey).lineTo(x + nx, y + ny).close().build();\n}\n\n/** The half disc past `end`, from one side of the band through the outward direction to the other. */\nexport function endDisc({ x, y, dx, dy }: PathEnd, r: number): PathData {\n const b = new PathBuilder();\n const n = 32;\n for (let i = 0; i <= n; i++) {\n const a = -Math.PI / 2 + (Math.PI * i) / n, c = Math.cos(a) * r, s = Math.sin(a) * r;\n const px = x + c * dx - s * dy, py = y + c * dy + s * dx;\n if (i === 0) b.moveTo(px, py);\n else b.lineTo(px, py);\n }\n return b.close().build();\n}\n\n/** A marker's outline on its end (addMarker): its polygon in the end's frame, or a disc `size` across. */\nexport function markerPath(e: PathEnd, marker: StrokeMarker): PathData {\n const { x, y, dx, dy, size, weight } = e;\n const polygon = markerPolygon(marker, size, weight);\n const b = new PathBuilder();\n if (!polygon) {\n const r = size / 2, k = 0.5522848 * r;\n b.moveTo(x + r, y).cubicTo(x + r, y + k, x + k, y + r, x, y + r).cubicTo(x - k, y + r, x - r, y + k, x - r, y)\n .cubicTo(x - r, y - k, x - k, y - r, x, y - r).cubicTo(x + k, y - r, x + r, y - k, x + r, y);\n return b.close().build();\n }\n for (let i = 0; i < polygon.length; i += 2) {\n const px = x + polygon[i] * dx - polygon[i + 1] * dy, py = y + polygon[i] * dy + polygon[i + 1] * dx;\n if (i === 0) b.moveTo(px, py);\n else b.lineTo(px, py);\n }\n return b.close().build();\n}\n", "// The engine's RenderContext2D, recorded into a retained Doc each frame. A\n// canvas state machine: begin/end = save/restore around a node, transform() concatenates into the\n// node's group, a non pass-through blend isolates a layer, and opacity is\n// otherwise a world alpha multiplied into every paint.\n\nimport {\n alignmentOps, forEachTexture3D, isStrokeMarker, isSurfaceTexture3D, resolveSurfaceSource, resolveVideoTimestamp, withRichTextDescriptor,\n type Alignment, type BooleanOperation, CanvasRenderContext2D, type Clip, fillOps, type FontStyle, type Graphics2D,\n type MaskOptions, type NodeRenderState, type RenderContext2D, type RenderIssue, type ShadowResolved, shadowOps, type Size2D, strokeOps,\n type TransformState, type Vector2,\n} from \"@motionscript/core\";\nimport { BLEND_MODES, type BlendMode, Doc, type ImageAsset, isProjective, type Mat, type Member, type MemberOp, mulX, type Node, type Paint, PathBuilder, type PathData, pathBounds, type Shadow, type TextRunSpec, type TextSpec, transformPath, type Xform } from \"../doc\";\nimport { assetKey } from \"./driver\";\nimport { fillPaint, shadowOf } from \"./paint\";\nimport { shaderParamIssues } from \"./shader-params\";\nimport { isClosed, reversePath, signedArea } from \"./path-measure\";\nimport { type NativeShape, shapeOf, type ShapeOut, textOf } from \"./shapes\";\nimport { resolveMotionBlur, SAMPLE_THRESHOLD } from \"./geometry/motion-blur\";\nimport { endBox, endDisc, markerInset, markerPath, type PathEnd, strokePlan, type StrokePlan } from \"./stroke-ends\";\n\ntype Measure = (text: string, size: number, family: string, weight: number, letterSpacing: number, style: FontStyle | undefined) => Size2D;\n\nfunction merge(paths: PathData[]): PathData {\n if (paths.length === 1) return paths[0];\n const verbs = new Uint8Array(paths.reduce((n, p) => n + p.verbs.length, 0));\n const points = new Float32Array(paths.reduce((n, p) => n + p.points.length, 0));\n let v = 0, q = 0;\n for (const p of paths) {\n verbs.set(p.verbs, v); v += p.verbs.length;\n points.set(p.points, q); q += p.points.length;\n }\n return { verbs, points };\n}\n\ntype Bounds = [number, number, number, number];\n\n/** The kinds the adapter could not draw this frame, and the nodes each was found on. */\nexport class MissingKinds extends Set<string> {\n readonly nodes = new Map<string, Set<string>>();\n\n constructor(private readonly node: () => string | undefined) {\n super();\n }\n\n override add(kind: string): this {\n super.add(kind);\n const id = this.node?.();\n if (id !== undefined) {\n let at = this.nodes.get(kind);\n if (!at) this.nodes.set(kind, (at = new Set()));\n at.add(id);\n }\n return this;\n }\n\n override clear(): void {\n super.clear();\n this.nodes.clear();\n }\n}\n\nconst SHAPE_OPS = new Set([\"rect\", \"ellipse\", \"path\", \"line\", \"polygon\", \"polygram\", \"text\", \"richText\"]);\ntype LeafProps = Parameters<Doc[\"pathNode\"]>[1];\n\nconst isSolid = (f: unknown) => (f as { type?: string }).type === \"solid\";\n\n/** `box` grown by `d` (shrunk when negative), each rounded corner with it; null where that is no longer the offset outline. */\nfunction offsetBox(box: NativeShape, d: number): NativeShape | null {\n if (d === 0) return box;\n const w = box.w + 2 * d, h = box.h + 2 * d;\n if (!(w > 0 && h > 0)) return null;\n if (box.kind === \"ellipse\") return { ...box, x: box.x - d, y: box.y - d, w, h };\n if (box.radii.some((r) => r > 0 && !(r + d > 0))) return null;\n return { ...box, x: box.x - d, y: box.y - d, w, h, radii: box.radii.map((r) => (r > 0 ? r + d : 0)) as NativeShape[\"radii\"] };\n}\n\n/** What a paint covers: one path, or a compound's members (a boolean result). */\ntype Geom = { path: PathData } | { members: Member[] };\n\nconst BLACK: Paint = { kind: \"solid\", color: [0, 0, 0, 1] };\nconst BOOLEAN_OP: Record<BooleanOperation, MemberOp> = { union: \"union\", subtract: \"cut\", intersect: \"intersect\", exclude: \"exclude\" };\n\n/** A compound's result bounds, as its members fold: unions grow, intersections shrink, cuts keep. */\nfunction membersBounds(members: Member[]): Bounds | null {\n let acc: Bounds | null = null;\n for (const m of members) {\n const b = pathBounds(m.path!);\n const op = m.op ?? \"union\";\n if (!acc) {\n if (op === \"union\" || op === \"exclude\") acc = b;\n } else if (op === \"union\" || op === \"exclude\") {\n acc = [Math.min(acc[0], b[0]), Math.min(acc[1], b[1]), Math.max(acc[2], b[2]), Math.max(acc[3], b[3])];\n } else if (op === \"intersect\") {\n acc = [Math.max(acc[0], b[0]), Math.max(acc[1], b[1]), Math.min(acc[2], b[2]), Math.min(acc[3], b[3])];\n if (acc[2] < acc[0] || acc[3] < acc[1]) acc = [acc[0], acc[1], acc[0], acc[1]];\n }\n }\n return acc;\n}\n\nfunction invert(m: Xform): Mat | null {\n const det = m[0] * m[3] - m[1] * m[2];\n if (!det) return null;\n const a = m[3] / det, b = -m[1] / det, c = -m[2] / det, d = m[0] / det;\n return [a, b, c, d, -(a * m[4] + c * m[5]), -(b * m[4] + d * m[5])];\n}\n\nlet sceneVersion = 1 << 20;\n\n/** core's kebab-case blend names to the doc's (\"color-dodge\" → \"colorDodge\"). */\nfunction docBlend(b: string): BlendMode | null {\n const camel = (b === \"plus-lighter\" ? \"plus\" : b).replace(/-(\\w)/g, (_, c: string) => c.toUpperCase());\n return BLEND_MODES.includes(camel as BlendMode) ? (camel as BlendMode) : null;\n}\n// An image's version is its bitmap's: what the storage hands back for a source\n// can change (a video's nearest decoded frame, then the exact one; an SVG\n// rasterized again at a larger size).\nconst frameVersions = new WeakMap<object, number>();\nlet nextFrameVersion = 1 << 24;\nfunction frameVersion(frame: object): number {\n let v = frameVersions.get(frame);\n if (v === undefined) frameVersions.set(frame, (v = nextFrameVersion++));\n return v;\n}\n\n/** Decoded video frames by source and time (a storage adapter's). */\nexport interface VideoFrames {\n videos: Map<string, { duration: number }>;\n /** The frame of `src` at `time` s, or null (queued for warmPendingDecodes). */\n videoFrame(src: string, time: number): ImageBitmap | null;\n /** A draw of image `src` `edge` device px along its long side. */\n wantImageEdge?(src: string, edge: number): void;\n}\n\ninterface Scope {\n /** Groups this node opened (popped on end). */\n groups: number;\n worldAlpha: number;\n}\n\nexport class WgpuRenderContext extends CanvasRenderContext2D {\n override readonly readsSpaceRects = true;\n override readonly drawsVisibleOnly = true;\n pixelRatio = 1;\n doc!: Doc;\n /** What scenes asked for that the adapter doesn't draw yet (by kind, and the nodes it was on). */\n readonly missing = new MissingKinds(() => this.currentNodeStack[this.currentNodeStack.length - 1]);\n /** This frame's WGSL shaders whose uniforms and `Params` disagree, on their nodes. */\n readonly shaderIssues: RenderIssue[] = [];\n /** The frame's storage adapter (video frames). */\n storage: VideoFrames | null = null;\n /** Decoded images by asset key (the storage adapter fills it). */\n images = new Map<string, import(\"./driver\").Decoded>();\n private frameImages = new Map<string, import(\"../doc\").ImageAsset>();\n private assets = {\n image: (src: string) => this.image(src),\n scene3d: (scene: unknown, w: number, h: number, ratio: number) => {\n // Its textures: images from the frame's image assets (resolved as the\n // backend asks), surfaces drawn by this context into detached subtrees.\n const surfaces = new Map<object, ImageAsset>();\n forEachTexture3D(scene as never, (t: any) => {\n if (isSurfaceTexture3D(t) && !surfaces.has(t)) {\n const asset = this.surfaceOf(t);\n if (asset) surfaces.set(t, asset);\n }\n });\n const images = new Proxy({} as Record<string, ImageAsset>, { get: (_, src) => (typeof src === \"string\" ? this.image(src) ?? undefined : undefined) });\n const a = this.doc.addScene3D(scene as never, w, h, { images, surfaces });\n a.scale3d = ratio;\n // A scene is redrawn whenever it is handed over (it may animate).\n a.version = ++sceneVersion;\n return a;\n },\n video: (fill: any, at?: number) => {\n const storage = this.storage;\n const time = at ?? this.videoTime(fill);\n if (!storage || time === null) return null;\n const frame = storage.videoFrame(fill.src, time);\n if (!frame) return null;\n const key = `${assetKey(fill.src)}@${time.toFixed(6)}`;\n let a = this.frameImages.get(key);\n if (!a) {\n a = this.doc.addImage(frame, frame.width, frame.height, { mipmaps: false });\n a.version = frameVersion(frame);\n this.frameImages.set(key, a);\n }\n return a;\n },\n imageEdge: (src: string, edge: number) => this.storage?.wantImageEdge?.(src, edge),\n deviceScale: () => {\n const m = this.device();\n return Math.sqrt(Math.abs(m[0] * m[3] - m[1] * m[2]));\n },\n time: () => this.elapsed(),\n checkShader: (fill: unknown) => this.checkShader(\"fill\", fill),\n };\n private image = (raw: string) => {\n const src = assetKey(raw);\n let a = this.frameImages.get(src);\n if (a) return a;\n const d = this.images.get(src);\n if (!d) return null;\n a = this.doc.addImage(d.bitmap, d.width, d.height);\n // Ids restart with every frame's doc; a version unique to the bitmap\n // keeps the backend from reusing another image's upload under an id,\n // or an image's earlier raster (a vector rasterized again, sharper).\n a.version = frameVersion(d.bitmap);\n this.frameImages.set(src, a);\n return a;\n };\n private stack: Node[] = [];\n private scopes: Scope[] = [];\n private worldAlpha = 1;\n // The current surface: shapes chained before a paint, as ShapeHandler.\n private shapes: ShapeOut[] = [];\n private painted = false;\n private shadows: ShadowResolved[] = [];\n\n constructor(protected width: number, protected height: number, private measure: Measure) {\n super();\n }\n\n private get cur(): Node {\n return this.stack[this.stack.length - 1];\n }\n\n measureText(text: string, fontSize: number, fontFamily: string, fontWeight = 400, letterSpacing = 0, fontStyle?: FontStyle): Size2D {\n return this.measure(text, fontSize, fontFamily, fontWeight, letterSpacing, fontStyle);\n }\n\n execute(callback: () => void): void {\n // executePass: cleared black, origin at the centre (the backend applies\n // the pixel ratio by scaling the doc to the canvas).\n this.doc = new Doc(this.width, this.height, this.clearColor());\n this.frameImages.clear();\n // Only the settled pass counts (earlier passes wait on decodes).\n this.missing.clear();\n this.shaderIssues.length = 0;\n const root = this.doc.group(this.doc.root, { transform: this.rootTransform() });\n const frame = this.frameGroup(root);\n this.stack = frame === root ? [root] : [root, frame];\n this.scopes = [];\n this.worldAlpha = 1;\n this.masks = [];\n this.cameras = [];\n this.clips = [];\n this.booleans = [];\n this.resetSurface();\n callback();\n }\n\n /** Where the scene's origin sits in the doc: its centre, as executePass. */\n protected rootTransform(): Xform {\n return [1, 0, 0, 1, this.width / 2, this.height / 2];\n }\n\n protected clearColor(): [number, number, number, number] {\n return [0, 0, 0, 1];\n }\n\n /** The group the scene draws into under the root (a host's frame clip). */\n protected frameGroup(root: Node): Node {\n return root;\n }\n\n screenshot(): string | undefined {\n return undefined;\n }\n\n unmount(): void {}\n\n override begin(state: NodeRenderState): void {\n super.begin(state);\n this.scopes.push({ groups: 1, worldAlpha: this.worldAlpha });\n this.stack.push(this.doc.group(this.cur));\n this.resetSurface();\n }\n\n override end(): void {\n const s = this.scopes.pop();\n if (s) {\n for (let i = 0; i < s.groups; i++) this.stack.pop();\n this.worldAlpha = s.worldAlpha;\n }\n super.end();\n }\n\n transform(state: Partial<TransformState>): RenderContext2D {\n const x = state.x ?? 0, y = state.y ?? 0, w = state.width ?? 0, h = state.height ?? 0;\n const opacity = state.opacity ?? 1;\n const blend = state.blend ?? \"pass-through\";\n let m: Xform;\n const matrix = state.matrix;\n // A 2.5D node's matrix can carry a perspective row (g h i).\n if (matrix) m = [matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f, matrix.g ?? 0, matrix.h ?? 0, matrix.i ?? 1];\n else {\n const pivot = state.pivot ?? { x: 0, y: 0 };\n const px = pivot.x * (w / 2), py = -pivot.y * (h / 2);\n const r = ((state.rotation ?? 0) * Math.PI) / 180, s = state.scale ?? 1;\n const c = Math.cos(r) * s, sn = Math.sin(r) * s;\n m = [c, sn, -sn, c, x + px - (c * px - sn * py), y + py - (sn * px + c * py)];\n }\n const g = this.cur;\n g.transform = mulX(g.transform, isProjective(m) ? m : m.slice(0, 6) as Mat);\n // Node effects ride the node's layer (transform composes the filters,\n // beginEffects(\"foreground\") captures for the shader ones); the doc's\n // group takes both, shader effects first, as the engine orders them.\n // Backdrop ones arrive through beginEffects(\"backdrop\").\n const fx = this.motionBlur((state.effects ?? []).filter((e) => e.mode !== \"backdrop\"));\n for (const e of fx) if (e.type === \"shader\") this.checkShader(\"effect\", e);\n if (fx.length) {\n g.effects = fx;\n g.effectBox = [-w / 2, -h / 2, w, h];\n g.effectTime = this.elapsed();\n }\n if (blend !== \"pass-through\") {\n const mode = docBlend(blend);\n if (!mode) this.missing.add(`blend:${blend}`);\n this.stack.push(this.doc.group(g, { opacity: this.worldAlpha * (opacity < 1 ? opacity : 1), blend: mode ?? \"normal\" }));\n this.scopes[this.scopes.length - 1].groups++;\n this.worldAlpha = 1;\n } else if (opacity < 1) this.worldAlpha *= opacity;\n return this;\n }\n\n private resetSurface() {\n this.shapes = [];\n this.painted = false;\n this.shadows = [];\n }\n\n protected drawGraphics(graphics: Graphics2D): void {\n const prevAlpha = this.worldAlpha;\n const g = graphics as any;\n if (g.needsGroupLayer?.()) {\n const o = g.groupOpacity();\n if (o < 1) this.worldAlpha *= o;\n }\n // Graphics-level rotation/scale turns the whole union about its pivot\n // (default: the union's centre), wrapping the replay.\n const turn = g.groupTransform?.();\n let turned: Node | null = null;\n if (turn) {\n const { x: cx, y: cy } = this.groupCenter(graphics, turn.center);\n const r = (turn.rotation * Math.PI) / 180, c = Math.cos(r) * turn.scale, s = Math.sin(r) * turn.scale;\n turned = this.doc.group(this.cur, { transform: [c, s, -s, c, cx - (c * cx - s * cy), cy - (s * cx + c * cy)] });\n this.stack.push(turned);\n }\n const ops = graphics.ops() as any[];\n const segments = this.effectSegments(ops);\n let segment: Node | null = null;\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i];\n // An effects op filters its shape group: a layer opened at the\n // group's first op, closed at the effects op.\n const fx = segments.get(i);\n if (fx) {\n segment = this.doc.group(this.cur, { effects: fx, effectBox: this.viewportBox(), effectTime: this.elapsed() });\n this.stack.push(segment);\n }\n switch (op.kind) {\n case \"rect\": case \"ellipse\": case \"polygon\": case \"polygram\": case \"line\": case \"path\": {\n if (this.painted) this.resetSurface();\n const shape = shapeOf(op);\n if (!shape) break;\n if (this.booleans.length) this.collect(shape);\n else this.shapes.push(shape);\n break;\n }\n case \"cut\": this.cut(); break;\n case \"richText\": {\n if (this.painted) this.resetSurface();\n this.richText(op.state);\n break;\n }\n case \"text\": {\n if (this.painted) this.resetSurface();\n const text = textOf(op.state, (spec) => {\n const r = spec.runs[0];\n const m = this.measureText(r.text, r.size, r.family, r.weight, r.letterSpacing, r.italic ? \"italic\" : \"normal\");\n return [m.width, m.height];\n });\n if (text) {\n const [w, h] = text.size, x = text.transform[4], y = text.transform[5];\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: [x - w / 2, y - h / 2, x + w / 2, y + h / 2], text });\n } else this.missing.add(\"text:path\");\n break;\n }\n case \"fill\": this.fill(fillOps.resolve(op.fills)); break;\n case \"stroke\": this.stroke(strokeOps.resolve(op.strokes)); break;\n case \"shadow\": this.shadows = shadowOps.resolve(op.shadows); break;\n case \"effects\":\n if (segment) {\n this.stack.splice(this.stack.lastIndexOf(segment));\n segment = null;\n }\n this.resetSurface();\n break;\n case \"mask\": this.beginMask(op.options); break;\n case \"applyMask\": this.applyMask(); break;\n case \"endMask\": this.endMask(); break;\n default: this.missing.add(`op:${op.kind}`);\n }\n }\n // Unwound to where this draw began (an unterminated segment included).\n const first = turned ?? segment;\n if (first) this.stack.splice(this.stack.lastIndexOf(first));\n this.worldAlpha = prevAlpha;\n }\n\n /** RenderContext's buildEffectSegments: each effects op's foreground effects\n * by the index of the first op of the shape group it filters. */\n private effectSegments(ops: any[]): Map<number, object[]> {\n const segments = new Map<number, object[]>();\n let groupStart = 0, painted = false;\n ops.forEach((op, i) => {\n if (SHAPE_OPS.has(op.kind)) {\n if (painted) {\n groupStart = i;\n painted = false;\n }\n } else if (op.kind === \"fill\" || op.kind === \"stroke\" || op.kind === \"shadow\") {\n painted = true;\n } else if (op.kind === \"effects\") {\n const fx = this.motionBlur((op.effects as any[]).filter((e) => e.mode !== \"backdrop\"));\n if (fx.length) segments.set(groupStart, fx);\n groupStart = i + 1;\n painted = false;\n }\n });\n return segments;\n }\n\n /** Motion blur resolved against the node's velocity into a directional blur. */\n private motionBlur<E extends { type: string }>(effects: E[]): E[] {\n if (!effects.some((e) => e.type === \"motionBlur\")) return effects;\n const rs = this.currentRenderState();\n return effects.flatMap((e) => {\n if (e.type !== \"motionBlur\") return [e];\n const r = rs ? resolveMotionBlur(e as never, rs.velocity, rs.dt) : null;\n if (!r) return [];\n // An off-centre shutter shifts the smear; many samples step it.\n if (r.phase !== 0 || Math.round(r.samples) > SAMPLE_THRESHOLD) this.missing.add(\"effect:motionBlur-shutter\");\n return [{ type: \"directionalBlur\", radius: r.radius, angle: r.angle } as unknown as E];\n });\n }\n\n /** resolveGroupCenter: an explicit point as is, else a point of the shapes' union box. */\n private groupCenter(graphics: Graphics2D, center: Alignment | undefined): Vector2 {\n if (center !== undefined && typeof center !== \"string\") return { x: center.x, y: center.y };\n let b: Bounds | null = null;\n for (const op of graphics.ops() as any[]) {\n const p = SHAPE_OPS.has(op.kind) && op.kind !== \"text\" && op.kind !== \"richText\" ? shapeOf(op)?.fill : null;\n if (!p || !p.verbs.length) continue;\n const pb = pathBounds(p);\n b = b ? [Math.min(b[0], pb[0]), Math.min(b[1], pb[1]), Math.max(b[2], pb[2]), Math.max(b[3], pb[3])] : pb;\n }\n if (!b) return { x: 0, y: 0 };\n const cx = (b[0] + b[2]) / 2, cy = (b[1] + b[3]) / 2;\n if (center === undefined) return { x: cx, y: cy };\n const a = alignmentOps.resolve(center);\n return { x: cx + a.x * ((b[2] - b[0]) / 2), y: cy - a.y * ((b[3] - b[1]) / 2) };\n }\n\n /** The viewport in local units (x, y, w, h): what effects on a graphics\n * group measure against. */\n private viewportBox(): [number, number, number, number] {\n const [l, t, r, b] = this.spaceBounds({ space: \"global\" }, [0, 0, 0, 0]);\n return [l, t, r - l, b - t];\n }\n\n /** The surface's paths of one kind, merged; its gradient bounds. */\n private surface(kind: \"fill\" | \"stroke\" | \"interior\"): PathData | null {\n let paths = this.shapes.map((s) => s[kind]).filter((p): p is PathData => !!p && p.verbs.length > 0);\n // Shapes fill one by one; one non-zero path of them all needs them\n // wound alike, or an overlap where they turn opposite ways cancels.\n if (kind === \"fill\" && paths.length > 1) paths = paths.map((p) => (signedArea(p) < 0 ? reversePath(p) : p));\n return paths.length ? merge(paths) : null;\n }\n\n private bounds(path: PathData | null): Bounds {\n const own = this.shapes.map((s) => s.bounds).filter((b) => b !== null);\n if (path && own.length !== this.shapes.length) return pathBounds(path);\n if (!own.length) return [0, 0, 0, 0];\n return own.reduce((a, b) => [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[2], b[2]), Math.max(a[3], b[3])]);\n }\n\n /** A leaf drawing `g`: a path node, or a compound for a boolean result. */\n private leaf(parent: Node, g: Geom, props: LeafProps): Node {\n return \"members\" in g ? this.doc.compound(parent, { ...props, members: g.members }) : this.doc.pathNode(parent, { ...props, path: g.path });\n }\n\n private geomBounds(g: Geom): Bounds {\n return \"members\" in g ? membersBounds(g.members) ?? [0, 0, 0, 0] : pathBounds(g.path);\n }\n\n /** The surface's outline grown by `spread`, shape by shape (a shape that\n * can't spread casts its own outline). A shrink can collapse a\n * shape: an `inset` one then casts nothing, null when none is left. */\n private spreadGeom(geom: Geom, spread: number, inset: boolean): Geom | null {\n if (!spread || \"members\" in geom) return geom;\n const paths: PathData[] = [];\n for (const s of this.shapes) {\n if (s.members || !s.fill || !s.fill.verbs.length) continue;\n const p = s.spread ? s.spread(spread) : s.fill;\n if (p && p.verbs.length) paths.push(p);\n else if (!inset) paths.push(s.fill);\n }\n return paths.length ? { path: merge(paths) } : null;\n }\n\n /** A group whose children are clipped to `g` (a compound clips as an alpha mask). */\n private clipTo(parent: Node, g: Geom): Node {\n if (\"path\" in g) {\n const [x0, y0, x1, y1] = pathBounds(g.path);\n return this.doc.group(parent, { clip: { x: x0, y: y0, w: x1 - x0, h: y1 - y0, r: 0, path: g.path } });\n }\n const m = this.doc.group(parent, { mask: \"alpha\" });\n this.doc.compound(m, { members: g.members, fill: BLACK });\n return m;\n }\n\n /** A group whose children show only outside `g`. */\n private clipOutside(parent: Node, g: Geom): Node {\n const m = this.doc.group(parent, { mask: \"invertAlpha\" });\n this.leaf(m, g, { fill: BLACK });\n return m;\n }\n\n private fill(layers: ReturnType<typeof fillOps.resolve>) {\n this.painted = true;\n // A boolean scope only collects outlines; its result is painted after.\n if (this.booleans.length) return;\n this.deferring(\"fill\", () => this.paintFill(layers));\n }\n\n /** Runs `paint` into the innermost mask's after-group when that mask's\n * `apply` leaves `kind` out: drawn after endMask, over the masked composite. */\n private deferring(kind: \"fill\" | \"stroke\", paint: () => void) {\n const m = this.masks[this.masks.length - 1];\n const after = m?.apply && !m.apply.has(kind) && !this.inVectorMask ? m.after : null;\n if (!after) return paint();\n this.stack.push(after);\n try {\n paint();\n } finally {\n this.stack.splice(this.stack.lastIndexOf(after));\n }\n }\n\n private paintFill(layers: ReturnType<typeof fillOps.resolve>) {\n this.paintText(layers, null);\n if (!layers.length) return;\n if (this.fillNative(layers)) return;\n const path = this.surface(\"fill\");\n const geoms: Geom[] = path ? [{ path }] : [];\n for (const s of this.shapes) if (s.members) geoms.push({ members: s.members });\n if (!geoms.length) return;\n const bounds = this.bounds(path);\n const all = this.shadows;\n this.shadows = [];\n for (const g of geoms) this.fillGeom(g, bounds, layers, all);\n }\n\n /**\n * One rect or ellipse painted solid, with no shadow to cast, drawn as the\n * renderer's own shape. Gradients and images stay paths: their paint space\n * is the path's.\n */\n private fillNative(layers: ReturnType<typeof fillOps.resolve>): boolean {\n const shape = this.shapes.length === 1 ? this.shapes[0] : null;\n const box = shape?.native;\n if (!shape || !box || this.inVectorMask || this.shadows.length || !layers.every(isSolid)) return false;\n for (const f of layers) {\n const paint = fillPaint(f, shape.bounds!, this.missing, this.assets);\n if (paint) this.native(this.cur, box, { fill: paint, opacity: this.worldAlpha * ((f as any).opacity ?? 1), blend: this.blendOf(f) });\n }\n return true;\n }\n\n /**\n * An undashed solid stroke round one rect, or round a circle (an ellipse's\n * offset outline is no ellipse), drawn as the renderer's own shape. Biased by\n * `align`, the band is a centred stroke round the shape offset by\n * align·weight/2, which stays exact while no rounded corner shrinks away. The\n * renderer keeps a square corner sharp, which is a miter join.\n */\n private strokeNative(st: ReturnType<typeof strokeOps.resolve>[number], weight: number, intWidth: number, dev: Xform): boolean {\n const shape = this.shapes.length === 1 ? this.shapes[0] : null;\n const native = shape?.native;\n if (!shape || !native || weight <= 0 || (st.dash?.length ?? 0) > 0 || !st.fill.every(isSolid)) return false;\n if (native.kind === \"ellipse\" && Math.abs(native.w - native.h) > 1e-3) return false;\n if (native.kind === \"rect\" && native.radii.some((r) => r === 0) && (st.join !== \"miter\" || !(st.miterLimit >= Math.SQRT2))) return false;\n const a = Math.max(-1, Math.min(1, st.align ?? 0));\n const box = offsetBox(native, (a * weight) / 2);\n if (!box) return false;\n const b = shape.bounds!;\n // As the path's points hold the box: in 32-bit floats.\n const snapM = this.snapBounds([Math.fround(b[0]), Math.fround(b[1]), Math.fround(b[2]), Math.fround(b[3])], intWidth, dev);\n const parent = snapM ? this.doc.group(this.cur, { transform: snapM }) : this.cur;\n for (const f of st.fill) {\n const paint = fillPaint(f, b, this.missing, this.assets);\n if (!paint) continue;\n const stroke = { paint, width: weight, join: st.join as never, cap: st.cap as never, miter: st.miterLimit };\n // As the path route: an aligned band keeps the normal blend.\n this.native(parent, box, { opacity: this.worldAlpha * ((f as any).opacity ?? 1), stroke, ...(a === 0 && { blend: this.blendOf(f) }) });\n }\n return true;\n }\n\n private native(parent: Node, box: NativeShape, props: LeafProps): Node {\n const at = { ...props, transform: [1, 0, 0, 1, box.x, box.y] as Mat, w: box.w, h: box.h, radii: box.radii };\n return box.kind === \"rect\" ? this.doc.rect(parent, at) : this.doc.ellipse(parent, at);\n }\n\n private fillGeom(geom: Geom, bounds: Bounds, layers: ReturnType<typeof fillOps.resolve>, all: ShadowResolved[]) {\n if (this.inVectorMask) {\n this.leaf(this.cur, geom, { fill: BLACK });\n return;\n }\n // Drop shadows with one solid fill ride the leaf (the renderer's\n // shadow paths); others are an offset, blurred copy painted with the\n // shadow's own fill, under the fill.\n const solid: Shadow[] = [];\n for (const sh of all) {\n if (sh.inner) continue;\n const one = sh.fill.length === 1 && (sh.fill[0] as any).type === \"solid\";\n if (one) {\n const s2 = shadowOf(sh, this.missing);\n if (s2) solid.push(s2);\n continue;\n }\n const dx = sh.offset?.x ?? 0, dy = -(sh.offset?.y ?? 0);\n const g = this.doc.group(this.cur, { transform: [1, 0, 0, 1, dx, dy], filter: sh.blur > 0 ? { kind: \"blur\", sigma: sh.blur / 2 } : undefined });\n const cast = this.spreadGeom(geom, sh.spread ?? 0, false)!;\n for (const f of sh.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (paint) this.leaf(g, cast, { fill: paint, opacity: this.worldAlpha * ((f as any).opacity ?? 1) });\n }\n }\n layers.forEach((f, i) => {\n const space = this.spaceBounds(f, bounds);\n const paint = fillPaint(f, space, this.missing, this.assets);\n if (!paint) return;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n const shadows = i === 0 ? solid : [];\n const echo = (f as any).type === \"video\" ? (f as any).preset?.adjustments?.find((a: any) => a.type === \"echo\") : undefined;\n if (echo && echo.echoes > 0 && echo.delay > 0) {\n this.echoStack(geom, f, space, bounds, paint, opacity, shadows, echo);\n return;\n }\n const intensity = (f as any).preset?.intensity ?? 1;\n if (intensity > 0 && intensity < 1 && this.pixelAdjustments(f).length) {\n // applyMediaFilters' mix and fade: a lerp of the graded and the\n // ungraded fill where the content is opaque. Here the ungraded\n // one goes over the graded at 1 - intensity, since the renderer\n // folds a leaf's opacity into what its effects read.\n const g = this.doc.group(this.cur, { opacity, blend: this.blendOf(f) });\n this.mediaPreset(this.leaf(g, geom, { fill: paint, shadows }), f, bounds);\n this.leaf(g, geom, { fill: paint, opacity: 1 - intensity });\n return;\n }\n this.mediaPreset(this.leaf(this.cur, geom, { fill: paint, opacity, shadows, blend: this.blendOf(f) }), f, bounds);\n });\n // applyInnerShadows: a padded rect minus the offset contour, filled with\n // the shadow's fill, blurred, clipped to the shape — after the fill.\n for (const sh of all) {\n if (!sh.inner) continue;\n // An inset shadow's spread shrinks the contour it is cast from; one\n // shrunk to nothing leaves no hole, so the shadow fills the shape.\n const hole = this.spreadGeom(geom, -(sh.spread ?? 0), true);\n const dx = sh.offset?.x ?? 0, dy = -(sh.offset?.y ?? 0);\n const [x0, y0, x1, y1] = this.geomBounds(geom);\n const pad = Math.abs(dx) + Math.abs(dy) + sh.blur * 2 + 2;\n const clip = this.clipTo(this.cur, geom);\n for (const f of sh.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (!paint) continue;\n const blurred = this.doc.group(clip, { opacity: this.worldAlpha * ((f as any).opacity ?? 1), filter: sh.blur > 0 ? { kind: \"blur\", sigma: sh.blur / 2 } : undefined });\n const region = this.doc.group(blurred, hole ? { mask: \"invertAlpha\" } : {});\n if (hole) this.leaf(region, hole, { transform: [1, 0, 0, 1, dx, dy], fill: BLACK });\n this.doc.rect(region, { transform: [1, 0, 0, 1, x0 - pad, y0 - pad], w: x1 - x0 + 2 * pad, h: y1 - y0 + 2 * pad, fill: paint });\n }\n }\n }\n\n /** _richText: spans laid out as one paragraph about the origin (no x/y,\n * wrapped at a positive width) and painted eagerly with each span's own\n * fill — runs carry their paints — and strokes. */\n private richText(state: any) {\n const f = withRichTextDescriptor(state);\n const spans = f.spans as any[];\n if (!spans.length) return;\n const local: [number, number, number, number] = [-f.width / 2, -f.height / 2, f.width / 2, f.height / 2];\n const clear: Paint = { kind: \"solid\", color: [0, 0, 0, 0] };\n const layerPaint = (layers: any[]): Paint => (layers[0] ? fillPaint(layers[0], local, this.missing, this.assets) : null) ?? clear;\n const runs: TextRunSpec[] = spans.map((sp) => ({\n text: sp.text, family: sp.fontFamily, size: sp.fontSize, weight: sp.fontWeight,\n italic: sp.fontStyle === \"italic\" || sp.fontStyle === \"oblique\", letterSpacing: sp.letterSpacing,\n }));\n const align = ({ start: \"left\", end: \"right\" } as Record<string, TextSpec[\"align\"]>)[f.textAlign] ?? (f.textAlign as TextSpec[\"align\"]);\n const spec: TextSpec = { runs, align, wrap: f.width > 0, width: f.width, lineHeight: f.lineHeight };\n // One text node per fill layer, each span's k-th layer on its runs (clear\n // where a span has fewer), then one per distinct stroke. Painting run by\n // run would differ only where runs overlap.\n const fills = Math.max(1, ...spans.map((sp) => sp.fill.length));\n for (let k = 0; k < fills; k++) {\n const layerRuns = runs.map((r, j) => ({ ...r, paint: layerPaint(spans[j].fill.slice(k, k + 1)) }));\n this.doc.textNode(this.cur, { text: { ...spec, runs: layerRuns }, fill: clear, opacity: this.worldAlpha });\n }\n const strokes = new Map<string, { k: number; st: any; paints: Paint[] }>();\n spans.forEach((sp, j) => sp.stroke.forEach((st: any, k: number) => {\n const key = `${k}|${st.weight}|${st.join}|${st.cap}|${st.miterLimit}`;\n let s = strokes.get(key);\n if (!s) strokes.set(key, (s = { k, st, paints: spans.map(() => clear) }));\n s.paints[j] = layerPaint(st.fill);\n }));\n for (const { st, paints } of [...strokes.values()].sort((a, b) => a.k - b.k)) {\n const strokeRuns = runs.map((r, j) => ({ ...r, paint: paints[j] }));\n this.doc.textNode(this.cur, { text: { ...spec, runs: strokeRuns }, opacity: this.worldAlpha, stroke: { paint: clear, width: st.weight, join: st.join, cap: st.cap, miter: st.miterLimit } });\n }\n }\n\n /** Text shapes of the surface as text nodes, filled or stroked. */\n private paintText(layers: ReturnType<typeof fillOps.resolve>, stroke: ReturnType<typeof strokeOps.resolve>[number] | null) {\n for (const shape of this.shapes) {\n const t = shape.text;\n if (!t) continue;\n const b = shape.bounds!;\n // The text block is centred on its node's origin.\n const local: [number, number, number, number] = [b[0] - t.transform[4], b[1] - t.transform[5], b[2] - t.transform[4], b[3] - t.transform[5]];\n for (const f of layers) {\n const paint = fillPaint(f, local, this.missing, this.assets);\n if (!paint) continue;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n if (stroke) {\n const st = (width: number) => ({ paint, width, join: stroke.join as never, cap: stroke.cap as never, miter: stroke.miterLimit, dash: stroke.dash, dashPhase: stroke.dashOffset });\n const al = Math.max(-1, Math.min(1, stroke.align ?? 0));\n if (al === 0) {\n this.doc.textNode(this.cur, { transform: t.transform, text: t.spec, opacity, stroke: st(stroke.weight) });\n continue;\n }\n // drawTextUnionStroke: glyphs have no single path, so the band\n // is one stroke under a mask made of the filled glyphs and a\n // ring stroked along them.\n const glyphs = (parent: Node) => this.doc.textNode(parent, { transform: t.transform, text: t.spec, fill: BLACK });\n const ring = (parent: Node, width: number) =>\n this.doc.textNode(parent, { transform: t.transform, text: t.spec, stroke: { paint: BLACK, width, join: stroke.join as never, miter: stroke.miterLimit } });\n // Erase what lies inside (a > 0) or outside (a < 0) the\n // glyphs, less a ring `keep` wide either side of the outline.\n const masked = (keep: number) => {\n if (al > 0) {\n const g = this.doc.group(this.cur, { mask: \"invertAlpha\" });\n const m = this.doc.group(g, { mask: \"invertAlpha\" });\n ring(m, keep);\n glyphs(m);\n return g;\n }\n const g = this.doc.group(this.cur, { mask: \"alpha\" });\n const m = this.doc.group(g);\n glyphs(m);\n ring(m, keep);\n return g;\n };\n if (Math.abs(al) >= 1) {\n // A band on one side only: twice as wide, its mask moved one\n // device px past the outline (applyTextAlignMask's seam\n // bridge, an erode or dilate, which a ring along every\n // glyph's outline is not), so band and fill overlap.\n const g = this.doc.group(this.cur, { mask: al > 0 ? \"invertAlphaEroded\" : \"alphaDilated\" });\n glyphs(g);\n this.doc.textNode(g, { transform: t.transform, text: t.spec, opacity, stroke: st(2 * stroke.weight) });\n } else {\n // drawTextPartiallyAlignedStroke: the band reaches (1 + a)·w/2\n // outside and (1 − a)·w/2 inside; stroked as wide as the\n // longer reach, the surplus erased past the shorter one.\n const out = ((1 + al) * stroke.weight) / 2, inside = ((1 - al) * stroke.weight) / 2;\n this.doc.textNode(masked(2 * (al > 0 ? inside : out)), { transform: t.transform, text: t.spec, opacity, stroke: st(2 * Math.max(out, inside)) });\n }\n } else {\n this.doc.textNode(this.cur, { transform: t.transform, text: t.spec, opacity, fill: paint });\n }\n }\n }\n }\n\n /** A Tex.surface source recorded into a detached subtree and rasterized\n * at width×height × its pixel ratio, origin at the\n * centre. The outer draw's surface state is set aside meanwhile. */\n private surfaceOf(t: any): ImageAsset | null {\n const ratio = Math.max(1, Math.min(t.maxPixelRatio ?? 1, 4)); // MAX_RASTER_PIXEL_RATIO\n const w = t.width ?? 512, h = t.height ?? 512;\n const pw = Math.max(1, Math.ceil(w * ratio)), ph = Math.max(1, Math.ceil(h * ratio));\n const root = this.doc.detached({ transform: [ratio, 0, 0, ratio, (w * ratio) / 2, (h * ratio) / 2] });\n const saved = { stack: this.stack, scopes: this.scopes, alpha: this.worldAlpha, shapes: this.shapes, painted: this.painted, shadows: this.shadows, masks: this.masks, clips: this.clips, cameras: this.cameras };\n this.stack = [root]; this.scopes = []; this.worldAlpha = 1; this.masks = []; this.clips = []; this.cameras = [];\n this.resetSurface();\n try {\n const src = resolveSurfaceSource(t.source) as any;\n if (src.kind === \"graphics\") this.draw(src.graphics);\n else {\n src.node.layout({ x: 0, y: 0, width: w, height: h }, this);\n src.node.render(this);\n }\n } catch (e) {\n this.missing.add(`surface:error`);\n console.warn(e);\n } finally {\n Object.assign(this, { stack: saved.stack, scopes: saved.scopes, worldAlpha: saved.alpha, shapes: saved.shapes, painted: saved.painted, shadows: saved.shadows, masks: saved.masks, clips: saved.clips, cameras: saved.cameras });\n }\n const a = this.doc.addSurface(root, pw, ph);\n a.version = ++sceneVersion;\n return a;\n }\n\n /** applyMediaFilters: a media fill's pixel adjustments run over the fill in\n * the shape's box and are clipped back to the shape — here, effects on\n * that fill's leaf with clip-to-input. */\n private mediaPreset(node: Node, f: unknown, bounds: [number, number, number, number]) {\n const pixel = this.pixelAdjustments(f);\n if (!pixel.length || ((f as any).preset.intensity ?? 1) <= 0) return;\n node.effects = pixel.map((a: any) => ({ ...a, clip: true }));\n node.effectBox = [bounds[0], bounds[1], bounds[2] - bounds[0], bounds[3] - bounds[1]];\n node.effectTime = this.elapsed();\n }\n\n /** A media fill's pixel adjustments: the video-only ones are not (posterizeTime\n * is in resolveVideoTimestamp, echo is echoStack). */\n private pixelAdjustments(f: unknown): object[] {\n const any = f as any;\n if ((any.type !== \"image\" && any.type !== \"video\") || !any.preset) return [];\n return (any.preset.adjustments ?? []).filter((a: any) => a.type !== \"echo\" && a.type !== \"posterizeTime\");\n }\n\n /** VideoFillRenderer.drawEchoStack: the past taps oldest first, each at\n * decay^n, then the current frame with its grade, all with the echo's blend. */\n private echoStack(geom: Geom, f: any, space: Bounds, bounds: Bounds, paint: Paint, opacity: number, shadows: Shadow[], echo: any) {\n const blend = docBlend(echo.blend ?? \"screen\") ?? \"screen\";\n const decay = echo.decay ?? 0.5;\n const taps = Math.min(Math.max(0, Math.floor(echo.echoes)), 32); // MAX_ECHOES\n const time = this.videoTime(f);\n if (shadows.length) this.leaf(this.cur, geom, { fill: { kind: \"solid\", color: [0, 0, 0, 0] }, opacity, shadows });\n for (let n = taps; n >= 1 && time !== null; n--) {\n const ts = time - n * echo.delay;\n if (ts < 0) continue;\n const tap = fillPaint(f, space, this.missing, { ...this.assets, video: (fill) => this.assets.video(fill, ts) });\n if (tap) this.leaf(this.cur, geom, { fill: tap, opacity: opacity * Math.pow(decay, n), blend });\n }\n this.mediaPreset(this.leaf(this.cur, geom, { fill: paint, opacity, blend }), f, bounds);\n }\n\n /** The source time a video fill shows now, or null before its clip loads. */\n private videoTime(fill: any): number | null {\n const v = this.storage?.videos.get(assetKey(fill.src));\n return v ? resolveVideoTimestamp(fill, this.currentRenderState()?.elapsed ?? 0, v.duration) : null;\n }\n\n /** The current node's elapsed time (s), the `time` its effects get. */\n private elapsed(): number {\n return this.currentRenderState()?.elapsed ?? 0;\n }\n\n /** FillHandler.boundsForSpace: local = the shape's bounds; parent = the\n * parent's layout rect; global = the viewport mapped back to local space. */\n private spaceBounds(f: unknown, local: [number, number, number, number]): [number, number, number, number] {\n const space = (f as { space?: string }).space ?? \"local\";\n if (space === \"parent\") {\n const p = this.currentSpaceRects().parent;\n return p ? [p.left, p.top, p.right, p.bottom] : local;\n }\n if (space === \"global\") {\n const m = this.device();\n const det = m[0] * m[3] - m[1] * m[2];\n if (!det) return local;\n const inv = (x: number, y: number): [number, number] => {\n const dx = x - m[4], dy = y - m[5];\n return [(m[3] * dx - m[2] * dy) / det, (-m[1] * dx + m[0] * dy) / det];\n };\n const W = this.width * this.pixelRatio, H = this.height * this.pixelRatio;\n const a = inv(0, 0), b = inv(W, H);\n return [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[0], b[0]), Math.max(a[1], b[1])];\n }\n return local;\n }\n\n /** A fill layer's blend mode as a leaf's (the leaf blends as a unit). */\n private blendOf(f: unknown): BlendMode {\n const b = (f as { blend?: string }).blend;\n if (!b || b === \"normal\") return \"normal\";\n const mode = docBlend(b);\n if (!mode) this.missing.add(`fill:blend:${b}`);\n return mode ?? \"normal\";\n }\n\n /** Device matrix of the current group: pixel ratio × the group chain. */\n private device(): Xform {\n let m: Xform = [this.pixelRatio, 0, 0, this.pixelRatio, 0, 0];\n for (const g of this.stack) m = mulX(m, g.transform);\n return m;\n }\n\n /** StrokeHandler.snapPath: an axis-aligned thin stroke's shape scaled and\n * moved so its device bounds sit on pixel edges (centres for odd widths). */\n private snap(path: PathData, intWidth: number, m: Xform): Mat | null {\n return this.snapBounds(pathBounds(path), intWidth, m);\n }\n\n private snapBounds([bx0, by0, bx1, by1]: Bounds, intWidth: number, m: Xform): Mat | null {\n if (intWidth <= 0 || Math.abs(m[1]) > 1e-6 || Math.abs(m[2]) > 1e-6 || m[0] === 0 || m[3] === 0) return null;\n if (bx1 - bx0 <= 0 || by1 - by0 <= 0) return null;\n const sx = m[0], sy = m[3], tx = m[4], ty = m[5];\n const l = tx + sx * bx0, t = ty + sy * by0, r = tx + sx * bx1, b = ty + sy * by1;\n const off = intWidth % 2 === 0 ? 0 : 0.5;\n const tl = Math.round(l - off) + off, tt = Math.round(t - off) + off;\n const tr = Math.round(r - off) + off, tb = Math.round(b - off) + off;\n if (tr - tl < 1 || tb - tt < 1) return null;\n const kx = (tr - tl) / (r - l), ky = (tb - tt) / (b - t);\n if (Math.abs(kx - 1) < 1e-4 && Math.abs(ky - 1) < 1e-4 && Math.abs(tl - l) < 1e-4 && Math.abs(tt - t) < 1e-4) return null;\n return [kx, 0, 0, ky, (tl - tx) / sx - kx * bx0, (tt - ty) / sy - ky * by0];\n }\n\n private stroke(strokes: ReturnType<typeof strokeOps.resolve>) {\n this.painted = true;\n if (this.booleans.length) return;\n this.deferring(\"stroke\", () => this.paintStroke(strokes));\n }\n\n private paintStroke(strokes: ReturnType<typeof strokeOps.resolve>) {\n for (const st of strokes) this.paintText(st.fill, st);\n let fillAll: PathData | null | undefined;\n const surfaceFill = () => (fillAll === undefined ? (fillAll = this.surface(\"fill\")) : fillAll);\n const dev = this.device();\n const scale = Math.sqrt(Math.abs(dev[0] * dev[3] - dev[1] * dev[2]));\n const rotated = isProjective(dev) || Math.abs(dev[1]) > 1e-6 || Math.abs(dev[2]) > 1e-6;\n for (const st of strokes) {\n // resolveStrokeWidth: under 2.5 device px (axis-aligned), a whole\n // number of device px.\n let weight = st.weight, intWidth = -1;\n if (!rotated && weight > 0 && scale > 0 && weight * scale < 2.5) {\n intWidth = Math.max(1, Math.round(weight * scale));\n weight = intWidth / scale;\n }\n if (this.strokeNative(st, weight, intWidth, dev)) continue;\n for (const shape of this.strokeShapes()) {\n let geom: Geom, interior: Geom | null;\n let plan: StrokePlan = { cap: st.cap, ends: [], dash: st.dash, dashPhase: st.dashOffset };\n if (shape.members) {\n geom = interior = { members: shape.members };\n } else {\n if (!shape.stroke || !shape.stroke.verbs.length) continue;\n const p = strokePlan(st, shape.stroke, weight, intWidth > 0);\n if (!p) continue;\n plan = p;\n geom = { path: p.source ?? shape.stroke };\n interior = shape.alignInterior ? { members: shape.alignInterior } : shape.interior && isClosed(shape.interior) ? { path: shape.interior } : null;\n }\n const bounds = this.bounds(surfaceFill() ?? (\"path\" in geom ? geom.path : null));\n // alignedStrokeBand: outside (1 + a)·w, inside (1 − a)·w, each\n // clipped to its side. A marked stroke is centred: half a head means nothing.\n const a = Math.max(-1, Math.min(1, st.align ?? 0));\n const aligned = a !== 0 && interior !== null && !plan.ends.some((e) => isStrokeMarker(e.cap));\n const halves: [number, \"in\" | \"out\" | \"both\"][] = aligned\n ? [[(1 + a) * weight, \"out\"], [(1 - a) * weight, \"in\"]]\n : [[weight, \"both\"]];\n const snapM = shape.fill ? this.snap(shape.fill, intWidth, dev) : null;\n const parent = snapM ? this.doc.group(this.cur, { transform: snapM }) : this.cur;\n for (const f of st.fill) {\n const paint = fillPaint(f, this.spaceBounds(f, bounds), this.missing, this.assets);\n if (!paint) continue;\n const opacity = this.worldAlpha * ((f as any).opacity ?? 1);\n for (const [width, side] of halves) {\n if (width <= 0) continue;\n const stroke = { paint, width, join: st.join as never, cap: plan.cap as never, miter: st.miterLimit, dash: plan.dash, dashPhase: plan.dashPhase };\n if (side === \"both\") this.strokeLeaf(parent, geom, { opacity, stroke, blend: this.blendOf(f) }, plan.ends);\n else this.strokeLeaf(side === \"in\" ? this.clipTo(parent, interior!) : this.clipOutside(parent, interior!), geom, { opacity, stroke }, plan.ends);\n }\n }\n }\n }\n }\n\n /** strokeShapesForSpace: two or more shapes stroke as one figure, so\n * overlaps show no seams: their union outline when every one is closed and\n * whole, else their contours together (a union would close open ones),\n * aligned against the union. Text keeps each shape apart. */\n private strokeShapes(): ShapeOut[] {\n if (this.shapes.length < 2 || this.shapes.some((s) => s.text)) return this.shapes;\n // A boolean result first: the union folds in after its own ops.\n const withPaths = this.shapes.filter((s) => s.members || (s.fill && s.fill.verbs.length)).sort((a, b) => (b.members ? 1 : 0) - (a.members ? 1 : 0));\n if (withPaths.length < 2) return this.shapes;\n const members: Member[] = [];\n for (const s of withPaths) {\n if (s.members) s.members.forEach((m, j) => members.push({ ...m, op: j === 0 ? \"union\" : m.op }));\n else members.push({ kind: \"path\", path: s.fill!, op: \"union\" });\n }\n if (withPaths.filter((s) => s.members).length > 1) this.missing.add(\"stroke:union-of-booleans\");\n const bounds = withPaths.every((s) => s.bounds) ? withPaths.map((s) => s.bounds!).reduce((a, b) => [Math.min(a[0], b[0]), Math.min(a[1], b[1]), Math.max(a[2], b[2]), Math.max(a[3], b[3])]) : null;\n const open = withPaths.some((s) => !s.members && (s.stroke !== s.fill || s.trimmed || !isClosed(s.fill!)));\n if (!open) return [{ fill: null, stroke: null, interior: null, bounds, members }];\n // A boolean result has no contour of its own to add.\n if (withPaths.some((s) => s.members)) return this.shapes;\n return [{ fill: merge(withPaths.map((s) => s.fill!)), stroke: merge(withPaths.map((s) => s.stroke ?? s.fill!)), interior: null, alignInterior: members, bounds }];\n }\n\n /** A stroke leaf with its plan's ends re-capped (StrokeHandler.strokeBand):\n * what the stroker put past each end masked away, then the end's own cap\n * or marker filled with the stroke's paint, all in one group so the\n * opacity and blend apply once. */\n private strokeLeaf(parent: Node, geom: Geom, props: LeafProps & { stroke: NonNullable<LeafProps[\"stroke\"]> }, ends: PathEnd[]): Node {\n if (!ends.length) return this.leaf(parent, geom, props);\n const half = props.stroke.width / 2;\n // A little past the stroker's own cap, which reaches `half` beyond the end.\n const reach = half * 1.01 + 0.5;\n const capped = props.stroke.cap !== \"butt\";\n const cuts: PathData[] = [], adds: PathData[] = [];\n for (const e of ends) {\n if (isStrokeMarker(e.cap)) {\n // addMarker: the band cut back to where the marker takes over.\n const inset = markerInset(e.cap, e.size, e.weight);\n if (inset > 0 || capped) cuts.push(endBox({ ...e, x: e.x - e.dx * inset, y: e.y - e.dy * inset }, inset + reach, reach));\n adds.push(markerPath(e, e.cap));\n continue;\n }\n if (capped) cuts.push(endBox(e, reach, reach));\n if (e.reached && e.cap !== \"butt\") adds.push(e.cap === \"round\" ? endDisc(e, half) : endBox(e, half, half));\n }\n const g = this.doc.group(parent, { opacity: props.opacity ?? 1, blend: props.blend ?? \"normal\" });\n const inner = { ...props, opacity: 1, blend: \"normal\" as const };\n if (cuts.length) {\n const m = this.doc.group(g, { mask: \"invertAlpha\" });\n this.doc.pathNode(m, { path: merge(cuts), fill: BLACK });\n this.leaf(m, geom, inner);\n } else this.leaf(g, geom, inner);\n if (adds.length) this.doc.pathNode(g, { path: merge(adds), fill: props.stroke.paint });\n return g;\n }\n\n // Boolean groups: the outlines drawn in scope (in the space at beginBoolean) and folds them left to right\n // with the op, as one compound node's members.\n private booleans: { op: BooleanOperation; base: Mat | null; members: Member[] }[] = [];\n\n beginBoolean(op: BooleanOperation): void {\n this.booleans.push({ op, base: invert(this.device()), members: [] });\n this.resetSurface();\n }\n\n endBoolean(): void {\n const b = this.booleans.pop();\n this.resetSurface();\n if (!b || !b.members.length) return;\n const outer = this.booleans[this.booleans.length - 1];\n if (!outer) {\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: membersBounds(b.members), members: b.members });\n return;\n }\n // Nested: the result joins the outer fold. Folding the inner members\n // straight in is exact when the outer op distributes over the inner one\n // (a − (b ∪ c) = a − b − c, a ∩ (b ∩ c) = a ∩ b ∩ c, …) or it comes first.\n // The space here is the inner scope's, so this maps its members out.\n const into = this.relative(outer.base);\n const op = BOOLEAN_OP[outer.op];\n const start = !outer.members.length;\n if (!start && !b.members.slice(1).every((m) => m.op === (op === \"cut\" ? \"union\" : op))) this.missing.add(\"boolean:nested\");\n b.members.forEach((m, k) => {\n const own = m.op ?? \"union\";\n const mop = start ? own : k === 0 || op === \"cut\" ? op : own;\n outer.members.push({ kind: \"path\", path: into ? transformPath(m.path!, into) : m.path!, op: mop });\n });\n }\n\n /** inv(base) · device: the current space in a boolean scope's space. */\n private relative(base: Mat | null): Mat | null {\n const m = this.device();\n if (!base || isProjective(m)) return null;\n return mulX(base, m) as Mat;\n }\n\n /** A shape drawn in a boolean scope: its outline as the next member. */\n private collect(shape: ShapeOut) {\n const b = this.booleans[this.booleans.length - 1];\n const path = shape.fill;\n if (!path || !path.verbs.length) return;\n const rel = this.relative(b.base);\n if (!rel) this.missing.add(\"boolean:projective\");\n b.members.push({ kind: \"path\", path: rel ? transformPath(path, rel) : path, op: b.members.length ? BOOLEAN_OP[b.op] : \"union\" });\n }\n\n /** ShapeHandler.cut: the shapes before the last one unioned, minus the last. */\n private cut() {\n const withPaths = this.shapes.filter((s) => s.members || (s.fill && s.fill.verbs.length));\n this.resetSurface();\n if (!withPaths.length) return;\n const members: Member[] = [];\n withPaths.forEach((s, k) => {\n const op: MemberOp = k > 0 && k === withPaths.length - 1 ? \"cut\" : \"union\";\n if (!s.members) {\n members.push({ kind: \"path\", path: s.fill!, op });\n return;\n }\n if (k > 0) this.missing.add(\"cut:compound\");\n s.members.forEach((m, j) => members.push({ ...m, op: j === 0 ? op : m.op }));\n });\n this.shapes.push({ fill: null, stroke: null, interior: null, bounds: membersBounds(members), members });\n }\n\n // Masks: the doc's group mask (its first child is the mask layer). Vector\n // masks clip to the mask's outline, so their paint is opaque here.\n private masks: { vector: boolean; open: boolean; apply: Set<string> | null; after: Node | null }[] = [];\n private get inVectorMask(): boolean {\n const m = this.masks[this.masks.length - 1];\n return !!m && m.open && m.vector;\n }\n\n beginMask(options?: MaskOptions): void {\n const mode = options?.mode ?? \"alpha\";\n const lum = mode === \"luminance\";\n const docMode = options?.inverted ? (lum ? \"invertLuminance\" : \"invertAlpha\") : (lum ? \"luminance\" : \"alpha\");\n const g = this.doc.group(this.cur, { mask: docMode as never });\n // The paints `apply` leaves out land after the masked group.\n const apply = options?.apply ? new Set<string>(Array.isArray(options.apply) ? options.apply : [options.apply]) : null;\n const after = apply ? this.doc.group(this.cur) : null;\n this.stack.push(g, this.doc.group(g));\n this.masks.push({ vector: mode === \"vector\", open: true, apply, after });\n this.resetSurface();\n }\n\n applyMask(): void {\n const m = this.masks[this.masks.length - 1];\n if (!m?.open) return;\n m.open = false;\n this.stack.pop();\n this.resetSurface();\n }\n\n endMask(): void {\n const m = this.masks.pop();\n if (!m) return;\n if (m.open) this.stack.pop();\n this.stack.pop();\n this.resetSurface();\n }\n private clips: { pushed: number; geom: Geom | null }[] = [];\n\n /** A Clip's outline: its shapes unioned, each cut subtracting the shape before it. */\n private clipGeom(clip: Clip): Geom | null {\n const members: Member[] = [];\n for (const op of clip.ops() as any[]) {\n if (op.kind === \"cut\") {\n if (members.length > 1) members[members.length - 1].op = \"cut\";\n continue;\n }\n const p = shapeOf(op)?.fill;\n if (p && p.verbs.length) members.push({ kind: \"path\", path: p, op: \"union\" });\n }\n if (!members.length) return null;\n return members.some((m) => m.op === \"cut\") ? { members } : { path: merge(members.map((m) => m.path!)) };\n }\n\n beginClip(clip: Clip): void {\n const geom = this.clipGeom(clip);\n if (!geom) {\n this.clips.push({ pushed: 0, geom: null });\n return;\n }\n const g = this.clipTo(this.cur, geom);\n // A compound clips as a mask: the content goes after the mask layer.\n if (\"members\" in geom) this.stack.push(g, this.doc.group(g));\n else this.stack.push(g);\n this.clips.push({ pushed: \"members\" in geom ? 2 : 1, geom });\n }\n\n endClip(): void {\n const n = this.clips.pop()?.pushed ?? 0;\n for (let i = 0; i < n; i++) this.stack.pop();\n }\n private cameras: number[] = [];\n\n /** beginCamera: clip to the viewport, then translate·rotate(−heading)·scale(zoom)·translate(−lookAt.x, +lookAt.y). */\n beginCamera(v: { x: number; y: number; width: number; height: number }, lookAt: Vector2, zoom: number, heading: number): void {\n const clipped = this.doc.group(this.cur, { clip: { x: v.x - v.width / 2, y: v.y - v.height / 2, w: v.width, h: v.height, r: 0 } });\n const r = (-heading * Math.PI) / 180, c = Math.cos(r) * zoom, sn = Math.sin(r) * zoom;\n const tx = -lookAt.x, ty = lookAt.y;\n const lens = this.doc.group(clipped, { transform: [c, sn, -sn, c, v.x + c * tx - sn * ty, v.y + sn * tx + c * ty] });\n this.stack.push(clipped, lens);\n this.cameras.push(2);\n }\n\n endCamera(): void {\n const n = this.cameras.pop() ?? 0;\n for (let i = 0; i < n; i++) this.stack.pop();\n }\n override beginEffects(effects: any[], target: \"foreground\" | \"backdrop\", width: number, height: number): void {\n // Foreground effects are already on the node's group (see transform).\n if (target !== \"backdrop\") return;\n for (const e of effects) if (e?.type === \"shader\") this.checkShader(\"effect\", e);\n // Backdrop: a paint-less silhouette carrying the effects; the renderer\n // re-renders what lies beneath it through that shape (Layer::backdrop).\n // With no clip of its own the layer is bounded by the clips around it,\n // the viewport at most.\n let silhouette = this.clips[this.clips.length - 1]?.geom;\n if (!silhouette) {\n const [x, y, w, h] = this.viewportBox();\n silhouette = { path: new PathBuilder().moveTo(x, y).lineTo(x + w, y).lineTo(x + w, y + h).lineTo(x, y + h).close().build() };\n }\n this.leaf(this.cur, silhouette, { effects, effectBox: [-width / 2, -height / 2, width, height], effectTime: this.elapsed() });\n }\n override endEffects(): void {}\n\n private checkShader(scope: \"fill\" | \"effect\", shader: unknown): void {\n const nodeId = this.currentNodeStack[this.currentNodeStack.length - 1];\n for (const issue of shaderParamIssues(scope, shader as Parameters<typeof shaderParamIssues>[1])) {\n this.shaderIssues.push(nodeId === undefined ? issue : { ...issue, nodeId });\n }\n }\n override rasterize(): null { this.missing.add(\"rasterize\"); return null; }\n}\n", "// core's two text questions (measureText, layoutTextBlock) answered by ms-text,\n// the same shaper the renderer draws with, on the main thread.\n\nimport { type FontStyle, type Size2D, type TextBlockLayout, type TextState, withTextDescriptor } from \"@motionscript/core\";\nimport { MsText } from \"../../pkg/ms_renderer.js\";\nimport type { WgpuStorageAdapter } from \"./storage\";\n\nconst SLANT: Record<string, number> = { normal: 0, italic: 1, oblique: 2 };\nconst ALIGN: Record<string, number> = { left: 0, right: 1, center: 2, justify: 3, start: 4, end: 5 };\nconst VALIGN: Record<string, number> = { top: 0, center: 1, bottom: 2 };\n\n/** One ms-text engine per storage adapter, fed the same fonts its renderers get. */\nconst shapers = new WeakMap<WgpuStorageAdapter, MsText>();\n\nexport function shaperFor(storage: WgpuStorageAdapter): MsText {\n let ms = shapers.get(storage);\n if (!ms) {\n const shaper = (ms = new MsText());\n for (const f of storage.fonts) shaper.register_font(f.bytes, f.family);\n storage.onFont((f) => shaper.register_font(f.bytes, f.family));\n shapers.set(storage, shaper);\n }\n return ms;\n}\n\nexport function measureText(ms: MsText, text: string, fontSize: number, fontFamily: string, fontWeight = 400, letterSpacing = 0, fontStyle?: FontStyle): Size2D {\n const [width, height] = ms.measure_text(text, fontSize, fontFamily, fontWeight, letterSpacing, SLANT[fontStyle ?? \"normal\"] ?? 0);\n return { width, height };\n}\n\ntype Any = Record<string, any>;\n\n/** layoutTextBlock: null for text on a path and for segments with a transform. */\nexport function layoutTextBlock(ms: MsText, state: Partial<TextState>): TextBlockLayout | null {\n const f = withTextDescriptor(state as never) as Any;\n if (f.path != null) return null;\n const autofit = f.fontSize === \"autofit\";\n const base = { text: String(f.text ?? \"\"), fontFamily: f.fontFamily, fontSize: autofit ? 100 : f.fontSize, fontWeight: f.fontWeight, fontStyle: f.fontStyle, letterSpacing: f.letterSpacing };\n const segments: Any[] = Array.isArray(f.segments) && f.segments.length ? f.segments : [base];\n if (segments.some((s) => (s.x ?? 0) !== 0 || (s.y ?? 0) !== 0 || (s.rotation ?? 0) !== 0 || (s.scale ?? 1) !== 1)) return null;\n const families: string[] = [];\n const runs: number[] = [];\n let text = \"\";\n for (const s of segments) {\n const family = s.fontFamily ?? base.fontFamily ?? \"\";\n let fi = families.indexOf(family);\n if (fi < 0) fi = families.push(family) - 1;\n const t = String(s.text ?? \"\");\n text += t;\n runs.push(t.length, s.fontSize ?? base.fontSize, s.fontWeight ?? base.fontWeight ?? 400, SLANT[s.fontStyle ?? base.fontStyle ?? \"normal\"] ?? 0, s.letterSpacing ?? base.letterSpacing ?? 0, fi);\n }\n const width = f.width ?? 0, height = f.height ?? 0;\n const flat = ms.text_block(\n text, new Float32Array(runs), families.join(\"\\n\"),\n autofit ? NaN : base.fontSize, f.minFontSize ?? 0, f.lineHeight ?? 0,\n ALIGN[f.textAlign ?? \"center\"] ?? 2, VALIGN[f.verticalAlign ?? \"center\"] ?? 1,\n !!f.wrap && width > 0, width, height,\n );\n if (!flat.length) return null;\n const lines: TextBlockLayout[\"lines\"] = [];\n let k = 3;\n for (let i = 0; i < flat[2]; i++) {\n const [start, end, top, bottom, n] = flat.subarray(k, k + 5);\n lines.push({ start, end, top, bottom, carets: Array.from(flat.subarray(k + 5, k + 5 + n)) });\n k += 5 + n;\n }\n return { lines, width: flat[0], height: flat[1] };\n}\n", "// Page-wide GPU faults. Every surface shares one device (gpu.rs), so a lost\n// device, a WebGPU error or a panic is news for all of them: each live\n// surface queues the issue for its own takeRenderIssues(), and a lost device\n// is replaced and every surface remounted on the new one.\n\nimport type { RenderIssue } from \"@motionscript/core\";\nimport { set_panic_listener } from \"../../pkg/ms_renderer.js\";\nimport { forgetDevice, prewarmDevice } from \"../backend-wgpu\";\n\n/** What a host hears through {@link onWgpuEvent}. */\nexport type WgpuEvent =\n | { type: \"device-lost\"; reason: string; message: string }\n | { type: \"device-restored\" }\n | { type: \"gpu-error\"; error: \"validation\" | \"out-of-memory\" | \"internal\"; message: string }\n | { type: \"crashed\"; message: string };\n\n/** A live surface, as faults reach it. */\nexport interface FaultTarget {\n queueIssue(issue: RenderIssue): void;\n /** Drop the dead backend and mount the canvas again on a new device. */\n remount(): void;\n /** The renderer can no longer draw: draw nothing more. */\n halt(): void;\n}\n\n/** Recoveries allowed in {@link RECOVERY_WINDOW_MS} before a device that keeps dying is given up on. */\nconst MAX_RECOVERIES = 3;\nconst RECOVERY_WINDOW_MS = 60_000;\n/** WebGPU errors reported per page before the rest are only counted (a broken frame repeats every frame). */\nconst MAX_GPU_ERRORS = 32;\n\nconst listeners = new Set<(event: WgpuEvent) => void>();\nconst targets = new Set<FaultTarget>();\nconst watched = new WeakSet<object>();\nconst recoveries: number[] = [];\nlet gpuErrors = 0;\nlet crashed: string | null = null;\nlet panicHooked = false;\n\n/** Calls `listener` on every GPU fault on the page; returns the unsubscribe. */\nexport function onWgpuEvent(listener: (event: WgpuEvent) => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\n/** The panic message once the renderer's WASM has panicked; it draws nothing after. */\nexport function crashMessage(): string | null {\n return crashed;\n}\n\nexport function addFaultTarget(target: FaultTarget): () => void {\n hookPanics();\n targets.add(target);\n if (crashed !== null) {\n target.queueIssue(crashIssue(crashed));\n target.halt();\n }\n return () => targets.delete(target);\n}\n\n/** Watches a device the renderer drew with, once: its errors and its loss. */\nexport function watchDevice(device: unknown): void {\n const d = device as GPUDeviceLike | null;\n if (!d || watched.has(d)) return;\n watched.add(d);\n d.addEventListener?.(\"uncapturederror\", (e: Event) => reportGpuError((e as Event & { error: { message: string; constructor: { name: string } } }).error));\n d.lost.then((info) => deviceLost(info.reason ?? \"unknown\", info.message ?? \"\"));\n}\n\ninterface GPUDeviceLike {\n lost: Promise<{ reason?: string; message?: string }>;\n addEventListener?(type: string, listener: (e: Event) => void): void;\n}\n\nfunction emit(event: WgpuEvent): void {\n for (const l of [...listeners]) {\n try {\n l(event);\n } catch (e) {\n console.error(\"[wgpu] a fault listener threw:\", e);\n }\n }\n}\n\nfunction broadcast(issue: RenderIssue): void {\n for (const t of targets) t.queueIssue(issue);\n}\n\nfunction reportGpuError(error: { message: string; constructor: { name: string } }): void {\n if (++gpuErrors > MAX_GPU_ERRORS) return;\n const name = error?.constructor?.name ?? \"\";\n const kind = name === \"GPUOutOfMemoryError\" ? \"out-of-memory\" : name === \"GPUInternalError\" ? \"internal\" : \"validation\";\n const message = `WebGPU ${kind} error: ${error?.message ?? String(error)}`;\n broadcast({ kind: \"gpu\", feature: `gpu:${kind}`, message });\n emit({ type: \"gpu-error\", error: kind, message });\n}\n\nfunction deviceLost(reason: string, detail: string): void {\n if (crashed !== null) return;\n forgetDevice();\n const now = performance.now();\n while (recoveries.length && now - recoveries[0] > RECOVERY_WINDOW_MS) recoveries.shift();\n const message = `The GPU device was lost (${reason}${detail ? `: ${detail}` : \"\"}); the renderer is drawing on a new one.`;\n emit({ type: \"device-lost\", reason, message });\n if (recoveries.length >= MAX_RECOVERIES) {\n crash(`The GPU device was lost ${MAX_RECOVERIES + 1} times within a minute; the renderer stopped asking for a new one.`);\n return;\n }\n recoveries.push(now);\n broadcast({ kind: \"device-lost\", message });\n for (const t of [...targets]) t.remount();\n prewarmDevice().then(() => emit({ type: \"device-restored\" }), (e) => crash(`No GPU device after a loss: ${String((e as Error)?.message ?? e)}`));\n}\n\nfunction crashIssue(message: string): RenderIssue {\n return { kind: \"crashed\", message };\n}\n\n/**\n * Marks the renderer dead at once, so nothing calls into it again, and tells\n * the surfaces and the host after: a panic arrives from inside a WASM call,\n * which must not be re-entered.\n */\nfunction crash(message: string): void {\n if (crashed !== null) return;\n crashed = message;\n queueMicrotask(() => {\n broadcast(crashIssue(message));\n for (const t of [...targets]) t.halt();\n emit({ type: \"crashed\", message });\n });\n}\n\nfunction hookPanics(): void {\n if (panicHooked) return;\n panicHooked = true;\n set_panic_listener((message: string) => crash(`The renderer panicked and draws nothing more on this page (reload to recover): ${message}`));\n}\n", "// A session's render surface on the wgpu renderer: the adapter's render\n// context mounted on a <canvas>, with the preview knobs a host sets (pixel\n// ratio, view, frame, clipToFrame, frameBackground).\n\nimport { renderIssueKey, type RenderIssue, type Size2D, type TextBlockLayout, type TextState } from \"@motionscript/core\";\nimport { WgpuRenderContext } from \"../adapter/context\";\nimport { WgpuBackend } from \"../backend-wgpu\";\nimport type { Doc, Node, Xform } from \"../doc\";\nimport type { WgpuStorageAdapter } from \"./storage\";\nimport { layoutTextBlock, measureText, shaperFor } from \"./text\";\nimport { SKSL_EFFECT, SKSL_FILL } from \"../user-shaders\";\nimport { addFaultTarget, crashMessage, watchDevice } from \"./faults\";\n\ntype Shaper = ReturnType<typeof shaperFor>;\n\n/** What the adapter could not draw, logged once per kind per page. */\nconst reported = new Set<string>();\n\n/** Kinds that mean \"not loaded yet\", which a settled frame waits out. */\nconst TRANSIENT = /-not-(?:decoded|loaded)$/;\n\n/** What a feature the adapter does not draw is called, by its exact kind or by its kind's prefix. */\nconst FEATURE_NAMES: Record<string, string> = {\n \"text:path\": \"Text on a path\",\n rasterize: \"rasterize()\",\n \"boolean:nested\": \"A boolean nested in one of another kind\",\n \"boolean:projective\": \"A boolean under a 3D (projective) transform\",\n \"cut:compound\": \"A cut through a compound shape\",\n \"stroke:union-of-booleans\": \"One stroke around several booleans\",\n \"effect:motionBlur-shutter\": \"Motion blur with an off-centre shutter or over 32 samples\",\n \"surface:error\": \"A surface texture that failed to draw\",\n \"blend:\": \"The blend mode\",\n \"fill:blend:\": \"The fill blend mode\",\n \"op:\": \"The drawing op\",\n \"fill:\": \"The fill\",\n \"effect:\": \"The effect\",\n \"3d:\": \"In 3D,\",\n};\n\nfunction missingMessage(kind: string): string {\n if (FEATURE_NAMES[kind]) return `${FEATURE_NAMES[kind]} is not drawn by the WebGPU renderer.`;\n const prefix = Object.keys(FEATURE_NAMES).filter((p) => p.endsWith(\":\") && kind.startsWith(p)).sort((a, b) => b.length - a.length)[0];\n return prefix ? `${FEATURE_NAMES[prefix]} \"${kind.slice(prefix.length)}\" is not drawn by the WebGPU renderer.` : `Not drawn by the WebGPU renderer: ${kind}.`;\n}\n\nexport class WgpuSurfaceContext extends WgpuRenderContext {\n view: { zoom: number; x: number; y: number } = { zoom: 1, x: 0, y: 0 };\n frame: Size2D | null = null;\n clipToFrame = true;\n frameBackground: \"black\" | \"transparent\" = \"black\";\n\n private canvas: HTMLCanvasElement | null = null;\n /**\n * The drawing-buffer size the host gave the canvas when it last mounted.\n * wgpu writes the canvas's width and height whenever it configures, so a\n * device that finishes starting after the host resized the canvas would\n * shrink it back; this, not the canvas, is the size to draw at.\n */\n private size = { width: 1, height: 1 };\n private backend: WgpuBackend | null = null;\n private starting: Promise<void> | null = null;\n /** The last mount rejected: a settled frame has nothing to wait for. */\n private startFailed = false;\n private startToken: object | null = null;\n private lastDoc: Doc | null = null;\n private viewportKey = \"\";\n private readonly shaper: Shaper;\n private readonly stopFonts: () => void;\n private readonly stopSettle: () => void;\n private readonly stopFaults: () => void;\n /** Page-wide faults (a lost device, a WebGPU error, a panic) since the last takeRenderIssues. */\n private faults: RenderIssue[] = [];\n /** The renderer panicked: nothing calls into it again. */\n private halted = false;\n\n constructor(private readonly store: WgpuStorageAdapter, viewport: Size2D) {\n const shaper = shaperFor(store);\n super(viewport.width, viewport.height, (text, size, family, weight, spacing, style) => measureText(shaper, text, size, family, weight, spacing, style));\n this.shaper = shaper;\n this.storage = store;\n this.images = store.images;\n this.stopFonts = store.onFont((f) => this.backend?.registerFont(f.bytes, f.family));\n // A settled frame (an export's, a seek's) is drawn again once its shaders\n // compile, or once a surface remounting after a lost device can draw.\n this.stopSettle = store.addSettler(() => {\n if (this.starting && !this.startFailed) return this.starting.catch(() => {});\n return this.backend?.shaders.hasPending() ? this.backend.whenShadersReady() : null;\n });\n this.stopFaults = addFaultTarget({\n queueIssue: (issue) => this.faults.push(issue),\n remount: () => this.remount(),\n halt: () => this.halt(),\n });\n }\n\n /** Renderer stats of the last frame (build/encode ms, draws, passes, …). */\n stats(): Record<string, number> | null {\n return this.backend?.stats() ?? null;\n }\n\n mount(target: unknown): void {\n const canvas = target as HTMLCanvasElement;\n this.size = { width: Math.max(1, canvas.width), height: Math.max(1, canvas.height) };\n if (canvas === this.canvas && (this.backend || this.starting)) {\n // A resize: the next present reconfigures to the new size.\n this.present();\n return;\n }\n this.releaseBackend();\n this.canvas = canvas;\n if (this.halted || crashMessage() !== null) return;\n const token = {};\n this.startToken = token;\n this.startFailed = false;\n const starting = (this.starting = (async () => {\n const backend = new WgpuBackend();\n await backend.init(canvas, this.size.width, this.size.height);\n if (this.startToken !== token) {\n if (!this.halted) backend.destroy();\n return;\n }\n watchDevice(backend.gpuDevice());\n // sRGB blending without dither: the engine's own look, and the canvas\n // pass draws straight into the output with no intermediate or blit.\n backend.setOptions(false, false);\n // Every frame is a new document, so unused definitions can go.\n backend.collectUnused = true;\n // A user shader that finishes compiling shows on the next draw.\n backend.onShaderReady = () => this.present();\n for (const f of this.store.fonts) backend.registerFont(f.bytes, f.family);\n this.backend = backend;\n this.starting = null;\n this.present();\n })());\n starting.catch((e) => {\n if (this.starting === starting) this.startFailed = true;\n console.error(\"[wgpu] the renderer failed to start:\", e);\n });\n }\n\n /** Settles once the mounted canvas has a device to draw with; rejects if it can't get one. */\n whenMounted(): Promise<void> {\n return this.starting ?? Promise.resolve();\n }\n\n unmount(): void {\n this.releaseBackend();\n this.canvas = null;\n }\n\n execute(callback: () => void): void {\n const canvas = this.canvas;\n if (!canvas || this.isDisposed()) return;\n this.width = this.size.width / this.pixelRatio;\n this.height = this.size.height / this.pixelRatio;\n try {\n super.execute(callback);\n } finally {\n this.lastDoc = this.doc;\n this.present();\n for (const kind of this.missing) {\n if (reported.has(kind) || kind.endsWith(\"-not-decoded\")) continue;\n reported.add(kind);\n console.warn(`[wgpu] not drawn yet: ${kind}`);\n }\n }\n }\n\n /**\n * Since the last call: page-wide faults, user shaders that do not compile\n * or whose uniforms miss their `Params`, and every feature the last frame\n * asked for that this renderer does not draw, once per kind and node.\n */\n override takeRenderIssues(): RenderIssue[] {\n const out = new Map<string, RenderIssue>();\n const add = (issue: RenderIssue) => out.set(renderIssueKey(issue), issue);\n for (const issue of this.faults.splice(0)) add(issue);\n const backend = this.halted ? null : this.backend;\n for (const message of backend?.shaderIssues ?? []) {\n add({ kind: \"shader\", ...(message === SKSL_EFFECT && { feature: \"effect:shader-sksl\" }), message });\n }\n backend?.shaderIssues.clear();\n for (const issue of this.shaderIssues) add(issue);\n for (const kind of this.missing) {\n if (TRANSIENT.test(kind)) continue;\n const issue: RenderIssue = kind === \"fill:shader-sksl\"\n ? { kind: \"shader\", feature: kind, message: SKSL_FILL }\n : { kind: \"missing\", feature: kind, message: missingMessage(kind) };\n const nodes = this.missing.nodes.get(kind);\n if (!nodes?.size) add(issue);\n else for (const nodeId of nodes) add({ ...issue, nodeId });\n }\n for (const type of backend?.missing ?? []) add({ kind: \"missing\", feature: `effect:${type}`, message: missingMessage(`effect:${type}`) });\n for (const what of backend?.missing3d ?? []) add({ kind: \"missing\", feature: `3d:${what}`, message: missingMessage(`3d:${what}`) });\n return [...out.values()];\n }\n\n /** Settles once every user shader the last frames used has compiled (or failed); an export waits on it. */\n whenShadersReady(): Promise<void> {\n return this.backend?.whenShadersReady() ?? Promise.resolve();\n }\n\n override layoutTextBlock(state: Partial<TextState>): TextBlockLayout | null {\n return layoutTextBlock(this.shaper, state);\n }\n\n /** The frame (or the whole surface) as an image data URL. */\n screenshot(mime = \"image/png\", quality?: number): string | undefined {\n return this.snapshotCanvas()?.toDataURL(mime, quality);\n }\n\n /**\n * The frame (or the whole surface) copied into a fresh 2D canvas. A WebGPU\n * canvas is only readable in the task that drew it, so this draws it again first.\n */\n snapshotCanvas(): HTMLCanvasElement | undefined {\n const canvas = this.canvas;\n if (!canvas || !this.backend || !this.lastDoc) return undefined;\n this.present();\n let [x, y, w, h] = [0, 0, canvas.width, canvas.height];\n if (this.frame) {\n const pr = this.pixelRatio, z = this.view.zoom;\n const cx = canvas.width / 2 + this.view.x * pr, cy = canvas.height / 2 + this.view.y * pr;\n const fw = this.frame.width * z * pr, fh = this.frame.height * z * pr;\n x = Math.max(0, Math.round(cx - fw / 2));\n y = Math.max(0, Math.round(cy - fh / 2));\n w = Math.max(1, Math.min(canvas.width - x, Math.round(fw)));\n h = Math.max(1, Math.min(canvas.height - y, Math.round(fh)));\n }\n const out = document.createElement(\"canvas\");\n out.width = w;\n out.height = h;\n const ctx = out.getContext(\"2d\");\n if (!ctx) return undefined;\n ctx.drawImage(canvas, x, y, w, h, 0, 0, w, h);\n return out;\n }\n\n override dispose(): void {\n this.releaseBackend();\n this.stopFonts();\n this.stopSettle();\n this.stopFaults();\n this.canvas = null;\n this.lastDoc = null;\n this.store.dispose();\n super.dispose();\n }\n\n protected override rootTransform(): Xform {\n const z = this.view.zoom;\n return [z, 0, 0, z, this.width / 2 + this.view.x, this.height / 2 + this.view.y];\n }\n\n protected override clearColor(): [number, number, number, number] {\n // Transparent around a frame, so the host's panel shows there.\n return this.frame ? [0, 0, 0, 0] : [0, 0, 0, 1];\n }\n\n protected override frameGroup(root: Node): Node {\n const frame = this.frame;\n if (!frame) return root;\n const box = { x: -frame.width / 2, y: -frame.height / 2, w: frame.width, h: frame.height };\n if (this.frameBackground === \"black\") {\n this.doc.rect(root, { transform: [1, 0, 0, 1, box.x, box.y], w: box.w, h: box.h, fill: { kind: \"solid\", color: [0, 0, 0, 1] } });\n }\n return this.clipToFrame ? this.doc.group(root, { clip: { ...box, r: 0 } }) : root;\n }\n\n /** Hands the last recorded frame to the renderer, once it has started. */\n private present(): void {\n const backend = this.backend, canvas = this.canvas, doc = this.lastDoc;\n if (!backend || !canvas || !doc || this.halted) return;\n const { width, height } = this.size;\n // The viewport (size, scale, clear colour) is written on a full upload,\n // which a resize asks for. A canvas left at another size (see `size`)\n // is configured back.\n const key = `${width}x${height}/${doc.width}/${doc.background.join(\",\")}`;\n if (key !== this.viewportKey || canvas.width !== width || canvas.height !== height) {\n backend.resize(width, height);\n this.viewportKey = key;\n }\n try {\n backend.sync(doc);\n backend.render();\n } catch (e) {\n console.error(\"[wgpu] frame failed:\", e);\n }\n }\n\n private releaseBackend(): void {\n this.starting = null;\n this.startToken = null;\n if (!this.halted) this.backend?.destroy();\n this.backend = null;\n this.viewportKey = \"\";\n }\n\n /** The device was lost: the same canvas, mounted again on the new one (fonts, pipelines and shaders rebuilt). */\n private remount(): void {\n const canvas = this.canvas;\n if (!canvas || this.isDisposed() || this.halted) return;\n this.releaseBackend();\n this.mount(canvas);\n }\n\n /** The renderer panicked: its WASM is not called again, so the backend is dropped, not freed. */\n private halt(): void {\n this.halted = true;\n this.releaseBackend();\n }\n}\n", "// A user shader drawn outside any scene, by this renderer: a shader editor's\n// live preview, a library's thumbnails, an assistant's preview frames. The\n// same compile path and draw as a session's, so what an author sees here is\n// what the canvas and an export show.\n\nimport { loadRendererWasm, WgpuBackend } from \"../backend-wgpu\";\nimport { Doc, type Node, type Paint } from \"../doc\";\nimport { type ShaderDiagnostic, type ShaderReport, type ShaderScope, validateShader as validate } from \"../user-shaders\";\n\nexport type { ShaderDiagnostic, ShaderField, ShaderReport, ShaderScope } from \"../user-shaders\";\n\n/**\n * Validates a WGSL fill or effect with naga (loading the renderer's WASM on\n * first use): diagnostics located in `source`, and the reflected `Params`.\n */\nexport async function validateShader(scope: ShaderScope, source: string, wasmUrl?: string | URL): Promise<ShaderReport> {\n await loadRendererWasm(wasmUrl);\n return validate(scope, source);\n}\n\n/**\n * What the renderer puts in front of an author's code, for an editor to show\n * (the real header also holds the renderer's own, `ms_`-prefixed, code).\n */\nexport const WGSL_PRELUDE: Record<ShaderScope, string> = {\n fill: `// Provided to every WGSL fill:\nstruct FillIn {\n uv: vec2f, // 0–1 across the fill's box, y down\n local: vec2f, // px from the box's top-left\n size: vec2f, // the box, px\n time: f32, // the node's elapsed seconds\n scale: f32, // device px per px\n}\nvar<uniform> u: Params; // your struct Params, if you declare one\nfn sample_texture(uv: vec2f) -> vec4f // the fill's first texture, premultiplied\n\n// You write:\nfn fill(in: FillIn) -> vec4f // premultiplied rgba, opacity not folded in\n`,\n effect: `// Provided to every WGSL effect:\nstruct EffectIn {\n uv: vec2f, // 0–1 across the node's box, y down\n px: vec2f, // device px (what sample_src_px takes)\n local: vec2f, // px from the box's top-left\n size: vec2f, // the box, px\n time: f32, // the node's elapsed seconds\n scale: f32, // device px per px\n node: vec2f, // 0–1 across the node's own box: turns and scales with it\n node_size: vec2f, // the node's own box, px\n}\nvar<uniform> u: Params; // your struct Params, if you declare one\nfn sample_src(uv: vec2f) -> vec4f // the input at box uv: the node's layer, or the backdrop\nfn sample_src_px(px: vec2f) -> vec4f // the same at device px; clamped at the input's edge\n\n// You write:\nfn effect(in: EffectIn) -> vec4f // premultiplied rgba\n`,\n};\n\nexport interface ShaderPreviewInput {\n scope: ShaderScope;\n source: string;\n /** `Params` values by member name. */\n uniforms: Record<string, number | readonly number[]>;\n /** Seconds (`in.time`). */\n time: number;\n /** Effects: run over what is beneath the shape (`mode: \"backdrop\"`) rather than the shape's own content. */\n backdrop?: boolean;\n /** Effects: how the output composites onto the input (core blend name); absent = replaces it. */\n blendMode?: string;\n /** Effects: px the effect may draw or read past the shape. */\n reach?: number;\n /** Effects: the whole frame (default), or an inset rounded rect so the untouched content shows around it. */\n frame?: \"full\" | \"inset\";\n /** The content underneath, cover-fitted, in place of the test pattern (or of nothing, under a fill). */\n image?: ImageBitmap | null;\n /** Before/after: left of `split × width` shows the content without the shader. */\n split?: number | null;\n /** A fill's texture (`sample_texture`). */\n texture?: ImageBitmap | null;\n}\n\nexport interface ShaderStatus {\n state: \"compiling\" | \"ready\" | \"failed\" | \"empty\";\n /** naga's, then the browser's (`getCompilationInfo`). */\n diagnostics: ShaderDiagnostic[];\n}\n\nconst INSET = 0.14;\nconst RADIUS = 0.06;\n/** Coral, green and sky: far apart in hue, so a channel split reads at every edge. */\nconst DISCS: [number, number, number][] = [[0.98, 0.45, 0.4], [0.35, 0.8, 0.5], [0.35, 0.65, 0.98]];\n\n/**\n * One preview surface on its own WebGPU device. `draw` never waits: a program\n * still compiling draws what lies beneath, and the last input is drawn again\n * when it is ready (`onDraw` says so).\n */\nexport class ShaderPreview {\n /** Called after a redraw the preview made by itself (a program became ready). */\n onDraw: (() => void) | null = null;\n private last: ShaderPreviewInput | null = null;\n private images = new WeakMap<ImageBitmap, number>();\n private version = 0;\n private size = \"\";\n\n private constructor(private readonly backend: WgpuBackend, private readonly canvas: HTMLCanvasElement | OffscreenCanvas) {}\n\n static async create(canvas: HTMLCanvasElement | OffscreenCanvas, wasmUrl?: string | URL): Promise<ShaderPreview> {\n await loadRendererWasm(wasmUrl);\n const backend = new WgpuBackend();\n await backend.init(canvas as HTMLCanvasElement, Math.max(1, canvas.width), Math.max(1, canvas.height));\n backend.setOptions(false, false);\n backend.collectUnused = true;\n const preview = new ShaderPreview(backend, canvas);\n backend.onShaderReady = () => {\n if (!preview.last) return;\n preview.draw(preview.last);\n preview.onDraw?.();\n };\n return preview;\n }\n\n /** Draws `input` at the canvas's current size. */\n draw(input: ShaderPreviewInput): ShaderStatus {\n this.last = input;\n const w = Math.max(1, this.canvas.width), h = Math.max(1, this.canvas.height);\n if (this.size !== `${w}x${h}`) {\n this.backend.resize(w, h);\n this.size = `${w}x${h}`;\n }\n const doc = this.build(input, w, h);\n this.backend.sync(doc);\n this.backend.render();\n return this.status(input.scope, input.source);\n }\n\n /** Draws `input` once its program has compiled, and resolves to the frame (straight alpha). */\n async pixels(input: ShaderPreviewInput): Promise<ImageData> {\n this.draw(input);\n await this.whenReady();\n this.draw(input);\n const px = await this.backend.readPixels();\n const w = Math.max(1, this.canvas.width), h = Math.max(1, this.canvas.height);\n const out = Uint8ClampedArray.from(px.subarray(0, w * h * 4));\n for (let i = 0; i < out.length; i += 4) {\n const a = out[i + 3];\n if (a === 0 || a === 255) continue;\n out[i] = (out[i] * 255) / a;\n out[i + 1] = (out[i + 1] * 255) / a;\n out[i + 2] = (out[i + 2] * 255) / a;\n }\n return new ImageData(out, w, h);\n }\n\n /** {@link pixels}, encoded. */\n async snapshot(input: ShaderPreviewInput, type = \"image/png\", quality?: number): Promise<Blob> {\n const image = await this.pixels(input);\n const out = new OffscreenCanvas(image.width, image.height);\n out.getContext(\"2d\")!.putImageData(image, 0, 0);\n return out.convertToBlob({ type, quality });\n }\n\n /** Settles once every program drawn so far is ready or failed. */\n whenReady(): Promise<void> {\n return this.backend.whenShadersReady();\n }\n\n /** A program's state and diagnostics (compiling it if it is new). */\n status(scope: ShaderScope, source: string): ShaderStatus {\n if (!source.trim()) return { state: \"empty\", diagnostics: [] };\n const p = this.backend.shaders.program(scope, source);\n return { state: p.state, diagnostics: [...p.report.diagnostics, ...p.browser] };\n }\n\n destroy(): void {\n this.backend.onShaderReady = undefined;\n this.backend.destroy();\n this.last = null;\n }\n\n private build(input: ShaderPreviewInput, w: number, h: number): Doc {\n const doc = new Doc(w, h, [0, 0, 0, 0]);\n const root = doc.root;\n const content = (parent: Node) => (input.image ? this.cover(doc, parent, input.image, w, h) : pattern(doc, parent, w, h));\n const split = input.split == null ? 0 : Math.min(1, Math.max(0, input.split)) * w;\n if (input.scope === \"fill\") {\n if (input.image) content(root);\n const paint: Paint = {\n kind: \"shader\", source: input.source, uniforms: input.uniforms as Record<string, number | number[]>,\n box: [0, 0, w, h], time: input.time, ...(input.texture ? { texture: this.asset(doc, input.texture) } : {}),\n };\n const host = split > 0 ? doc.group(root, { clip: { x: split, y: 0, w: w - split, h, r: 0 } }) : root;\n doc.rect(host, { w, h, fill: paint });\n return doc;\n }\n content(root);\n const short = Math.min(w, h);\n const inset = input.frame === \"inset\";\n const m = inset ? short * INSET : 0;\n const box = { x: m, y: m, w: w - 2 * m, h: h - 2 * m, r: inset ? short * RADIUS : 0 };\n const effect = {\n type: \"shader\", language: \"wgsl\", source: input.source, uniforms: input.uniforms,\n mode: input.backdrop ? \"backdrop\" : \"foreground\",\n ...(input.blendMode && !input.backdrop ? { blendMode: input.blendMode } : {}),\n ...(input.reach ? { reach: input.reach } : {}),\n };\n const host = split > 0 ? doc.group(root, { clip: { x: split, y: 0, w: w - split, h, r: 0 } }) : root;\n const effectBox: [number, number, number, number] = [box.x, box.y, box.w, box.h];\n if (input.backdrop) {\n doc.rect(host, { transform: [1, 0, 0, 1, box.x, box.y], w: box.w, h: box.h, radii: [box.r, box.r, box.r, box.r], effects: [effect], effectBox: [0, 0, box.w, box.h], effectTime: input.time });\n } else {\n const g = doc.group(host, { clip: box, effects: [effect], effectBox, effectTime: input.time });\n content(g);\n }\n return doc;\n }\n\n private asset(doc: Doc, bitmap: ImageBitmap) {\n const a = doc.addImage(bitmap, bitmap.width, bitmap.height, { mipmaps: false });\n let v = this.images.get(bitmap);\n if (v === undefined) this.images.set(bitmap, (v = ++this.version));\n a.version = v;\n return a;\n }\n\n private cover(doc: Doc, parent: Node, bitmap: ImageBitmap, w: number, h: number) {\n doc.rect(parent, { w, h, fill: { kind: \"image\", image: this.asset(doc, bitmap), fit: \"fill\", box: [0, 0, w, h] } });\n }\n}\n\n/**\n * The ruled test pattern an effect is previewed over: a wash with a grid and\n * three saturated discs inside a white ring, because an effect is invisible on\n * a smooth field.\n */\nfunction pattern(doc: Doc, parent: Node, w: number, h: number) {\n doc.rect(parent, { w, h, fill: { kind: \"linear\", from: [0, 0], to: [w, h], stops: [{ offset: 0, color: [0.16, 0.2, 0.42, 1] }, { offset: 1, color: [0.55, 0.25, 0.45, 1] }] } });\n const short = Math.min(w, h);\n const step = Math.max(12, Math.round(short / 12));\n const line = { kind: \"solid\" as const, color: [1, 1, 1, 0.3] as [number, number, number, number] };\n for (let x = step; x < w; x += step) doc.rect(parent, { transform: [1, 0, 0, 1, x - 0.5, 0], w: 1, h, fill: line });\n for (let y = step; y < h; y += step) doc.rect(parent, { transform: [1, 0, 0, 1, 0, y - 0.5], w, h: 1, fill: line });\n const cx = w / 2, cy = h / 2, r = short * 0.1;\n DISCS.forEach((c, i) => {\n const a = -Math.PI / 2 + (i * 2 * Math.PI) / DISCS.length;\n const x = cx + Math.cos(a) * short * 0.17, y = cy + Math.sin(a) * short * 0.17;\n doc.ellipse(parent, { transform: [1, 0, 0, 1, x - r, y - r], w: 2 * r, h: 2 * r, fill: { kind: \"solid\", color: [...c, 1] } });\n });\n const ring = short * 0.3;\n doc.ellipse(parent, { transform: [1, 0, 0, 1, cx - ring, cy - ring], w: 2 * ring, h: 2 * ring, stroke: { paint: { kind: \"solid\", color: [1, 1, 1, 0.85] }, width: Math.max(1.5, short / 90) } });\n}\n", "// @motionscript/renderer: the wgpu renderer that @motionscript/browser's\n// createBrowserEngine() draws with. Hosts use that entry; this one is for it.\n\nimport type { MeasureContext2D, PlatformDeps } from \"@motionscript/core\";\nimport { loadRendererWasm, prewarmDevice } from \"../backend-wgpu\";\nimport { WgpuStorageAdapter } from \"./storage\";\nimport { WgpuSurfaceContext } from \"./surface\";\nimport { measureText, shaperFor } from \"./text\";\n\nexport { onWgpuEvent } from \"./faults\";\nexport type { WgpuEvent } from \"./faults\";\nexport { ShaderPreview, validateShader, WGSL_PRELUDE } from \"./shader-preview\";\nexport type { ShaderDiagnostic, ShaderField, ShaderPreviewInput, ShaderReport, ShaderScope, ShaderStatus } from \"./shader-preview\";\nexport type { WgpuStorageAdapter, WgpuSurfaceContext };\n\nexport interface WgpuRendererOptions {\n /** Where `ms_renderer_bg.wasm` is served; defaults to beside this module. */\n wasmUrl?: string | URL;\n /** Fetches an asset's bytes (images, video, audio, fonts); defaults to `fetch`, rejecting on a failed response. */\n loadBytes?: (src: string) => Promise<Blob>;\n}\n\n/** What a platform draws a session's frames with, and the storage and measurement they read from. */\nexport interface WgpuRenderer {\n createStorageAdapter(deps: PlatformDeps): WgpuStorageAdapter;\n createRenderContext(storage: WgpuStorageAdapter): WgpuSurfaceContext;\n createMeasureContext(storage: WgpuStorageAdapter): MeasureContext2D;\n dispose?(): void;\n}\n\n/** Whether this browser can run the renderer (WebGPU with an adapter). */\nexport async function isWgpuSupported(): Promise<boolean> {\n const gpu = (navigator as Navigator & { gpu?: { requestAdapter(): Promise<unknown> } }).gpu;\n if (!gpu) return false;\n try {\n return (await gpu.requestAdapter()) != null;\n } catch {\n return false;\n }\n}\n\n/**\n * Loads the renderer's WASM. Rejects where WebGPU is unavailable only once a\n * surface mounts; check {@link isWgpuSupported} first.\n */\nexport async function createWgpuRenderer(options: WgpuRendererOptions = {}): Promise<WgpuRenderer> {\n await loadRendererWasm(options.wasmUrl);\n // Started, not awaited: the device comes up while the host loads fonts and\n // builds its document, and the first mount waits for what is left.\n prewarmDevice().catch(() => {});\n const { loadBytes } = options;\n return {\n createStorageAdapter({ catalog, viewport, fps }: PlatformDeps): WgpuStorageAdapter {\n return new WgpuStorageAdapter(catalog, viewport, fps, loadBytes);\n },\n createRenderContext(storage: WgpuStorageAdapter): WgpuSurfaceContext {\n return new WgpuSurfaceContext(storage, storage.size);\n },\n createMeasureContext(storage: WgpuStorageAdapter): MeasureContext2D {\n const shaper = shaperFor(storage);\n return { measureText: (...args) => measureText(shaper, ...args) };\n },\n };\n}\n", "import { createWgpuRenderer, isWgpuSupported, type WgpuRenderer } from \"@motionscript/renderer\";\nimport { loadAssetBytes } from \"./asset-bytes\";\n\n/** Where the renderer's WebAssembly is served, for every entry that draws. */\nexport interface RendererWasmOption {\n /** URL of `ms_renderer_bg.wasm`; defaults to beside `@motionscript/renderer`'s module, which a bundler resolves. */\n rendererWasmUrl?: string | URL;\n}\n\n/**\n * This browser cannot run the WebGPU renderer: no `navigator.gpu`, or no\n * adapter behind it. Every entry that draws (an engine, a still, an export,\n * a timeline's audio mix) rejects with it before drawing anything.\n */\nexport class WebGpuUnavailableError extends Error {\n constructor() {\n super(\"Motion Script draws with WebGPU, and this browser has no WebGPU adapter.\");\n this.name = \"WebGpuUnavailableError\";\n }\n}\n\n/**\n * The renderer every entry draws with, or {@link WebGpuUnavailableError}.\n * `gpu: false` is for an entry that only measures text, which needs no device.\n */\nexport async function loadRenderer(options: RendererWasmOption = {}, { gpu = true } = {}): Promise<WgpuRenderer> {\n if (gpu && !(await isWgpuSupported())) throw new WebGpuUnavailableError();\n return createWgpuRenderer({ wasmUrl: options.rendererWasmUrl, loadBytes: loadAssetBytes });\n}\n", "/**\n * Hand an export's bytes back, or download them through an `<a download>`.\n * Headless callers capture the bytes and write the file themselves.\n */\nexport function deliver(\n bytes: Uint8Array,\n options: { returnBytes: boolean; filename: string; mimeType: string },\n): Uint8Array | undefined {\n if (options.returnBytes) return bytes;\n\n // Every encoder here builds its Uint8Array over a whole, plain ArrayBuffer, so\n // the cast is sound — TS only balks because the generic parameter admits a\n // SharedArrayBuffer, which a BlobPart may not be.\n const blob = new Blob([bytes.buffer as ArrayBuffer], { type: options.mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = options.filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n return undefined;\n}\n", "import {\n AudioBufferSource,\n Mp3OutputFormat,\n Mp4OutputFormat,\n WavOutputFormat,\n WebMOutputFormat,\n canEncodeAudio,\n type AudioCodec,\n type OutputFormat,\n type VideoCodec,\n} from \"mediabunny\";\n\n/** A file with a picture: rendered frame by frame, with the mixed audio as a second track. */\nexport type VideoFormat = \"mp4\" | \"webm\";\n/** A file of the timeline's mixed audio alone; nothing is drawn. */\nexport type AudioFormat = \"wav\" | \"mp3\" | \"m4a\";\nexport type ExportFormat = VideoFormat | AudioFormat;\n\n/** What a host needs to name, save and play an exported file. */\nexport interface ExportFormatInfo {\n kind: \"video\" | \"audio\";\n /** Without the dot. */\n extension: string;\n mimeType: string;\n}\n\ninterface FormatSpec extends ExportFormatInfo {\n container: () => OutputFormat;\n audioCodec: AudioCodec;\n /** Video formats only: what the container takes, the default first, and the codec used unprobed when none of those encode. */\n video?: { codecs: readonly VideoCodec[]; fallback: VideoCodec };\n}\n\nconst FORMATS: Record<ExportFormat, FormatSpec> = {\n mp4: {\n kind: \"video\", extension: \"mp4\", mimeType: \"video/mp4\",\n container: () => new Mp4OutputFormat(),\n audioCodec: \"aac\",\n video: { codecs: [\"avc\", \"hevc\", \"av1\", \"vp9\"], fallback: \"avc\" },\n },\n webm: {\n kind: \"video\", extension: \"webm\", mimeType: \"video/webm\",\n container: () => new WebMOutputFormat(),\n audioCodec: \"opus\",\n video: { codecs: [\"vp9\", \"av1\", \"vp8\"], fallback: \"vp8\" },\n },\n wav: {\n kind: \"audio\", extension: \"wav\", mimeType: \"audio/wav\",\n container: () => new WavOutputFormat(),\n audioCodec: \"pcm-s16\",\n },\n mp3: {\n kind: \"audio\", extension: \"mp3\", mimeType: \"audio/mpeg\",\n container: () => new Mp3OutputFormat(),\n audioCodec: \"mp3\",\n },\n m4a: {\n kind: \"audio\", extension: \"m4a\", mimeType: \"audio/mp4\",\n container: () => new Mp4OutputFormat(),\n audioCodec: \"aac\",\n },\n};\n\nexport const EXPORT_FORMATS: Readonly<Record<ExportFormat, ExportFormatInfo>> = FORMATS;\n\nexport function formatSpec(format: ExportFormat): FormatSpec {\n const spec = FORMATS[format];\n if (!spec) throw new RangeError(`\"${String(format)}\" is not an export format; expected one of ${Object.keys(FORMATS).join(\", \")}.`);\n return spec;\n}\n\nexport function isAudioFormat(format: ExportFormat): format is AudioFormat {\n return formatSpec(format).kind === \"audio\";\n}\n\nexport const DEFAULT_AUDIO_BITRATE = 192_000;\nconst OPUS_SAMPLE_RATE = 48_000;\n\n/** The mixed-audio track for `format`. Ensure its encoder first with {@link ensureAudioEncoder}. */\nexport function audioTrackSource(format: ExportFormat, bitrate = DEFAULT_AUDIO_BITRATE): AudioBufferSource {\n const codec = formatSpec(format).audioCodec;\n return new AudioBufferSource({\n codec,\n bitrate,\n // Opus encodes at 48 kHz only, and the mix runs at 44.1 kHz unless asked otherwise.\n ...(codec === \"opus\" && { transform: { sampleRate: OPUS_SAMPLE_RATE } }),\n });\n}\n\nlet mp3Registered: Promise<void> | null = null;\n\n/**\n * Throws before a frame is rendered when this browser cannot encode `format`'s\n * audio. No browser ships an MP3 encoder, so LAME is loaded on first use (a\n * WASM worker from a `blob:` URL, which a host's CSP must allow).\n */\nexport async function ensureAudioEncoder(format: ExportFormat): Promise<void> {\n const codec = formatSpec(format).audioCodec;\n if (codec === \"mp3\") {\n mp3Registered ??= (async () => {\n if (await canEncodeAudio(\"mp3\")) return;\n const { registerMp3Encoder } = await import(\"@mediabunny/mp3-encoder\");\n registerMp3Encoder();\n })();\n try {\n await mp3Registered;\n } catch (error) {\n mp3Registered = null;\n throw error;\n }\n return;\n }\n if (codec.startsWith(\"pcm-\")) return;\n if (!(await canEncodeAudio(codec))) {\n throw new Error(`This browser has no ${codec.toUpperCase()} encoder, so it cannot export ${format.toUpperCase()} audio.`);\n }\n}\n", "import {\n DEFAULT_OUTPUT,\n ManifestAssetCatalog,\n AssetTimeline,\n Registry,\n resolveProjectDocument,\n type AssetManifest,\n type ProjectDocument,\n type VisualDocument,\n type Size2D,\n} from \"@motionscript/core\";\nimport { collectAudio } from \"./frame-loop\";\n\nimport { mixAudio } from \"./audio/mixer\";\nimport { loadRenderer, type RendererWasmOption } from \"./renderer\";\n\nexport interface MixTimelineAudioParams extends RendererWasmOption {\n /** A project, or a lone still or composition as the one track of one. */\n document: ProjectDocument | VisualDocument;\n /** The vocabulary its clips compile against. Defaults to what the library ships. */\n registry?: Registry;\n /** Win over the document's own; 1920×1080 at 60 fps when neither says. */\n viewport?: Size2D;\n fps?: number;\n manifest?: AssetManifest;\n /** Mixdown rate. Defaults to the mixer's own (44100). */\n sampleRate?: number;\n}\n\nconst EMPTY_MANIFEST: AssetManifest = { image: {}, video: {}, audio: {}, font: {} };\n\n/**\n * Mix a timeline's audio without rendering a single frame.\n *\n * `exportVideo` normally does this as part of the render, and for a\n * single-threaded export that is exactly right. A **split** export cannot: its\n * video is rendered in pieces by separate workers, and concatenating\n * separately-encoded AAC puts the encoder's priming delay at every join — a click\n * at each boundary and a track that drifts further out of sync with every one. So\n * the coordinator mixes the whole timeline once, here, and the joined file gets a\n * single continuous audio track.\n *\n * Returns `null` when the timeline schedules no audio at all, which is the common\n * case and not a failure — the caller should then mux video only rather than\n * declare an empty track.\n *\n * ## Why this discovers\n *\n * Audio requests are an *output of discovery*: each node declares its clips as it\n * enters the tree, and the pass that finds what a clip's frames draw is the one\n * that puts its nodes in the tree, so there is no way to know what plays when\n * without it.\n *\n * Nothing is drawn, so this takes the renderer's measure context rather than a\n * render context: discovery lays each clip out, which needs text measured, not\n * rasterized. No canvas, no surface, no GPU, so WebGPU is not required.\n */\nexport async function mixTimelineAudio(\n params: MixTimelineAudioParams,\n): Promise<AudioBuffer | null> {\n const { registry = new Registry(), manifest = EMPTY_MANIFEST, sampleRate } = params;\n const project = resolveProjectDocument(params.document, params, DEFAULT_OUTPUT);\n if (project.tracks.length === 0) return null;\n const viewport = project.viewport!;\n const fps = project.fps!;\n\n // The renderer only for its text shaper; nothing is drawn.\n const renderer = await loadRenderer(params, { gpu: false });\n const catalog = new ManifestAssetCatalog(manifest);\n const storage = renderer.createStorageAdapter({ catalog, viewport, fps });\n const measurer = renderer.createMeasureContext(storage);\n\n // Audio is declared from each node's arrival state, so no asset windows are refined.\n const precomper = new AssetTimeline(project, { registry, viewport, fps, assets: catalog, measurer }, { assets: false });\n try {\n const precomp = precomper.run();\n\n const scheduled = collectAudio(precomp);\n if (scheduled.length === 0) return null;\n\n return await mixAudio(scheduled, precomp.totalDuration, { sampleRate, catalog });\n } finally {\n precomper.dispose();\n // The adapter holds decode sessions and cached images; without this a mix\n // leaks them for the life of the page.\n storage.dispose();\n }\n}\n", "import type { AssetManifest, ProjectDocument, Registry, Size2D, VisualDocument } from \"@motionscript/core\";\nimport { BufferTarget, Output } from \"mediabunny\";\n\nimport { deliver } from \"./deliver\";\nimport type { RendererWasmOption } from \"./renderer\";\nimport type { AudioEncoderOptions, ExportProgressCallback } from \"./exporter\";\nimport { audioTrackSource, ensureAudioEncoder, formatSpec, type AudioFormat } from \"./formats\";\nimport { mixTimelineAudio } from \"./mix-timeline-audio\";\n\nexport type ExportAudioParams = RendererWasmOption & {\n /** A project, or a lone still or composition as the one track of one. */\n document: ProjectDocument | VisualDocument;\n /** The vocabulary its clips compile against. Defaults to what the library ships. */\n registry?: Registry;\n /** Discovery lays clips out at this size and rate; 1920×1080 at 60 fps when neither the document nor this says. */\n viewport?: Size2D;\n fps?: number;\n manifest?: AssetManifest;\n /** Defaults to `'wav'`, which needs no encoder. */\n format?: AudioFormat;\n audio?: AudioEncoderOptions;\n /** Defaults to `export.<extension>`. */\n filename?: string;\n onProgress?: ExportProgressCallback;\n signal?: AbortSignal;\n /** When true, the encoded bytes are returned instead of triggering a browser download. */\n returnBytes?: boolean;\n};\n\n/** The timeline schedules no sound, so an audio-only export has nothing to write. */\nexport class NoAudioError extends Error {\n override readonly name = \"NoAudioError\";\n\n constructor() {\n super(\"The timeline has no audio to export.\");\n }\n}\n\n/**\n * Mix the timeline's audio and encode it alone: WAV, MP3 or M4A (AAC). Nothing\n * is drawn, so no frame is rendered and no GPU surface is made.\n *\n * @throws {NoAudioError} when nothing on the timeline plays, rather than writing a silent file.\n */\nexport async function exportAudio(params: ExportAudioParams): Promise<Uint8Array | void> {\n const { format = \"wav\", audio = {}, onProgress, signal, returnBytes = false } = params;\n const spec = formatSpec(format);\n if (spec.kind !== \"audio\") throw new RangeError(`exportAudio writes audio; \"${format}\" is video, which exportVideo writes.`);\n signal?.throwIfAborted();\n // Before the mix, so a browser that cannot encode the format fails fast.\n await ensureAudioEncoder(format);\n\n const mixed = await mixTimelineAudio({\n document: params.document,\n registry: params.registry,\n viewport: params.viewport,\n fps: params.fps,\n manifest: params.manifest,\n sampleRate: audio.sampleRate,\n rendererWasmUrl: params.rendererWasmUrl,\n });\n if (mixed === null) throw new NoAudioError();\n signal?.throwIfAborted();\n onProgress?.(0.5);\n\n const target = new BufferTarget();\n const output = new Output({ format: spec.container(), target });\n const source = audioTrackSource(format, audio.bitrate);\n output.addAudioTrack(source);\n await output.start();\n await source.add(mixed);\n source.close();\n await output.finalize();\n if (!target.buffer) throw new Error(\"Export produced no data\");\n onProgress?.(1);\n\n return deliver(new Uint8Array(target.buffer), {\n returnBytes,\n filename: params.filename ?? `export.${spec.extension}`,\n mimeType: spec.mimeType,\n });\n}\n", "import {\n DEFAULT_OUTPUT, resolveProjectDocument,\n type AssetManifest, type FrameSpec, type ProjectDocument, type Registry, type VisualDocument, type Size2D, type Theme,\n} from \"@motionscript/core\";\nimport type { ScreenshotFormat } from \"./frame-loop\";\nimport type { RendererWasmOption } from \"./renderer\";\nimport { createStillRenderer, type FrameRef } from \"./still\";\n\nexport type { ScreenshotFormat, FrameSpec };\n\nexport type ScreenshotParams = RendererWasmOption & {\n /** A project, or a lone still or composition as the one track of one. */\n document: ProjectDocument | VisualDocument;\n /** The vocabulary its clips compile against. Defaults to what the library ships. */\n registry?: Registry;\n /** Win over the document's own; 1920×1080 at 60 fps when neither says. */\n viewport?: Size2D;\n fps?: number;\n scale?: number;\n manifest?: AssetManifest;\n /** Theme for a document that carries none of its own. */\n theme?: Theme;\n /** Which frame to capture. Defaults to the timeline's first. */\n frame?: FrameRef;\n /** Encoding format (default \"png\"). */\n format?: ScreenshotFormat;\n /** JPEG quality in [0,1] (ignored for png; default 0.92). */\n quality?: number;\n};\n\nexport type ScreenshotResult = {\n /** The project frame that was captured, after clamping. */\n frame: number;\n totalFrames: number;\n /** Encoded image bytes. */\n bytes: Uint8Array;\n};\n\n/**\n * Renders a single frame of a document to an image.\n *\n * A one-shot wrapper over {@link StillRenderer}: create, render, encode, dispose.\n * It therefore takes the same path as a live preview, and as the video export at\n * that frame — there is one renderer, not three.\n *\n * For anything that captures **repeatedly** — a thumbnail builder, a preview that\n * repaints as the user edits — hold a {@link StillRenderer} instead. This function\n * builds and tears down a WebGPU surface per call, which is the right trade for one\n * capture and the wrong one for a hundred.\n */\nexport async function exportScreenshot(params: ScreenshotParams): Promise<ScreenshotResult> {\n const {\n registry, scale, manifest, theme, rendererWasmUrl,\n frame, format = \"png\", quality = 0.92,\n } = params;\n\n const project = resolveProjectDocument(params.document, params, DEFAULT_OUTPUT);\n if (project.tracks.length === 0) throw new Error(\"The project has no tracks to screenshot.\");\n\n const renderer = await createStillRenderer({\n viewport: project.viewport, fps: project.fps, scale, manifest, theme, rendererWasmUrl, registry,\n });\n\n try {\n const drawn = await renderer.render(project, { frame });\n return { ...drawn, bytes: await renderer.toBytes({ format, quality }) };\n } finally {\n renderer.dispose();\n }\n}\n", "import {\n AssetCatalog, DEFAULT_OUTPUT, ManifestAssetCatalog,\n frameSpecAtTime,\n Registry,\n resolveProjectDocument,\n type AssetManifest,\n type FrameSpec,\n type RenderIssue,\n type ProjectDocument,\n type VisualDocument,\n type Size2D,\n type StorageAdapter,\n type Theme,\n} from \"@motionscript/core\";\nimport {\n drawFrameAt,\n type DrawnFrame,\n type ScreenshotFormat,\n} from \"./frame-loop\";\nimport type { BrowserRenderContext, BrowserRenderer } from \"./engine\";\nimport { loadRenderer, type RendererWasmOption } from \"./renderer\";\n\nconst EMPTY_MANIFEST: AssetManifest = { image: {}, video: {}, audio: {}, font: {} };\n\n/** Anything a still can be rendered from: a project, or a lone still or composition as the one track of one. */\nexport type StillSource = ProjectDocument | VisualDocument;\n\n/**\n * Which frame to draw, in whatever form is most convenient — a global frame\n * index, the timeline's first or last frame, or a `FrameSpec`.\n */\nexport type FrameRef = FrameSpec | number | \"first\" | \"last\";\n\nexport interface StillRendererOptions extends RendererWasmOption {\n /**\n * The canvas to draw into. Omit and the renderer creates its own hidden one\n * and removes it on {@link StillRenderer.dispose} — which is what a one-shot\n * capture wants, while a live preview passes the canvas it already shows.\n */\n canvas?: HTMLCanvasElement;\n /** Output resolution in pixels, whatever the document asks for. Defaults to 1920×1080. */\n viewport?: Size2D;\n /** Frame rate for a document that sets none. Defaults to 60. */\n fps?: number;\n /** Device pixel ratio the surface is sized at. Defaults to 1. */\n scale?: number;\n manifest?: AssetManifest;\n /** Theme for a document that carries none of its own. */\n theme?: Theme;\n /**\n * The vocabulary a document is compiled against.\n *\n * Defaults to a fresh one carrying only what the library ships — a renderer\n * owns its registry the way an engine does, so a host with custom node types\n * passes the same one it gave its engine rather than relying on whatever a\n * module happened to register.\n */\n registry?: Registry;\n}\n\nexport interface RenderStillOptions {\n /** Which frame to draw. Defaults to the timeline's first. */\n frame?: FrameRef;\n /** Seconds into the timeline, converted with the document's fps. Wins over `frame`. */\n time?: number;\n /**\n * Draw this call at this pixel ratio instead of the renderer's. **Resizes the\n * canvas and rebuilds the surface**, and the next call without it rebuilds\n * them back, so keep it off the per-edit path — render the preview at its\n * normal scale and pass this only when capturing at a higher one.\n */\n scale?: number;\n /** What the renderer drew but not as the document says; a lost GPU device throws `RenderBackendError` instead. */\n onIssue?: (issue: RenderIssue) => void;\n}\n\nexport interface EncodeStillOptions {\n /** Defaults to `\"png\"`. */\n format?: ScreenshotFormat;\n /** JPEG quality in [0,1]; ignored for png. Defaults to 0.92. */\n quality?: number;\n}\n\n/** Normalize the many ways a caller can name a frame into the engine's own form. */\nexport function stillFrameSpec(options: RenderStillOptions | undefined, fps: number): FrameSpec {\n if (options?.time !== undefined) return frameSpecAtTime(options.time, fps);\n const frame = options?.frame;\n if (frame === undefined || frame === \"first\") return { kind: \"first\" };\n if (frame === \"last\") return { kind: \"last\" };\n if (typeof frame === \"number\") return { kind: \"frame\", frame };\n return frame;\n}\n\nfunction mimeOf(format: ScreenshotFormat): string {\n return format === \"jpeg\" ? \"image/jpeg\" : \"image/png\";\n}\n\n/**\n * A long-lived single-frame renderer.\n *\n * Where `exportScreenshot` is one frame from a standing start, this keeps the\n * expensive things — the renderer module, its GPU surface, and the\n * storage adapter's decoded-asset cache — alive across calls, so re-rendering\n * after an edit costs discovering one frame and a draw rather than a new GL\n * context. That is\n * the difference between a one-off capture and a builder that repaints while the\n * user types.\n *\n * It is also the *same* draw: {@link render} goes through `drawFrameAt`, which is\n * the pass the video exporter runs per frame. A preview and its exported image\n * cannot drift apart, because there is only one path.\n *\n * ```ts\n * const renderer = await createStillRenderer({ canvas, viewport, manifest, theme });\n * await renderer.render({ kind: \"still\", nodes: [\n * { id: \"bg\", type: \"rect\", parentId: null, layerOrder: 0, props: { width: 1920, height: 1080, fill: \"bg\" } },\n * ] });\n * const blob = await renderer.toBlob({ format: \"png\" });\n * renderer.dispose();\n * ```\n *\n * **The theme is process-global in core.** {@link render} re-applies the\n * document's (or this renderer's) before every draw, so two renderers with\n * different themes still each draw correctly; but anything else that calls\n * `setTheme` between a render and a read of the surface will have been\n * overwritten by the next render.\n *\n * **One surface, one caller at a time.** A render and the encode of its result\n * are two calls, and the next render draws over the surface between them, so\n * callers that share a renderer without knowing of each other must be queued —\n * as `session.image()` queues its calls.\n */\nexport class StillRenderer {\n readonly canvas: HTMLCanvasElement;\n\n private renderContext: BrowserRenderContext;\n private storageAdapter: StorageAdapter;\n private catalog: AssetCatalog;\n\n private readonly backend: BrowserRenderer;\n /** True when we made the canvas and must clean it up. */\n private readonly ownsCanvas: boolean;\n\n private viewportValue: Size2D;\n private readonly fpsValue: number;\n private readonly scaleValue: number;\n /** What the canvas is sized at now, which a call's own `scale` changes. */\n private surfaceScale: number;\n private manifest: AssetManifest;\n private theme?: Theme;\n private readonly registry: Registry;\n private disposed = false;\n /** False until a frame has been drawn onto the current surface; a remount clears it. */\n private drawn = false;\n\n /** @internal Use {@link createStillRenderer}, which loads the renderer first. */\n constructor(\n backend: BrowserRenderer,\n options: StillRendererOptions,\n ) {\n this.backend = backend;\n this.viewportValue = options.viewport ?? DEFAULT_OUTPUT.viewport;\n this.fpsValue = options.fps ?? DEFAULT_OUTPUT.fps;\n this.scaleValue = options.scale ?? 1;\n this.surfaceScale = this.scaleValue;\n this.manifest = options.manifest ?? EMPTY_MANIFEST;\n this.theme = options.theme;\n this.registry = options.registry ?? new Registry();\n\n this.ownsCanvas = options.canvas === undefined;\n this.canvas = options.canvas ?? document.createElement(\"canvas\");\n if (this.ownsCanvas) {\n this.canvas.style.display = \"none\";\n document.body.appendChild(this.canvas);\n }\n this.sizeCanvas();\n\n this.catalog = new ManifestAssetCatalog(this.manifest);\n this.storageAdapter = this.backend.createStorageAdapter({\n catalog: this.catalog, viewport: this.viewportValue, fps: this.fpsValue,\n });\n this.renderContext = this.backend.createRenderContext(this.storageAdapter);\n this.renderContext.mount(this.canvas);\n }\n\n get viewport(): Size2D { return this.viewportValue; }\n get fps(): number { return this.fpsValue; }\n get scale(): number { return this.scaleValue; }\n\n /**\n * Draw one frame of `source`, at this renderer's viewport — the surface is\n * the output, so it wins over any size the document asks for.\n */\n async render(source: StillSource, options?: RenderStillOptions): Promise<DrawnFrame> {\n this.assertLive();\n const scale = options?.scale ?? this.scaleValue;\n if (scale !== this.surfaceScale) this.remount(scale);\n await this.renderContext.whenMounted?.();\n\n const project = resolveProjectDocument(\n source, { viewport: this.viewportValue }, { viewport: this.viewportValue, fps: this.fpsValue },\n );\n\n const frame = await drawFrameAt({\n project,\n registry: this.registry,\n theme: this.theme,\n scale,\n renderContext: this.renderContext,\n storageAdapter: this.storageAdapter,\n assetCatalog: this.catalog,\n frame: stillFrameSpec(options, project.fps!),\n onIssue: options?.onIssue,\n });\n this.drawn = true;\n return frame;\n }\n\n /** Theme for a document that carries none of its own. */\n setTheme(theme?: Theme): void { this.theme = theme; }\n\n /** Swap the asset manifest, keeping every decode already cached. */\n setManifest(manifest: AssetManifest): void {\n this.assertLive();\n this.manifest = manifest;\n this.catalog = new ManifestAssetCatalog(manifest);\n this.storageAdapter.setCatalog(this.catalog);\n }\n\n /**\n * Change the output resolution.\n *\n * A full reset, unlike {@link setManifest}: the viewport clamps the resolution\n * images are decoded *at*, so cached decodes made for the old one would be\n * soft at the new one, and the render context's handlers captured the adapter\n * when they were built — so both are rebuilt. Call this when the output format\n * changes, not per edit.\n */\n setViewport(viewport: Size2D): void {\n this.assertLive();\n if (viewport.width === this.viewportValue.width && viewport.height === this.viewportValue.height) {\n return;\n }\n this.viewportValue = viewport;\n // Disposing the context disposes the adapter it holds, so this releases\n // the old surface, its handlers and every decode in one call.\n this.renderContext.dispose();\n this.storageAdapter = this.backend.createStorageAdapter({\n catalog: this.catalog, viewport, fps: this.fpsValue,\n });\n this.renderContext = this.backend.createRenderContext(this.storageAdapter);\n this.remount(this.scaleValue);\n }\n\n /** Encode the frame currently on the surface. */\n async toBytes(options?: EncodeStillOptions): Promise<Uint8Array> {\n const blob = await this.toBlob(options);\n return new Uint8Array(await blob.arrayBuffer());\n }\n\n /** Encode the frame currently on the surface. */\n toBlob(options?: EncodeStillOptions): Promise<Blob> {\n const canvas = this.snapshotToCanvas();\n const { format = \"png\", quality = 0.92 } = options ?? {};\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => blob\n ? resolve(blob)\n : reject(new Error(\"Still encode produced no data.\")),\n mimeOf(format),\n quality,\n );\n });\n }\n\n /** Encode the frame currently on the surface. */\n toDataURL(options?: EncodeStillOptions): string {\n const { format = \"png\", quality = 0.92 } = options ?? {};\n return this.snapshotToCanvas().toDataURL(mimeOf(format), quality);\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.renderContext.dispose();\n if (this.ownsCanvas) this.canvas.remove();\n }\n\n /**\n * Read the surface back into a 2D canvas, which is what actually encodes: the\n * renderers ship no image encoders, so the browser's own codecs are the only\n * ones available.\n */\n private snapshotToCanvas(): HTMLCanvasElement {\n this.assertLive();\n if (!this.drawn) throw new Error(\"Nothing has been rendered yet.\");\n const canvas = this.renderContext.snapshotCanvas?.();\n if (!canvas) throw new Error(\"Still encode: could not read the surface into a 2d canvas.\");\n return canvas;\n }\n\n private sizeCanvas(): void {\n this.canvas.width = this.viewportValue.width * this.surfaceScale;\n this.canvas.height = this.viewportValue.height * this.surfaceScale;\n }\n\n /** Resize the backing store and mount a fresh surface over it. */\n private remount(scale: number): void {\n this.surfaceScale = scale;\n this.drawn = false;\n this.sizeCanvas();\n this.renderContext.mount(this.canvas);\n }\n\n private assertLive(): void {\n if (this.disposed) throw new Error(\"This StillRenderer has been disposed.\");\n }\n}\n\n/** Create a {@link StillRenderer}; rejects with `WebGpuUnavailableError` without WebGPU. */\nexport async function createStillRenderer(\n options: StillRendererOptions = {},\n): Promise<StillRenderer> {\n return new StillRenderer(await loadRenderer(options), options);\n}\n", "import {\n BufferSource,\n BufferTarget,\n EncodedPacketSink,\n EncodedVideoPacketSource,\n Input,\n MP4,\n Output,\n StreamTarget,\n WEBM,\n type InputVideoTrack,\n type VideoCodec,\n} from \"mediabunny\";\n\nimport { audioTrackSource, formatSpec, type VideoFormat } from \"./formats\";\n\n/**\n * Join encoded MP4 or WebM segments end to end, without re-encoding.\n *\n * The point of this is what it *doesn't* do: no decode, no encode, no pixels.\n * Each segment is demuxed to its encoded packets, the packets are re-stamped onto\n * one continuous timeline, and a single muxer writes them into one container. The\n * bytes of every frame survive untouched, so the result is bit-identical to the\n * segments and the whole thing runs at I/O speed rather than encode speed.\n *\n * It exists so an export can be **split across workers**. Rendering a timeline is\n * embarrassingly parallel per scene — each scene's generator is independent — but\n * the output has to be one file, and re-encoding the parts to join them would give\n * back everything the parallelism won (and lose a generation of quality). Joining\n * at the packet level is what makes splitting worth doing.\n *\n * ## What the caller has to guarantee\n *\n * **Every segment must be encoded with an identical configuration** — same\n * container, codec, resolution and bitrate settings. A container carries exactly one decoder\n * configuration for a track, so a segment whose parameter sets differ from the\n * first would be described by a configuration that isn't its own, and decode as\n * garbage from that point on. That is not a theoretical concern: hardware encoders\n * are free to pick different parameter sets for the same nominal settings. This is\n * checked rather than assumed — see {@link ConcatMismatchError} — because the\n * failure is silent corruption rather than an exception.\n *\n * **Every segment must begin with a key frame.** Otherwise its first packets refer\n * back to frames that lived in the previous segment's GOP and no longer precede\n * them. Encoders start with a key frame by default; a caller choosing an explicit\n * `keyFrameInterval` needs it to divide the segment length.\n *\n * Audio is *muxed* here but never *joined*: the segments' own audio is ignored\n * entirely, and a single already-mixed buffer is encoded once across the whole\n * result (see {@link ConcatOptions.audio}). Concatenating separately-encoded AAC\n * would put the encoder's priming delay at every join — a click at each boundary\n * and a track that drifts further out of sync with every one — so the timeline's\n * audio is mixed in one pass by whoever owns the timeline, and arrives here as\n * one buffer.\n */\n\n/** Thrown when segments can't be joined losslessly. Carries which segment disagreed. */\nexport class ConcatMismatchError extends Error {\n constructor(\n /** Index of the offending segment in the input array. */\n readonly segment: number,\n message: string,\n ) {\n super(message);\n this.name = \"ConcatMismatchError\";\n }\n}\n\n/** One segment's demuxed video track, plus the config that describes it. */\ninterface Segment {\n format: VideoFormat;\n track: InputVideoTrack;\n config: VideoDecoderConfig;\n duration: number;\n}\n\n/**\n * Two decoder configurations describe the same bitstream.\n *\n * `description` holds the codec's parameter sets (the `avcC` box for H.264) and is\n * the field that actually decides decodability — a differing one is exactly the\n * silent-corruption case. Compared bytewise; the rest are compared by value.\n */\nfunction sameDecoderConfig(a: VideoDecoderConfig, b: VideoDecoderConfig): boolean {\n if (a.codec !== b.codec) return false;\n if (a.codedWidth !== b.codedWidth) return false;\n if (a.codedHeight !== b.codedHeight) return false;\n\n const da = toBytes(a.description);\n const db = toBytes(b.description);\n if (da === null || db === null) return da === db;\n if (da.length !== db.length) return false;\n for (let i = 0; i < da.length; i++) {\n if (da[i] !== db[i]) return false;\n }\n return true;\n}\n\nfunction toBytes(description: VideoDecoderConfig[\"description\"]): Uint8Array | null {\n if (!description) return null;\n // `description` is a BufferSource: an ArrayBuffer, a SharedArrayBuffer, or any\n // view over one. Views carry an offset into a larger buffer, so they must be\n // narrowed rather than wrapped whole.\n if (ArrayBuffer.isView(description)) {\n return new Uint8Array(description.buffer, description.byteOffset, description.byteLength);\n }\n return new Uint8Array(description);\n}\n\nexport interface ConcatOptions {\n /**\n * One continuous audio track for the whole joined timeline.\n *\n * Mixed once by the caller (see `mixTimelineAudio`) rather than per segment,\n * and that is not a convenience: separately-encoded AAC carries an encoder\n * priming delay at the head of each piece, so joining them puts a click at\n * every scene boundary and drifts the track further out of sync with each\n * one. One buffer in, one encode, no seams.\n */\n audio?: AudioBuffer | null;\n /** Bitrate for that track: AAC in an MP4, Opus in a WebM. Defaults to 192 kbps. */\n audioBitrate?: number;\n /**\n * Write the result out as it is muxed instead of returning it.\n *\n * With this the joined file never exists in memory as one buffer, which is\n * the difference between an export the process can hold and one it can't:\n * a 4× 60fps render is hundreds of megabytes, and the default path costs\n * roughly twice that at the tail once the `Blob` copy is counted.\n *\n * **Chunks carry a byte `position` and do not arrive in file order** — a\n * muxer seeks back to patch atom sizes. A sink that appends will produce a\n * file of exactly the right length whose size fields belong to a different\n * one: unplayable, and indistinguishable from success until it is opened.\n * Honour `position`.\n *\n * `concatVideoSegments` resolves to an empty array when this is used; the\n * bytes went to the sink.\n */\n stream?: WritableStream<{ type: \"write\"; data: Uint8Array; position: number }>;\n}\n\n/** Joins segments one at a time, in timeline order, as each becomes available. */\nexport interface SegmentJoiner {\n /**\n * Mux the next segment after the ones already appended. Appends must not\n * overlap: await each before starting the next.\n *\n * @throws {ConcatMismatchError} as {@link concatVideoSegments} does.\n */\n append(segment: Uint8Array): Promise<void>;\n /** Finish the container. The bytes, or an empty array when they went to `stream`. */\n finish(): Promise<Uint8Array>;\n /** Abandon the join; nothing more is written. */\n cancel(): Promise<void>;\n}\n\n/**\n * {@link concatVideoSegments} one segment at a time, so a split export can write\n * each piece the moment it and every piece before it exist, instead of holding\n * every segment until the last one lands.\n *\n * The audio, when given, is encoded as soon as the first segment fixes the\n * container, ahead of the video: the muxer holds the (small) audio packets and\n * interleaves them as the video catches up.\n */\nexport function createSegmentJoiner(options: ConcatOptions = {}): SegmentJoiner {\n let first: Segment | null = null;\n let output: Output | null = null;\n let source: EncodedVideoPacketSource | null = null;\n let audioSource: ReturnType<typeof audioTrackSource> | null = null;\n let target: StreamTarget | BufferTarget | null = null;\n let index = 0;\n let offset = 0;\n\n const start = async (segment: Segment) => {\n target = options.stream\n ? new StreamTarget(options.stream as ConstructorParameters<typeof StreamTarget>[0])\n : new BufferTarget();\n output = new Output({ format: formatSpec(segment.format).container(), target });\n // `codec` comes off the track rather than the decoder config: the latter's\n // `codec` is the full codec *string* (`avc1.64001f`), while the source wants\n // the family.\n source = new EncodedVideoPacketSource(segment.track.codec as VideoCodec);\n output.addVideoTrack(source);\n // Declared before `start()`: a muxer fixes its track list up front.\n audioSource = options.audio ? audioTrackSource(segment.format, options.audioBitrate) : null;\n if (audioSource) output.addAudioTrack(audioSource);\n await output.start();\n if (audioSource && options.audio) await audioSource.add(options.audio);\n };\n\n return {\n async append(bytes) {\n const i = index++;\n const input = new Input({ source: new BufferSource(bytes), formats: [MP4, WEBM] });\n try {\n const segment = await openSegment(input, i, first);\n if (!first) {\n first = segment;\n await start(segment);\n }\n // The decoder config is handed over with each segment's first packet.\n // Only the first can take effect (a container holds one per track), but\n // every one has been checked equal to it.\n let leading = true;\n for await (const packet of new EncodedPacketSink(segment.track).packets()) {\n await source!.add(\n packet.clone({ timestamp: packet.timestamp + offset }),\n leading ? { decoderConfig: segment.config } : undefined,\n );\n leading = false;\n }\n // The segment's own duration rather than its last packet's end: summing\n // packet durations accumulates rounding into a drift across many segments.\n offset += segment.duration;\n } finally {\n input.dispose();\n }\n },\n async finish() {\n if (!output) throw new Error(\"concatVideoSegments: no segments\");\n source!.close();\n audioSource?.close();\n await output.finalize();\n if (options.stream) return new Uint8Array(0);\n const buffer = (target as BufferTarget).buffer;\n if (!buffer) throw new Error(\"concatVideoSegments produced no data\");\n return new Uint8Array(buffer);\n },\n async cancel() {\n if (output && output.state !== \"finalized\" && output.state !== \"canceled\") await output.cancel();\n },\n };\n}\n\n/** Demux one segment and check it can follow `first`. */\nasync function openSegment(input: Input, i: number, first: Segment | null): Promise<Segment> {\n const format: VideoFormat = (await input.getFormat()) === WEBM ? \"webm\" : \"mp4\";\n if (first && format !== first.format) {\n throw new ConcatMismatchError(i, `Segment ${i} is ${format} and segment 0 is ${first.format}.`);\n }\n const track = await input.getPrimaryVideoTrack();\n if (!track) throw new ConcatMismatchError(i, `Segment ${i} has no video track.`);\n const config = await track.getDecoderConfig();\n if (!config) throw new ConcatMismatchError(i, `Segment ${i} has no decoder configuration.`);\n if (first && !sameDecoderConfig(first.config, config)) {\n throw new ConcatMismatchError(\n i,\n `Segment ${i} was encoded differently from segment 0 (${first.config.codec} `\n + `${first.config.codedWidth}x${first.config.codedHeight} vs ${config.codec} `\n + `${config.codedWidth}x${config.codedHeight}); joining them would decode as garbage.`,\n );\n }\n return { format, track, config, duration: await track.computeDuration() };\n}\n\n/**\n * Concatenate `segments` (each a complete MP4, or each a complete WebM) into one\n * file of the same container.\n *\n * Segments are joined in array order. Returns the muxed bytes.\n *\n * @throws {ConcatMismatchError} if a segment carries no video track, is in another\n * container than the first, or has a decoder configuration that differs\n * from the first segment's. Callers that can\n * fall back to a single-threaded export should catch this and do so — the\n * alternative is shipping a file that decodes into garbage halfway through.\n */\nexport async function concatVideoSegments(\n segments: Uint8Array[],\n options: ConcatOptions = {},\n): Promise<Uint8Array> {\n if (segments.length === 0) throw new Error(\"concatVideoSegments: no segments\");\n // A lone segment is already the finished file — unless a track has to be added\n // to it, or it has to go to a sink, either of which means muxing after all.\n if (segments.length === 1 && !options.audio && !options.stream) return segments[0];\n\n const joiner = createSegmentJoiner(options);\n try {\n for (const segment of segments) await joiner.append(segment);\n return await joiner.finish();\n } catch (error) {\n await joiner.cancel().catch(() => {});\n throw error;\n }\n}\n", "import { DEFAULT_OUTPUT, placeTracks, Registry, renderIssueKey, resolveProjectDocument, totalFramesOf, type AssetManifest } from \"@motionscript/core\";\nimport { createSegmentJoiner, type ConcatOptions } from \"../concat\";\nimport { exportGeometry, plainVideoEncoding, resolveVideoEncoding, type ExportParams } from \"../exporter\";\nimport { formatSpec } from \"../formats\";\nimport { mixTimelineAudio } from \"../mix-timeline-audio\";\nimport type { ExportLane, SegmentSpec } from \"./lane\";\nimport { planChunks } from \"./plan\";\nimport { runLanes } from \"./run-lanes\";\n\nexport interface ParallelExportParams extends Omit<ExportParams, \"frames\" | \"returnBytes\" | \"filename\"> {\n /**\n * Where the frames are drawn, most preferred first. Every run starts on the\n * first alone and admits the next only while that raises throughput (see\n * `LaneGovernor`), so the first should be the warmest: usually `localLane()`.\n */\n lanes: readonly ExportLane[];\n /** Write the file here as it is joined; the call then resolves to an empty array. See `ConcatOptions.stream`. */\n stream?: ConcatOptions[\"stream\"];\n /** Seconds per chunk; by default from the timeline's length and the lane count. */\n chunkSeconds?: number;\n /** Handed to every lane in its spec, for what only the host knows (see `serveExportLane`). */\n host?: unknown;\n /** How many lanes are rendering, each time that changes. */\n onLanes?: (active: number) => void;\n}\n\nconst EMPTY_MANIFEST: AssetManifest = { image: {}, video: {}, audio: {}, font: {} };\nconst DEFAULT_SUPERSAMPLE = 2;\n/** The share of progress drawing takes; finishing the file is the rest. */\nconst DRAWN = 0.97;\n\n/**\n * {@link exportVideo}, rendered in chunks across `lanes` and joined into one\n * file without re-encoding.\n *\n * Each chunk is a frame range of the **whole** project, so layered and gapped\n * timelines split like any other. Every chunk is encoded with one pinned\n * configuration, the audio is mixed once over the whole timeline while the frames\n * render (joined AAC would click at every seam), and each chunk is muxed the\n * moment it and the ones before it are done. Progress is frames drawn across\n * every lane, so it climbs smoothly and never goes back.\n */\nexport async function exportVideoParallel(params: ParallelExportParams): Promise<Uint8Array> {\n const {\n registry = new Registry(), scale = 1, format = \"mp4\", manifest = EMPTY_MANIFEST,\n includeAudio = true, audio = {}, signal, onProgress, supersample = DEFAULT_SUPERSAMPLE,\n } = params;\n if (formatSpec(format).kind !== \"video\") {\n throw new RangeError(`exportVideoParallel writes video; \"${format}\" is audio, which exportAudio writes.`);\n }\n const project = resolveProjectDocument(params.document, params, DEFAULT_OUTPUT);\n if (project.tracks.length === 0) throw new Error(\"exportVideoParallel: the project has no tracks.\");\n signal?.throwIfAborted();\n const fps = project.fps!;\n const totalFrames = totalFramesOf(placeTracks(project.tracks, fps));\n\n const { output } = exportGeometry(project.viewport!, scale, supersample);\n const encoding = plainVideoEncoding(await resolveVideoEncoding(params.video, format, output, fps), output);\n const spec: SegmentSpec = {\n project, manifest, theme: params.theme, scale, supersample, format, encoding, host: params.host,\n };\n const chunks = planChunks(totalFrames, {\n fps, keyFrameInterval: encoding.keyFrameInterval, lanes: params.lanes.length, chunkSeconds: params.chunkSeconds,\n });\n\n // Started now so it is ready by the first join; failures surface there.\n const mixed = includeAudio\n ? mixTimelineAudio({\n document: project, registry, manifest, sampleRate: audio.sampleRate,\n rendererWasmUrl: params.rendererWasmUrl,\n })\n : Promise.resolve(null);\n mixed.catch(() => {});\n\n let reported = 0;\n const seenIssues = new Set<string>();\n const report = (p: number) => {\n if (p <= reported) return;\n reported = p;\n onProgress?.(p);\n };\n\n // One signal for both ways a run ends early: the caller cancelling, and the join failing.\n const run = new AbortController();\n const abortRun = () => run.abort(signal?.reason);\n if (signal?.aborted) abortRun();\n signal?.addEventListener(\"abort\", abortRun, { once: true });\n\n // Keyed by first frame: a merged range spans several planned chunks.\n const ready = new Map<number, { end: number; bytes: Uint8Array }>();\n let joinedTo = 0;\n let joining: Promise<void> = Promise.resolve();\n let joiner: ReturnType<typeof createSegmentJoiner> | null = null;\n const pump = () => {\n joining = joining.then(async () => {\n while (ready.has(joinedTo)) {\n joiner ??= createSegmentJoiner({ stream: params.stream, audio: await mixed, audioBitrate: audio.bitrate });\n const { end, bytes } = ready.get(joinedTo)!;\n ready.delete(joinedTo);\n joinedTo = end;\n await joiner.append(bytes);\n }\n });\n return joining;\n };\n\n try {\n await runLanes({\n lanes: params.lanes, spec, chunks, signal: run.signal,\n onIssue: (issue) => {\n const key = renderIssueKey(issue);\n if (seenIssues.has(key)) return;\n seenIssues.add(key);\n params.onIssue?.(issue);\n },\n onFrames: (frames) => report(DRAWN * Math.min(1, frames / totalFrames)),\n onActive: params.onLanes,\n onChunk: (chunk, bytes) => {\n ready.set(chunk.start, { end: chunk.end, bytes });\n pump().catch((error: unknown) => run.abort(error));\n },\n });\n await pump();\n if (joinedTo !== totalFrames) throw new Error(`exportVideoParallel: joined ${joinedTo} of ${totalFrames} frames.`);\n const bytes = await joiner!.finish();\n report(1);\n return bytes;\n } catch (error) {\n await joining.catch(() => {});\n await (joiner as ReturnType<typeof createSegmentJoiner> | null)?.cancel().catch(() => {});\n throw error;\n } finally {\n signal?.removeEventListener(\"abort\", abortRun);\n }\n}\n", "/** Frames `[start, end)` of the timeline, rendered as one complete segment file. */\nexport interface ExportChunk {\n index: number;\n start: number;\n end: number;\n}\n\nexport interface ChunkPlanOptions {\n fps: number;\n /** Seconds between key frames; every chunk but the last is a whole number of them. */\n keyFrameInterval: number;\n /** The most lanes that may render at once. */\n lanes: number;\n /** Overrides the chunk length the plan would pick, in seconds. */\n chunkSeconds?: number;\n}\n\nconst MIN_CHUNK_SECONDS = 2;\nconst MAX_CHUNK_SECONDS = 6;\n/** Chunks per lane: enough that lanes finish close together, few enough that a chunk's setup stays small. */\nconst CHUNKS_PER_LANE = 4;\n\n/**\n * Cut the timeline into chunks in timeline order.\n *\n * A chunk starts on a key-frame boundary of the whole timeline, so the joined\n * file keeps the key-frame rhythm a single export would have.\n */\nexport function planChunks(totalFrames: number, options: ChunkPlanOptions): ExportChunk[] {\n if (!Number.isInteger(totalFrames) || totalFrames <= 0) return [];\n const unit = Math.max(1, Math.round(options.fps * (options.keyFrameInterval > 0 ? options.keyFrameInterval : 1)));\n const seconds = options.chunkSeconds\n ?? Math.min(MAX_CHUNK_SECONDS, Math.max(MIN_CHUNK_SECONDS, totalFrames / options.fps / (Math.max(1, options.lanes) * CHUNKS_PER_LANE)));\n const size = Math.max(unit, Math.round((seconds * options.fps) / unit) * unit);\n\n const chunks: ExportChunk[] = [];\n for (let start = 0; start < totalFrames; start += size) {\n chunks.push({ index: chunks.length, start, end: Math.min(totalFrames, start + size) });\n }\n // A sliver of a last chunk costs a whole chunk's setup; fold it into the one before.\n const last = chunks[chunks.length - 1];\n if (chunks.length > 1 && last.end - last.start < unit) {\n chunks.pop();\n chunks[chunks.length - 1].end = last.end;\n }\n return chunks;\n}\n", "/**\n * Decides how many lanes render at once, from what the run itself measures.\n *\n * Lanes do not add throughput for free. Every lane's encoder, and on a WebGPU\n * canvas its frame capture, run in the browser's one GPU process, so once a lane\n * spends its time waiting on the encoder rather than drawing, a second lane only\n * splits the same encoder between two sessions and the export gets slower. The\n * governor starts with one lane, adds the next only while lanes are mostly\n * drawing, keeps it only if total throughput rose, and then settles.\n */\nexport interface GovernorOptions {\n /** Lanes available, the first being the one every run starts with. */\n lanes: number;\n /** How long a configuration is measured before it is judged, in ms. */\n windowMs?: number;\n /** Frames a window needs before it is judged. */\n minFrames?: number;\n /** Above this share of time waiting on the encoder, another lane cannot help. */\n maxWaitShare?: number;\n /** A lane is kept only if it raises throughput by at least this factor. */\n minGain?: number;\n /** How long the newest lane draws before it is measured: its first frames wait on loads and a cold encoder. */\n warmupMs?: number;\n}\n\nexport interface FrameSample {\n lane: number;\n frames: number;\n busyMs: number;\n waitMs: number;\n at: number;\n}\n\ninterface Window {\n start: number | null;\n frames: number;\n busyMs: number;\n waitMs: number;\n}\n\nexport class LaneGovernor {\n private _active = 1;\n private _settled: boolean;\n private _window: Window = emptyWindow();\n private _previousFps = 0;\n private _newestFirstAt: number | null = null;\n private readonly _windowMs: number;\n private readonly _minFrames: number;\n private readonly _maxWaitShare: number;\n private readonly _minGain: number;\n private readonly _warmupMs: number;\n\n constructor(private readonly _options: GovernorOptions) {\n this._windowMs = _options.windowMs ?? 1500;\n this._minFrames = _options.minFrames ?? 24;\n this._maxWaitShare = _options.maxWaitShare ?? 0.45;\n this._minGain = _options.minGain ?? 1.1;\n this._warmupMs = _options.warmupMs ?? 300;\n this._settled = _options.lanes <= 1;\n }\n\n /** Lanes `0..active-1` may take chunks. */\n get active(): number {\n return this._active;\n }\n\n get settled(): boolean {\n return this._settled;\n }\n\n /** Stop measuring once a lane dies: the run continues on at most `alive` lanes. */\n laneLost(alive: number): void {\n this._active = Math.max(1, Math.min(this._active, alive));\n this._settled = true;\n }\n\n /**\n * Record frames a lane drew. Returns the new active count when it changed.\n * A window opens once the newest lane has drawn for `warmupMs`, so its\n * start-up is not counted against it.\n */\n record(sample: FrameSample): number | null {\n if (this._settled || sample.lane >= this._active) return null;\n const w = this._window;\n if (w.start === null) {\n if (sample.lane !== this._active - 1) return null;\n this._newestFirstAt ??= sample.at;\n if (sample.at - this._newestFirstAt >= this._warmupMs) w.start = sample.at;\n return null;\n }\n w.frames += sample.frames;\n w.busyMs += sample.busyMs;\n w.waitMs += sample.waitMs;\n const elapsed = sample.at - w.start;\n if (elapsed < this._windowMs || w.frames < this._minFrames) return null;\n\n const fps = (w.frames * 1000) / elapsed;\n const waitShare = w.waitMs / Math.max(1, w.busyMs + w.waitMs);\n const before = this._active;\n if (this._active > 1 && fps < this._previousFps * this._minGain) {\n this._active -= 1;\n this._settled = true;\n } else if (waitShare <= this._maxWaitShare && this._active < this._options.lanes) {\n this._previousFps = fps;\n this._active += 1;\n } else {\n this._settled = true;\n }\n this._window = emptyWindow();\n this._newestFirstAt = null;\n return this._active !== before ? this._active : null;\n }\n}\n\nfunction emptyWindow(): Window {\n return { start: null, frames: 0, busyMs: 0, waitMs: 0 };\n}\n", "import type { RenderIssue } from \"@motionscript/core\";\nimport { LaneGovernor, type GovernorOptions } from \"./governor\";\nimport type { ExportLane, LaneReport, LaneSession, SegmentSpec } from \"./lane\";\nimport type { ExportChunk } from \"./plan\";\n\nexport interface RunLanesOptions {\n lanes: readonly ExportLane[];\n spec: SegmentSpec;\n chunks: readonly ExportChunk[];\n /**\n * A finished range, in whatever order ranges finish. Once the governor\n * settles, adjacent chunks still queued are merged, so a range can span\n * several of the planned chunks; it is named by the first.\n */\n onChunk: (chunk: ExportChunk, bytes: Uint8Array) => void;\n /** Frames drawn so far across every lane. Drops when a failed range's frames are discarded. */\n onFrames?: (frames: number) => void;\n /** The active lane count, each time it changes. */\n onActive?: (active: number) => void;\n /** A render issue a lane reported (a range retried elsewhere may report one twice). */\n onIssue?: (issue: RenderIssue) => void;\n governor?: Omit<GovernorOptions, \"lanes\">;\n now?: () => number;\n signal?: AbortSignal;\n}\n\n/** Tries a range gets before the run fails: once on its lane, once more on another. */\nconst ATTEMPTS = 2;\n\ninterface Job {\n chunk: ExportChunk;\n attempts: number;\n}\n\n/**\n * Render every chunk across the lanes the governor admits, pulling from one queue\n * in timeline order, so the earliest finish first and the join rarely waits.\n *\n * Small chunks are what let the governor measure early and lanes share the work,\n * but each costs a fresh encoder and scene build; once the governor settles, a\n * lane takes its share of what is left as one merged range instead (all of it,\n * when one lane is running). A lane opens only once admitted, so a window that\n * is not needed never competes with the first for the GPU. A range that fails is\n * retried once on another lane and its lane is retired; a second failure, or the\n * caller's abort, ends the run.\n */\nexport async function runLanes(options: RunLanesOptions): Promise<void> {\n const { lanes, spec, chunks, signal } = options;\n const now = options.now ?? (() => performance.now());\n if (lanes.length === 0) throw new Error(\"runLanes: no lanes\");\n if (chunks.length === 0) return;\n\n const controller = new AbortController();\n const abort = () => controller.abort(signal?.reason);\n if (signal?.aborted) abort();\n signal?.addEventListener(\"abort\", abort, { once: true });\n\n const governor = new LaneGovernor({ lanes: lanes.length, ...options.governor });\n const queue: Job[] = chunks.map((chunk) => ({ chunk, attempts: 0 }));\n const inFlight = new Map<Job, number>();\n const dead = new Set<number>();\n let doneFrames = 0;\n let remaining = chunks.reduce((sum, c) => sum + (c.end - c.start), 0);\n let failure: unknown = null;\n\n let wake: () => void = () => {};\n let woken = new Promise<void>((resolve) => (wake = resolve));\n const notify = () => {\n const resolve = wake;\n woken = new Promise<void>((r) => (wake = r));\n resolve();\n };\n controller.signal.addEventListener(\"abort\", notify, { once: true });\n\n const alive = () => lanes.length - dead.size;\n const admitted = (i: number) => {\n let rank = 0;\n for (let j = 0; j < i; j++) if (!dead.has(j)) rank++;\n return rank < governor.active;\n };\n const retire = (i: number) => {\n dead.add(i);\n governor.laneLost(alive());\n options.onActive?.(governor.active);\n notify();\n };\n const framesDrawn = () => {\n let frames = doneFrames;\n for (const f of inFlight.values()) frames += f;\n return frames;\n };\n const take = (): Job => {\n const job = queue.shift()!;\n if (!governor.settled || job.attempts > 0) return job;\n const queued = queue.reduce((sum, j) => sum + (j.chunk.end - j.chunk.start), job.chunk.end - job.chunk.start);\n const share = Math.ceil(queued / (governor.active === 1 ? 1 : governor.active * 2));\n let { end } = job.chunk;\n while (queue.length > 0 && queue[0].attempts === 0 && queue[0].chunk.start === end && end - job.chunk.start < share) {\n end = queue.shift()!.chunk.end;\n }\n return { chunk: { ...job.chunk, end }, attempts: 0 };\n };\n\n const runLane = async (i: number): Promise<void> => {\n while (!admitted(i) && remaining > 0 && !controller.signal.aborted && !dead.has(i)) await woken;\n if (remaining === 0 || controller.signal.aborted || dead.has(i)) return;\n\n let opened: LaneSession;\n try {\n opened = await lanes[i].open(spec, controller.signal);\n } catch (error) {\n if (controller.signal.aborted) return;\n if (alive() <= 1) throw error;\n console.warn(`[motionscript] export lane ${i} failed to open; continuing without it.`, error);\n retire(i);\n return;\n }\n try {\n for (;;) {\n controller.signal.throwIfAborted();\n if (remaining === 0) return;\n if (!admitted(i) || queue.length === 0) {\n await woken;\n continue;\n }\n const job = take();\n const frames = job.chunk.end - job.chunk.start;\n const reported: LaneReport = { frames: 0, busyMs: 0, waitMs: 0 };\n inFlight.set(job, 0);\n try {\n const bytes = await opened.render(job.chunk, (report) => {\n const changed = governor.record({\n lane: i,\n frames: report.frames - reported.frames,\n busyMs: report.busyMs - reported.busyMs,\n waitMs: report.waitMs - reported.waitMs,\n at: now(),\n });\n for (const issue of report.issues ?? []) options.onIssue?.(issue);\n Object.assign(reported, { frames: report.frames, busyMs: report.busyMs, waitMs: report.waitMs });\n inFlight.set(job, report.frames);\n options.onFrames?.(framesDrawn());\n if (changed !== null) {\n options.onActive?.(changed);\n notify();\n }\n }, controller.signal);\n inFlight.delete(job);\n doneFrames += frames;\n remaining -= frames;\n options.onFrames?.(framesDrawn());\n options.onChunk(job.chunk, bytes);\n notify();\n } catch (error) {\n inFlight.delete(job);\n if (controller.signal.aborted) throw error;\n if (++job.attempts >= ATTEMPTS || alive() <= 1) throw error;\n console.warn(`[motionscript] export lane ${i} failed frames ${job.chunk.start} to ${job.chunk.end}; retrying on another lane.`, error);\n queue.unshift(job);\n options.onFrames?.(framesDrawn());\n retire(i);\n return;\n }\n }\n } finally {\n opened.close();\n }\n };\n\n try {\n await Promise.all(lanes.map((_, i) => runLane(i).catch((error: unknown) => {\n failure ??= error;\n controller.abort(error);\n })));\n if (failure) throw failure;\n if (remaining > 0) throw new Error(`runLanes: ${remaining} frames were never rendered.`);\n } finally {\n signal?.removeEventListener(\"abort\", abort);\n }\n}\n", "import { Registry, type RenderIssue } from \"@motionscript/core\";\nimport { renderTimeline, type VideoFrameSink } from \"../frame-loop\";\nimport { exportGeometry, MediabunnyVideoSink, openExportSurface } from \"../exporter\";\nimport type { LaneEnvironment, LaneReport, LaneSession, SegmentSpec } from \"./lane\";\n\n/** How often a lane reports its frames, in ms. */\nconst REPORT_EVERY_MS = 100;\n\n/**\n * Open one surface for the whole export and render chunk after chunk onto it.\n * The surface is the expensive part (a WebGPU one takes up to a second and a\n * half to start), and decoded fonts and pictures stay in its storage between\n * chunks; each chunk still gets its own encoder, so it is its own file.\n */\nexport async function openSegmentSession(spec: SegmentSpec, env: LaneEnvironment): Promise<LaneSession> {\n const { project } = spec;\n const viewport = project.viewport!;\n const fps = project.fps!;\n const registry = env.registry ?? new Registry();\n const { output, oversample, renderScale } = exportGeometry(viewport, spec.scale, spec.supersample);\n const surface = await openExportSurface({\n canvasSize: { width: output.width * oversample, height: output.height * oversample },\n viewport, fps, manifest: spec.manifest, rendererWasmUrl: env.rendererWasmUrl,\n });\n\n return {\n async render(chunk, onReport, signal) {\n const sink = new TimedSink(new MediabunnyVideoSink(surface.canvas, output, spec.format, spec.encoding), onReport);\n const bytes = await renderTimeline<AudioBuffer>({\n project, registry, theme: spec.theme, scale: renderScale, includeAudio: false,\n frames: { start: chunk.start, end: chunk.end },\n renderContext: surface.renderContext, storageAdapter: surface.storageAdapter, assetCatalog: surface.assetCatalog,\n sink, signal,\n onIssue: (issue) => sink.issues.push(issue),\n });\n sink.flush();\n if (!bytes) throw new Error(`Frames ${chunk.start} to ${chunk.end} produced no bytes.`);\n return bytes;\n },\n close: () => surface.dispose(),\n };\n}\n\n/** Times each frame: drawing is the gap between frames, waiting is the encoder's backpressure. */\nclass TimedSink implements VideoFrameSink<AudioBuffer> {\n readonly issues: RenderIssue[] = [];\n private _frames = 0;\n private _busyMs = 0;\n private _waitMs = 0;\n private _lastEnd = 0;\n private _lastReport = 0;\n\n constructor(\n private readonly _inner: MediabunnyVideoSink,\n private readonly _onReport: (report: LaneReport) => void,\n ) { }\n\n async start(info: Parameters<MediabunnyVideoSink[\"start\"]>[0]): Promise<void> {\n await this._inner.start(info);\n this._lastEnd = this._lastReport = performance.now();\n }\n\n async addFrame(timestamp: number, duration: number): Promise<void> {\n const before = performance.now();\n this._busyMs += before - this._lastEnd;\n await this._inner.addFrame(timestamp, duration);\n const after = performance.now();\n this._waitMs += after - before;\n this._lastEnd = after;\n this._frames++;\n if (after - this._lastReport >= REPORT_EVERY_MS) {\n this._lastReport = after;\n this.flush();\n }\n }\n\n finalize(): Promise<Uint8Array> {\n return this._inner.finalize();\n }\n\n flush(): void {\n const issues = this.issues.splice(0);\n this._onReport({ frames: this._frames, busyMs: this._busyMs, waitMs: this._waitMs, ...(issues.length > 0 && { issues }) });\n }\n}\n", "import type { ExportLane, LaneEnvironment, LaneReport, LaneSession, SegmentSpec } from \"./lane\";\nimport type { ExportChunk } from \"./plan\";\nimport { openSegmentSession } from \"./session\";\n\n/** A lane that renders in this realm, with its renderer, registry and warm caches. */\nexport function localLane(env: LaneEnvironment = {}): ExportLane {\n return { open: (spec) => openSegmentSession(spec, env) };\n}\n\ntype ToLane =\n | { t: \"open\"; id: number; spec: SegmentSpec }\n | { t: \"render\"; id: number; session: number; chunk: ExportChunk }\n | { t: \"abort\"; id: number }\n | { t: \"close\"; id: number };\n\ntype FromLane =\n | { t: \"opened\"; id: number }\n | { t: \"report\"; id: number; report: LaneReport }\n | { t: \"done\"; id: number; bytes: Uint8Array }\n | { t: \"error\"; id: number; message: string; name: string };\n\n/** The error a lane sent back, keeping its name so a host can tell a cancel from a failure. */\nfunction laneError(message: string, name: string): Error {\n const error = new Error(message);\n error.name = name;\n return error;\n}\n\nexport interface MessagePortLaneOptions {\n /** Settles when the realm behind the port is gone, failing whatever it was doing. */\n lost?: Promise<unknown>;\n}\n\n/**\n * A lane on the far side of `port`, which {@link serveExportLane} answers. The\n * finished segment comes back as a transferred buffer, never a copy.\n */\nexport function messagePortLane(port: MessagePort, options: MessagePortLaneOptions = {}): ExportLane {\n let next = 1;\n let gone: Error | null = null;\n const pending = new Map<number, { resolve: (msg: FromLane) => void; reject: (error: Error) => void; onReport?: (r: LaneReport) => void }>();\n\n port.addEventListener(\"message\", (event: MessageEvent<FromLane>) => {\n const msg = event.data;\n const entry = pending.get(msg.id);\n if (!entry) return;\n if (msg.t === \"report\") {\n entry.onReport?.(msg.report);\n return;\n }\n pending.delete(msg.id);\n if (msg.t === \"error\") entry.reject(laneError(msg.message, msg.name));\n else entry.resolve(msg);\n });\n port.start();\n\n const fail = (reason: string) => {\n gone ??= new Error(reason);\n for (const entry of pending.values()) entry.reject(gone);\n pending.clear();\n };\n port.addEventListener(\"close\", () => fail(\"The export lane closed.\"));\n void options.lost?.then(() => fail(\"The export lane was lost.\"), () => fail(\"The export lane was lost.\"));\n\n const call = (msg: ToLane, signal: AbortSignal, onReport?: (r: LaneReport) => void) =>\n new Promise<FromLane>((resolve, reject) => {\n if (gone) return reject(gone);\n if (signal.aborted) return reject(signal.reason);\n const onAbort = () => {\n pending.delete(msg.id);\n port.postMessage({ t: \"abort\", id: msg.id } satisfies ToLane);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n pending.set(msg.id, {\n resolve: (m) => { signal.removeEventListener(\"abort\", onAbort); resolve(m); },\n reject: (e) => { signal.removeEventListener(\"abort\", onAbort); reject(e); },\n onReport,\n });\n port.postMessage(msg);\n });\n\n return {\n async open(spec, signal) {\n const session = next++;\n await call({ t: \"open\", id: session, spec }, signal);\n return {\n async render(chunk, onReport, renderSignal) {\n const reply = await call({ t: \"render\", id: next++, session, chunk }, renderSignal, onReport);\n return (reply as Extract<FromLane, { t: \"done\" }>).bytes;\n },\n close() {\n if (!gone) port.postMessage({ t: \"close\", id: session } satisfies ToLane);\n },\n } satisfies LaneSession;\n },\n };\n}\n\n/**\n * Answer a {@link messagePortLane} from this realm. `resolve` supplies what the\n * realm renders with, given the spec (its `host` field carries anything the\n * coordinator's host wanted this side to know). Returns a function that stops\n * serving and closes every open session.\n */\nexport function serveExportLane(\n port: MessagePort,\n resolve: (spec: SegmentSpec) => LaneEnvironment | Promise<LaneEnvironment>,\n): () => void {\n const sessions = new Map<number, Promise<LaneSession>>();\n const renders = new Map<number, AbortController>();\n const reply = (msg: FromLane, transfer: Transferable[] = []) => port.postMessage(msg, transfer);\n const replyError = (id: number, error: unknown) => reply({\n t: \"error\", id,\n message: error instanceof Error ? error.message : String(error),\n name: error instanceof Error ? error.name : \"Error\",\n });\n\n const onMessage = async (event: MessageEvent<ToLane>) => {\n const msg = event.data;\n switch (msg.t) {\n case \"open\": {\n const opening = Promise.resolve(resolve(msg.spec)).then((env) => openSegmentSession(msg.spec, env));\n sessions.set(msg.id, opening);\n try {\n await opening;\n reply({ t: \"opened\", id: msg.id });\n } catch (error) {\n sessions.delete(msg.id);\n replyError(msg.id, error);\n }\n return;\n }\n case \"render\": {\n const controller = new AbortController();\n renders.set(msg.id, controller);\n try {\n const session = await sessions.get(msg.session);\n if (!session) throw new Error(`No open export session ${msg.session}.`);\n const bytes = await session.render(msg.chunk, (report) => reply({ t: \"report\", id: msg.id, report }), controller.signal);\n const whole = bytes.byteOffset === 0 && bytes.byteLength === bytes.buffer.byteLength ? bytes : bytes.slice();\n reply({ t: \"done\", id: msg.id, bytes: whole }, [whole.buffer]);\n } catch (error) {\n if (!controller.signal.aborted) replyError(msg.id, error);\n } finally {\n renders.delete(msg.id);\n }\n return;\n }\n case \"abort\":\n renders.get(msg.id)?.abort(new DOMException(\"Export cancelled.\", \"AbortError\"));\n return;\n case \"close\": {\n const session = sessions.get(msg.id);\n sessions.delete(msg.id);\n void session?.then((s) => s.close(), () => {});\n return;\n }\n }\n };\n\n port.addEventListener(\"message\", onMessage);\n port.start();\n return () => {\n port.removeEventListener(\"message\", onMessage);\n for (const controller of renders.values()) controller.abort(new DOMException(\"Export cancelled.\", \"AbortError\"));\n for (const session of sessions.values()) void session.then((s) => s.close(), () => {});\n sessions.clear();\n };\n}\n", "import { Ticker } from \"@motionscript/core\";\n\n/**\n * Ticker backed by a Web Audio AudioContext. Clip time follows\n * `audioContext.currentTime` (within a few ms, see `startLoop`), so any\n * AudioBufferSourceNodes scheduled on the same context play in sync.\n *\n * When paused we suspend the context (audio stops, currentTime freezes);\n * when playing we resume and a rAF loop publishes ticks at the target fps.\n *\n * A single silent buffer covering the full timeline is started on play(),\n * which keeps the context active and gives the browser a stable audio\n * graph to schedule against even on scenes that contain no audio nodes.\n */\nexport class WebTicker extends Ticker {\n private readonly contextOf: () => AudioContext;\n private readonly ownsContext: boolean;\n private _context: AudioContext | null = null;\n private fps: number;\n\n private playStartCtxTime: number = 0;\n private seekOffset: number = 0;\n private speed: number = 1;\n private reverse: boolean = false;\n\n private rafId: number | null = null;\n /** Bumped by every `seek`, so the loop can tell that a listener or tick callback moved the playhead under it. */\n private seekEpoch: number = 0;\n private silentSource: AudioBufferSourceNode | null = null;\n\n /**\n * `context` may be a getter, called on the first `play`: a session hands\n * over its audio sink's, which is created on first use, so a session that\n * never plays never opens the audio device.\n */\n constructor(opts: { context?: AudioContext | (() => AudioContext); fps: number }) {\n super();\n const { context } = opts;\n this.contextOf = typeof context === \"function\" ? context : () => context ?? new AudioContext();\n this.ownsContext = !context;\n this.fps = opts.fps;\n }\n\n getContext(): AudioContext {\n this._context ??= this.contextOf();\n return this._context;\n }\n\n private get context(): AudioContext {\n return this.getContext();\n }\n\n seek(t: number): void {\n const clamped = Math.max(0, Math.min(t, this.duration));\n this.seekOffset = clamped;\n // The clock is read only while playing; `play` anchors it afresh.\n if (this.isPlaying) this.playStartCtxTime = this.context.currentTime;\n this.seekEpoch++;\n this.setCurrentTime(clamped);\n }\n\n /**\n * Anchors elapsed-time tracking to the current `context.currentTime`, starts the silent ticker\n * + rAF tick loop and asks a suspended context to resume.\n *\n * Synchronous, as {@link Ticker.play} is: a `pause` or `seek` in the same turn must find a\n * running clock to stop. A suspended context's `currentTime` is frozen, so the clock holds at\n * the anchor until the resume lands — outside a user gesture that is never.\n */\n play(speed: number = 1, reverse: boolean = false): void {\n this.speed = speed;\n this.reverse = reverse;\n this.seekOffset = this.currentTime;\n\n if (this.context.state === \"suspended\") {\n this.context.resume().then(\n () => {\n // A pause that arrived while the resume was pending could not suspend it.\n if (!this.isPlaying && this.context.state === \"running\") void this.context.suspend();\n },\n (error) => {\n console.error(\"[WebTicker] The audio context could not resume:\", error);\n this.pause();\n },\n );\n }\n\n this.playStartCtxTime = this.context.currentTime;\n this.startSilentTicker();\n super.play(speed, reverse);\n this.startLoop();\n }\n\n /** Stops the tick loop and silent ticker, then suspends the context — freezing `currentTime` so elapsed-time math stays correct across the pause. */\n pause(): void {\n this.seekOffset = this.currentTime;\n this.stopLoop();\n this.stopSilentTicker();\n if (this._context?.state === \"running\") {\n this._context.suspend();\n }\n super.pause();\n }\n\n /** (Re)starts the silent buffer source covering the remaining timeline — keeps the AudioContext active and gives a stable graph for other AudioBufferSourceNodes to schedule against, per the class-level note. */\n private startSilentTicker(): void {\n this.stopSilentTicker();\n const remaining = Math.max(0.001, this.duration - this.seekOffset);\n const sampleRate = this.context.sampleRate;\n const buffer = this.context.createBuffer(1, Math.ceil(remaining * sampleRate), sampleRate);\n const source = this.context.createBufferSource();\n source.buffer = buffer;\n source.connect(this.context.destination);\n source.start();\n this.silentSource = source;\n }\n\n private stopSilentTicker(): void {\n if (this.silentSource) {\n try {\n this.silentSource.onended = null;\n this.silentSource.stop();\n this.silentSource.disconnect();\n } catch {\n // already stopped\n }\n this.silentSource = null;\n }\n }\n\n /** Where the playhead is now, from elapsed `context.currentTime` (so it stays sample-accurate), and whether that is the end of the run. */\n private position(): { time: number; ended: boolean } {\n const elapsed = (this.context.currentTime - this.playStartCtxTime) * this.speed;\n const next = this.reverse\n ? this.seekOffset - elapsed\n : this.seekOffset + elapsed;\n const time = Math.max(0, Math.min(next, this.duration));\n return { time, ended: this.reverse ? time <= 0 : time >= this.duration };\n }\n\n /**\n * Drives ticks off `requestAnimationFrame`, firing `tick()` when the playhead reaches another\n * project frame — and once more at the end of the run, whether or not it landed on a boundary.\n *\n * `context.currentTime` moves in whole render quanta handed over in bursts: at 48 kHz on a\n * 60 Hz display it advances 8, 10.67, 18.67 or 21.33 ms between animation frames, and a\n * playhead read straight off it skipped up to a third of the frames. So the playhead advances\n * by each animation frame's own interval, pulled 5% of the way to the audio clock every frame\n * and snapped to it when they disagree by more than 50 ms (a stall, a seek). It stays within\n * a few ms of the audio and moves one frame per frame.\n *\n * A listener may `seek` (a host looping wraps to 0 when it hears the end), so the end is\n * re-read after the listeners and the tick callbacks have run: a run that was seeked out of\n * its end carries on, and one that was not pauses itself.\n */\n private startLoop(): void {\n if (this.rafId !== null) return;\n const frameOf = (t: number) => Math.floor(t * this.fps + 1e-6);\n let lastFrame = frameOf(this.currentTime);\n let steady: { time: number; at: number; epoch: number } | null = null;\n const steadied = (now: number): { time: number; ended: boolean } => {\n const audio = this.position();\n let time = audio.time;\n if (!audio.ended && steady && steady.epoch === this.seekEpoch) {\n const step = ((now - steady.at) / 1000) * this.speed;\n const predicted = this.reverse ? steady.time - step : steady.time + step;\n const drift = audio.time - predicted;\n const next = predicted + drift * 0.05;\n if (Math.abs(drift) <= 0.05 && next > 0 && next < this.duration) time = next;\n }\n steady = { time, at: now, epoch: this.seekEpoch };\n return { time, ended: audio.ended };\n };\n\n const loop = async (now: number) => {\n let epoch = this.seekEpoch;\n const position = steadied(now);\n let ended = position.ended;\n // This loop runs at the display's refresh rate, which on a 120 or 144Hz panel is two\n // or three times the rate anything is rendered at — so the clock advances every time\n // round (the elapsed maths in `play`/`pause` depend on it being exact) while listeners\n // hear about it once per frame. The end of the run always reports, or the final\n // position would never reach a host. See `Ticker.setCurrentTime`.\n const crossed = frameOf(position.time) !== lastFrame;\n const report = crossed || ended;\n this.setCurrentTime(position.time, report);\n\n const reread = () => {\n if (this.seekEpoch === epoch) return;\n epoch = this.seekEpoch;\n lastFrame = frameOf(this.currentTime);\n ended = this.position().ended;\n };\n reread();\n\n if (report) {\n lastFrame = frameOf(this.currentTime);\n // Await so that a slow tick (asset load on a clip\n // boundary) doesn't queue a second concurrent tick.\n await this.tick();\n reread();\n }\n\n // If pause() cleared the rafId while we were awaiting tick(),\n // do not resume the loop.\n if (this.rafId === null) return;\n if (ended) {\n this.pause();\n return;\n }\n this.rafId = requestAnimationFrame(loop);\n };\n\n this.rafId = requestAnimationFrame(loop);\n }\n\n private stopLoop(): void {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n dispose(): void {\n this.stopLoop();\n this.stopSilentTicker();\n if (this.ownsContext) {\n void this._context?.close();\n }\n super.dispose();\n }\n}\n", "import {\n AudioSink,\n Engine,\n EngineOptions,\n EnginePlatform,\n EngineRenderContext,\n Exporter,\n ExportStillRequest,\n ExportVideoRequest,\n ExportedStill,\n Registry,\n Ticker,\n MeasureContext2D,\n PlatformDeps,\n StorageAdapter,\n type DynamicNodeConfig,\n type NodeConstructor,\n type NodeTypeMap,\n} from \"@motionscript/core\";\n\nimport type { WgpuStorageAdapter } from \"@motionscript/renderer\";\nimport { loadRenderer, type RendererWasmOption } from \"./renderer\";\nimport { resolveDynamicNodes } from \"./dynamic-nodes\";\nimport { WebAudioSink } from \"./audio/player\";\nimport { WebTicker } from \"./ticker\";\nimport { exportVideo as exportVideoFile, type AudioEncoderOptions, type VideoEncoderOptions } from \"./exporter\";\nimport { exportAudio } from \"./export-audio\";\nimport { isAudioFormat, type ExportFormat } from \"./formats\";\nimport { StillRenderer } from \"./still\";\n\nexport interface BrowserEngineOptions extends Omit<EngineOptions, \"nodes\" | \"dynamicNodes\">, RendererWasmOption {\n /**\n * Node types any document opened here may name — components as an array\n * or a record naming each key outright, same as `EngineOptions`, plus a\n * TS source string in the **array** form only. A string default-exports a\n * component, whose `key` is its key — the record form takes no string, so\n * there is exactly one place a dynamic node's key comes from, not two that\n * could disagree.\n */\n nodes?: readonly (NodeConstructor | string)[] | NodeTypeMap;\n /**\n * Enables a source string in `nodes`, and `engine.registerNode(source)`\n * at any point afterward. Any field left unset falls back to `browser`'s\n * own default — `@motionscript/core/sdk` for `sdk`, a lazily-loaded\n * `esbuild-wasm` for `compile` — so this never needs to be passed at all\n * for the common case. `modules` has no default: only the host knows\n * which loaded packages a script it compiles may reach.\n */\n dynamicNodes?: Partial<DynamicNodeConfig>;\n /**\n * Where `esbuild-wasm`'s own `.wasm` binary is served — only read if the\n * default compiler is actually used.\n */\n compilerWasmUrl?: string;\n /** Default video encoder settings for `session.export()`. Overridable per call. */\n video?: VideoEncoderOptions;\n /** Default audio encoder settings for `session.export()`. Overridable per call. */\n audio?: AudioEncoderOptions;\n}\n\n/** What a session's frames are drawn with, and the storage and measurement it reads from. */\nexport interface BrowserRenderer<TStorage extends StorageAdapter = StorageAdapter> {\n createStorageAdapter(deps: PlatformDeps): TStorage;\n createRenderContext(storage: TStorage): BrowserRenderContext;\n createMeasureContext(storage: TStorage): MeasureContext2D;\n dispose?(): void;\n}\n\n/** A render context as this package drives it: an engine one, plus what exports and stills ask of it. */\nexport type BrowserRenderContext = EngineRenderContext & {\n /**\n * Settles once the surface `mount` began can draw. A backend whose surface\n * comes up asynchronously (a GPU device) must have it, or the first frame\n * draws onto nothing.\n */\n whenMounted?(): Promise<void>;\n /**\n * The frame last drawn, copied into a fresh 2D canvas, or `undefined` before\n * one was. What a still encodes; a WebGPU canvas is readable only in the task\n * that drew it, so a backend may draw it again here.\n */\n snapshotCanvas?(): HTMLCanvasElement | undefined;\n};\n\n/** What `session.export({ encode })` accepts in this environment. */\nexport interface BrowserEncodeOptions {\n /**\n * Defaults to `'mp4'`. An audio format (`'wav'`, `'mp3'`, `'m4a'`) renders no\n * frames and ignores `scale`, `frames`, `includeAudio`, `video` and `supersample`.\n */\n format?: ExportFormat;\n video?: VideoEncoderOptions;\n audio?: AudioEncoderOptions;\n supersample?: number;\n /** Set false to get the bytes back instead of triggering a browser download. */\n download?: boolean;\n filename?: string;\n}\n\n/**\n * The browser's {@link Exporter}: WebCodecs + mediabunny for video, the\n * browser's own image codecs for a still.\n *\n * **It does not reuse a session's storage adapter, and that is deliberate.** An\n * adapter's viewport clamps the resolution images decode at — `StorageAdapter`\n * documents that it has no setter for exactly this reason — so handing an export\n * the preview's adapter would paint a 2× render from decodes sized for 1×, and\n * the result would be soft in a way nothing reports. What is shared is the\n * engine's renderer backend, the same one its sessions draw with.\n */\nclass WebExporter implements Exporter {\n private still: StillRenderer | null = null;\n private stillRegistry: Registry | null = null;\n /** Settles once every still asked for so far has been encoded. */\n private stillQueue: Promise<unknown> = Promise.resolve();\n\n constructor(\n private readonly backend: BrowserRenderer,\n private readonly defaults: { video?: VideoEncoderOptions; audio?: AudioEncoderOptions } & RendererWasmOption,\n ) { }\n\n async exportVideo(request: ExportVideoRequest): Promise<Uint8Array | void> {\n const encode = (request.encode ?? {}) as BrowserEncodeOptions;\n if (encode.format && isAudioFormat(encode.format)) {\n return exportAudio({\n document: request.project,\n registry: request.registry,\n manifest: request.manifest,\n format: encode.format,\n audio: encode.audio ?? this.defaults.audio,\n filename: encode.filename,\n returnBytes: encode.download !== true,\n onProgress: request.onProgress,\n signal: request.signal,\n rendererWasmUrl: this.defaults.rendererWasmUrl,\n });\n }\n return exportVideoFile({\n document: request.project,\n registry: request.registry,\n scale: request.scale,\n manifest: request.manifest,\n includeAudio: request.includeAudio,\n frames: request.frames,\n format: encode.format,\n video: encode.video ?? this.defaults.video,\n audio: encode.audio ?? this.defaults.audio,\n supersample: encode.supersample,\n filename: encode.filename,\n // A `Session` asks for bytes; only an explicit `download: true` takes\n // the DOM anchor path this function offers a page.\n returnBytes: encode.download !== true,\n onProgress: request.onProgress,\n onIssue: request.onIssue,\n signal: request.signal,\n rendererWasmUrl: this.defaults.rendererWasmUrl,\n });\n }\n\n /**\n * Queued, rather than a renderer per call: the one renderer is what keeps a\n * GPU surface and the decode cache warm between stills, and its draw and the\n * encode of it are two steps another call's draw would land between.\n */\n exportStill(request: ExportStillRequest): Promise<ExportedStill> {\n const still = this.stillQueue.then(() => this.drawStill(request));\n this.stillQueue = still.catch(() => undefined);\n return still;\n }\n\n dispose(): void {\n this.still?.dispose();\n this.still = null;\n }\n\n private async drawStill(request: ExportStillRequest): Promise<ExportedStill> {\n const renderer = this.renderer(request);\n const drawn = await renderer.render(request.project, {\n scale: request.scale,\n onIssue: request.onIssue,\n ...frameOption(request.frame),\n });\n const bytes = await renderer.toBytes({\n format: request.format,\n quality: request.quality,\n });\n return { bytes, frame: drawn.frame, totalFrames: drawn.totalFrames };\n }\n\n /**\n * One `StillRenderer`, reused across calls and re-viewported when the ask\n * changes — `setViewport` is a no-op when the size already matches, and a\n * full reset when it does not, which is the same trade the class documents.\n */\n private renderer(request: ExportStillRequest): StillRenderer {\n const { project, registry } = request;\n if (project.viewport === undefined || project.fps === undefined) {\n throw new Error(\"exportStill takes a project whose fps and viewport are resolved — see Session.\");\n }\n // A renderer compiles against the registry it was built with.\n if (this.still && this.stillRegistry !== registry) this.dispose();\n this.still ??= new StillRenderer(this.backend, {\n viewport: project.viewport,\n fps: project.fps,\n manifest: request.manifest,\n registry,\n });\n this.stillRegistry = registry;\n this.still.setViewport(project.viewport);\n if (request.manifest) this.still.setManifest(request.manifest);\n return this.still;\n }\n}\n\n/** `ExportStillRequest.frame` in the shape `StillRenderer.render` accepts. */\nfunction frameOption(frame: ExportStillRequest[\"frame\"]): { frame?: number | \"first\" | \"last\" } {\n if (frame.kind === \"frame\") return { frame: frame.frame };\n return { frame: frame.kind };\n}\n\n/**\n * An engine backed by the browser: WebGPU surfaces, Web Audio, WebCodecs.\n * Rejects with `WebGpuUnavailableError` where this browser has no WebGPU adapter.\n *\n * Async because the renderer is a wasm module and every seam below needs it. Await\n * once, at app start, and share the result — the caches underneath (registered\n * fonts, decoded images, shaped paragraphs) are the point of keeping one engine\n * rather than one per canvas.\n *\n * ```ts\n * const engine = await createBrowserEngine({ nodes: { pulseRing: PulseRing } });\n * const session = engine.open({ document, target: canvasEl });\n * session.playback!.play();\n * ```\n */\nexport async function createBrowserEngine(\n options: BrowserEngineOptions = {},\n): Promise<Engine<WgpuStorageAdapter>> {\n const rawNodes = options.nodes;\n // `Array.isArray` doesn't narrow a `readonly T[] | U` union cleanly against\n // its `arg is any[]` (mutable) predicate — the `.filter` predicate below\n // already guarantees no string survives, so the cast is just recovering\n // what the runtime check already proved.\n const classNodes = (\n Array.isArray(rawNodes)\n ? rawNodes.filter((n): n is NodeConstructor => typeof n !== \"string\")\n : rawNodes\n ) as NodeTypeMap | readonly NodeConstructor[] | undefined;\n const sourceNodes = Array.isArray(rawNodes)\n ? rawNodes.filter((n): n is string => typeof n === \"string\")\n : [];\n // Cheap — see dynamic-nodes.ts: no WASM import happens here, only on\n // `compile`'s first actual call. Attached unconditionally so a later\n // `engine.registerNode(source)` works even when `nodes` carried no\n // string at boot.\n const dynamicNodes = resolveDynamicNodes(options.dynamicNodes, options.compilerWasmUrl);\n\n const renderer: BrowserRenderer<WgpuStorageAdapter> = await loadRenderer(options);\n const exporter = new WebExporter(renderer, { video: options.video, audio: options.audio, rendererWasmUrl: options.rendererWasmUrl });\n\n const platform: EnginePlatform<WgpuStorageAdapter> = {\n createStorageAdapter: (deps) => renderer.createStorageAdapter(deps),\n createRenderContext: (storage) => renderer.createRenderContext(storage),\n createMeasureContext: (storage) => renderer.createMeasureContext(storage),\n createAudioSink(): AudioSink {\n return new WebAudioSink();\n },\n createTicker(fps: number, audioDevice: AudioSink): Ticker {\n // Shares the device's own `AudioContext`: two independent timebases\n // in one session drift against each other, and sound is the one that\n // cannot be nudged back. A getter, so neither creates it before it\n // is needed (the first play, or the first sound to decode).\n const sink = audioDevice as WebAudioSink;\n return new WebTicker({ context: () => sink.getContext(), fps });\n },\n createExporter(): Exporter {\n return exporter;\n },\n dispose(): void {\n exporter.dispose();\n renderer.dispose?.();\n },\n };\n\n const engine = new Engine<WgpuStorageAdapter>(platform, { ...options, nodes: classNodes, dynamicNodes });\n for (const source of sourceNodes) {\n // Sequential — one script's error shouldn't mask another's, and\n // registration order should match array order for determinism.\n await engine.registerNode(source);\n }\n return engine;\n}\n", "import type { DynamicNodeConfig } from \"@motionscript/core\";\nimport * as sdk from \"@motionscript/core/sdk\";\nimport * as esbuild from \"esbuild-wasm\";\n\n/**\n * `browser`'s real, working default for `Registry.addNodeFromSource` — the\n * `sdk` half is cheap (re-exports, no WASM) and imported eagerly; the compiler\n * is the expensive half, and stays behind a lazy `import()` so an app that\n * never registers a source-string node never pays for it, however long the\n * engine has been running.\n *\n * `core` has no compiler dependency of its own and cannot import the published\n * `@motionscript/sdk` barrel (that package depends on `core`, so the reverse\n * would be circular) — `browser` is where this concern actually belongs: the\n * package whose entire job is \"what running in an actual browser tab looks\n * like\" already owns the renderer, `WebAudioSink` and `WebTicker` on exactly that\n * basis.\n */\n\n// Default to the wasm shipped by esbuild-wasm, resolved lazily — `import.meta.url`\n// is empty in a non-ESM output (an IIFE bundle, which is what the headless page\n// loads), and `new URL(\"…\", \"\")` throws on import, before a caller has had the\n// chance to pass an explicit URL that would have made the default irrelevant.\nfunction defaultCompilerWasmUrl(): string {\n return new URL(\"esbuild-wasm/esbuild.wasm\", import.meta.url).href;\n}\n\nlet compilerPromise: Promise<(source: string) => Promise<string>> | undefined;\n\n/** Loaded once, memoized process-wide. */\nfunction defaultCompiler(wasmUrl?: string): Promise<(source: string) => Promise<string>> {\n return (compilerPromise ??= (async () => {\n await esbuild.initialize({ wasmURL: wasmUrl ?? defaultCompilerWasmUrl() });\n return async (source: string) => {\n const { code } = await esbuild.transform(source, {\n // A component is written with calls: there is no JSX to compile.\n loader: \"ts\",\n format: \"cjs\",\n target: \"es2020\",\n });\n return code;\n };\n })());\n}\n\n/**\n * Resolves a full `DynamicNodeConfig`, filling in whatever the caller left\n * unset with `browser`'s own default. Synchronous — the WASM import happens\n * on `compile`'s first actual call, not here, so attaching this to every\n * engine costs nothing until a source string is genuinely registered.\n */\nexport function resolveDynamicNodes(\n partial: Partial<DynamicNodeConfig> | undefined,\n compilerWasmUrl?: string,\n): DynamicNodeConfig {\n return {\n sdk: partial?.sdk ?? sdk,\n modules: partial?.modules,\n compile: partial?.compile ?? (async (source) => (await defaultCompiler(compilerWasmUrl))(source)),\n };\n}\n"],
|
|
5
|
+
"mappings": "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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
6
|
+
"names": ["require_browser", "__commonJSMin", "exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "target", "all", "name", "__copyProps", "to", "from", "except", "desc", "key", "__toCommonJS", "mod", "__async", "__this", "__arguments", "generator", "resolve", "reject", "fulfilled", "value", "step", "e", "rejected", "browser_exports", "analyzeMetafile", "analyzeMetafileSync", "build", "buildSync", "context", "browser_default", "formatMessages", "formatMessagesSync", "initialize", "stop", "transform", "transformSync", "version", "encodePacket", "packet", "visit", "bb", "encodeUTF8", "item", "keys", "ByteBuffer", "writeUInt32LE", "decodePacket", "bytes", "decodeUTF8", "count", "value2", "i", "id", "isRequest", "buf", "delta", "clone", "offset", "readUInt32LE", "length", "ptr", "encodeInvariant", "encoder", "decoder", "text", "buffer", "byteOffset", "byteLength", "fromCharCode", "throwSyntaxError", "index", "message", "c", "line", "column", "JSON_parse", "propertyStack", "objectStack", "stateStack", "property", "state", "object", "code", "j", "codePoint", "quote", "buildLogLevelDefault", "transformLogLevelDefault", "validateAndJoinStringArray", "values", "what", "toJoin", "validateStringValue", "canBeAnything", "mustBeBoolean", "mustBeString", "mustBeRegExp", "mustBeInteger", "mustBeValidPortNumber", "mustBeFunction", "mustBeArray", "mustBeArrayOfStrings", "x", "mustBeObject", "mustBeEntryPoints", "mustBeWebAssemblyModule", "mustBeObjectOrNull", "mustBeStringOrBoolean", "mustBeStringOrObject", "mustBeStringOrArrayOfStrings", "mustBeStringOrUint8Array", "mustBeStringOrURL", "getFlag", "mustBeFn", "mustBe", "checkForInvalidFlags", "where", "validateInitializeOptions", "options", "wasmURL", "wasmModule", "worker", "validateMangleCache", "mangleCache", "validated", "pushLogFlags", "flags", "isTTY", "logLevelDefault", "color", "logLevel", "logLimit", "logStyle", "pushCommonFlags", "legalComments", "sourceRoot", "sourcesContent", "format", "globalName", "mangleProps", "reserveProps", "mangleQuoted", "minify", "minifySyntax", "minifyWhitespace", "minifyIdentifiers", "lineLimit", "drop", "dropLabels", "charset", "treeShaking", "ignoreAnnotations", "jsx", "jsxFactory", "jsxFragment", "jsxImportSource", "jsxDev", "jsxSideEffects", "define", "logOverride", "supported", "pure", "keepNames", "platform", "tsconfigRaw", "absPaths", "jsRegExpToGoRegExp", "fn", "flagsForBuildOptions", "callName", "writeDefault", "_a", "entries", "stdinContents", "stdinResolveDir", "sourcemap", "bundle", "splitting", "preserveSymlinks", "metafile", "outfile", "outdir", "outbase", "tsconfig", "resolveExtensions", "nodePathsInput", "mainFields", "conditions", "external", "packages", "alias", "loader", "outExtension", "publicPath", "entryNames", "chunkNames", "assetNames", "inject", "banner", "footer", "entryPoints", "absWorkingDir", "stdin", "write", "allowOverwrite", "old", "type", "path", "ext", "n", "entryPoint", "entryPointKeys", "input", "output", "stdinKeys", "contents", "resolveDir", "sourcefile", "loader2", "nodePaths", "flagsForTransformOptions", "createChannel", "streamIn", "requestCallbacksByKey", "closeData", "responseCallbacks", "nextRequestID", "nextBuildKey", "stdout", "stdoutUsed", "readFromStdout", "chunk", "limit", "swap", "handleIncomingPacket", "afterClose", "error", "sendRequest", "refs", "callback", "response", "sendResponse", "handleRequest", "request", "requestCallbacks", "errors", "extractErrorMessageV8", "isFirstPacket", "binaryVersion", "defaultWD", "refCount", "buildKey", "buildRefs", "buildOrContextImpl", "err", "res", "fs", "details", "createObjectStash", "start", "inputPath", "replaceDetailsInMessages", "warnings", "outstanding", "next", "result", "failureErrorWithLog", "messages", "kind", "terminalWidth", "sanitizeMessages", "verbose", "isContext", "handleError", "pluginName", "plugins", "handlePlugins", "buildOrContextContinue", "done", "requestPlugins", "runOnEndCallbacks", "scheduleOnDisposeCallbacks", "buildResponseToResult", "callback2", "originalErrors", "originalWarnings", "convertOutputFiles", "parseJSON", "onEndErrors", "onEndWarnings", "latestResultPromise", "provideLatestResult", "request2", "didDispose", "settlePromise", "result2", "triggerAnotherBuild", "error2", "response2", "options2", "delay", "port", "host", "servedir", "keyfile", "certfile", "fallback", "cors", "onRequest", "corsKeys", "origin", "request3", "initialOptions", "onStartCallbacks", "onEndCallbacks", "onResolveCallbacks", "onLoadCallbacks", "onDisposeCallbacks", "nextCallbackID", "isSetupDone", "setup", "plugin", "promise", "keys2", "importer", "namespace", "pluginData", "importAttributes", "resolve2", "sanitizeStringMap", "registeredText", "registeredNote", "extractCallerV8", "filter", "_0", "note", "id2", "suffix", "sideEffects", "watchFiles", "watchDirs", "sanitizeStringArray", "newErrors", "newWarnings", "cb", "map", "nextID", "ident", "tried", "lines", "location2", "parseStackLinesV8", "stash", "at", "match", "lineText", "file", "pluginText", "sanitizeLocation", "suggestion", "relevantASCII", "fallbackPluginName", "messagesClone", "notes", "detail", "notesClone", "noteKeys", "noteText", "noteLocation", "hash", "binary", "regexp", "ensureServiceIsRunning", "stopService", "initializePromise", "longLivedService", "useWorker", "startRunningService", "rejectAllWith", "rejectAllPromise", "blob", "onmessage", "postMessage", "globalThis", "o", "k", "enosys", "outputBuf", "fd", "nl", "position", "mode", "uid", "gid", "link", "perm", "atime", "mtime", "pathSegments", "setInt64", "addr", "v", "setInt32", "getInt64", "low", "high", "loadValue", "f", "storeValue", "typeFlag", "loadSlice", "array", "len", "loadSliceOfValues", "a", "loadString", "saddr", "testCallExport", "b", "timeOrigin", "sp", "p", "msec", "m", "args", "str", "dst", "src", "toCopy", "instance", "strPtr", "argc", "argvPtrs", "arg", "argv", "go", "event", "wasm", "stderr", "parts", "resumeStdin", "stdinPos", "data", "first", "tryToInstantiateModule", "timeout", "firstMessageResolve", "firstMessageReject", "firstMessagePromise", "service", "_", "DEFAULT_OUTPUT", "ManifestAssetCatalog", "Registry", "resolveProjectDocument", "AssetManager", "AudioSink", "ClipStore", "AssetTimeline", "isFatalRenderIssue", "RenderBackendError", "renderIssueKey", "renderSettled", "SETTLE_PASSES", "setTheme", "toRenderIssue", "spansCovering", "StateEvaluator", "yieldToScheduler", "NoopAudioSink", "_src", "_data", "_keep", "_requests", "_clipTime", "_time", "_speed", "_reverse", "drainIssues", "renderContext", "seen", "onIssue", "raw", "issue", "key", "renderWarmFrame", "storageAdapter", "draw", "frame", "exactDecodes", "previous", "outputOf", "project", "fps", "viewport", "checkedRange", "frames", "totalFrames", "start", "end", "prepare", "params", "registry", "assetCatalog", "applyTheme", "measurer", "scope", "loads", "store", "precomper", "stateEvaluator", "settleLayoutGates", "manager", "trackIds", "gates", "id", "record", "collectAudio", "precomp", "out", "track", "globalOffset", "request", "renderTimeline", "scale", "sink", "mixer", "onProgress", "signal", "includeAudio", "harness", "restorePolicy", "span", "totalDuration", "frameCount", "assertDrawable", "assetManager", "scheduled", "wantsAudio", "frameDuration", "globalTime", "f", "done", "mixed", "bytes", "NothingToDrawError", "failures", "causes", "failure", "drawFrameAt", "requested", "targetFrame", "first", "last", "failed", "error", "covering", "MAGIC", "vec", "v", "o", "EULER", "TONE", "GEOMETRY", "POLYHEDRON", "MATERIAL", "LIGHT", "FACES", "BLEND$1", "MAP_KEYS", "TextureTable", "texture", "srgb", "resolved", "resolveTexture3D", "key", "slot", "id", "req", "Writer", "k", "size", "next", "a", "i", "c", "r", "g", "b", "parseColor", "s", "from", "words", "u", "other", "writeTransform", "w", "flags", "q", "writeBuffer", "writeGeometry", "report", "sx", "sy", "sz", "segmentsOf", "evaluateRoundedBox", "top", "bottom", "cylinderRadii", "evaluateParametric", "p", "classify", "signature", "bag", "out", "arraysOf", "GeometryTable", "scope", "kind", "d", "shape", "known", "start", "base", "n", "revision", "arrays", "WRAP", "pair", "writeMap", "map", "textures", "t", "tx", "ty", "cx", "cy", "flip", "writeMaterial", "m", "writeLight", "l", "target", "declared", "options", "resolveShadowOptions3D", "writeCamera", "placement", "resolveCameraPlacement", "encodeScene3D", "scene", "geometries", "scopes", "geometry", "tone", "shadows", "fog", "env", "ops", "op", "list", "colors", "MsText", "ptr", "MsTextFinalization", "wasm$1", "font", "glyph", "weight", "ret", "v1", "getArrayF32FromWasm0", "text", "runs", "families", "line_height", "align", "max_width", "box_width", "val4", "val5", "val6", "val7", "ptr0", "len0", "ptr1", "len1", "ptr2", "len2", "passStringToWasm0", "WASM_VECTOR_LEN", "passArrayF32ToWasm0", "e", "v8", "family", "letter_spacing", "slant", "val3", "v7", "bytes", "passArray8ToWasm0", "ids", "passArray32ToWasm0", "font_size", "min_font_size", "valign", "wrap", "width", "height", "val8", "val9", "val10", "val11", "v12", "points", "ptr3", "len3", "Renderer", "obj", "RendererFinalization", "deferred1_0", "deferred1_1", "getStringFromWasm0", "takeFromExternrefTable0", "canvas", "min_words", "getArrayJsValueFromWasm0", "tex", "image", "rgba", "val2", "linear", "dither", "root", "source", "deferred4_0", "deferred4_1", "getArrayF64FromWasm0", "mipmaps", "set_panic_listener", "listener", "isLikeNone", "addToExternrefTable0", "validate_shader", "deferred3_0", "deferred3_1", "__wbg_get_imports", "arg0", "arg1", "debugString", "getDataViewMemory0", "handleError", "arg2", "arg3", "arg4", "arg5", "deferred0_0", "deferred0_1", "__wbindgen_enum_GpuTextureFormat", "result", "state0", "cb0", "wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined___js_sys_aa8f45fc28b2b0aa___Function_fn_wasm_bindgen_5bb76fec55d7fe60___JsValue_____wasm_bindgen_5bb76fec55d7fe60___sys__Undefined_______true_", "getArrayU8FromWasm0", "__wbindgen_enum_GpuDeviceLostReason", "arg6", "getArrayU32FromWasm0", "__wbindgen_enum_GpuIndexFormat", "__wbindgen_enum_GpuStorageTextureAccess", "__wbindgen_enum_GpuAddressMode", "__wbindgen_enum_GpuCanvasAlphaMode", "__wbindgen_enum_GpuTextureAspect", "getArrayJsValueViewFromWasm0", "__wbindgen_enum_GpuCompareFunction", "__wbindgen_enum_GpuCullMode", "__wbindgen_enum_GpuStencilOperation", "__wbindgen_enum_GpuLoadOp", "__wbindgen_enum_GpuStoreOp", "__wbindgen_enum_GpuTextureDimension", "__wbindgen_enum_GpuTextureViewDimension", "__wbindgen_enum_GpuBlendFactor", "__wbindgen_enum_GpuVertexFormat", "__wbindgen_enum_GpuFrontFace", "__wbindgen_enum_GpuAutoLayoutMode", "__wbindgen_enum_GpuFilterMode", "__wbindgen_enum_GpuMipmapFilterMode", "__wbindgen_enum_GpuCanvasToneMappingMode", "__wbindgen_enum_GpuBlendOperation", "__wbindgen_enum_GpuPowerPreference", "__wbindgen_enum_GpuTextureSampleType", "__wbindgen_enum_GpuVertexStepMode", "__wbindgen_enum_GpuPrimitiveTopology", "__wbindgen_enum_GpuBufferBindingType", "__wbindgen_enum_GpuSamplerBindingType", "makeMutClosure", "wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___JsValue__core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_", "wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true_", "wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuDeviceLostInfo__GpuDeviceLostInfo______true_", "wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__46", "wasm_bindgen_5bb76fec55d7fe60___convert__closures_____invoke___wasm_bindgen_5bb76fec55d7fe60___sys__JsNullable_wgpu_86078daaf2a035a0___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_5bb76fec55d7fe60___JsError___true__47", "table", "idx", "CLOSURE_DTORS", "state", "val", "toStringOutput", "className", "len", "getFloat32ArrayMemory0", "getFloat64ArrayMemory0", "mem", "getUint32ArrayMemory0", "getUint8ArrayMemory0", "cachedDataViewMemory0", "cachedFloat32ArrayMemory0", "cachedFloat64ArrayMemory0", "decodeText", "cachedUint32ArrayMemory0", "cachedUint8ArrayMemory0", "f", "args", "x", "real", "arg", "malloc", "realloc", "buf", "cachedTextEncoder", "offset", "code", "view", "value", "cachedTextDecoder", "MAX_SAFARI_DECODE_BYTES", "numBytesDecoded", "__wbg_finalize_init", "instance", "module", "__wbg_load", "imports", "expectedResponseType", "type", "__wbg_init_promise", "__wbg_init", "module_or_path", "__wbg_init_once", "BLEND_MODES", "VERB", "KIND_CODE", "MEMBER_OP", "MASK_CODE", "D", "Node", "Doc", "background", "props", "parent", "opts", "asset", "links3d", "bits", "isProjective", "rowMajor", "mul3", "P", "C", "j", "mulX", "PathBuilder", "y", "x1", "y1", "x2", "y2", "transformPath$1", "pts", "pathBounds", "x0", "y0", "memberOp", "imageMatrix", "ox", "oy", "tile", "imagePlacement", "h", "iw", "ih", "fit", "OP", "NONE", "DeltaWriter", "sink", "memory", "minWords", "WIDTH", "fieldFloats", "KIND_TYPE", "encode", "resolveEffectColor", "resolveEffectAxis", "specParam", "name", "describeEffect", "layout", "spec", "field", "floats", "definePort", "fields", "total", "encoders", "effect", "ctx", "params", "alpha_default", "FALLBACK_FAMILY", "available", "bakedCell", "SS", "bake$1", "charset", "cell", "glyphs", "big", "advance", "src", "pixels", "sum", "dy", "dx", "ascii_default", "_e", "resolveAsciiCharset", "Effects", "PALETTES", "channels", "hex", "bitCrush_default", "blockDisplace_default", "axis", "bloom_default", "blur_default", "sigma", "bulge_default", "reach", "RED", "BLUE", "chromaticAberration_default", "rad", "LR$3", "LG$3", "LB$3", "multiply", "outer", "inner", "diag", "offsets", "saturation", "hue", "deg", "colorAdjustment_default", "mat", "any", "apply", "ti", "sh", "hi", "colorMatrix_default", "SEGMENTS", "evalCurve", "last", "ramp", "sorted", "MASKS", "curves_default", "values", "directionalBlur_default", "BLUE_NOISE_BASE64", "ALPHABET", "SIZE", "blueNoiseRgba", "acc", "written", "dither_default", "dropShadow_default", "spread", "LR$2", "LG$2", "LB$2", "duotone_default", "highlights", "row", "edges_default", "exposure_default", "clamp01", "DISPERSION_SPAN", "LIGHT_GAIN", "SHADE_NEAR", "SHADE_FAR", "SHADE_REACH", "SPLAY_REACH", "SPLAY_THINNING", "glass_default", "radians", "BLEND", "glow_default", "previous", "grain_default", "LR$1", "LG$1", "LB$1", "grayscale_default", "halftone_default", "LR", "LG", "LB", "IDENTITY", "fullMatrix", "channel", "invert_default", "kaleidoscope_default", "segments", "baked", "serial", "toByte", "bake", "hit", "aux", "look", "R", "G", "B", "tables", "lut_default", "magnify_default", "oilPaint_default", "POSITION", "outline_default", "pixelate_default", "posterize_default", "progressiveBlur_default", "start0", "radialBlur_default", "spill", "rgbShift_default", "red", "green", "blue", "scanlines_default", "scatter_default", "sharpen_default", "streak_default", "threshold_default", "twirl_default", "vignette_default", "vintage_default", "lerp", "identity", "sepia", "warmR", "warmB", "coolR", "coolB", "wave_default", "PORTS", "_pack_exports", "alpha_exports", "ascii_exports", "bitCrush_exports", "blockDisplace_exports", "bloom_exports", "blur_exports", "bulge_exports", "chromaticAberration_exports", "colorAdjustment_exports", "colorMatrix_exports", "curves_exports", "directionalBlur_exports", "dither_exports", "dropShadow_exports", "duotone_exports", "edges_exports", "exposure_exports", "glass_exports", "glow_exports", "grain_exports", "grayscale_exports", "halftone_exports", "invert_exports", "kaleidoscope_exports", "lut_exports", "magnify_exports", "oilPaint_exports", "outline_exports", "pixelate_exports", "posterize_exports", "progressiveBlur_exports", "radialBlur_exports", "rgbShift_exports", "scanlines_exports", "scatter_exports", "sharpen_exports", "streak_exports", "threshold_exports", "twirl_exports", "vignette_exports", "vintage_exports", "wave_exports", "path", "KIND", "parse$1", "json", "validateShader$1", "packParams", "f32", "i32", "flat", "at", "MAX_PROGRAMS", "COMPILE_TIMEOUT_MS", "withinTimeout", "work", "what", "timer", "timeout", "_", "reject", "UserShaders", "onReady", "oldKey", "old", "settled", "device", "wgsl", "info", "browserDiagnostics", "formats", "pipelineDesc", "messages", "marker", "userLine", "line", "VIS", "USER_LAYOUTS", "ENTRY", "layouts", "group", "binding", "format", "over", "fill", "EFFECT_BLEND", "SKSL_FILL", "SKSL_EFFECT", "USER_EFFECT", "wasm", "loadRendererWasm", "url", "prewarmDevice", "forgetDevice", "JOIN", "CAP", "TILE", "MEMBER_KIND", "ALIGN$2", "VALIGN$1", "utf8", "KEEP_UNUSED", "hashWords", "pathKey", "WgpuBackend", "exports", "entry", "stops", "det", "W", "H", "ia", "ib", "ic", "ie", "iff", "prog", "bx", "by", "bw", "bh", "geom", "color", "slots", "q8", "basis", "same", "vw", "before", "intervals", "phase", "pid", "ms", "pids", "strings", "pathId", "runPaints", "dash", "img", "packed", "surface", "backdrop", "fx", "port", "index", "box", "isWgslShader", "uniforms", "normalizeUniforms", "blend", "doc", "pw", "ph", "t0", "sig", "assetKey", "MAX_TEXTURE_EDGE", "FRAMES_PER_VIDEO", "timeKey", "time", "fetchBytes", "res", "WgpuStorageAdapter", "StorageAdapter", "catalog", "viewport", "fps", "loadBytes", "settler", "blob", "bitmap", "edge", "scaled", "input", "Input", "BlobSource", "ALL_FORMATS", "track", "duration", "VideoSampleSink", "video", "exact", "vector", "natural", "level", "jobs", "sample", "frame", "oldest", "data", "fontFamily", "metas", "sources", "files", "meta", "computeImageMatrix", "imgW", "imgH", "bounds", "zoom", "mode", "boxW", "boxH", "crop", "srcX", "srcY", "srcW", "srcH", "anchor", "ax", "ay", "norm", "nx", "ny", "fillPaint", "missing", "assets", "ratio", "scale", "even", "shadowOf", "members", "MAX_SOURCES", "membersOf", "shaderParamIssues", "shader", "contract", "shaderContractOf", "WGSL_CONTRACT", "names", "SAMPLES", "measure", "prev", "tAt", "slice", "t1", "split", "rows", "left", "right", "contours", "cur", "signedArea", "area", "px", "py", "to", "reversePath", "verbs", "segs", "closed", "isClosed", "cs", "segment", "z", "pos", "moved", "s0", "s1", "trimPath", "end", "d0", "d1", "cs0", "ce", "derivative", "measureContours", "length", "seg", "DOT_LENGTH", "dashFit", "open", "pathOps", "contourDashScale", "dashRuns", "cycle", "startOffset", "segStart", "remaining", "drawing", "dashedPath", "dots", "along", "arcTo", "rx", "ry", "phi", "large", "sweep", "xp", "yp", "lam", "num", "den", "cxp", "cyp", "ang", "ux", "uy", "vx", "vy", "dt", "alpha", "ta", "tb", "cosA", "sinA", "cosB", "sinB", "dax", "day", "dbx", "dby", "parseSvgPath", "tokens", "cmd", "lcx", "lcy", "lqx", "lqy", "more", "rel", "SvgSink", "PathDataSink", "svgOf", "emit", "pathDataOf", "svg", "ShapeGeometry", "geo", "_geo", "_spread", "cornerReach", "cornerTo", "d0x", "d0y", "d1x", "d1y", "cutCornerTo", "cut", "radius", "style", "ex", "ey", "cross", "cornerCommandsFromCut", "TO_RAD", "EllipseGeometry", "withEllipseDescriptor", "outline$1", "fullEllipse", "openArc", "wedge", "annularSector", "halfWidth", "halfHeight", "sweepFlag", "outerArc", "startAngle", "endAngle", "largeArc", "arc", "innerW", "innerH", "isx", "isy", "iex", "iey", "innerSweepFlag", "buildLineSvg", "parts", "count", "dir", "endIdx", "curr", "dIn", "dOut", "cutIn", "cutOut", "inX", "inY", "outX", "outY", "LineGeometry", "withLineDescriptor", "PathGeometry", "withPathDescriptor", "toPathString", "buildSvg", "verts", "rounded", "a0x", "a0y", "u0x", "u0y", "a1x", "a1y", "u1x", "u1y", "cosAngle", "tanHalf", "PolygonGeometry", "withPolygonDescriptor", "step", "PolygramGeometry", "withPolygramDescriptor", "roundedRect", "tl", "tr", "br", "bl", "rTL", "rTR", "rBR", "rBL", "plainRect", "outline", "isZero", "RectGeometry", "withRectDescriptor", "cornerRadiusOps", "cornerStyleOps", "cornerScale", "flipPositionY", "withPivotOffset", "resolvePivotPosition", "pivot", "resolveShapeAlignment", "stripShapeAlignmentKeys", "negY", "transformPath", "shapeTransform", "full", "rotation", "cc", "ALIGN$1", "textOf", "withTextDescriptor", "onPath", "autofit", "lw", "lh", "resolveShapePivot", "sn", "parse", "viaGeometry", "Shape", "range", "once", "stroke", "ring", "interior", "nativeOf", "make", "made", "corners", "limit", "pathShape", "raw", "centred", "negPathY", "b2", "c2", "shapeOf", "resolveMotionBlur", "velocity", "shutter", "resolveMotionBlurAlignment", "SPREAD", "SPREAD_LENGTH", "SPREAD_SIN", "SPREAD_COS", "STEALTH_NOTCH", "markerIsPointed", "markerInset", "markerPolygon", "half", "chevron", "outerV", "innerU", "innerV", "crotch", "strokePlan", "st", "thin", "dashed", "cap", "isStrokeMarker", "differs", "capEnds", "ends", "marked", "inset", "ext", "on", "reached", "pushEnd", "outward", "endBox", "depth", "endDisc", "markerPath", "polygon", "merge", "paths", "MissingKinds", "node", "SHAPE_OPS", "isSolid", "offsetBox", "BLACK", "BOOLEAN_OP", "membersBounds", "invert", "sceneVersion", "docBlend", "camel", "frameVersions", "nextFrameVersion", "frameVersion", "WgpuRenderContext", "CanvasRenderContext2D", "surfaces", "forEachTexture3D", "isSurfaceTexture3D", "images", "storage", "fontSize", "fontWeight", "letterSpacing", "fontStyle", "callback", "opacity", "matrix", "graphics", "prevAlpha", "turn", "turned", "fillOps", "strokeOps", "shadowOps", "first", "groupStart", "painted", "effects", "rs", "center", "pb", "alignmentOps", "own", "layers", "paint", "after", "geoms", "all", "intWidth", "dev", "native", "snapM", "solid", "s2", "cast", "space", "echo", "intensity", "hole", "pad", "clip", "blurred", "region", "withRichTextDescriptor", "spans", "local", "clear", "layerPaint", "sp", "fills", "layerRuns", "strokes", "paints", "strokeRuns", "al", "masked", "keep", "inside", "saved", "resolveSurfaceSource", "pixel", "decay", "taps", "ts", "tap", "resolveVideoTimestamp", "inv", "bx0", "by0", "bx1", "by1", "off", "tt", "kx", "ky", "fillAll", "surfaceFill", "rotated", "plan", "halves", "side", "withPaths", "capped", "cuts", "adds", "into", "mop", "lum", "docMode", "lookAt", "heading", "clipped", "lens", "silhouette", "nodeId", "issue", "SLANT", "ALIGN", "VALIGN", "shapers", "shaperFor", "shaper", "measureText", "layoutTextBlock", "fi", "lines", "MAX_RECOVERIES", "RECOVERY_WINDOW_MS", "MAX_GPU_ERRORS", "listeners", "targets", "watched", "recoveries", "gpuErrors", "crashed", "panicHooked", "onWgpuEvent", "crashMessage", "addFaultTarget", "hookPanics", "crashIssue", "watchDevice", "reportGpuError", "deviceLost", "event", "broadcast", "error", "message", "reason", "detail", "now", "crash", "reported", "TRANSIENT", "FEATURE_NAMES", "missingMessage", "prefix", "WgpuSurfaceContext", "store", "spacing", "token", "starting", "backend", "add", "renderIssueKey", "nodes", "mime", "quality", "pr", "fw", "fh", "validateShader", "wasmUrl", "WGSL_PRELUDE", "INSET", "RADIUS", "DISCS", "ShaderPreview", "preview", "content", "pattern", "host", "short", "effectBox", "isWgpuSupported", "gpu", "createWgpuRenderer", "WebGpuUnavailableError", "loadRenderer", "options", "gpu", "isWgpuSupported", "createWgpuRenderer", "loadAssetBytes", "deliver", "bytes", "options", "blob", "url", "link", "FORMATS", "Mp4OutputFormat", "WebMOutputFormat", "WavOutputFormat", "Mp3OutputFormat", "EXPORT_FORMATS", "formatSpec", "format", "spec", "isAudioFormat", "DEFAULT_AUDIO_BITRATE", "OPUS_SAMPLE_RATE", "audioTrackSource", "bitrate", "codec", "AudioBufferSource", "mp3Registered", "ensureAudioEncoder", "canEncodeAudio", "registerMp3Encoder", "error", "BITS_PER_PIXEL", "MIN_VIDEO_BITRATE", "MAX_VIDEO_BITRATE", "motionGraphicsBitrate", "width", "height", "fps", "raw", "DEFAULT_KEY_FRAME_INTERVAL", "DEFAULT_SUPERSAMPLE", "EMPTY_MANIFEST", "MediabunnyVideoSink", "BufferTarget", "canvas", "output", "format", "encoding", "audioOptions", "downsampling", "CanvasSource", "Output", "formatSpec", "info", "ensureAudioEncoder", "audioTrackSource", "DEFAULT_AUDIO_BITRATE", "timestamp", "duration", "mixed", "buffer", "evenUp", "n", "rounded", "MAX_RENDER_AXIS", "fittedSupersample", "requested", "longest", "factor", "resolveCodec", "size", "codecs", "fallback", "wanted", "CODEC_NAMES", "codec", "canEncode", "canEncodeVideo", "resolveVideoEncoding", "video", "plainVideoEncoding", "bitrate", "exportGeometry", "viewport", "scale", "supersample", "oversample", "openExportSurface", "params", "assetCatalog", "ManifestAssetCatalog", "renderer", "loadRenderer", "storageAdapter", "renderContext", "error", "exportVideo", "source", "registry", "Registry", "manifest", "theme", "includeAudio", "audio", "frames", "onProgress", "signal", "rendererWasmUrl", "returnBytes", "spec", "filename", "project", "resolveProjectDocument", "DEFAULT_OUTPUT", "renderScale", "surface", "bytes", "renderTimeline", "WebAudioMixer", "deliver", "DEFAULT_OUTPUT", "ManifestAssetCatalog", "AssetTimeline", "Registry", "resolveProjectDocument", "EMPTY_MANIFEST", "mixTimelineAudio", "params", "registry", "Registry", "manifest", "sampleRate", "project", "resolveProjectDocument", "DEFAULT_OUTPUT", "viewport", "fps", "renderer", "loadRenderer", "catalog", "ManifestAssetCatalog", "storage", "measurer", "precomper", "AssetTimeline", "precomp", "scheduled", "collectAudio", "mixAudio", "NoAudioError", "exportAudio", "params", "format", "audio", "onProgress", "signal", "returnBytes", "spec", "formatSpec", "ensureAudioEncoder", "mixed", "mixTimelineAudio", "target", "BufferTarget", "output", "Output", "source", "audioTrackSource", "deliver", "DEFAULT_OUTPUT", "resolveProjectDocument", "DEFAULT_OUTPUT", "ManifestAssetCatalog", "frameSpecAtTime", "Registry", "resolveProjectDocument", "EMPTY_MANIFEST", "stillFrameSpec", "options", "fps", "frameSpecAtTime", "frame", "mimeOf", "format", "StillRenderer", "backend", "DEFAULT_OUTPUT", "Registry", "ManifestAssetCatalog", "source", "scale", "project", "resolveProjectDocument", "drawFrameAt", "theme", "manifest", "viewport", "blob", "canvas", "quality", "resolve", "reject", "createStillRenderer", "loadRenderer", "exportScreenshot", "params", "registry", "scale", "manifest", "theme", "rendererWasmUrl", "frame", "format", "quality", "project", "resolveProjectDocument", "DEFAULT_OUTPUT", "renderer", "createStillRenderer", "ConcatMismatchError", "segment", "message", "sameDecoderConfig", "a", "b", "da", "toBytes", "db", "i", "description", "createSegmentJoiner", "options", "first", "output", "source", "audioSource", "target", "index", "offset", "start", "StreamTarget", "BufferTarget", "Output", "formatSpec", "EncodedVideoPacketSource", "audioTrackSource", "bytes", "input", "Input", "BufferSource", "MP4", "WEBM", "openSegment", "leading", "packet", "EncodedPacketSink", "buffer", "format", "track", "config", "concatVideoSegments", "segments", "joiner", "error", "DEFAULT_OUTPUT", "placeTracks", "Registry", "renderIssueKey", "resolveProjectDocument", "totalFramesOf", "planChunks", "totalFrames", "options", "unit", "seconds", "size", "chunks", "start", "last", "LaneGovernor", "emptyWindow", "_options", "alive", "sample", "w", "elapsed", "fps", "waitShare", "before", "ATTEMPTS", "runLanes", "options", "lanes", "spec", "chunks", "signal", "now", "controller", "abort", "governor", "LaneGovernor", "queue", "chunk", "inFlight", "dead", "doneFrames", "remaining", "sum", "c", "failure", "wake", "woken", "resolve", "notify", "r", "alive", "admitted", "i", "rank", "j", "retire", "framesDrawn", "frames", "f", "take", "job", "queued", "share", "end", "runLane", "opened", "error", "reported", "bytes", "report", "changed", "issue", "_", "EMPTY_MANIFEST", "DEFAULT_SUPERSAMPLE", "DRAWN", "exportVideoParallel", "params", "registry", "Registry", "scale", "format", "manifest", "includeAudio", "audio", "signal", "onProgress", "supersample", "formatSpec", "project", "resolveProjectDocument", "DEFAULT_OUTPUT", "fps", "totalFrames", "totalFramesOf", "placeTracks", "output", "exportGeometry", "encoding", "plainVideoEncoding", "resolveVideoEncoding", "spec", "chunks", "planChunks", "mixed", "mixTimelineAudio", "reported", "seenIssues", "report", "p", "run", "abortRun", "ready", "joinedTo", "joining", "joiner", "pump", "createSegmentJoiner", "end", "bytes", "runLanes", "issue", "key", "renderIssueKey", "frames", "chunk", "error", "Registry", "REPORT_EVERY_MS", "openSegmentSession", "spec", "env", "project", "viewport", "fps", "registry", "Registry", "output", "oversample", "renderScale", "exportGeometry", "surface", "openExportSurface", "chunk", "onReport", "signal", "sink", "TimedSink", "MediabunnyVideoSink", "bytes", "renderTimeline", "issue", "_inner", "_onReport", "info", "timestamp", "duration", "before", "after", "issues", "localLane", "env", "spec", "openSegmentSession", "laneError", "message", "name", "error", "messagePortLane", "port", "options", "next", "gone", "pending", "event", "msg", "entry", "fail", "reason", "call", "signal", "onReport", "resolve", "reject", "onAbort", "m", "e", "session", "chunk", "renderSignal", "serveExportLane", "sessions", "renders", "reply", "transfer", "replyError", "id", "onMessage", "opening", "controller", "bytes", "report", "whole", "s", "Ticker", "WebTicker", "opts", "context", "clamped", "speed", "reverse", "error", "remaining", "sampleRate", "buffer", "source", "elapsed", "next", "time", "frameOf", "t", "lastFrame", "steady", "steadied", "now", "audio", "step", "predicted", "drift", "loop", "epoch", "position", "ended", "report", "reread", "Engine", "esbuild", "sdk", "defaultCompilerWasmUrl", "compilerPromise", "defaultCompiler", "wasmUrl", "source", "code", "resolveDynamicNodes", "partial", "compilerWasmUrl", "WebExporter", "backend", "defaults", "request", "encode", "isAudioFormat", "exportAudio", "exportVideo", "still", "renderer", "drawn", "frameOption", "project", "registry", "StillRenderer", "frame", "createBrowserEngine", "options", "rawNodes", "classNodes", "n", "sourceNodes", "dynamicNodes", "resolveDynamicNodes", "loadRenderer", "exporter", "platform", "deps", "storage", "WebAudioSink", "fps", "audioDevice", "sink", "WebTicker", "engine", "Engine", "source"]
|
|
7
|
+
}
|