@workglow/util 0.2.16 → 0.2.17
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/dist/browser.js +22 -22
- package/dist/browser.js.map +4 -4
- package/dist/bun.js +22 -22
- package/dist/bun.js.map +4 -4
- package/dist/media/Image.d.ts.map +1 -1
- package/dist/media-browser.js.map +3 -3
- package/dist/media-node.js.map +2 -2
- package/dist/node.js +22 -22
- package/dist/node.js.map +4 -4
- package/dist/worker/WorkerManager.d.ts +6 -6
- package/dist/worker/WorkerManager.d.ts.map +1 -1
- package/dist/worker/WorkerServerBase.d.ts +8 -8
- package/dist/worker/WorkerServerBase.d.ts.map +1 -1
- package/dist/worker-browser.js +22 -22
- package/dist/worker-browser.js.map +4 -4
- package/dist/worker-bun.js +22 -22
- package/dist/worker-bun.js.map +4 -4
- package/dist/worker-node.js +22 -22
- package/dist/worker-node.js.map +4 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/media/Image.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC,GACD;IAME,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC,CAAC;AAEN,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,iBAAiB,CAAC;AAEtB,KAAK,WAAW,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjF;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC;AAE3E,QAAA,MAAM,WAAW,eAA2C,CAAC;AAQ7D,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAQnD;AAoDD;;;;;;;;;GASG;AACH,qBAAa,KAAK;IAChB,yDAAyD;IACzD,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,CAAQ;IAEpC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,SAAS,CAAgC;IAEjD,OAAO,eAEN;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAKzC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAE5C;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAEjC;IAED,qFAAqF;IACrF,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CA8BjC;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAMxC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/media/Image.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface ColorObject {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n}\n\nconst HEX_PATTERN = /^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n\n/**\n * Parse a `#RGB` / `#RGBA` / `#RRGGBB` / `#RRGGBBAA` hex color into a {@link ColorObject}.\n * Case-insensitive on input. No whitespace tolerance. Shorthand nibbles are doubled.\n * Throws on any malformed input.\n */\nexport function parseHexColor(hex: string): ColorObject {\n if (typeof hex !== \"string\" || !HEX_PATTERN.test(hex)) {\n throw new Error(`Invalid hex color: ${String(hex)}`);\n }\n const body = hex.slice(1);\n const double = (nibble: string): number => parseInt(nibble + nibble, 16);\n if (body.length === 3) {\n return { r: double(body[0]!), g: double(body[1]!), b: double(body[2]!), a: 255 };\n }\n if (body.length === 4) {\n return {\n r: double(body[0]!),\n g: double(body[1]!),\n b: double(body[2]!),\n a: double(body[3]!),\n };\n }\n if (body.length === 6) {\n return {\n r: parseInt(body.slice(0, 2), 16),\n g: parseInt(body.slice(2, 4), 16),\n b: parseInt(body.slice(4, 6), 16),\n a: 255,\n };\n }\n return {\n r: parseInt(body.slice(0, 2), 16),\n g: parseInt(body.slice(2, 4), 16),\n b: parseInt(body.slice(4, 6), 16),\n a: parseInt(body.slice(6, 8), 16),\n };\n}\n\nconst CHANNEL_MIN = 0;\nconst CHANNEL_MAX = 255;\n\nfunction assertChannel(name: string, value: number): void {\n if (!Number.isInteger(value) || value < CHANNEL_MIN || value > CHANNEL_MAX) {\n throw new Error(`Color channel ${name} out of range (0-255 integer): ${value}`);\n }\n}\n\nfunction byteToHex(value: number): string {\n return value.toString(16).padStart(2, \"0\");\n}\n\n/**\n * Emit a {@link ColorObject} as `#RRGGBB` when `a === 255`, otherwise `#RRGGBBAA`.\n * Always lowercase, never shorthand. Throws on non-integer or out-of-range channels.\n */\nexport function toHexColor(c: ColorObject): string {\n assertChannel(\"r\", c.r);\n assertChannel(\"g\", c.g);\n assertChannel(\"b\", c.b);\n assertChannel(\"a\", c.a);\n const head = `#${byteToHex(c.r)}${byteToHex(c.g)}${byteToHex(c.b)}`;\n return c.a === 255 ? head : `${head}${byteToHex(c.a)}`;\n}\n\nfunction isInRangeByte(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 255;\n}\n\n/**\n * Type guard for a {@link ColorObject}-shaped value (alpha optional).\n * Does not reject extra properties — JSON Schema validation handles that separately.\n */\nexport function isColorObject(value: unknown): value is ColorObject {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as Record<string, unknown>;\n if (!isInRangeByte(candidate.r)) return false;\n if (!isInRangeByte(candidate.g)) return false;\n if (!isInRangeByte(candidate.b)) return false;\n if (candidate.a !== undefined && !isInRangeByte(candidate.a)) return false;\n return true;\n}\n\n/** Type guard for a hex color string (same regex as `parseHexColor`). */\nexport function isHexColor(value: unknown): value is string {\n return typeof value === \"string\" && HEX_PATTERN.test(value);\n}\n\n/**\n * Normalize either wire form to a full {@link ColorObject}. Object inputs default\n * `a` to 255. Throws on anything that's neither a valid hex string nor a valid\n * color object.\n */\nexport function resolveColor(\n value: string | { r: number; g: number; b: number; a?: number }\n): ColorObject {\n if (typeof value === \"string\") return parseHexColor(value);\n if (!isColorObject(value)) {\n throw new Error(`Invalid color value: ${JSON.stringify(value)}`);\n }\n return {\n r: value.r,\n g: value.g,\n b: value.b,\n a: value.a ?? 255,\n };\n}\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary } from \"./imageTypes\";\n\nexport interface ImageRasterCodec {\n decodeDataUri(dataUri: string): Promise<ImageBinary>;\n encodeDataUri(image: ImageBinary, mimeType: string): Promise<string>;\n}\n\nlet codec: ImageRasterCodec | null = null;\n\nexport function registerImageRasterCodec(next: ImageRasterCodec): void {\n codec = next;\n}\n\nexport function getImageRasterCodec(): ImageRasterCodec {\n if (!codec) {\n throw new Error(\n \"Image raster codec is not registered. Ensure you import @workglow/tasks from the browser or Node entry (dist/browser.js or dist/node.js), or call registerImageRasterCodec() during startup.\"\n );\n }\n return codec;\n}\n",
|
|
8
8
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Structural match for `RawImage` from `@huggingface/transformers`. The HF\n * class carries helpers (`save`, `toCanvas`, `rgb`, ...) that the provider\n * runtime does not invoke on inputs, so a minimal shim over the four data\n * fields is sufficient. If a consumer later needs HF-specific methods we can\n * widen this shim lazily — no need to pull the transformers dep into\n * `@workglow/util/media` today.\n */\nexport class MediaRawImage {\n readonly data: Uint8ClampedArray;\n readonly width: number;\n readonly height: number;\n readonly channels: number;\n\n constructor(data: Uint8ClampedArray, width: number, height: number, channels: number) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.channels = channels;\n }\n}\n\nexport function isMediaRawImageShape(\n value: unknown\n): value is { data: Uint8ClampedArray; width: number; height: number; channels: number } {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return (\n v.data instanceof Uint8ClampedArray &&\n typeof v.width === \"number\" &&\n typeof v.height === \"number\" &&\n typeof v.channels === \"number\"\n );\n}\n",
|
|
9
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary, ImageChannels, ImageDataSupport } from \"./imageTypes\";\nimport { parseDataUri } from \"./imageTypes\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\nimport { MediaRawImage, isMediaRawImageShape } from \"./MediaRawImage\";\n\n/**\n * Legacy wire format: either a raw `data:image/...;base64,...` URI or a\n * serialized {@link ImageBinary} with `data` as a plain number array\n * (`Array.from(Uint8ClampedArray)`) to avoid the indexed-object pitfall\n * when stringified through `JSON.stringify`.\n */\nexport type ImageJson =\n | string\n | {\n readonly data: readonly number[];\n readonly width: number;\n readonly height: number;\n readonly channels: ImageChannels;\n }\n | {\n // Sentinel for transient browser handles (bitmap / videoFrame /\n // offscreenCanvas) whose pixels haven't been materialized. Lets\n // JSON.stringify of a workflow holding such an image succeed instead\n // of throwing; callers must await getPixels() or getDataUri() before\n // serialization if they need a real round-trip.\n readonly unsynced: true;\n readonly kind: ImageSourceKind;\n };\n\nexport type ImageSourceKind =\n | \"dataUri\"\n | \"pixels\"\n | \"blob\"\n | \"bitmap\"\n | \"videoFrame\"\n | \"offscreenCanvas\";\n\ntype ImageSource =\n | { readonly kind: \"dataUri\"; readonly dataUri: string; readonly mimeType: string }\n | { readonly kind: \"pixels\"; readonly pixels: ImageBinary }\n | { readonly kind: \"blob\"; readonly blob: Blob }\n | { readonly kind: \"bitmap\"; readonly bitmap: ImageBitmap }\n | { readonly kind: \"videoFrame\"; readonly frame: VideoFrame }\n | { readonly kind: \"offscreenCanvas\"; readonly canvas: OffscreenCanvas };\n\nconst IMAGE_BRAND = Symbol.for(\"@workglow/util/media/Image\");\n\nfunction parseDataUriMimeType(dataUri: string): string {\n const match = dataUri.match(/^data:([^;,]+)/);\n const raw = match?.[1]?.trim();\n return raw ? raw.toLowerCase() : \"image/png\";\n}\n\nexport function dataUriToBlob(dataUri: string): Blob {\n const { mimeType, base64 } = parseDataUri(dataUri);\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mimeType });\n}\n\nfunction toImageBinary(value: {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n rawChannels?: number | undefined;\n}): ImageBinary {\n const ch = value.channels;\n if (ch !== 1 && ch !== 3 && ch !== 4) {\n throw new Error(`Image: unsupported channel count ${ch}`);\n }\n const data = coerceToUint8ClampedArray(value.data);\n return {\n data,\n width: value.width,\n height: value.height,\n channels: ch,\n rawChannels: value.rawChannels,\n };\n}\n\nfunction coerceToUint8ClampedArray(data: unknown): Uint8ClampedArray {\n if (data instanceof Uint8ClampedArray) {\n return data;\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8ClampedArray(\n (data as ArrayBufferView).buffer,\n (data as ArrayBufferView).byteOffset,\n (data as ArrayBufferView).byteLength\n );\n }\n if (Array.isArray(data)) {\n return Uint8ClampedArray.from(data as ArrayLike<number>);\n }\n if (data && typeof data === \"object\") {\n // Indexed-object form produced by JSON.stringify(Uint8ClampedArray).\n const obj = data as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length > 0 && keys.every((k) => /^\\d+$/.test(k))) {\n const arr = new Uint8ClampedArray(keys.length);\n for (let i = 0; i < keys.length; i++) {\n arr[i] = Number(obj[String(i)]);\n }\n return arr;\n }\n }\n throw new Error(\"Image: pixel data is not array-like\");\n}\n\n/**\n * Unified image representation: holds a single source (dataUri, pixels, blob,\n * bitmap, video frame, or offscreen canvas) and converts on demand.\n *\n * - `toJSON()` normalizes to `{ kind, ... }`; no `Uint8ClampedArray` indexed-\n * object serialization pitfall.\n * - `fromJSON()` accepts the new discriminated shape **and** legacy shapes\n * (raw data URI, raw `ImageBinary`, indexed-object `data`) for migration.\n * - `toFirstSupported(supports[])` replaces `convertImageDataToUseableForm`.\n */\nexport class Image {\n /** @internal brand so `Image.is` works across realms. */\n readonly [IMAGE_BRAND]: true = true;\n\n private source: ImageSource;\n private pixelsCache: ImageBinary | undefined;\n private dataUriCache: Map<string, string> = new Map();\n private blobCache: Map<string, Blob> = new Map();\n\n private constructor(source: ImageSource) {\n this.source = source;\n }\n\n static fromDataUri(dataUri: string): Image {\n if (!dataUri.startsWith(\"data:\")) {\n throw new Error(\"Image.fromDataUri: input must start with 'data:'\");\n }\n return new Image({ kind: \"dataUri\", dataUri, mimeType: parseDataUriMimeType(dataUri) });\n }\n\n static fromPixels(pixels: ImageBinary): Image {\n return new Image({ kind: \"pixels\", pixels });\n }\n\n static fromBlob(blob: Blob): Image {\n return new Image({ kind: \"blob\", blob });\n }\n\n /** Accepts anything `convertImageDataToUseableForm` accepted today, plus `Image`. */\n static from(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n return Image.fromBlob(value);\n }\n if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n return new Image({ kind: \"bitmap\", bitmap: value });\n }\n if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n return new Image({ kind: \"videoFrame\", frame: value });\n }\n if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n return new Image({ kind: \"offscreenCanvas\", canvas: value });\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n \"width\" in value &&\n \"height\" in value &&\n \"channels\" in value\n ) {\n return Image.fromPixels(toImageBinary(value as never));\n }\n throw new Error(`Image.from: unsupported image value of type ${typeof value}`);\n }\n\n static is(value: unknown): value is Image {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[IMAGE_BRAND] === true\n );\n }\n\n /**\n * Reconstruct an {@link Image} from its serialized form. Accepts a raw\n * `data:` URI string, a pixel-backed object `{data,width,height,channels}`\n * (with `data` as typed array, plain array, or the indexed-object pitfall\n * produced by `JSON.stringify(Uint8ClampedArray)`), or an `Image` instance.\n */\n static fromJSON(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (\n value &&\n typeof value === \"object\" &&\n (value as { unsynced?: unknown }).unsynced === true\n ) {\n const kind = (value as { kind?: unknown }).kind;\n throw new Error(\n `Image.fromJSON: cannot reconstruct image from \"unsynced\" sentinel (kind=${String(kind)}); pixels were not materialized before serialization. Call await image.getPixels() before JSON.stringify.`\n );\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n typeof (value as { width?: unknown }).width === \"number\" &&\n typeof (value as { height?: unknown }).height === \"number\" &&\n typeof (value as { channels?: unknown }).channels === \"number\"\n ) {\n const v = value as {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n };\n return Image.fromPixels(\n toImageBinary({\n data: v.data,\n width: v.width,\n height: v.height,\n channels: v.channels,\n })\n );\n }\n throw new Error(\"Image.fromJSON: value does not match any known Image shape\");\n }\n\n get kind(): ImageSourceKind {\n return this.source.kind;\n }\n\n get mimeType(): string | undefined {\n if (this.source.kind === \"dataUri\") return this.source.mimeType;\n if (this.source.kind === \"blob\") return this.source.blob.type || undefined;\n return undefined;\n }\n\n get width(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.width;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.width;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.width;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayWidth;\n return this.pixelsCache?.width;\n }\n\n get height(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.height;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.height;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.height;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayHeight;\n return this.pixelsCache?.height;\n }\n\n get channels(): ImageChannels | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.channels;\n return this.pixelsCache?.channels;\n }\n\n async getPixels(): Promise<ImageBinary> {\n if (this.pixelsCache) return this.pixelsCache;\n if (this.source.kind === \"pixels\") {\n this.pixelsCache = this.source.pixels;\n return this.pixelsCache;\n }\n if (this.source.kind === \"dataUri\") {\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(this.source.dataUri);\n return this.pixelsCache;\n }\n if (this.source.kind === \"blob\") {\n const dataUri = await blobToDataUri(this.source.blob);\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(dataUri);\n return this.pixelsCache;\n }\n throw new Error(\n `Image.getPixels: browser-only source '${this.source.kind}' requires Image.browser augmentation`\n );\n }\n\n async getDataUri(mimeType: string = \"image/png\"): Promise<string> {\n if (this.source.kind === \"dataUri\") {\n if (mimeType === this.source.mimeType) {\n return this.source.dataUri;\n }\n }\n const cached = this.dataUriCache.get(mimeType);\n if (cached) return cached;\n const pixels = await this.getPixels();\n const dataUri = await getImageRasterCodec().encodeDataUri(pixels, mimeType);\n this.dataUriCache.set(mimeType, dataUri);\n return dataUri;\n }\n\n async getBlob(mimeType: string = \"image/png\"): Promise<Blob> {\n if (this.source.kind === \"blob\" && (!mimeType || this.source.blob.type === mimeType)) {\n return this.source.blob;\n }\n const cached = this.blobCache.get(mimeType);\n if (cached) return cached;\n if (this.source.kind === \"dataUri\" && this.source.mimeType === mimeType) {\n const blob = dataUriToBlob(this.source.dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n const dataUri = await this.getDataUri(mimeType);\n const blob = dataUriToBlob(dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n\n /**\n * Return the first representation in `supports` that can be produced on\n * this platform. Mirrors the list-order semantics of the former\n * `convertImageDataToUseableForm`: earlier entries win.\n */\n async toFirstSupported(supports: readonly ImageDataSupport[]): Promise<unknown> {\n const canonical = this.canonicalSupport();\n if (canonical && supports.includes(canonical)) {\n return this.currentSourceValue();\n }\n for (const want of supports) {\n switch (want) {\n case \"ImageBinary\":\n return this.getPixels();\n case \"Blob\":\n return this.getBlob();\n case \"DataUri\":\n return this.getDataUri();\n case \"RawImage\": {\n const p = await this.getPixels();\n return new MediaRawImage(p.data, p.width, p.height, p.channels);\n }\n case \"ImageBitmap\":\n case \"VideoFrame\":\n case \"OffscreenCanvas\": {\n const asBrowser = this as unknown as {\n toFirstSupportedBrowser?: (\n want: ImageDataSupport\n ) => Promise<unknown> | undefined;\n };\n if (asBrowser.toFirstSupportedBrowser) {\n const produced = await asBrowser.toFirstSupportedBrowser(want);\n if (produced !== undefined) return produced;\n }\n continue;\n }\n case \"Sharp\":\n continue;\n }\n }\n throw new Error(\n `Image.toFirstSupported: none of [${supports.join(\", \")}] can be produced on this platform`\n );\n }\n\n toJSON(): ImageJson {\n if (this.source.kind === \"dataUri\") {\n return this.source.dataUri;\n }\n const pixels =\n this.source.kind === \"pixels\" ? this.source.pixels : this.pixelsCache;\n if (pixels) {\n return {\n data: Array.from(pixels.data),\n width: pixels.width,\n height: pixels.height,\n channels: pixels.channels,\n };\n }\n return { unsynced: true, kind: this.source.kind };\n }\n\n private canonicalSupport(): ImageDataSupport | undefined {\n switch (this.source.kind) {\n case \"dataUri\":\n return \"DataUri\";\n case \"pixels\":\n return \"ImageBinary\";\n case \"blob\":\n return \"Blob\";\n case \"bitmap\":\n return \"ImageBitmap\";\n case \"videoFrame\":\n return \"VideoFrame\";\n case \"offscreenCanvas\":\n return \"OffscreenCanvas\";\n }\n }\n\n /** @internal */\n getSource(): ImageSource {\n return this.source;\n }\n\n /** @internal */\n setPixelsCache(pixels: ImageBinary): void {\n this.pixelsCache = pixels;\n }\n\n private currentSourceValue(): unknown {\n switch (this.source.kind) {\n case \"dataUri\":\n return this.source.dataUri;\n case \"pixels\":\n return this.source.pixels;\n case \"blob\":\n return this.source.blob;\n case \"bitmap\":\n return this.source.bitmap;\n case \"videoFrame\":\n return this.source.frame;\n case \"offscreenCanvas\":\n return this.source.canvas;\n }\n }\n}\n\nasync function blobToDataUri(blob: Blob): Promise<string> {\n const buffer = await blob.arrayBuffer();\n const bytes = new Uint8Array(buffer);\n let binary = \"\";\n const CHUNK = 8192;\n for (let i = 0; i < bytes.byteLength; i += CHUNK) {\n binary += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n const mime = blob.type || \"image/png\";\n return `data:${mime};base64,${btoa(binary)}`;\n}\n\nexport { MediaRawImage, isMediaRawImageShape };\n",
|
|
10
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n *\n * Browser-only augmentation of {@link Image}. Adds `getImageData`,\n * `getImageBitmap`, `getVideoFrame`, `getOffscreenCanvas`, and a private\n * helper `toFirstSupportedBrowser` consulted by the base `toFirstSupported`.\n */\n\nimport type { ImageBinary, ImageDataSupport } from \"./imageTypes\";\nimport { Image, dataUriToBlob } from \"./Image\";\n\ndeclare module \"./Image\" {\n interface Image {\n getImageData(): Promise<ImageData>;\n getImageBitmap(): Promise<ImageBitmap>;\n getVideoFrame(): Promise<VideoFrame>;\n getOffscreenCanvas(): Promise<OffscreenCanvas>;\n }\n namespace Image {\n function fromBitmap(bitmap: ImageBitmap): Image;\n function fromVideoFrame(frame: VideoFrame): Image;\n function fromOffscreenCanvas(canvas: OffscreenCanvas): Image;\n }\n}\n\nImage.fromBitmap = function fromBitmap(bitmap: ImageBitmap): Image {\n return Image.from(bitmap);\n};\nImage.fromVideoFrame = function fromVideoFrame(frame: VideoFrame): Image {\n return Image.from(frame);\n};\nImage.fromOffscreenCanvas = function fromOffscreenCanvas(canvas: OffscreenCanvas): Image {\n return Image.from(canvas);\n};\n\nfunction rasterToImageData(image: ImageBinary): ImageData {\n const { width, height, channels, data } = image;\n const id = new ImageData(width, height);\n if (channels === 4) {\n id.data.set(data);\n return id;\n }\n if (channels === 3) {\n for (let i = 0; i < width * height; i++) {\n id.data[i * 4] = data[i * 3]!;\n id.data[i * 4 + 1] = data[i * 3 + 1]!;\n id.data[i * 4 + 2] = data[i * 3 + 2]!;\n id.data[i * 4 + 3] = 255;\n }\n return id;\n }\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const v = data[i]!;\n id.data[i * 4] = v;\n id.data[i * 4 + 1] = v;\n id.data[i * 4 + 2] = v;\n id.data[i * 4 + 3] = 255;\n }\n return id;\n }\n throw new Error(`Image.getImageData: unsupported channel count ${channels}`);\n}\n\nasync function blobToOffscreenCanvas(blob: Blob): Promise<OffscreenCanvas> {\n const bitmap = await createImageBitmap(blob);\n try {\n const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Image: failed to get 2D context on OffscreenCanvas\");\n ctx.drawImage(bitmap, 0, 0);\n return canvas;\n } finally {\n bitmap.close();\n }\n}\n\nImage.prototype.getImageData = async function getImageData(this: Image): Promise<ImageData> {\n const pixels = await this.getPixels();\n return rasterToImageData(pixels);\n};\n\nImage.prototype.getImageBitmap = async function getImageBitmap(this: Image): Promise<ImageBitmap> {\n const source = this.getSource();\n if (source.kind === \"bitmap\") return source.bitmap;\n if (source.kind === \"blob\") return createImageBitmap(source.blob);\n if (source.kind === \"offscreenCanvas\") {\n return source.canvas.transferToImageBitmap();\n }\n if (source.kind === \"dataUri\") {\n return createImageBitmap(dataUriToBlob(source.dataUri));\n }\n const id = await this.getImageData();\n return createImageBitmap(id);\n};\n\nImage.prototype.getVideoFrame = async function getVideoFrame(this: Image): Promise<VideoFrame> {\n const source = this.getSource();\n if (source.kind === \"videoFrame\") return source.frame;\n const bitmap = await this.getImageBitmap();\n return new VideoFrame(bitmap, { timestamp: 0 });\n};\n\nImage.prototype.getOffscreenCanvas = async function getOffscreenCanvas(\n this: Image\n): Promise<OffscreenCanvas> {\n const source = this.getSource();\n if (source.kind === \"offscreenCanvas\") return source.canvas;\n if (source.kind === \"blob\") return blobToOffscreenCanvas(source.blob);\n if (source.kind === \"dataUri\") return blobToOffscreenCanvas(dataUriToBlob(source.dataUri));\n const id = await this.getImageData();\n const canvas = new OffscreenCanvas(id.width, id.height);\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Image.getOffscreenCanvas: failed to get 2D context\");\n ctx.putImageData(id, 0, 0);\n return canvas;\n};\n\n// Internal hook used by base `toFirstSupported` for browser-only tokens.\n(Image.prototype as unknown as {\n
|
|
9
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary, ImageChannels, ImageDataSupport } from \"./imageTypes\";\nimport { parseDataUri } from \"./imageTypes\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\nimport { MediaRawImage, isMediaRawImageShape } from \"./MediaRawImage\";\n\n/**\n * Legacy wire format: either a raw `data:image/...;base64,...` URI or a\n * serialized {@link ImageBinary} with `data` as a plain number array\n * (`Array.from(Uint8ClampedArray)`) to avoid the indexed-object pitfall\n * when stringified through `JSON.stringify`.\n */\nexport type ImageJson =\n | string\n | {\n readonly data: readonly number[];\n readonly width: number;\n readonly height: number;\n readonly channels: ImageChannels;\n }\n | {\n // Sentinel for transient browser handles (bitmap / videoFrame /\n // offscreenCanvas) whose pixels haven't been materialized. Lets\n // JSON.stringify of a workflow holding such an image succeed instead\n // of throwing; callers must await getPixels() or getDataUri() before\n // serialization if they need a real round-trip.\n readonly unsynced: true;\n readonly kind: ImageSourceKind;\n };\n\nexport type ImageSourceKind =\n | \"dataUri\"\n | \"pixels\"\n | \"blob\"\n | \"bitmap\"\n | \"videoFrame\"\n | \"offscreenCanvas\";\n\ntype ImageSource =\n | { readonly kind: \"dataUri\"; readonly dataUri: string; readonly mimeType: string }\n | { readonly kind: \"pixels\"; readonly pixels: ImageBinary }\n | { readonly kind: \"blob\"; readonly blob: Blob }\n | { readonly kind: \"bitmap\"; readonly bitmap: ImageBitmap }\n | { readonly kind: \"videoFrame\"; readonly frame: VideoFrame }\n | { readonly kind: \"offscreenCanvas\"; readonly canvas: OffscreenCanvas };\n\nconst IMAGE_BRAND = Symbol.for(\"@workglow/util/media/Image\");\n\nfunction parseDataUriMimeType(dataUri: string): string {\n const match = dataUri.match(/^data:([^;,]+)/);\n const raw = match?.[1]?.trim();\n return raw ? raw.toLowerCase() : \"image/png\";\n}\n\nexport function dataUriToBlob(dataUri: string): Blob {\n const { mimeType, base64 } = parseDataUri(dataUri);\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mimeType });\n}\n\nfunction toImageBinary(value: {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n rawChannels?: number | undefined;\n}): ImageBinary {\n const ch = value.channels;\n if (ch !== 1 && ch !== 3 && ch !== 4) {\n throw new Error(`Image: unsupported channel count ${ch}`);\n }\n const data = coerceToUint8ClampedArray(value.data);\n return {\n data,\n width: value.width,\n height: value.height,\n channels: ch,\n rawChannels: value.rawChannels,\n };\n}\n\nfunction coerceToUint8ClampedArray(data: unknown): Uint8ClampedArray {\n if (data instanceof Uint8ClampedArray) {\n return data;\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8ClampedArray(\n (data as ArrayBufferView).buffer,\n (data as ArrayBufferView).byteOffset,\n (data as ArrayBufferView).byteLength\n );\n }\n if (Array.isArray(data)) {\n return Uint8ClampedArray.from(data as ArrayLike<number>);\n }\n if (data && typeof data === \"object\") {\n // Indexed-object form produced by JSON.stringify(Uint8ClampedArray).\n const obj = data as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length > 0 && keys.every((k) => /^\\d+$/.test(k))) {\n const arr = new Uint8ClampedArray(keys.length);\n for (let i = 0; i < keys.length; i++) {\n arr[i] = Number(obj[String(i)]);\n }\n return arr;\n }\n }\n throw new Error(\"Image: pixel data is not array-like\");\n}\n\n/**\n * Unified image representation: holds a single source (dataUri, pixels, blob,\n * bitmap, video frame, or offscreen canvas) and converts on demand.\n *\n * - `toJSON()` normalizes to `{ kind, ... }`; no `Uint8ClampedArray` indexed-\n * object serialization pitfall.\n * - `fromJSON()` accepts the new discriminated shape **and** legacy shapes\n * (raw data URI, raw `ImageBinary`, indexed-object `data`) for migration.\n * - `toFirstSupported(supports[])` replaces `convertImageDataToUseableForm`.\n */\nexport class Image {\n /** @internal brand so `Image.is` works across realms. */\n readonly [IMAGE_BRAND]: true = true;\n\n private source: ImageSource;\n private pixelsCache: ImageBinary | undefined;\n private dataUriCache: Map<string, string> = new Map();\n private blobCache: Map<string, Blob> = new Map();\n\n private constructor(source: ImageSource) {\n this.source = source;\n }\n\n static fromDataUri(dataUri: string): Image {\n if (!dataUri.startsWith(\"data:\")) {\n throw new Error(\"Image.fromDataUri: input must start with 'data:'\");\n }\n return new Image({ kind: \"dataUri\", dataUri, mimeType: parseDataUriMimeType(dataUri) });\n }\n\n static fromPixels(pixels: ImageBinary): Image {\n return new Image({ kind: \"pixels\", pixels });\n }\n\n static fromBlob(blob: Blob): Image {\n return new Image({ kind: \"blob\", blob });\n }\n\n /** Accepts anything `convertImageDataToUseableForm` accepted today, plus `Image`. */\n static from(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n return Image.fromBlob(value);\n }\n if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n return new Image({ kind: \"bitmap\", bitmap: value });\n }\n if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n return new Image({ kind: \"videoFrame\", frame: value });\n }\n if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n return new Image({ kind: \"offscreenCanvas\", canvas: value });\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n \"width\" in value &&\n \"height\" in value &&\n \"channels\" in value\n ) {\n return Image.fromPixels(toImageBinary(value as never));\n }\n throw new Error(`Image.from: unsupported image value of type ${typeof value}`);\n }\n\n static is(value: unknown): value is Image {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[IMAGE_BRAND] === true\n );\n }\n\n /**\n * Reconstruct an {@link Image} from its serialized form. Accepts a raw\n * `data:` URI string, a pixel-backed object `{data,width,height,channels}`\n * (with `data` as typed array, plain array, or the indexed-object pitfall\n * produced by `JSON.stringify(Uint8ClampedArray)`), or an `Image` instance.\n */\n static fromJSON(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (value && typeof value === \"object\" && (value as { unsynced?: unknown }).unsynced === true) {\n const kind = (value as { kind?: unknown }).kind;\n throw new Error(\n `Image.fromJSON: cannot reconstruct image from \"unsynced\" sentinel (kind=${String(kind)}); pixels were not materialized before serialization. Call await image.getPixels() before JSON.stringify.`\n );\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n typeof (value as { width?: unknown }).width === \"number\" &&\n typeof (value as { height?: unknown }).height === \"number\" &&\n typeof (value as { channels?: unknown }).channels === \"number\"\n ) {\n const v = value as {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n };\n return Image.fromPixels(\n toImageBinary({\n data: v.data,\n width: v.width,\n height: v.height,\n channels: v.channels,\n })\n );\n }\n throw new Error(\"Image.fromJSON: value does not match any known Image shape\");\n }\n\n get kind(): ImageSourceKind {\n return this.source.kind;\n }\n\n get mimeType(): string | undefined {\n if (this.source.kind === \"dataUri\") return this.source.mimeType;\n if (this.source.kind === \"blob\") return this.source.blob.type || undefined;\n return undefined;\n }\n\n get width(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.width;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.width;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.width;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayWidth;\n return this.pixelsCache?.width;\n }\n\n get height(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.height;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.height;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.height;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayHeight;\n return this.pixelsCache?.height;\n }\n\n get channels(): ImageChannels | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.channels;\n return this.pixelsCache?.channels;\n }\n\n async getPixels(): Promise<ImageBinary> {\n if (this.pixelsCache) return this.pixelsCache;\n if (this.source.kind === \"pixels\") {\n this.pixelsCache = this.source.pixels;\n return this.pixelsCache;\n }\n if (this.source.kind === \"dataUri\") {\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(this.source.dataUri);\n return this.pixelsCache;\n }\n if (this.source.kind === \"blob\") {\n const dataUri = await blobToDataUri(this.source.blob);\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(dataUri);\n return this.pixelsCache;\n }\n throw new Error(\n `Image.getPixels: browser-only source '${this.source.kind}' requires Image.browser augmentation`\n );\n }\n\n async getDataUri(mimeType: string = \"image/png\"): Promise<string> {\n if (this.source.kind === \"dataUri\") {\n if (mimeType === this.source.mimeType) {\n return this.source.dataUri;\n }\n }\n const cached = this.dataUriCache.get(mimeType);\n if (cached) return cached;\n const pixels = await this.getPixels();\n const dataUri = await getImageRasterCodec().encodeDataUri(pixels, mimeType);\n this.dataUriCache.set(mimeType, dataUri);\n return dataUri;\n }\n\n async getBlob(mimeType: string = \"image/png\"): Promise<Blob> {\n if (this.source.kind === \"blob\" && (!mimeType || this.source.blob.type === mimeType)) {\n return this.source.blob;\n }\n const cached = this.blobCache.get(mimeType);\n if (cached) return cached;\n if (this.source.kind === \"dataUri\" && this.source.mimeType === mimeType) {\n const blob = dataUriToBlob(this.source.dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n const dataUri = await this.getDataUri(mimeType);\n const blob = dataUriToBlob(dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n\n /**\n * Return the first representation in `supports` that can be produced on\n * this platform. Mirrors the list-order semantics of the former\n * `convertImageDataToUseableForm`: earlier entries win.\n */\n async toFirstSupported(supports: readonly ImageDataSupport[]): Promise<unknown> {\n const canonical = this.canonicalSupport();\n if (canonical && supports.includes(canonical)) {\n return this.currentSourceValue();\n }\n for (const want of supports) {\n switch (want) {\n case \"ImageBinary\":\n return this.getPixels();\n case \"Blob\":\n return this.getBlob();\n case \"DataUri\":\n return this.getDataUri();\n case \"RawImage\": {\n const p = await this.getPixels();\n return new MediaRawImage(p.data, p.width, p.height, p.channels);\n }\n case \"ImageBitmap\":\n case \"VideoFrame\":\n case \"OffscreenCanvas\": {\n const asBrowser = this as unknown as {\n toFirstSupportedBrowser?: (want: ImageDataSupport) => Promise<unknown> | undefined;\n };\n if (asBrowser.toFirstSupportedBrowser) {\n const produced = await asBrowser.toFirstSupportedBrowser(want);\n if (produced !== undefined) return produced;\n }\n continue;\n }\n case \"Sharp\":\n continue;\n }\n }\n throw new Error(\n `Image.toFirstSupported: none of [${supports.join(\", \")}] can be produced on this platform`\n );\n }\n\n toJSON(): ImageJson {\n if (this.source.kind === \"dataUri\") {\n return this.source.dataUri;\n }\n const pixels = this.source.kind === \"pixels\" ? this.source.pixels : this.pixelsCache;\n if (pixels) {\n return {\n data: Array.from(pixels.data),\n width: pixels.width,\n height: pixels.height,\n channels: pixels.channels,\n };\n }\n return { unsynced: true, kind: this.source.kind };\n }\n\n private canonicalSupport(): ImageDataSupport | undefined {\n switch (this.source.kind) {\n case \"dataUri\":\n return \"DataUri\";\n case \"pixels\":\n return \"ImageBinary\";\n case \"blob\":\n return \"Blob\";\n case \"bitmap\":\n return \"ImageBitmap\";\n case \"videoFrame\":\n return \"VideoFrame\";\n case \"offscreenCanvas\":\n return \"OffscreenCanvas\";\n }\n }\n\n /** @internal */\n getSource(): ImageSource {\n return this.source;\n }\n\n /** @internal */\n setPixelsCache(pixels: ImageBinary): void {\n this.pixelsCache = pixels;\n }\n\n private currentSourceValue(): unknown {\n switch (this.source.kind) {\n case \"dataUri\":\n return this.source.dataUri;\n case \"pixels\":\n return this.source.pixels;\n case \"blob\":\n return this.source.blob;\n case \"bitmap\":\n return this.source.bitmap;\n case \"videoFrame\":\n return this.source.frame;\n case \"offscreenCanvas\":\n return this.source.canvas;\n }\n }\n}\n\nasync function blobToDataUri(blob: Blob): Promise<string> {\n const buffer = await blob.arrayBuffer();\n const bytes = new Uint8Array(buffer);\n let binary = \"\";\n const CHUNK = 8192;\n for (let i = 0; i < bytes.byteLength; i += CHUNK) {\n binary += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n const mime = blob.type || \"image/png\";\n return `data:${mime};base64,${btoa(binary)}`;\n}\n\nexport { MediaRawImage, isMediaRawImageShape };\n",
|
|
10
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n *\n * Browser-only augmentation of {@link Image}. Adds `getImageData`,\n * `getImageBitmap`, `getVideoFrame`, `getOffscreenCanvas`, and a private\n * helper `toFirstSupportedBrowser` consulted by the base `toFirstSupported`.\n */\n\nimport type { ImageBinary, ImageDataSupport } from \"./imageTypes\";\nimport { Image, dataUriToBlob } from \"./Image\";\n\ndeclare module \"./Image\" {\n interface Image {\n getImageData(): Promise<ImageData>;\n getImageBitmap(): Promise<ImageBitmap>;\n getVideoFrame(): Promise<VideoFrame>;\n getOffscreenCanvas(): Promise<OffscreenCanvas>;\n }\n namespace Image {\n function fromBitmap(bitmap: ImageBitmap): Image;\n function fromVideoFrame(frame: VideoFrame): Image;\n function fromOffscreenCanvas(canvas: OffscreenCanvas): Image;\n }\n}\n\nImage.fromBitmap = function fromBitmap(bitmap: ImageBitmap): Image {\n return Image.from(bitmap);\n};\nImage.fromVideoFrame = function fromVideoFrame(frame: VideoFrame): Image {\n return Image.from(frame);\n};\nImage.fromOffscreenCanvas = function fromOffscreenCanvas(canvas: OffscreenCanvas): Image {\n return Image.from(canvas);\n};\n\nfunction rasterToImageData(image: ImageBinary): ImageData {\n const { width, height, channels, data } = image;\n const id = new ImageData(width, height);\n if (channels === 4) {\n id.data.set(data);\n return id;\n }\n if (channels === 3) {\n for (let i = 0; i < width * height; i++) {\n id.data[i * 4] = data[i * 3]!;\n id.data[i * 4 + 1] = data[i * 3 + 1]!;\n id.data[i * 4 + 2] = data[i * 3 + 2]!;\n id.data[i * 4 + 3] = 255;\n }\n return id;\n }\n if (channels === 1) {\n for (let i = 0; i < width * height; i++) {\n const v = data[i]!;\n id.data[i * 4] = v;\n id.data[i * 4 + 1] = v;\n id.data[i * 4 + 2] = v;\n id.data[i * 4 + 3] = 255;\n }\n return id;\n }\n throw new Error(`Image.getImageData: unsupported channel count ${channels}`);\n}\n\nasync function blobToOffscreenCanvas(blob: Blob): Promise<OffscreenCanvas> {\n const bitmap = await createImageBitmap(blob);\n try {\n const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Image: failed to get 2D context on OffscreenCanvas\");\n ctx.drawImage(bitmap, 0, 0);\n return canvas;\n } finally {\n bitmap.close();\n }\n}\n\nImage.prototype.getImageData = async function getImageData(this: Image): Promise<ImageData> {\n const pixels = await this.getPixels();\n return rasterToImageData(pixels);\n};\n\nImage.prototype.getImageBitmap = async function getImageBitmap(this: Image): Promise<ImageBitmap> {\n const source = this.getSource();\n if (source.kind === \"bitmap\") return source.bitmap;\n if (source.kind === \"blob\") return createImageBitmap(source.blob);\n if (source.kind === \"offscreenCanvas\") {\n return source.canvas.transferToImageBitmap();\n }\n if (source.kind === \"dataUri\") {\n return createImageBitmap(dataUriToBlob(source.dataUri));\n }\n const id = await this.getImageData();\n return createImageBitmap(id);\n};\n\nImage.prototype.getVideoFrame = async function getVideoFrame(this: Image): Promise<VideoFrame> {\n const source = this.getSource();\n if (source.kind === \"videoFrame\") return source.frame;\n const bitmap = await this.getImageBitmap();\n return new VideoFrame(bitmap, { timestamp: 0 });\n};\n\nImage.prototype.getOffscreenCanvas = async function getOffscreenCanvas(\n this: Image\n): Promise<OffscreenCanvas> {\n const source = this.getSource();\n if (source.kind === \"offscreenCanvas\") return source.canvas;\n if (source.kind === \"blob\") return blobToOffscreenCanvas(source.blob);\n if (source.kind === \"dataUri\") return blobToOffscreenCanvas(dataUriToBlob(source.dataUri));\n const id = await this.getImageData();\n const canvas = new OffscreenCanvas(id.width, id.height);\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) throw new Error(\"Image.getOffscreenCanvas: failed to get 2D context\");\n ctx.putImageData(id, 0, 0);\n return canvas;\n};\n\n// Internal hook used by base `toFirstSupported` for browser-only tokens.\n(\n Image.prototype as unknown as {\n toFirstSupportedBrowser: (want: ImageDataSupport) => Promise<unknown>;\n }\n).toFirstSupportedBrowser = async function toFirstSupportedBrowser(\n this: Image,\n want: ImageDataSupport\n): Promise<unknown> {\n if (want === \"ImageBitmap\") return this.getImageBitmap();\n if (want === \"VideoFrame\") return this.getVideoFrame();\n if (want === \"OffscreenCanvas\") return this.getOffscreenCanvas();\n return undefined;\n};\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": "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",
|
|
12
|
+
"mappings": "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",
|
|
13
13
|
"debugId": "9670F06EEC7694A064756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/dist/media-node.js.map
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport interface ColorObject {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n}\n\nconst HEX_PATTERN = /^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;\n\n/**\n * Parse a `#RGB` / `#RGBA` / `#RRGGBB` / `#RRGGBBAA` hex color into a {@link ColorObject}.\n * Case-insensitive on input. No whitespace tolerance. Shorthand nibbles are doubled.\n * Throws on any malformed input.\n */\nexport function parseHexColor(hex: string): ColorObject {\n if (typeof hex !== \"string\" || !HEX_PATTERN.test(hex)) {\n throw new Error(`Invalid hex color: ${String(hex)}`);\n }\n const body = hex.slice(1);\n const double = (nibble: string): number => parseInt(nibble + nibble, 16);\n if (body.length === 3) {\n return { r: double(body[0]!), g: double(body[1]!), b: double(body[2]!), a: 255 };\n }\n if (body.length === 4) {\n return {\n r: double(body[0]!),\n g: double(body[1]!),\n b: double(body[2]!),\n a: double(body[3]!),\n };\n }\n if (body.length === 6) {\n return {\n r: parseInt(body.slice(0, 2), 16),\n g: parseInt(body.slice(2, 4), 16),\n b: parseInt(body.slice(4, 6), 16),\n a: 255,\n };\n }\n return {\n r: parseInt(body.slice(0, 2), 16),\n g: parseInt(body.slice(2, 4), 16),\n b: parseInt(body.slice(4, 6), 16),\n a: parseInt(body.slice(6, 8), 16),\n };\n}\n\nconst CHANNEL_MIN = 0;\nconst CHANNEL_MAX = 255;\n\nfunction assertChannel(name: string, value: number): void {\n if (!Number.isInteger(value) || value < CHANNEL_MIN || value > CHANNEL_MAX) {\n throw new Error(`Color channel ${name} out of range (0-255 integer): ${value}`);\n }\n}\n\nfunction byteToHex(value: number): string {\n return value.toString(16).padStart(2, \"0\");\n}\n\n/**\n * Emit a {@link ColorObject} as `#RRGGBB` when `a === 255`, otherwise `#RRGGBBAA`.\n * Always lowercase, never shorthand. Throws on non-integer or out-of-range channels.\n */\nexport function toHexColor(c: ColorObject): string {\n assertChannel(\"r\", c.r);\n assertChannel(\"g\", c.g);\n assertChannel(\"b\", c.b);\n assertChannel(\"a\", c.a);\n const head = `#${byteToHex(c.r)}${byteToHex(c.g)}${byteToHex(c.b)}`;\n return c.a === 255 ? head : `${head}${byteToHex(c.a)}`;\n}\n\nfunction isInRangeByte(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 255;\n}\n\n/**\n * Type guard for a {@link ColorObject}-shaped value (alpha optional).\n * Does not reject extra properties — JSON Schema validation handles that separately.\n */\nexport function isColorObject(value: unknown): value is ColorObject {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) return false;\n const candidate = value as Record<string, unknown>;\n if (!isInRangeByte(candidate.r)) return false;\n if (!isInRangeByte(candidate.g)) return false;\n if (!isInRangeByte(candidate.b)) return false;\n if (candidate.a !== undefined && !isInRangeByte(candidate.a)) return false;\n return true;\n}\n\n/** Type guard for a hex color string (same regex as `parseHexColor`). */\nexport function isHexColor(value: unknown): value is string {\n return typeof value === \"string\" && HEX_PATTERN.test(value);\n}\n\n/**\n * Normalize either wire form to a full {@link ColorObject}. Object inputs default\n * `a` to 255. Throws on anything that's neither a valid hex string nor a valid\n * color object.\n */\nexport function resolveColor(\n value: string | { r: number; g: number; b: number; a?: number }\n): ColorObject {\n if (typeof value === \"string\") return parseHexColor(value);\n if (!isColorObject(value)) {\n throw new Error(`Invalid color value: ${JSON.stringify(value)}`);\n }\n return {\n r: value.r,\n g: value.g,\n b: value.b,\n a: value.a ?? 255,\n };\n}\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary } from \"./imageTypes\";\n\nexport interface ImageRasterCodec {\n decodeDataUri(dataUri: string): Promise<ImageBinary>;\n encodeDataUri(image: ImageBinary, mimeType: string): Promise<string>;\n}\n\nlet codec: ImageRasterCodec | null = null;\n\nexport function registerImageRasterCodec(next: ImageRasterCodec): void {\n codec = next;\n}\n\nexport function getImageRasterCodec(): ImageRasterCodec {\n if (!codec) {\n throw new Error(\n \"Image raster codec is not registered. Ensure you import @workglow/tasks from the browser or Node entry (dist/browser.js or dist/node.js), or call registerImageRasterCodec() during startup.\"\n );\n }\n return codec;\n}\n",
|
|
8
8
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Structural match for `RawImage` from `@huggingface/transformers`. The HF\n * class carries helpers (`save`, `toCanvas`, `rgb`, ...) that the provider\n * runtime does not invoke on inputs, so a minimal shim over the four data\n * fields is sufficient. If a consumer later needs HF-specific methods we can\n * widen this shim lazily — no need to pull the transformers dep into\n * `@workglow/util/media` today.\n */\nexport class MediaRawImage {\n readonly data: Uint8ClampedArray;\n readonly width: number;\n readonly height: number;\n readonly channels: number;\n\n constructor(data: Uint8ClampedArray, width: number, height: number, channels: number) {\n this.data = data;\n this.width = width;\n this.height = height;\n this.channels = channels;\n }\n}\n\nexport function isMediaRawImageShape(\n value: unknown\n): value is { data: Uint8ClampedArray; width: number; height: number; channels: number } {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return (\n v.data instanceof Uint8ClampedArray &&\n typeof v.width === \"number\" &&\n typeof v.height === \"number\" &&\n typeof v.channels === \"number\"\n );\n}\n",
|
|
9
|
-
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary, ImageChannels, ImageDataSupport } from \"./imageTypes\";\nimport { parseDataUri } from \"./imageTypes\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\nimport { MediaRawImage, isMediaRawImageShape } from \"./MediaRawImage\";\n\n/**\n * Legacy wire format: either a raw `data:image/...;base64,...` URI or a\n * serialized {@link ImageBinary} with `data` as a plain number array\n * (`Array.from(Uint8ClampedArray)`) to avoid the indexed-object pitfall\n * when stringified through `JSON.stringify`.\n */\nexport type ImageJson =\n | string\n | {\n readonly data: readonly number[];\n readonly width: number;\n readonly height: number;\n readonly channels: ImageChannels;\n }\n | {\n // Sentinel for transient browser handles (bitmap / videoFrame /\n // offscreenCanvas) whose pixels haven't been materialized. Lets\n // JSON.stringify of a workflow holding such an image succeed instead\n // of throwing; callers must await getPixels() or getDataUri() before\n // serialization if they need a real round-trip.\n readonly unsynced: true;\n readonly kind: ImageSourceKind;\n };\n\nexport type ImageSourceKind =\n | \"dataUri\"\n | \"pixels\"\n | \"blob\"\n | \"bitmap\"\n | \"videoFrame\"\n | \"offscreenCanvas\";\n\ntype ImageSource =\n | { readonly kind: \"dataUri\"; readonly dataUri: string; readonly mimeType: string }\n | { readonly kind: \"pixels\"; readonly pixels: ImageBinary }\n | { readonly kind: \"blob\"; readonly blob: Blob }\n | { readonly kind: \"bitmap\"; readonly bitmap: ImageBitmap }\n | { readonly kind: \"videoFrame\"; readonly frame: VideoFrame }\n | { readonly kind: \"offscreenCanvas\"; readonly canvas: OffscreenCanvas };\n\nconst IMAGE_BRAND = Symbol.for(\"@workglow/util/media/Image\");\n\nfunction parseDataUriMimeType(dataUri: string): string {\n const match = dataUri.match(/^data:([^;,]+)/);\n const raw = match?.[1]?.trim();\n return raw ? raw.toLowerCase() : \"image/png\";\n}\n\nexport function dataUriToBlob(dataUri: string): Blob {\n const { mimeType, base64 } = parseDataUri(dataUri);\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mimeType });\n}\n\nfunction toImageBinary(value: {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n rawChannels?: number | undefined;\n}): ImageBinary {\n const ch = value.channels;\n if (ch !== 1 && ch !== 3 && ch !== 4) {\n throw new Error(`Image: unsupported channel count ${ch}`);\n }\n const data = coerceToUint8ClampedArray(value.data);\n return {\n data,\n width: value.width,\n height: value.height,\n channels: ch,\n rawChannels: value.rawChannels,\n };\n}\n\nfunction coerceToUint8ClampedArray(data: unknown): Uint8ClampedArray {\n if (data instanceof Uint8ClampedArray) {\n return data;\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8ClampedArray(\n (data as ArrayBufferView).buffer,\n (data as ArrayBufferView).byteOffset,\n (data as ArrayBufferView).byteLength\n );\n }\n if (Array.isArray(data)) {\n return Uint8ClampedArray.from(data as ArrayLike<number>);\n }\n if (data && typeof data === \"object\") {\n // Indexed-object form produced by JSON.stringify(Uint8ClampedArray).\n const obj = data as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length > 0 && keys.every((k) => /^\\d+$/.test(k))) {\n const arr = new Uint8ClampedArray(keys.length);\n for (let i = 0; i < keys.length; i++) {\n arr[i] = Number(obj[String(i)]);\n }\n return arr;\n }\n }\n throw new Error(\"Image: pixel data is not array-like\");\n}\n\n/**\n * Unified image representation: holds a single source (dataUri, pixels, blob,\n * bitmap, video frame, or offscreen canvas) and converts on demand.\n *\n * - `toJSON()` normalizes to `{ kind, ... }`; no `Uint8ClampedArray` indexed-\n * object serialization pitfall.\n * - `fromJSON()` accepts the new discriminated shape **and** legacy shapes\n * (raw data URI, raw `ImageBinary`, indexed-object `data`) for migration.\n * - `toFirstSupported(supports[])` replaces `convertImageDataToUseableForm`.\n */\nexport class Image {\n /** @internal brand so `Image.is` works across realms. */\n readonly [IMAGE_BRAND]: true = true;\n\n private source: ImageSource;\n private pixelsCache: ImageBinary | undefined;\n private dataUriCache: Map<string, string> = new Map();\n private blobCache: Map<string, Blob> = new Map();\n\n private constructor(source: ImageSource) {\n this.source = source;\n }\n\n static fromDataUri(dataUri: string): Image {\n if (!dataUri.startsWith(\"data:\")) {\n throw new Error(\"Image.fromDataUri: input must start with 'data:'\");\n }\n return new Image({ kind: \"dataUri\", dataUri, mimeType: parseDataUriMimeType(dataUri) });\n }\n\n static fromPixels(pixels: ImageBinary): Image {\n return new Image({ kind: \"pixels\", pixels });\n }\n\n static fromBlob(blob: Blob): Image {\n return new Image({ kind: \"blob\", blob });\n }\n\n /** Accepts anything `convertImageDataToUseableForm` accepted today, plus `Image`. */\n static from(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n return Image.fromBlob(value);\n }\n if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n return new Image({ kind: \"bitmap\", bitmap: value });\n }\n if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n return new Image({ kind: \"videoFrame\", frame: value });\n }\n if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n return new Image({ kind: \"offscreenCanvas\", canvas: value });\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n \"width\" in value &&\n \"height\" in value &&\n \"channels\" in value\n ) {\n return Image.fromPixels(toImageBinary(value as never));\n }\n throw new Error(`Image.from: unsupported image value of type ${typeof value}`);\n }\n\n static is(value: unknown): value is Image {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[IMAGE_BRAND] === true\n );\n }\n\n /**\n * Reconstruct an {@link Image} from its serialized form. Accepts a raw\n * `data:` URI string, a pixel-backed object `{data,width,height,channels}`\n * (with `data` as typed array, plain array, or the indexed-object pitfall\n * produced by `JSON.stringify(Uint8ClampedArray)`), or an `Image` instance.\n */\n static fromJSON(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (\n value &&\n typeof value === \"object\" &&\n (value as { unsynced?: unknown }).unsynced === true\n ) {\n const kind = (value as { kind?: unknown }).kind;\n throw new Error(\n `Image.fromJSON: cannot reconstruct image from \"unsynced\" sentinel (kind=${String(kind)}); pixels were not materialized before serialization. Call await image.getPixels() before JSON.stringify.`\n );\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n typeof (value as { width?: unknown }).width === \"number\" &&\n typeof (value as { height?: unknown }).height === \"number\" &&\n typeof (value as { channels?: unknown }).channels === \"number\"\n ) {\n const v = value as {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n };\n return Image.fromPixels(\n toImageBinary({\n data: v.data,\n width: v.width,\n height: v.height,\n channels: v.channels,\n })\n );\n }\n throw new Error(\"Image.fromJSON: value does not match any known Image shape\");\n }\n\n get kind(): ImageSourceKind {\n return this.source.kind;\n }\n\n get mimeType(): string | undefined {\n if (this.source.kind === \"dataUri\") return this.source.mimeType;\n if (this.source.kind === \"blob\") return this.source.blob.type || undefined;\n return undefined;\n }\n\n get width(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.width;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.width;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.width;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayWidth;\n return this.pixelsCache?.width;\n }\n\n get height(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.height;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.height;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.height;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayHeight;\n return this.pixelsCache?.height;\n }\n\n get channels(): ImageChannels | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.channels;\n return this.pixelsCache?.channels;\n }\n\n async getPixels(): Promise<ImageBinary> {\n if (this.pixelsCache) return this.pixelsCache;\n if (this.source.kind === \"pixels\") {\n this.pixelsCache = this.source.pixels;\n return this.pixelsCache;\n }\n if (this.source.kind === \"dataUri\") {\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(this.source.dataUri);\n return this.pixelsCache;\n }\n if (this.source.kind === \"blob\") {\n const dataUri = await blobToDataUri(this.source.blob);\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(dataUri);\n return this.pixelsCache;\n }\n throw new Error(\n `Image.getPixels: browser-only source '${this.source.kind}' requires Image.browser augmentation`\n );\n }\n\n async getDataUri(mimeType: string = \"image/png\"): Promise<string> {\n if (this.source.kind === \"dataUri\") {\n if (mimeType === this.source.mimeType) {\n return this.source.dataUri;\n }\n }\n const cached = this.dataUriCache.get(mimeType);\n if (cached) return cached;\n const pixels = await this.getPixels();\n const dataUri = await getImageRasterCodec().encodeDataUri(pixels, mimeType);\n this.dataUriCache.set(mimeType, dataUri);\n return dataUri;\n }\n\n async getBlob(mimeType: string = \"image/png\"): Promise<Blob> {\n if (this.source.kind === \"blob\" && (!mimeType || this.source.blob.type === mimeType)) {\n return this.source.blob;\n }\n const cached = this.blobCache.get(mimeType);\n if (cached) return cached;\n if (this.source.kind === \"dataUri\" && this.source.mimeType === mimeType) {\n const blob = dataUriToBlob(this.source.dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n const dataUri = await this.getDataUri(mimeType);\n const blob = dataUriToBlob(dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n\n /**\n * Return the first representation in `supports` that can be produced on\n * this platform. Mirrors the list-order semantics of the former\n * `convertImageDataToUseableForm`: earlier entries win.\n */\n async toFirstSupported(supports: readonly ImageDataSupport[]): Promise<unknown> {\n const canonical = this.canonicalSupport();\n if (canonical && supports.includes(canonical)) {\n return this.currentSourceValue();\n }\n for (const want of supports) {\n switch (want) {\n case \"ImageBinary\":\n return this.getPixels();\n case \"Blob\":\n return this.getBlob();\n case \"DataUri\":\n return this.getDataUri();\n case \"RawImage\": {\n const p = await this.getPixels();\n return new MediaRawImage(p.data, p.width, p.height, p.channels);\n }\n case \"ImageBitmap\":\n case \"VideoFrame\":\n case \"OffscreenCanvas\": {\n const asBrowser = this as unknown as {\n toFirstSupportedBrowser?: (\n want: ImageDataSupport\n ) => Promise<unknown> | undefined;\n };\n if (asBrowser.toFirstSupportedBrowser) {\n const produced = await asBrowser.toFirstSupportedBrowser(want);\n if (produced !== undefined) return produced;\n }\n continue;\n }\n case \"Sharp\":\n continue;\n }\n }\n throw new Error(\n `Image.toFirstSupported: none of [${supports.join(\", \")}] can be produced on this platform`\n );\n }\n\n toJSON(): ImageJson {\n if (this.source.kind === \"dataUri\") {\n return this.source.dataUri;\n }\n const pixels =\n this.source.kind === \"pixels\" ? this.source.pixels : this.pixelsCache;\n if (pixels) {\n return {\n data: Array.from(pixels.data),\n width: pixels.width,\n height: pixels.height,\n channels: pixels.channels,\n };\n }\n return { unsynced: true, kind: this.source.kind };\n }\n\n private canonicalSupport(): ImageDataSupport | undefined {\n switch (this.source.kind) {\n case \"dataUri\":\n return \"DataUri\";\n case \"pixels\":\n return \"ImageBinary\";\n case \"blob\":\n return \"Blob\";\n case \"bitmap\":\n return \"ImageBitmap\";\n case \"videoFrame\":\n return \"VideoFrame\";\n case \"offscreenCanvas\":\n return \"OffscreenCanvas\";\n }\n }\n\n /** @internal */\n getSource(): ImageSource {\n return this.source;\n }\n\n /** @internal */\n setPixelsCache(pixels: ImageBinary): void {\n this.pixelsCache = pixels;\n }\n\n private currentSourceValue(): unknown {\n switch (this.source.kind) {\n case \"dataUri\":\n return this.source.dataUri;\n case \"pixels\":\n return this.source.pixels;\n case \"blob\":\n return this.source.blob;\n case \"bitmap\":\n return this.source.bitmap;\n case \"videoFrame\":\n return this.source.frame;\n case \"offscreenCanvas\":\n return this.source.canvas;\n }\n }\n}\n\nasync function blobToDataUri(blob: Blob): Promise<string> {\n const buffer = await blob.arrayBuffer();\n const bytes = new Uint8Array(buffer);\n let binary = \"\";\n const CHUNK = 8192;\n for (let i = 0; i < bytes.byteLength; i += CHUNK) {\n binary += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n const mime = blob.type || \"image/png\";\n return `data:${mime};base64,${btoa(binary)}`;\n}\n\nexport { MediaRawImage, isMediaRawImageShape };\n"
|
|
9
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ImageBinary, ImageChannels, ImageDataSupport } from \"./imageTypes\";\nimport { parseDataUri } from \"./imageTypes\";\nimport { getImageRasterCodec } from \"./imageRasterCodecRegistry\";\nimport { MediaRawImage, isMediaRawImageShape } from \"./MediaRawImage\";\n\n/**\n * Legacy wire format: either a raw `data:image/...;base64,...` URI or a\n * serialized {@link ImageBinary} with `data` as a plain number array\n * (`Array.from(Uint8ClampedArray)`) to avoid the indexed-object pitfall\n * when stringified through `JSON.stringify`.\n */\nexport type ImageJson =\n | string\n | {\n readonly data: readonly number[];\n readonly width: number;\n readonly height: number;\n readonly channels: ImageChannels;\n }\n | {\n // Sentinel for transient browser handles (bitmap / videoFrame /\n // offscreenCanvas) whose pixels haven't been materialized. Lets\n // JSON.stringify of a workflow holding such an image succeed instead\n // of throwing; callers must await getPixels() or getDataUri() before\n // serialization if they need a real round-trip.\n readonly unsynced: true;\n readonly kind: ImageSourceKind;\n };\n\nexport type ImageSourceKind =\n | \"dataUri\"\n | \"pixels\"\n | \"blob\"\n | \"bitmap\"\n | \"videoFrame\"\n | \"offscreenCanvas\";\n\ntype ImageSource =\n | { readonly kind: \"dataUri\"; readonly dataUri: string; readonly mimeType: string }\n | { readonly kind: \"pixels\"; readonly pixels: ImageBinary }\n | { readonly kind: \"blob\"; readonly blob: Blob }\n | { readonly kind: \"bitmap\"; readonly bitmap: ImageBitmap }\n | { readonly kind: \"videoFrame\"; readonly frame: VideoFrame }\n | { readonly kind: \"offscreenCanvas\"; readonly canvas: OffscreenCanvas };\n\nconst IMAGE_BRAND = Symbol.for(\"@workglow/util/media/Image\");\n\nfunction parseDataUriMimeType(dataUri: string): string {\n const match = dataUri.match(/^data:([^;,]+)/);\n const raw = match?.[1]?.trim();\n return raw ? raw.toLowerCase() : \"image/png\";\n}\n\nexport function dataUriToBlob(dataUri: string): Blob {\n const { mimeType, base64 } = parseDataUri(dataUri);\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mimeType });\n}\n\nfunction toImageBinary(value: {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n rawChannels?: number | undefined;\n}): ImageBinary {\n const ch = value.channels;\n if (ch !== 1 && ch !== 3 && ch !== 4) {\n throw new Error(`Image: unsupported channel count ${ch}`);\n }\n const data = coerceToUint8ClampedArray(value.data);\n return {\n data,\n width: value.width,\n height: value.height,\n channels: ch,\n rawChannels: value.rawChannels,\n };\n}\n\nfunction coerceToUint8ClampedArray(data: unknown): Uint8ClampedArray {\n if (data instanceof Uint8ClampedArray) {\n return data;\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8ClampedArray(\n (data as ArrayBufferView).buffer,\n (data as ArrayBufferView).byteOffset,\n (data as ArrayBufferView).byteLength\n );\n }\n if (Array.isArray(data)) {\n return Uint8ClampedArray.from(data as ArrayLike<number>);\n }\n if (data && typeof data === \"object\") {\n // Indexed-object form produced by JSON.stringify(Uint8ClampedArray).\n const obj = data as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length > 0 && keys.every((k) => /^\\d+$/.test(k))) {\n const arr = new Uint8ClampedArray(keys.length);\n for (let i = 0; i < keys.length; i++) {\n arr[i] = Number(obj[String(i)]);\n }\n return arr;\n }\n }\n throw new Error(\"Image: pixel data is not array-like\");\n}\n\n/**\n * Unified image representation: holds a single source (dataUri, pixels, blob,\n * bitmap, video frame, or offscreen canvas) and converts on demand.\n *\n * - `toJSON()` normalizes to `{ kind, ... }`; no `Uint8ClampedArray` indexed-\n * object serialization pitfall.\n * - `fromJSON()` accepts the new discriminated shape **and** legacy shapes\n * (raw data URI, raw `ImageBinary`, indexed-object `data`) for migration.\n * - `toFirstSupported(supports[])` replaces `convertImageDataToUseableForm`.\n */\nexport class Image {\n /** @internal brand so `Image.is` works across realms. */\n readonly [IMAGE_BRAND]: true = true;\n\n private source: ImageSource;\n private pixelsCache: ImageBinary | undefined;\n private dataUriCache: Map<string, string> = new Map();\n private blobCache: Map<string, Blob> = new Map();\n\n private constructor(source: ImageSource) {\n this.source = source;\n }\n\n static fromDataUri(dataUri: string): Image {\n if (!dataUri.startsWith(\"data:\")) {\n throw new Error(\"Image.fromDataUri: input must start with 'data:'\");\n }\n return new Image({ kind: \"dataUri\", dataUri, mimeType: parseDataUriMimeType(dataUri) });\n }\n\n static fromPixels(pixels: ImageBinary): Image {\n return new Image({ kind: \"pixels\", pixels });\n }\n\n static fromBlob(blob: Blob): Image {\n return new Image({ kind: \"blob\", blob });\n }\n\n /** Accepts anything `convertImageDataToUseableForm` accepted today, plus `Image`. */\n static from(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (typeof Blob !== \"undefined\" && value instanceof Blob) {\n return Image.fromBlob(value);\n }\n if (typeof ImageBitmap !== \"undefined\" && value instanceof ImageBitmap) {\n return new Image({ kind: \"bitmap\", bitmap: value });\n }\n if (typeof VideoFrame !== \"undefined\" && value instanceof VideoFrame) {\n return new Image({ kind: \"videoFrame\", frame: value });\n }\n if (typeof OffscreenCanvas !== \"undefined\" && value instanceof OffscreenCanvas) {\n return new Image({ kind: \"offscreenCanvas\", canvas: value });\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n \"width\" in value &&\n \"height\" in value &&\n \"channels\" in value\n ) {\n return Image.fromPixels(toImageBinary(value as never));\n }\n throw new Error(`Image.from: unsupported image value of type ${typeof value}`);\n }\n\n static is(value: unknown): value is Image {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[IMAGE_BRAND] === true\n );\n }\n\n /**\n * Reconstruct an {@link Image} from its serialized form. Accepts a raw\n * `data:` URI string, a pixel-backed object `{data,width,height,channels}`\n * (with `data` as typed array, plain array, or the indexed-object pitfall\n * produced by `JSON.stringify(Uint8ClampedArray)`), or an `Image` instance.\n */\n static fromJSON(value: unknown): Image {\n if (Image.is(value)) {\n return value;\n }\n if (typeof value === \"string\" && value.startsWith(\"data:\")) {\n return Image.fromDataUri(value);\n }\n if (value && typeof value === \"object\" && (value as { unsynced?: unknown }).unsynced === true) {\n const kind = (value as { kind?: unknown }).kind;\n throw new Error(\n `Image.fromJSON: cannot reconstruct image from \"unsynced\" sentinel (kind=${String(kind)}); pixels were not materialized before serialization. Call await image.getPixels() before JSON.stringify.`\n );\n }\n if (\n value &&\n typeof value === \"object\" &&\n \"data\" in value &&\n typeof (value as { width?: unknown }).width === \"number\" &&\n typeof (value as { height?: unknown }).height === \"number\" &&\n typeof (value as { channels?: unknown }).channels === \"number\"\n ) {\n const v = value as {\n data: unknown;\n width: number;\n height: number;\n channels: number;\n };\n return Image.fromPixels(\n toImageBinary({\n data: v.data,\n width: v.width,\n height: v.height,\n channels: v.channels,\n })\n );\n }\n throw new Error(\"Image.fromJSON: value does not match any known Image shape\");\n }\n\n get kind(): ImageSourceKind {\n return this.source.kind;\n }\n\n get mimeType(): string | undefined {\n if (this.source.kind === \"dataUri\") return this.source.mimeType;\n if (this.source.kind === \"blob\") return this.source.blob.type || undefined;\n return undefined;\n }\n\n get width(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.width;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.width;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.width;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayWidth;\n return this.pixelsCache?.width;\n }\n\n get height(): number | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.height;\n if (this.source.kind === \"bitmap\") return this.source.bitmap.height;\n if (this.source.kind === \"offscreenCanvas\") return this.source.canvas.height;\n if (this.source.kind === \"videoFrame\") return this.source.frame.displayHeight;\n return this.pixelsCache?.height;\n }\n\n get channels(): ImageChannels | undefined {\n if (this.source.kind === \"pixels\") return this.source.pixels.channels;\n return this.pixelsCache?.channels;\n }\n\n async getPixels(): Promise<ImageBinary> {\n if (this.pixelsCache) return this.pixelsCache;\n if (this.source.kind === \"pixels\") {\n this.pixelsCache = this.source.pixels;\n return this.pixelsCache;\n }\n if (this.source.kind === \"dataUri\") {\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(this.source.dataUri);\n return this.pixelsCache;\n }\n if (this.source.kind === \"blob\") {\n const dataUri = await blobToDataUri(this.source.blob);\n this.pixelsCache = await getImageRasterCodec().decodeDataUri(dataUri);\n return this.pixelsCache;\n }\n throw new Error(\n `Image.getPixels: browser-only source '${this.source.kind}' requires Image.browser augmentation`\n );\n }\n\n async getDataUri(mimeType: string = \"image/png\"): Promise<string> {\n if (this.source.kind === \"dataUri\") {\n if (mimeType === this.source.mimeType) {\n return this.source.dataUri;\n }\n }\n const cached = this.dataUriCache.get(mimeType);\n if (cached) return cached;\n const pixels = await this.getPixels();\n const dataUri = await getImageRasterCodec().encodeDataUri(pixels, mimeType);\n this.dataUriCache.set(mimeType, dataUri);\n return dataUri;\n }\n\n async getBlob(mimeType: string = \"image/png\"): Promise<Blob> {\n if (this.source.kind === \"blob\" && (!mimeType || this.source.blob.type === mimeType)) {\n return this.source.blob;\n }\n const cached = this.blobCache.get(mimeType);\n if (cached) return cached;\n if (this.source.kind === \"dataUri\" && this.source.mimeType === mimeType) {\n const blob = dataUriToBlob(this.source.dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n const dataUri = await this.getDataUri(mimeType);\n const blob = dataUriToBlob(dataUri);\n this.blobCache.set(mimeType, blob);\n return blob;\n }\n\n /**\n * Return the first representation in `supports` that can be produced on\n * this platform. Mirrors the list-order semantics of the former\n * `convertImageDataToUseableForm`: earlier entries win.\n */\n async toFirstSupported(supports: readonly ImageDataSupport[]): Promise<unknown> {\n const canonical = this.canonicalSupport();\n if (canonical && supports.includes(canonical)) {\n return this.currentSourceValue();\n }\n for (const want of supports) {\n switch (want) {\n case \"ImageBinary\":\n return this.getPixels();\n case \"Blob\":\n return this.getBlob();\n case \"DataUri\":\n return this.getDataUri();\n case \"RawImage\": {\n const p = await this.getPixels();\n return new MediaRawImage(p.data, p.width, p.height, p.channels);\n }\n case \"ImageBitmap\":\n case \"VideoFrame\":\n case \"OffscreenCanvas\": {\n const asBrowser = this as unknown as {\n toFirstSupportedBrowser?: (want: ImageDataSupport) => Promise<unknown> | undefined;\n };\n if (asBrowser.toFirstSupportedBrowser) {\n const produced = await asBrowser.toFirstSupportedBrowser(want);\n if (produced !== undefined) return produced;\n }\n continue;\n }\n case \"Sharp\":\n continue;\n }\n }\n throw new Error(\n `Image.toFirstSupported: none of [${supports.join(\", \")}] can be produced on this platform`\n );\n }\n\n toJSON(): ImageJson {\n if (this.source.kind === \"dataUri\") {\n return this.source.dataUri;\n }\n const pixels = this.source.kind === \"pixels\" ? this.source.pixels : this.pixelsCache;\n if (pixels) {\n return {\n data: Array.from(pixels.data),\n width: pixels.width,\n height: pixels.height,\n channels: pixels.channels,\n };\n }\n return { unsynced: true, kind: this.source.kind };\n }\n\n private canonicalSupport(): ImageDataSupport | undefined {\n switch (this.source.kind) {\n case \"dataUri\":\n return \"DataUri\";\n case \"pixels\":\n return \"ImageBinary\";\n case \"blob\":\n return \"Blob\";\n case \"bitmap\":\n return \"ImageBitmap\";\n case \"videoFrame\":\n return \"VideoFrame\";\n case \"offscreenCanvas\":\n return \"OffscreenCanvas\";\n }\n }\n\n /** @internal */\n getSource(): ImageSource {\n return this.source;\n }\n\n /** @internal */\n setPixelsCache(pixels: ImageBinary): void {\n this.pixelsCache = pixels;\n }\n\n private currentSourceValue(): unknown {\n switch (this.source.kind) {\n case \"dataUri\":\n return this.source.dataUri;\n case \"pixels\":\n return this.source.pixels;\n case \"blob\":\n return this.source.blob;\n case \"bitmap\":\n return this.source.bitmap;\n case \"videoFrame\":\n return this.source.frame;\n case \"offscreenCanvas\":\n return this.source.canvas;\n }\n }\n}\n\nasync function blobToDataUri(blob: Blob): Promise<string> {\n const buffer = await blob.arrayBuffer();\n const bytes = new Uint8Array(buffer);\n let binary = \"\";\n const CHUNK = 8192;\n for (let i = 0; i < bytes.byteLength; i += CHUNK) {\n binary += String.fromCharCode(...bytes.subarray(i, i + CHUNK));\n }\n const mime = blob.type || \"image/png\";\n return `data:${mime};base64,${btoa(binary)}`;\n}\n\nexport { MediaRawImage, isMediaRawImageShape };\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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",
|
|
11
|
+
"mappings": "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",
|
|
12
12
|
"debugId": "DC7CC1D941A4FA1F64756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/dist/node.js
CHANGED
|
@@ -867,7 +867,7 @@ class WorkerManager {
|
|
|
867
867
|
readyWorkers = new Map;
|
|
868
868
|
workerFunctions = new Map;
|
|
869
869
|
workerStreamFunctions = new Map;
|
|
870
|
-
|
|
870
|
+
workerPreviewFunctions = new Map;
|
|
871
871
|
workerFactories = new Map;
|
|
872
872
|
idleTimeouts = new Map;
|
|
873
873
|
lazyInitPromises = new Map;
|
|
@@ -916,7 +916,7 @@ class WorkerManager {
|
|
|
916
916
|
worker.removeEventListener("error", handleError);
|
|
917
917
|
this.workerFunctions.set(name, new Set(event.data.functions ?? []));
|
|
918
918
|
this.workerStreamFunctions.set(name, new Set(event.data.streamFunctions ?? []));
|
|
919
|
-
this.
|
|
919
|
+
this.workerPreviewFunctions.set(name, new Set(event.data.previewFunctions ?? []));
|
|
920
920
|
resolve();
|
|
921
921
|
}
|
|
922
922
|
};
|
|
@@ -1006,7 +1006,7 @@ class WorkerManager {
|
|
|
1006
1006
|
this.readyWorkers.delete(name);
|
|
1007
1007
|
this.workerFunctions.delete(name);
|
|
1008
1008
|
this.workerStreamFunctions.delete(name);
|
|
1009
|
-
this.
|
|
1009
|
+
this.workerPreviewFunctions.delete(name);
|
|
1010
1010
|
this.activeCallCounts.delete(name);
|
|
1011
1011
|
if (worker && "terminate" in worker && typeof worker.terminate === "function") {
|
|
1012
1012
|
try {
|
|
@@ -1027,7 +1027,7 @@ class WorkerManager {
|
|
|
1027
1027
|
this.readyWorkers.delete(name);
|
|
1028
1028
|
this.workerFunctions.delete(name);
|
|
1029
1029
|
this.workerStreamFunctions.delete(name);
|
|
1030
|
-
this.
|
|
1030
|
+
this.workerPreviewFunctions.delete(name);
|
|
1031
1031
|
this.activeCallCounts.delete(name);
|
|
1032
1032
|
try {
|
|
1033
1033
|
if (worker && "terminate" in worker && typeof worker.terminate === "function") {
|
|
@@ -1095,15 +1095,15 @@ class WorkerManager {
|
|
|
1095
1095
|
this.endWorkerActivity(workerName);
|
|
1096
1096
|
}
|
|
1097
1097
|
}
|
|
1098
|
-
async
|
|
1098
|
+
async callWorkerPreviewFunction(workerName, functionName, args) {
|
|
1099
1099
|
await this.ensureWorkerReady(workerName);
|
|
1100
1100
|
const worker = this.workers.get(workerName);
|
|
1101
1101
|
if (!worker)
|
|
1102
1102
|
return;
|
|
1103
1103
|
this.beginWorkerActivity(workerName);
|
|
1104
1104
|
try {
|
|
1105
|
-
const
|
|
1106
|
-
if (
|
|
1105
|
+
const knownPreview = this.workerPreviewFunctions.get(workerName);
|
|
1106
|
+
if (knownPreview && !knownPreview.has(functionName))
|
|
1107
1107
|
return;
|
|
1108
1108
|
return await new Promise((resolve) => {
|
|
1109
1109
|
const requestId = crypto.randomUUID();
|
|
@@ -1116,7 +1116,7 @@ class WorkerManager {
|
|
|
1116
1116
|
resolve(data);
|
|
1117
1117
|
} else if (type === "error") {
|
|
1118
1118
|
cleanup();
|
|
1119
|
-
getLogger().warn(`Worker ${workerName}
|
|
1119
|
+
getLogger().warn(`Worker ${workerName} preview function ${functionName} error:`, {
|
|
1120
1120
|
error: data
|
|
1121
1121
|
});
|
|
1122
1122
|
resolve(undefined);
|
|
@@ -1126,9 +1126,9 @@ class WorkerManager {
|
|
|
1126
1126
|
worker.removeEventListener("message", handleMessage);
|
|
1127
1127
|
};
|
|
1128
1128
|
worker.addEventListener("message", handleMessage);
|
|
1129
|
-
const message = { id: requestId, type: "call", functionName, args,
|
|
1129
|
+
const message = { id: requestId, type: "call", functionName, args, preview: true };
|
|
1130
1130
|
worker.postMessage(message);
|
|
1131
|
-
getLogger().info(`Worker ${workerName}
|
|
1131
|
+
getLogger().info(`Worker ${workerName} preview function ${functionName} called.`);
|
|
1132
1132
|
});
|
|
1133
1133
|
} finally {
|
|
1134
1134
|
this.endWorkerActivity(workerName);
|
|
@@ -1840,7 +1840,7 @@ class WorkerServerBase {
|
|
|
1840
1840
|
constructor() {}
|
|
1841
1841
|
functions = {};
|
|
1842
1842
|
streamFunctions = {};
|
|
1843
|
-
|
|
1843
|
+
previewFunctions = {};
|
|
1844
1844
|
requestControllers = new Map;
|
|
1845
1845
|
completedRequests = new Set;
|
|
1846
1846
|
postResult = (id, result) => {
|
|
@@ -1878,20 +1878,20 @@ class WorkerServerBase {
|
|
|
1878
1878
|
type: "ready",
|
|
1879
1879
|
functions: Object.keys(this.functions),
|
|
1880
1880
|
streamFunctions: Object.keys(this.streamFunctions),
|
|
1881
|
-
|
|
1881
|
+
previewFunctions: Object.keys(this.previewFunctions)
|
|
1882
1882
|
});
|
|
1883
1883
|
}
|
|
1884
1884
|
registerFunction(name, fn) {
|
|
1885
1885
|
this.functions[name] = fn;
|
|
1886
1886
|
}
|
|
1887
|
-
|
|
1888
|
-
this.
|
|
1887
|
+
registerPreviewFunction(name, fn) {
|
|
1888
|
+
this.previewFunctions[name] = fn;
|
|
1889
1889
|
}
|
|
1890
1890
|
registerStreamFunction(name, fn) {
|
|
1891
1891
|
this.streamFunctions[name] = fn;
|
|
1892
1892
|
}
|
|
1893
1893
|
async handleMessage(event) {
|
|
1894
|
-
const { id, type, functionName, args, stream,
|
|
1894
|
+
const { id, type, functionName, args, stream, preview } = event.data;
|
|
1895
1895
|
if (type === "abort") {
|
|
1896
1896
|
return await this.handleAbort(id);
|
|
1897
1897
|
}
|
|
@@ -1899,8 +1899,8 @@ class WorkerServerBase {
|
|
|
1899
1899
|
if (stream) {
|
|
1900
1900
|
return await this.handleStreamCall(id, functionName, args);
|
|
1901
1901
|
}
|
|
1902
|
-
if (
|
|
1903
|
-
return await this.
|
|
1902
|
+
if (preview) {
|
|
1903
|
+
return await this.handlePreviewCall(id, functionName, args);
|
|
1904
1904
|
}
|
|
1905
1905
|
return await this.handleCall(id, functionName, args);
|
|
1906
1906
|
}
|
|
@@ -1914,14 +1914,14 @@ class WorkerServerBase {
|
|
|
1914
1914
|
this.scheduleCompletedRequestCleanup(id);
|
|
1915
1915
|
}
|
|
1916
1916
|
}
|
|
1917
|
-
async
|
|
1918
|
-
if (!(functionName in this.
|
|
1917
|
+
async handlePreviewCall(id, functionName, [input, model]) {
|
|
1918
|
+
if (!(functionName in this.previewFunctions)) {
|
|
1919
1919
|
this.postResult(id, undefined);
|
|
1920
1920
|
return;
|
|
1921
1921
|
}
|
|
1922
1922
|
try {
|
|
1923
|
-
const fn = this.
|
|
1924
|
-
const result = await fn(input,
|
|
1923
|
+
const fn = this.previewFunctions[functionName];
|
|
1924
|
+
const result = await fn(input, model);
|
|
1925
1925
|
this.postResult(id, result);
|
|
1926
1926
|
} catch (error) {
|
|
1927
1927
|
this.postError(id, error);
|
|
@@ -2102,4 +2102,4 @@ export {
|
|
|
2102
2102
|
BaseError
|
|
2103
2103
|
};
|
|
2104
2104
|
|
|
2105
|
-
//# debugId=
|
|
2105
|
+
//# debugId=1AB9CEC512814EB664756E2164756E21
|