@workglow/util 0.2.14 → 0.2.15

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.
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ *
6
+ * Browser-only augmentation of {@link Image}. Adds `getImageData`,
7
+ * `getImageBitmap`, `getVideoFrame`, `getOffscreenCanvas`, and a private
8
+ * helper `toFirstSupportedBrowser` consulted by the base `toFirstSupported`.
9
+ */
10
+ declare module "./Image" {
11
+ interface Image {
12
+ getImageData(): Promise<ImageData>;
13
+ getImageBitmap(): Promise<ImageBitmap>;
14
+ getVideoFrame(): Promise<VideoFrame>;
15
+ getOffscreenCanvas(): Promise<OffscreenCanvas>;
16
+ }
17
+ namespace Image {
18
+ function fromBitmap(bitmap: ImageBitmap): Image;
19
+ function fromVideoFrame(frame: VideoFrame): Image;
20
+ function fromOffscreenCanvas(canvas: OffscreenCanvas): Image;
21
+ }
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=Image.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.browser.d.ts","sourceRoot":"","sources":["../../src/media/Image.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,QAAQ,SAAS,CAAC,CAAC;IACxB,UAAU,KAAK;QACb,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;QACvC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;KAChD;IACD,UAAU,KAAK,CAAC,CAAC;QACf,SAAS,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,CAAC;QAChD,SAAS,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC;QAClD,SAAS,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,KAAK,CAAC;KAC9D;CACF"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ImageBinary, ImageChannels, ImageDataSupport } from "./imageTypes";
7
+ import { MediaRawImage, isMediaRawImageShape } from "./MediaRawImage";
8
+ /**
9
+ * Legacy wire format: either a raw `data:image/...;base64,...` URI or a
10
+ * serialized {@link ImageBinary} with `data` as a plain number array
11
+ * (`Array.from(Uint8ClampedArray)`) to avoid the indexed-object pitfall
12
+ * when stringified through `JSON.stringify`.
13
+ */
14
+ export type ImageJson = string | {
15
+ readonly data: readonly number[];
16
+ readonly width: number;
17
+ readonly height: number;
18
+ readonly channels: ImageChannels;
19
+ } | {
20
+ readonly unsynced: true;
21
+ readonly kind: ImageSourceKind;
22
+ };
23
+ export type ImageSourceKind = "dataUri" | "pixels" | "blob" | "bitmap" | "videoFrame" | "offscreenCanvas";
24
+ type ImageSource = {
25
+ readonly kind: "dataUri";
26
+ readonly dataUri: string;
27
+ readonly mimeType: string;
28
+ } | {
29
+ readonly kind: "pixels";
30
+ readonly pixels: ImageBinary;
31
+ } | {
32
+ readonly kind: "blob";
33
+ readonly blob: Blob;
34
+ } | {
35
+ readonly kind: "bitmap";
36
+ readonly bitmap: ImageBitmap;
37
+ } | {
38
+ readonly kind: "videoFrame";
39
+ readonly frame: VideoFrame;
40
+ } | {
41
+ readonly kind: "offscreenCanvas";
42
+ readonly canvas: OffscreenCanvas;
43
+ };
44
+ declare const IMAGE_BRAND: unique symbol;
45
+ export declare function dataUriToBlob(dataUri: string): Blob;
46
+ /**
47
+ * Unified image representation: holds a single source (dataUri, pixels, blob,
48
+ * bitmap, video frame, or offscreen canvas) and converts on demand.
49
+ *
50
+ * - `toJSON()` normalizes to `{ kind, ... }`; no `Uint8ClampedArray` indexed-
51
+ * object serialization pitfall.
52
+ * - `fromJSON()` accepts the new discriminated shape **and** legacy shapes
53
+ * (raw data URI, raw `ImageBinary`, indexed-object `data`) for migration.
54
+ * - `toFirstSupported(supports[])` replaces `convertImageDataToUseableForm`.
55
+ */
56
+ export declare class Image {
57
+ /** @internal brand so `Image.is` works across realms. */
58
+ readonly [IMAGE_BRAND]: true;
59
+ private source;
60
+ private pixelsCache;
61
+ private dataUriCache;
62
+ private blobCache;
63
+ private constructor();
64
+ static fromDataUri(dataUri: string): Image;
65
+ static fromPixels(pixels: ImageBinary): Image;
66
+ static fromBlob(blob: Blob): Image;
67
+ /** Accepts anything `convertImageDataToUseableForm` accepted today, plus `Image`. */
68
+ static from(value: unknown): Image;
69
+ static is(value: unknown): value is Image;
70
+ /**
71
+ * Reconstruct an {@link Image} from its serialized form. Accepts a raw
72
+ * `data:` URI string, a pixel-backed object `{data,width,height,channels}`
73
+ * (with `data` as typed array, plain array, or the indexed-object pitfall
74
+ * produced by `JSON.stringify(Uint8ClampedArray)`), or an `Image` instance.
75
+ */
76
+ static fromJSON(value: unknown): Image;
77
+ get kind(): ImageSourceKind;
78
+ get mimeType(): string | undefined;
79
+ get width(): number | undefined;
80
+ get height(): number | undefined;
81
+ get channels(): ImageChannels | undefined;
82
+ getPixels(): Promise<ImageBinary>;
83
+ getDataUri(mimeType?: string): Promise<string>;
84
+ getBlob(mimeType?: string): Promise<Blob>;
85
+ /**
86
+ * Return the first representation in `supports` that can be produced on
87
+ * this platform. Mirrors the list-order semantics of the former
88
+ * `convertImageDataToUseableForm`: earlier entries win.
89
+ */
90
+ toFirstSupported(supports: readonly ImageDataSupport[]): Promise<unknown>;
91
+ toJSON(): ImageJson;
92
+ private canonicalSupport;
93
+ /** @internal */
94
+ getSource(): ImageSource;
95
+ /** @internal */
96
+ setPixelsCache(pixels: ImageBinary): void;
97
+ private currentSourceValue;
98
+ }
99
+ export { MediaRawImage, isMediaRawImageShape };
100
+ //# sourceMappingURL=Image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/media/Image.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Structural match for `RawImage` from `@huggingface/transformers`. The HF
8
+ * class carries helpers (`save`, `toCanvas`, `rgb`, ...) that the provider
9
+ * runtime does not invoke on inputs, so a minimal shim over the four data
10
+ * fields is sufficient. If a consumer later needs HF-specific methods we can
11
+ * widen this shim lazily — no need to pull the transformers dep into
12
+ * `@workglow/util/media` today.
13
+ */
14
+ export declare class MediaRawImage {
15
+ readonly data: Uint8ClampedArray;
16
+ readonly width: number;
17
+ readonly height: number;
18
+ readonly channels: number;
19
+ constructor(data: Uint8ClampedArray, width: number, height: number, channels: number);
20
+ }
21
+ export declare function isMediaRawImageShape(value: unknown): value is {
22
+ data: Uint8ClampedArray;
23
+ width: number;
24
+ height: number;
25
+ channels: number;
26
+ };
27
+ //# sourceMappingURL=MediaRawImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaRawImage.d.ts","sourceRoot":"","sources":["../../src/media/MediaRawImage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAKnF;CACF;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CASvF"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export interface ColorObject {
7
+ readonly r: number;
8
+ readonly g: number;
9
+ readonly b: number;
10
+ readonly a: number;
11
+ }
12
+ /**
13
+ * Parse a `#RGB` / `#RGBA` / `#RRGGBB` / `#RRGGBBAA` hex color into a {@link ColorObject}.
14
+ * Case-insensitive on input. No whitespace tolerance. Shorthand nibbles are doubled.
15
+ * Throws on any malformed input.
16
+ */
17
+ export declare function parseHexColor(hex: string): ColorObject;
18
+ /**
19
+ * Emit a {@link ColorObject} as `#RRGGBB` when `a === 255`, otherwise `#RRGGBBAA`.
20
+ * Always lowercase, never shorthand. Throws on non-integer or out-of-range channels.
21
+ */
22
+ export declare function toHexColor(c: ColorObject): string;
23
+ /**
24
+ * Type guard for a {@link ColorObject}-shaped value (alpha optional).
25
+ * Does not reject extra properties — JSON Schema validation handles that separately.
26
+ */
27
+ export declare function isColorObject(value: unknown): value is ColorObject;
28
+ /** Type guard for a hex color string (same regex as `parseHexColor`). */
29
+ export declare function isHexColor(value: unknown): value is string;
30
+ /**
31
+ * Normalize either wire form to a full {@link ColorObject}. Object inputs default
32
+ * `a` to 255. Throws on anything that's neither a valid hex string nor a valid
33
+ * color object.
34
+ */
35
+ export declare function resolveColor(value: string | {
36
+ r: number;
37
+ g: number;
38
+ b: number;
39
+ a?: number;
40
+ }): ColorObject;
41
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/media/color.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CA+BtD;AAeD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAOjD;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAQlE;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,WAAW,CAWb"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { ImageBinary } from "./imageTypes";
7
+ export interface ImageRasterCodec {
8
+ decodeDataUri(dataUri: string): Promise<ImageBinary>;
9
+ encodeDataUri(image: ImageBinary, mimeType: string): Promise<string>;
10
+ }
11
+ export declare function registerImageRasterCodec(next: ImageRasterCodec): void;
12
+ export declare function getImageRasterCodec(): ImageRasterCodec;
13
+ //# sourceMappingURL=imageRasterCodecRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageRasterCodecRegistry.d.ts","sourceRoot":"","sources":["../../src/media/imageRasterCodecRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtE;AAID,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAErE;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAOtD"}
@@ -12,8 +12,12 @@ export interface ImageBinary {
12
12
  channels: ImageChannels;
13
13
  rawChannels?: number | undefined;
14
14
  }
15
+ /** RGBA pixel buffer (`channels` is always 4). */
16
+ export type RgbaImageBinary = Readonly<Omit<ImageBinary, "channels" | "rawChannels"> & {
17
+ readonly channels: 4;
18
+ }>;
15
19
  export declare function parseDataUri(dataUri: string): {
16
20
  mimeType: string;
17
21
  base64: string;
18
22
  };
19
- //# sourceMappingURL=image.d.ts.map
23
+ //# sourceMappingURL=imageTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageTypes.d.ts","sourceRoot":"","sources":["../../src/media/imageTypes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,aAAa,GACb,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,UAAU,GACV,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC;AAED,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG,QAAQ,CACpC,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,aAAa,CAAC,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,CACzE,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAUA"}
@@ -3,6 +3,10 @@
3
3
  * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- export * from "./media/image";
7
- export * from "./media/image.browser";
6
+ export * from "./media/imageTypes";
7
+ export * from "./media/color";
8
+ export * from "./media/imageRasterCodecRegistry";
9
+ export * from "./media/MediaRawImage";
10
+ export * from "./media/Image";
11
+ export * from "./media/Image.browser";
8
12
  //# sourceMappingURL=media-browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media-browser.d.ts","sourceRoot":"","sources":["../src/media-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"media-browser.d.ts","sourceRoot":"","sources":["../src/media-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kCAAkC,CAAC;AACjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC"}