@flighthq/bitmap 0.5.0-next.1944.cd6b6e7 → 0.5.1-edge.638.d4dbd4e

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.
Files changed (43) hide show
  1. package/README.md +2 -2
  2. package/dist/bitmapDraw.d.ts.map +1 -1
  3. package/dist/bitmapDraw.js +3 -2
  4. package/dist/bitmapDraw.js.map +1 -1
  5. package/dist/bitmapEncode.d.ts +3 -2
  6. package/dist/bitmapEncode.d.ts.map +1 -1
  7. package/dist/bitmapEncode.js +20 -14
  8. package/dist/bitmapEncode.js.map +1 -1
  9. package/dist/bitmapEncodeBackend.d.ts +11 -0
  10. package/dist/bitmapEncodeBackend.d.ts.map +1 -0
  11. package/dist/bitmapEncodeBackend.js +58 -0
  12. package/dist/bitmapEncodeBackend.js.map +1 -0
  13. package/dist/bitmapFrom.d.ts +6 -8
  14. package/dist/bitmapFrom.d.ts.map +1 -1
  15. package/dist/bitmapFrom.js +8 -56
  16. package/dist/bitmapFrom.js.map +1 -1
  17. package/dist/bitmapReadbackBackend.d.ts +7 -0
  18. package/dist/bitmapReadbackBackend.d.ts.map +1 -0
  19. package/dist/bitmapReadbackBackend.js +21 -0
  20. package/dist/bitmapReadbackBackend.js.map +1 -0
  21. package/dist/bitmapReadbackResolver.d.ts +8 -0
  22. package/dist/bitmapReadbackResolver.d.ts.map +1 -0
  23. package/dist/bitmapReadbackResolver.js +12 -0
  24. package/dist/bitmapReadbackResolver.js.map +1 -0
  25. package/dist/contract.d.ts +2 -0
  26. package/dist/contract.d.ts.map +1 -1
  27. package/dist/contract.js +2 -0
  28. package/dist/contract.js.map +1 -1
  29. package/dist/explainBitmapReadback.d.ts.map +1 -1
  30. package/dist/explainBitmapReadback.js +7 -36
  31. package/dist/explainBitmapReadback.js.map +1 -1
  32. package/dist/index.d.ts +1 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +1 -1
  35. package/dist/index.js.map +1 -1
  36. package/package.json +4 -4
  37. package/src/bitmapDraw.test.ts +111 -16
  38. package/src/bitmapEncode.test.ts +99 -13
  39. package/src/bitmapEncodeBackend.test.ts +146 -0
  40. package/src/bitmapFrom.test.ts +31 -44
  41. package/src/bitmapReadbackBackend.test.ts +69 -0
  42. package/src/bitmapReadbackResolver.test.ts +32 -0
  43. package/src/explainBitmapReadback.test.ts +74 -54
package/README.md CHANGED
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/bitmap`. The `@fligh
13
13
  This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
14
14
 
15
15
  - [Flight project](https://github.com/flighthq/flight)
16
- - [Source for @flighthq/bitmap@0.5.0-next.1944.cd6b6e7](https://github.com/flighthq/flight/tree/cd6b6e71eb472b3a4249830a7743333f019fa7b7/packages/bitmap)
17
- - [License](https://github.com/flighthq/flight/blob/cd6b6e71eb472b3a4249830a7743333f019fa7b7/LICENSE.md)
16
+ - [Source for @flighthq/bitmap@0.5.1-edge.638.d4dbd4e](https://github.com/flighthq/flight/tree/d4dbd4e347dc8be10b180c85a766ab50333dcb51/packages/bitmap)
17
+ - [License](https://github.com/flighthq/flight/blob/d4dbd4e347dc8be10b180c85a766ab50333dcb51/LICENSE.md)
@@ -1 +1 @@
1
- {"version":3,"file":"bitmapDraw.d.ts","sourceRoot":"","sources":["../src/bitmapDraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAI7D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAK9G"}
1
+ {"version":3,"file":"bitmapDraw.d.ts","sourceRoot":"","sources":["../src/bitmapDraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAI7D;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAM9G"}
@@ -7,8 +7,9 @@ import { extractBitmapPixels } from './bitmapComposite';
7
7
  export function drawBitmap(dest, source, x, y) {
8
8
  if (source.width <= 0 || source.height <= 0)
9
9
  return;
10
- const domImageData = new globalThis.ImageData(source.width, source.height);
10
+ const context = dest.getContext('2d');
11
+ const domImageData = context.createImageData(source.width, source.height);
11
12
  extractBitmapPixels(domImageData.data, source);
12
- dest.getContext('2d').putImageData(domImageData, x, y);
13
+ context.putImageData(domImageData, x, y);
13
14
  }
14
15
  //# sourceMappingURL=bitmapDraw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitmapDraw.js","sourceRoot":"","sources":["../src/bitmapDraw.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAuB,EAAE,MAA8B,EAAE,CAAS,EAAE,CAAS;IACtG,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO;IACpD,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3E,mBAAmB,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"bitmapDraw.js","sourceRoot":"","sources":["../src/bitmapDraw.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAuB,EAAE,MAA8B,EAAE,CAAS,EAAE,CAAS;IACtG,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1E,mBAAmB,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,3 +1,4 @@
1
- import type { ImageFormat, Bitmap } from '@flighthq/types/contract';
2
- export declare function encodeBitmap(source: Readonly<Bitmap>, format?: ImageFormat, quality?: number): Uint8Array;
1
+ import type { Bitmap, BitmapEncodeFailureExplanation, ImageFormat } from '@flighthq/types/contract';
2
+ export declare function encodeBitmap(source: Readonly<Bitmap>, format?: ImageFormat, quality?: number): Uint8Array | null;
3
+ export declare function explainBitmapEncodeFailure(format: ImageFormat): BitmapEncodeFailureExplanation | null;
3
4
  //# sourceMappingURL=bitmapEncode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitmapEncode.d.ts","sourceRoot":"","sources":["../src/bitmapEncode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEpE,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAE,WAAmB,EAAE,OAAO,GAAE,MAAY,GAAG,UAAU,CAgBrH"}
1
+ {"version":3,"file":"bitmapEncode.d.ts","sourceRoot":"","sources":["../src/bitmapEncode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAEN,8BAA8B,EAC9B,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAIlC,wBAAgB,YAAY,CAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,MAAM,GAAE,WAAmB,EAC3B,OAAO,GAAE,MAAY,GACpB,UAAU,GAAG,IAAI,CAInB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,WAAW,GAAG,8BAA8B,GAAG,IAAI,CAGrG"}
@@ -1,18 +1,24 @@
1
+ import { getBitmapEncodeBackend } from './bitmapEncodeBackend';
1
2
  export function encodeBitmap(source, format = 'png', quality = 0.9) {
2
- const canvas = document.createElement('canvas');
3
- canvas.width = source.width;
4
- canvas.height = source.height;
5
- const domImageData = new globalThis.ImageData(source.width, source.height);
6
- domImageData.data.set(source.data);
7
- canvas.getContext('2d').putImageData(domImageData, 0, 0);
8
- const mimeType = format === 'jpeg' ? 'image/jpeg' : 'image/png';
9
- const dataUrl = canvas.toDataURL(mimeType, quality);
10
- const base64 = dataUrl.slice(dataUrl.indexOf(',') + 1);
11
- const binary = atob(base64);
12
- const bytes = new Uint8Array(binary.length);
13
- for (let i = 0; i < binary.length; i++) {
14
- bytes[i] = binary.charCodeAt(i);
3
+ const resolution = resolveBitmapEncode(format);
4
+ if (resolution.reason !== null)
5
+ return null;
6
+ return resolution.backend.encodeBitmap(source, resolution.format, quality);
7
+ }
8
+ export function explainBitmapEncodeFailure(format) {
9
+ const resolution = resolveBitmapEncode(format);
10
+ return resolution.reason === null ? null : { format: resolution.format, reason: resolution.reason };
11
+ }
12
+ function resolveBitmapEncode(format) {
13
+ // ImageFormat is currently the closed jpeg | png pair. Adding a third member makes this defensive
14
+ // runtime fallback a defect: extend the mapping explicitly instead of silently encoding it as PNG.
15
+ const normalizedFormat = format === 'jpeg' ? 'jpeg' : 'png';
16
+ const backend = getBitmapEncodeBackend();
17
+ if (backend === null)
18
+ return { backend, format: normalizedFormat, reason: 'backend-not-installed' };
19
+ if (!backend.supportedFormats.includes(normalizedFormat)) {
20
+ return { backend, format: normalizedFormat, reason: 'format-unsupported' };
15
21
  }
16
- return bytes;
22
+ return { backend, format: normalizedFormat, reason: null };
17
23
  }
18
24
  //# sourceMappingURL=bitmapEncode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitmapEncode.js","sourceRoot":"","sources":["../src/bitmapEncode.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,MAAwB,EAAE,SAAsB,KAAK,EAAE,UAAkB,GAAG;IACvG,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9B,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3E,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"bitmapEncode.js","sourceRoot":"","sources":["../src/bitmapEncode.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,UAAU,YAAY,CAC1B,MAAwB,EACxB,SAAsB,KAAK,EAC3B,UAAkB,GAAG;IAErB,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAmB;IAC5D,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;AACtG,CAAC;AAcD,SAAS,mBAAmB,CAAC,MAAmB;IAC9C,kGAAkG;IAClG,mGAAmG;IACnG,MAAM,gBAAgB,GAAgB,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACzE,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACpG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { BackendExplanation, BackendOperationExplanation, BitmapEncodeBackend, BitmapEncodeOperation } from '@flighthq/types/contract';
2
+ export declare function explainBitmapEncodeBackend(): BackendExplanation;
3
+ export declare function explainBitmapEncodeOperation(operation: BitmapEncodeOperation): BackendOperationExplanation;
4
+ export declare function getBitmapEncodeBackend(): BitmapEncodeBackend | null;
5
+ export declare function hasBitmapEncodeHostBackend(): boolean;
6
+ export declare function hasBitmapEncodeOperation(operation: BitmapEncodeOperation): boolean;
7
+ export declare function installBitmapEncodeHostBackend(backend: BitmapEncodeBackend): void;
8
+ export declare function observeBitmapEncodeHostResult(operation: BitmapEncodeOperation, succeeded: boolean): void;
9
+ export declare function resetBitmapEncodeBackendForTest(): void;
10
+ export declare function setBitmapEncodeBackend(backend: BitmapEncodeBackend | null): void;
11
+ //# sourceMappingURL=bitmapEncodeBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapEncodeBackend.d.ts","sourceRoot":"","sources":["../src/bitmapEncodeBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,0BAA0B,IAAI,kBAAkB,CAa/D;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,qBAAqB,GAAG,2BAA2B,CAI1G;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAEnE;AAED,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAElF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAMjF;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAKxG;AAED,wBAAgB,+BAA+B,IAAI,IAAI,CAKtD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAEhF"}
@@ -0,0 +1,58 @@
1
+ export function explainBitmapEncodeBackend() {
2
+ if (_custom !== null) {
3
+ return { conflict: _hostConflict, layer: 'custom', operation: null, viability: 'unobserved' };
4
+ }
5
+ if (_host !== null) {
6
+ return {
7
+ conflict: _hostConflict,
8
+ layer: 'host',
9
+ operation: _hostObservation !== null ? _hostObservation.operation : null,
10
+ viability: _hostObservation !== null ? _hostObservation.viability : 'unobserved',
11
+ };
12
+ }
13
+ return { conflict: false, layer: 'host-not-enabled', operation: null, viability: 'unobserved' };
14
+ }
15
+ export function explainBitmapEncodeOperation(operation) {
16
+ if (_custom !== null)
17
+ return { implemented: true, layer: 'custom', operation };
18
+ if (_host !== null)
19
+ return { implemented: true, layer: 'host', operation };
20
+ return { implemented: false, layer: 'sentinel', operation };
21
+ }
22
+ export function getBitmapEncodeBackend() {
23
+ return _custom ?? _host;
24
+ }
25
+ export function hasBitmapEncodeHostBackend() {
26
+ return _host !== null;
27
+ }
28
+ export function hasBitmapEncodeOperation(operation) {
29
+ return explainBitmapEncodeOperation(operation).implemented;
30
+ }
31
+ export function installBitmapEncodeHostBackend(backend) {
32
+ if (_host !== null) {
33
+ if (_host !== backend)
34
+ _hostConflict = true;
35
+ return;
36
+ }
37
+ _host = backend;
38
+ }
39
+ export function observeBitmapEncodeHostResult(operation, succeeded) {
40
+ _hostObservation = {
41
+ operation,
42
+ viability: succeeded ? 'available' : 'runtime-api-unavailable',
43
+ };
44
+ }
45
+ export function resetBitmapEncodeBackendForTest() {
46
+ _custom = null;
47
+ _host = null;
48
+ _hostConflict = false;
49
+ _hostObservation = null;
50
+ }
51
+ export function setBitmapEncodeBackend(backend) {
52
+ _custom = backend;
53
+ }
54
+ let _custom = null;
55
+ let _host = null;
56
+ let _hostConflict = false;
57
+ let _hostObservation = null;
58
+ //# sourceMappingURL=bitmapEncodeBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapEncodeBackend.js","sourceRoot":"","sources":["../src/bitmapEncodeBackend.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,0BAA0B;IACxC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAChG,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO;YACL,QAAQ,EAAE,aAAa;YACvB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YACxE,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;SACjF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,SAAgC;IAC3E,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC/E,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC3E,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,IAAI,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAgC;IACvE,OAAO,4BAA4B,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAA4B;IACzE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,KAAK,KAAK,OAAO;YAAE,aAAa,GAAG,IAAI,CAAC;QAC5C,OAAO;IACT,CAAC;IACD,KAAK,GAAG,OAAO,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,SAAgC,EAAE,SAAkB;IAChG,gBAAgB,GAAG;QACjB,SAAS;QACT,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,yBAAyB;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO,GAAG,IAAI,CAAC;IACf,KAAK,GAAG,IAAI,CAAC;IACb,aAAa,GAAG,KAAK,CAAC;IACtB,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAmC;IACxE,OAAO,GAAG,OAAO,CAAC;AACpB,CAAC;AAED,IAAI,OAAO,GAA+B,IAAI,CAAC;AAC/C,IAAI,KAAK,GAA+B,IAAI,CAAC;AAC7C,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,gBAAgB,GAGT,IAAI,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import type { Image, Bitmap } from '@flighthq/types/contract';
2
2
  /**
3
- * Reads a host-backed Image into a newly allocated, CPU-readable Bitmap. The readback draws
4
- * through a detached canvas; callers that need both representations should retain both objects.
3
+ * Reads a host-backed Image into a newly allocated, CPU-readable Bitmap. Returns `null` when the
4
+ * readback cannot complete call `explainBitmapReadback` with `(resource.source, resource.width,
5
+ * resource.height)` for the reason.
5
6
  */
6
- export declare function captureBitmapFromImageResource(resource: Readonly<Image>): Bitmap;
7
+ export declare function captureBitmapFromImageResource(resource: Readonly<Image>): Bitmap | null;
7
8
  export declare function createBitmapFromCanvas(canvas: HTMLCanvasElement, x?: number, y?: number, width?: number, height?: number): Bitmap;
8
9
  /**
9
10
  * Reads a bitmap out of any `CanvasImageSource` by drawing it into a scratch 2D canvas. Unlike
@@ -13,11 +14,8 @@ export declare function createBitmapFromCanvas(canvas: HTMLCanvasElement, x?: nu
13
14
  * For a Gl/Wgpu source, draw before the browser composites the frame away (in tests, enable the
14
15
  * context's preserveDrawingBuffer, or read immediately after rendering).
15
16
  *
16
- * Returns `null` when the pixels cannot be read rather than letting a platform exception escape. A
17
- * cross-origin source taints the scratch canvas and the platform refuses to return its pixels — that
18
- * is an expected outcome of loading someone else's image, not a programmer error, so it takes the
19
- * sentinel the diagnostics conventions reserve for expected failure. Call `explainBitmapReadback`
20
- * with the same arguments for the reason; it re-derives it without allocating a bitmap.
17
+ * Returns `null` for the expected failures named by `explainBitmapReadback`. Faults during a selected
18
+ * backend's full read or Bitmap allocation propagate instead of being mislabeled as source refusal.
21
19
  */
22
20
  export declare function createBitmapFromImageSource(source: CanvasImageSource, width: number, height: number): Bitmap | null;
23
21
  //# sourceMappingURL=bitmapFrom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitmapFrom.d.ts","sourceRoot":"","sources":["../src/bitmapFrom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAG9D;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAiBhF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EACb,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAeR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8BnH"}
1
+ {"version":3,"file":"bitmapFrom.d.ts","sourceRoot":"","sources":["../src/bitmapFrom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAK9D;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAEvF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,CAAC,GAAE,MAAU,EACb,CAAC,GAAE,MAAU,EACb,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAeR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEnH"}
@@ -1,26 +1,13 @@
1
1
  import { createEntity } from '@flighthq/entity/contract';
2
2
  import { BitmapTextureSourceKind } from '@flighthq/types/contract';
3
+ import { resolveBitmapReadback } from './bitmapReadbackResolver';
3
4
  /**
4
- * Reads a host-backed Image into a newly allocated, CPU-readable Bitmap. The readback draws
5
- * through a detached canvas; callers that need both representations should retain both objects.
5
+ * Reads a host-backed Image into a newly allocated, CPU-readable Bitmap. Returns `null` when the
6
+ * readback cannot complete call `explainBitmapReadback` with `(resource.source, resource.width,
7
+ * resource.height)` for the reason.
6
8
  */
7
9
  export function captureBitmapFromImageResource(resource) {
8
- const canvas = document.createElement('canvas');
9
- canvas.width = resource.width;
10
- canvas.height = resource.height;
11
- const ctx = canvas.getContext('2d');
12
- ctx.drawImage(resource.source, 0, 0);
13
- const raw = ctx.getImageData(0, 0, resource.width, resource.height);
14
- return createEntity({
15
- alphaType: 'straight',
16
- gamut: raw.colorSpace,
17
- data: raw.data,
18
- format: 'rgba8unorm',
19
- height: resource.height,
20
- kind: BitmapTextureSourceKind,
21
- version: 0,
22
- width: resource.width,
23
- });
10
+ return createBitmapFromImageSource(resource.source, resource.width, resource.height);
24
11
  }
25
12
  export function createBitmapFromCanvas(canvas, x = 0, y = 0, width, height) {
26
13
  const w = width ?? canvas.width;
@@ -46,45 +33,10 @@ export function createBitmapFromCanvas(canvas, x = 0, y = 0, width, height) {
46
33
  * For a Gl/Wgpu source, draw before the browser composites the frame away (in tests, enable the
47
34
  * context's preserveDrawingBuffer, or read immediately after rendering).
48
35
  *
49
- * Returns `null` when the pixels cannot be read rather than letting a platform exception escape. A
50
- * cross-origin source taints the scratch canvas and the platform refuses to return its pixels — that
51
- * is an expected outcome of loading someone else's image, not a programmer error, so it takes the
52
- * sentinel the diagnostics conventions reserve for expected failure. Call `explainBitmapReadback`
53
- * with the same arguments for the reason; it re-derives it without allocating a bitmap.
36
+ * Returns `null` for the expected failures named by `explainBitmapReadback`. Faults during a selected
37
+ * backend's full read or Bitmap allocation propagate instead of being mislabeled as source refusal.
54
38
  */
55
39
  export function createBitmapFromImageSource(source, width, height) {
56
- if (width <= 0 || height <= 0)
57
- return null;
58
- if (typeof document === 'undefined')
59
- return null;
60
- const canvas = document.createElement('canvas');
61
- canvas.width = width;
62
- canvas.height = height;
63
- const ctx = canvas.getContext('2d');
64
- if (ctx === null)
65
- return null;
66
- let raw;
67
- try {
68
- ctx.drawImage(source, 0, 0);
69
- raw = ctx.getImageData(0, 0, width, height);
70
- }
71
- catch {
72
- // A tainted canvas throws SecurityError from getImageData; a source the platform cannot draw
73
- // throws from drawImage. Both mean "no pixels for you", which is the sentinel's job to say.
74
- return null;
75
- }
76
- // Annotated rather than returned inline: with a `Bitmap | null` return the object literal loses the
77
- // contextual typing that narrows its string fields to Bitmap's literal types.
78
- const bitmap = createEntity({
79
- alphaType: 'straight',
80
- gamut: raw.colorSpace,
81
- data: raw.data,
82
- format: 'rgba8unorm',
83
- height,
84
- kind: BitmapTextureSourceKind,
85
- version: 0,
86
- width,
87
- });
88
- return bitmap;
40
+ return resolveBitmapReadback(source, width, height, 'bitmap').bitmap;
89
41
  }
90
42
  //# sourceMappingURL=bitmapFrom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitmapFrom.js","sourceRoot":"","sources":["../src/bitmapFrom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAyB;IACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC9B,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpE,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,GAAG,CAAC,UAAmC;QAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAyB,EACzB,IAAY,CAAC,EACb,IAAY,CAAC,EACb,KAAc,EACd,MAAe;IAEf,MAAM,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,GAAG,CAAC,UAAmC;QAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAyB,EAAE,KAAa,EAAE,MAAc;IAClG,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,GAAc,CAAC;IACnB,IAAI,CAAC;QACH,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,6FAA6F;QAC7F,4FAA4F;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oGAAoG;IACpG,8EAA8E;IAC9E,MAAM,MAAM,GAAW,YAAY,CAAC;QAClC,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,GAAG,CAAC,UAAmC;QAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,YAAY;QACpB,MAAM;QACN,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,CAAC;QACV,KAAK;KACN,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"bitmapFrom.js","sourceRoot":"","sources":["../src/bitmapFrom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAyB;IACtE,OAAO,2BAA2B,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAyB,EACzB,IAAY,CAAC,EACb,IAAY,CAAC,EACb,KAAc,EACd,MAAe;IAEf,MAAM,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,GAAG,CAAC,UAAmC;QAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,YAAY;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAyB,EAAE,KAAa,EAAE,MAAc;IAClG,OAAO,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC;AACvE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { BitmapReadbackBackend } from '@flighthq/types/contract';
2
+ export declare function getBitmapReadbackBackend(): BitmapReadbackBackend | null;
3
+ export declare function hasBitmapReadbackHostBackend(): boolean;
4
+ export declare function installBitmapReadbackHostBackend(backend: BitmapReadbackBackend): void;
5
+ export declare function resetBitmapReadbackBackendForTest(): void;
6
+ export declare function setBitmapReadbackBackend(backend: BitmapReadbackBackend | null): void;
7
+ //# sourceMappingURL=bitmapReadbackBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapReadbackBackend.d.ts","sourceRoot":"","sources":["../src/bitmapReadbackBackend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,wBAAgB,wBAAwB,IAAI,qBAAqB,GAAG,IAAI,CAEvE;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAGrF;AAED,wBAAgB,iCAAiC,IAAI,IAAI,CAGxD;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAEpF"}
@@ -0,0 +1,21 @@
1
+ export function getBitmapReadbackBackend() {
2
+ return _custom ?? _host;
3
+ }
4
+ export function hasBitmapReadbackHostBackend() {
5
+ return _host !== null;
6
+ }
7
+ export function installBitmapReadbackHostBackend(backend) {
8
+ if (_host !== null)
9
+ return;
10
+ _host = backend;
11
+ }
12
+ export function resetBitmapReadbackBackendForTest() {
13
+ _custom = null;
14
+ _host = null;
15
+ }
16
+ export function setBitmapReadbackBackend(backend) {
17
+ _custom = backend;
18
+ }
19
+ let _custom = null;
20
+ let _host = null;
21
+ //# sourceMappingURL=bitmapReadbackBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapReadbackBackend.js","sourceRoot":"","sources":["../src/bitmapReadbackBackend.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,wBAAwB;IACtC,OAAO,OAAO,IAAI,KAAK,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAA8B;IAC7E,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO;IAC3B,KAAK,GAAG,OAAO,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,iCAAiC;IAC/C,OAAO,GAAG,IAAI,CAAC;IACf,KAAK,GAAG,IAAI,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAqC;IAC5E,OAAO,GAAG,OAAO,CAAC;AACpB,CAAC;AAED,IAAI,OAAO,GAAiC,IAAI,CAAC;AACjD,IAAI,KAAK,GAAiC,IAAI,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Bitmap, BitmapReadbackBlockReason, BitmapReadbackMode, HostImageSource } from '@flighthq/types/contract';
2
+ interface BitmapReadbackResolution {
3
+ readonly bitmap: Bitmap | null;
4
+ readonly reason: BitmapReadbackBlockReason;
5
+ }
6
+ export declare function resolveBitmapReadback(source: HostImageSource, width: number, height: number, mode: BitmapReadbackMode): BitmapReadbackResolution;
7
+ export {};
8
+ //# sourceMappingURL=bitmapReadbackResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapReadbackResolver.d.ts","sourceRoot":"","sources":["../src/bitmapReadbackResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIvH,UAAU,wBAAwB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;CAC5C;AAID,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,kBAAkB,GACvB,wBAAwB,CAK1B"}
@@ -0,0 +1,12 @@
1
+ import { getBitmapReadbackBackend } from './bitmapReadbackBackend';
2
+ // Package-private: both public projections route through this resolver, but it is deliberately absent
3
+ // from the package barrels so callers cannot couple to the selection machinery.
4
+ export function resolveBitmapReadback(source, width, height, mode) {
5
+ if (width <= 0 || height <= 0)
6
+ return { bitmap: null, reason: 'empty-size' };
7
+ const backend = getBitmapReadbackBackend();
8
+ if (backend === null)
9
+ return { bitmap: null, reason: 'backend-not-installed' };
10
+ return backend.readBitmap(source, width, height, mode);
11
+ }
12
+ //# sourceMappingURL=bitmapReadbackResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitmapReadbackResolver.js","sourceRoot":"","sources":["../src/bitmapReadbackResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAOnE,sGAAsG;AACtG,gFAAgF;AAChF,MAAM,UAAU,qBAAqB,CACnC,MAAuB,EACvB,KAAa,EACb,MAAc,EACd,IAAwB;IAExB,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC7E,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;IAC3C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAC/E,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC"}
@@ -15,6 +15,8 @@ export * from './bitmapDisplacement';
15
15
  export * from './bitmapDissolve';
16
16
  export * from './bitmapDraw';
17
17
  export * from './bitmapEncode';
18
+ export * from './bitmapEncodeBackend';
19
+ export * from './bitmapReadbackBackend';
18
20
  export * from './bitmapFill';
19
21
  export * from './bitmapFingerprint';
20
22
  export * from './bitmapFlip';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
package/dist/contract.js CHANGED
@@ -15,6 +15,8 @@ export * from './bitmapDisplacement';
15
15
  export * from './bitmapDissolve';
16
16
  export * from './bitmapDraw';
17
17
  export * from './bitmapEncode';
18
+ export * from './bitmapEncodeBackend';
19
+ export * from './bitmapReadbackBackend';
18
20
  export * from './bitmapFill';
19
21
  export * from './bitmapFingerprint';
20
22
  export * from './bitmapFlip';
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"explainBitmapReadback.d.ts","sourceRoot":"","sources":["../src/explainBitmapReadback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAerG,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,yBAAyB,CAG3B"}
1
+ {"version":3,"file":"explainBitmapReadback.d.ts","sourceRoot":"","sources":["../src/explainBitmapReadback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAQ1E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,yBAAyB,CAG3B"}
@@ -1,39 +1,10 @@
1
- // Recomputes why createBitmapFromImageSource would or would not return a Bitmap for these arguments,
2
- // as plain data. Pure: it allocates a scratch canvas and reads one pixel to settle taint, mutates
3
- // nothing the caller owns, never throws, and retains no reference to `source`. Import it to find out
4
- // why a capture came back null; it sheds from production when unimported.
5
- //
6
- // Reasons are root-cause prioritized rather than following the constructor's literal check order: an
7
- // empty capture and a missing DOM are properties of the call and the host, knowable without touching
8
- // the source at all, so they are reported before anything is drawn. `tainted-source` is last because
9
- // it is the only one that requires actually attempting the read.
10
- //
11
- // This is the pull half of the diagnostics convention, and it duplicates the constructor's failure
12
- // conditions by design — the maintenance seam is that a new way for the readback to fail must gain a
13
- // matching branch here or this query silently goes stale.
1
+ import { resolveBitmapReadback } from './bitmapReadbackResolver';
2
+ // Authoritative over the EXPECTED-FAILURE vocabulary for createBitmapFromImageSource: it invokes the
3
+ // same resolver in one-pixel probe mode and allocates no Bitmap. It does not predict FAULTS; in
4
+ // particular, a successful probe does not promise that the constructor's full read or allocation
5
+ // cannot fault, and those faults propagate from the constructor.
14
6
  export function explainBitmapReadback(source, width, height) {
15
- const reason = _blockReason(source, width, height);
16
- return { readable: reason === 'ok', reason };
17
- }
18
- function _blockReason(source, width, height) {
19
- if (width <= 0 || height <= 0)
20
- return 'empty-size';
21
- if (typeof document === 'undefined')
22
- return 'no-canvas';
23
- const canvas = document.createElement('canvas');
24
- canvas.width = 1;
25
- canvas.height = 1;
26
- const ctx = canvas.getContext('2d');
27
- if (ctx === null)
28
- return 'no-canvas';
29
- try {
30
- // One pixel is enough: taint is a property of the canvas after the draw, not of how much was read.
31
- ctx.drawImage(source, 0, 0);
32
- ctx.getImageData(0, 0, 1, 1);
33
- }
34
- catch {
35
- return 'tainted-source';
36
- }
37
- return 'ok';
7
+ const outcome = resolveBitmapReadback(source, width, height, 'probe');
8
+ return { readable: outcome.reason === 'ok', reason: outcome.reason };
38
9
  }
39
10
  //# sourceMappingURL=explainBitmapReadback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"explainBitmapReadback.js","sourceRoot":"","sources":["../src/explainBitmapReadback.ts"],"names":[],"mappings":"AAEA,qGAAqG;AACrG,kGAAkG;AAClG,qGAAqG;AACrG,0EAA0E;AAC1E,EAAE;AACF,qGAAqG;AACrG,qGAAqG;AACrG,qGAAqG;AACrG,iEAAiE;AACjE,EAAE;AACF,mGAAmG;AACnG,qGAAqG;AACrG,0DAA0D;AAC1D,MAAM,UAAU,qBAAqB,CACnC,MAAyB,EACzB,KAAa,EACb,MAAc;IAEd,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,MAAyB,EAAE,KAAa,EAAE,MAAc;IAC5E,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC;IACnD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IACxD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,WAAW,CAAC;IACrC,IAAI,CAAC;QACH,mGAAmG;QACnG,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"explainBitmapReadback.js","sourceRoot":"","sources":["../src/explainBitmapReadback.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,qGAAqG;AACrG,gGAAgG;AAChG,iGAAiG;AACjG,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CACnC,MAAyB,EACzB,KAAa,EACb,MAAc;IAEd,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AACvE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { ImageChannel, BITMAP_FINGERPRINT_COMPUTATION_ID, BITMAP_NOISE_CHANNEL_A, BITMAP_NOISE_CHANNEL_B, BITMAP_NOISE_CHANNEL_G, BITMAP_NOISE_CHANNEL_R, applyBitmapColorScaleBias, applyBitmapCurve, applyBitmapLevels, applyBitmapPaletteMap, applyBitmapThreshold, bevelBitmap, blurBitmapPixelsHorizontal, blurBitmapPixelsHorizontalWeighted, blurBitmapPixelsVertical, blurBitmapPixelsVerticalWeighted, boxBlurBitmap, buildBitmapBrightnessColorMatrix, buildBitmapContrastColorMatrix, buildBitmapGradientRamp, buildBitmapGrayscaleColorMatrix, buildBitmapHueRotationColorMatrix, buildBitmapInvertColorMatrix, buildBitmapSaturationColorMatrix, buildBitmapSepiaColorMatrix, cloneBitmap, colorMatrixBitmap, compareBitmap, compareBitmapFingerprints, compositeBitmapPixels, compositeBitmapRegion, computeGaussianKernel, concatBitmapColorMatrix, convertBitmapAlphaType, convertBitmapPixelOrder, convolveBitmap, copyBitmapAlpha, copyBitmapChannel, copyBitmapPixels, createBitmap, createBitmapFingerprint, createBitmapFromCanvas, captureBitmapFromImageResource, createBitmapFromImageSource, explainBitmapReadback, createBitmapRegion, cropBitmap, dilateBitmap, displaceBitmap, dissolveBitmapPixels, drawBitmap, dropShadowBitmap, encodeBitmap, equalizeBitmapHistogram, erodeBitmap, extendBitmap, extractBitmapPixels, extractBitmapPixels32, fillBitmapLinearGradient, fillBitmapNoise, fillBitmapPerlinNoise, fillBitmapRadialGradient, fillBitmapRectangle, fillBitmapTurbulence, flipBitmapHorizontal, flipBitmapVertical, floodFillBitmap, formatBitmapFingerprint, gaussianBlurBitmap, getBitmapColorBoundsRectangle, getBitmapCoverage, getBitmapHistogram, getBitmapMismatch, getBitmapPixel, getBitmapPixelChannel, getBitmapPixelLuminance, getBitmapPixelRgb, glowBitmap, gradientBevelBitmap, gradientGlowBitmap, innerGlowBitmap, innerShadowBitmap, invalidateBitmap, medianBitmap, mergeBitmap, mergeBitmapChannels, multiplyBitmapAlpha, parseBitmapFingerprint, pixelateBitmap, premultiplyBitmapPixels, resizeBitmap, rotateBitmap, rotateBitmap180, rotateBitmapClockwise, rotateBitmapCounterClockwise, scrollBitmap, setBitmapAlpha, setBitmapColorMatrixIdentity, setBitmapPixel, setBitmapPixelRgb, setBitmapRegion, sharpenBitmap, splitBitmapChannels, transformBitmap, trimBitmap, unpremultiplyBitmapPixels, warpBitmap, warpBitmapQuad, writeBitmapPixels, writeBitmapPixels32, } from './contract';
1
+ export { ImageChannel, BITMAP_FINGERPRINT_COMPUTATION_ID, BITMAP_NOISE_CHANNEL_A, BITMAP_NOISE_CHANNEL_B, BITMAP_NOISE_CHANNEL_G, BITMAP_NOISE_CHANNEL_R, applyBitmapColorScaleBias, applyBitmapCurve, applyBitmapLevels, applyBitmapPaletteMap, applyBitmapThreshold, bevelBitmap, blurBitmapPixelsHorizontal, blurBitmapPixelsHorizontalWeighted, blurBitmapPixelsVertical, blurBitmapPixelsVerticalWeighted, boxBlurBitmap, buildBitmapBrightnessColorMatrix, buildBitmapContrastColorMatrix, buildBitmapGradientRamp, buildBitmapGrayscaleColorMatrix, buildBitmapHueRotationColorMatrix, buildBitmapInvertColorMatrix, buildBitmapSaturationColorMatrix, buildBitmapSepiaColorMatrix, cloneBitmap, colorMatrixBitmap, compareBitmap, compareBitmapFingerprints, compositeBitmapPixels, compositeBitmapRegion, computeGaussianKernel, concatBitmapColorMatrix, convertBitmapAlphaType, convertBitmapPixelOrder, convolveBitmap, copyBitmapAlpha, copyBitmapChannel, copyBitmapPixels, createBitmap, createBitmapFingerprint, createBitmapFromCanvas, captureBitmapFromImageResource, createBitmapFromImageSource, explainBitmapReadback, createBitmapRegion, cropBitmap, dilateBitmap, displaceBitmap, dissolveBitmapPixels, drawBitmap, dropShadowBitmap, encodeBitmap, explainBitmapEncodeBackend, explainBitmapEncodeFailure, explainBitmapEncodeOperation, equalizeBitmapHistogram, erodeBitmap, extendBitmap, extractBitmapPixels, extractBitmapPixels32, fillBitmapLinearGradient, fillBitmapNoise, fillBitmapPerlinNoise, fillBitmapRadialGradient, fillBitmapRectangle, fillBitmapTurbulence, flipBitmapHorizontal, flipBitmapVertical, floodFillBitmap, formatBitmapFingerprint, gaussianBlurBitmap, getBitmapColorBoundsRectangle, getBitmapCoverage, getBitmapHistogram, getBitmapMismatch, getBitmapPixel, getBitmapPixelChannel, getBitmapPixelLuminance, getBitmapPixelRgb, glowBitmap, gradientBevelBitmap, gradientGlowBitmap, hasBitmapEncodeOperation, innerGlowBitmap, innerShadowBitmap, invalidateBitmap, medianBitmap, mergeBitmap, mergeBitmapChannels, multiplyBitmapAlpha, parseBitmapFingerprint, pixelateBitmap, premultiplyBitmapPixels, resizeBitmap, rotateBitmap, rotateBitmap180, rotateBitmapClockwise, rotateBitmapCounterClockwise, scrollBitmap, setBitmapAlpha, setBitmapColorMatrixIdentity, setBitmapPixel, setBitmapPixelRgb, setBitmapRegion, sharpenBitmap, splitBitmapChannels, transformBitmap, trimBitmap, unpremultiplyBitmapPixels, warpBitmap, warpBitmapQuad, writeBitmapPixels, writeBitmapPixels32, } from './contract';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iCAAiC,EACjC,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,0BAA0B,EAC1B,kCAAkC,EAClC,wBAAwB,EACxB,gCAAgC,EAChC,aAAa,EACb,gCAAgC,EAChC,8BAA8B,EAC9B,uBAAuB,EACvB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,YAAY,EACZ,cAAc,EACd,4BAA4B,EAC5B,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,yBAAyB,EACzB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iCAAiC,EACjC,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,0BAA0B,EAC1B,kCAAkC,EAClC,wBAAwB,EACxB,gCAAgC,EAChC,aAAa,EACb,gCAAgC,EAChC,8BAA8B,EAC9B,uBAAuB,EACvB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,YAAY,EACZ,cAAc,EACd,4BAA4B,EAC5B,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,yBAAyB,EACzB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { ImageChannel, BITMAP_FINGERPRINT_COMPUTATION_ID, BITMAP_NOISE_CHANNEL_A, BITMAP_NOISE_CHANNEL_B, BITMAP_NOISE_CHANNEL_G, BITMAP_NOISE_CHANNEL_R, applyBitmapColorScaleBias, applyBitmapCurve, applyBitmapLevels, applyBitmapPaletteMap, applyBitmapThreshold, bevelBitmap, blurBitmapPixelsHorizontal, blurBitmapPixelsHorizontalWeighted, blurBitmapPixelsVertical, blurBitmapPixelsVerticalWeighted, boxBlurBitmap, buildBitmapBrightnessColorMatrix, buildBitmapContrastColorMatrix, buildBitmapGradientRamp, buildBitmapGrayscaleColorMatrix, buildBitmapHueRotationColorMatrix, buildBitmapInvertColorMatrix, buildBitmapSaturationColorMatrix, buildBitmapSepiaColorMatrix, cloneBitmap, colorMatrixBitmap, compareBitmap, compareBitmapFingerprints, compositeBitmapPixels, compositeBitmapRegion, computeGaussianKernel, concatBitmapColorMatrix, convertBitmapAlphaType, convertBitmapPixelOrder, convolveBitmap, copyBitmapAlpha, copyBitmapChannel, copyBitmapPixels, createBitmap, createBitmapFingerprint, createBitmapFromCanvas, captureBitmapFromImageResource, createBitmapFromImageSource, explainBitmapReadback, createBitmapRegion, cropBitmap, dilateBitmap, displaceBitmap, dissolveBitmapPixels, drawBitmap, dropShadowBitmap, encodeBitmap, equalizeBitmapHistogram, erodeBitmap, extendBitmap, extractBitmapPixels, extractBitmapPixels32, fillBitmapLinearGradient, fillBitmapNoise, fillBitmapPerlinNoise, fillBitmapRadialGradient, fillBitmapRectangle, fillBitmapTurbulence, flipBitmapHorizontal, flipBitmapVertical, floodFillBitmap, formatBitmapFingerprint, gaussianBlurBitmap, getBitmapColorBoundsRectangle, getBitmapCoverage, getBitmapHistogram, getBitmapMismatch, getBitmapPixel, getBitmapPixelChannel, getBitmapPixelLuminance, getBitmapPixelRgb, glowBitmap, gradientBevelBitmap, gradientGlowBitmap, innerGlowBitmap, innerShadowBitmap, invalidateBitmap, medianBitmap, mergeBitmap, mergeBitmapChannels, multiplyBitmapAlpha, parseBitmapFingerprint, pixelateBitmap, premultiplyBitmapPixels, resizeBitmap, rotateBitmap, rotateBitmap180, rotateBitmapClockwise, rotateBitmapCounterClockwise, scrollBitmap, setBitmapAlpha, setBitmapColorMatrixIdentity, setBitmapPixel, setBitmapPixelRgb, setBitmapRegion, sharpenBitmap, splitBitmapChannels, transformBitmap, trimBitmap, unpremultiplyBitmapPixels, warpBitmap, warpBitmapQuad, writeBitmapPixels, writeBitmapPixels32, } from './contract';
1
+ export { ImageChannel, BITMAP_FINGERPRINT_COMPUTATION_ID, BITMAP_NOISE_CHANNEL_A, BITMAP_NOISE_CHANNEL_B, BITMAP_NOISE_CHANNEL_G, BITMAP_NOISE_CHANNEL_R, applyBitmapColorScaleBias, applyBitmapCurve, applyBitmapLevels, applyBitmapPaletteMap, applyBitmapThreshold, bevelBitmap, blurBitmapPixelsHorizontal, blurBitmapPixelsHorizontalWeighted, blurBitmapPixelsVertical, blurBitmapPixelsVerticalWeighted, boxBlurBitmap, buildBitmapBrightnessColorMatrix, buildBitmapContrastColorMatrix, buildBitmapGradientRamp, buildBitmapGrayscaleColorMatrix, buildBitmapHueRotationColorMatrix, buildBitmapInvertColorMatrix, buildBitmapSaturationColorMatrix, buildBitmapSepiaColorMatrix, cloneBitmap, colorMatrixBitmap, compareBitmap, compareBitmapFingerprints, compositeBitmapPixels, compositeBitmapRegion, computeGaussianKernel, concatBitmapColorMatrix, convertBitmapAlphaType, convertBitmapPixelOrder, convolveBitmap, copyBitmapAlpha, copyBitmapChannel, copyBitmapPixels, createBitmap, createBitmapFingerprint, createBitmapFromCanvas, captureBitmapFromImageResource, createBitmapFromImageSource, explainBitmapReadback, createBitmapRegion, cropBitmap, dilateBitmap, displaceBitmap, dissolveBitmapPixels, drawBitmap, dropShadowBitmap, encodeBitmap, explainBitmapEncodeBackend, explainBitmapEncodeFailure, explainBitmapEncodeOperation, equalizeBitmapHistogram, erodeBitmap, extendBitmap, extractBitmapPixels, extractBitmapPixels32, fillBitmapLinearGradient, fillBitmapNoise, fillBitmapPerlinNoise, fillBitmapRadialGradient, fillBitmapRectangle, fillBitmapTurbulence, flipBitmapHorizontal, flipBitmapVertical, floodFillBitmap, formatBitmapFingerprint, gaussianBlurBitmap, getBitmapColorBoundsRectangle, getBitmapCoverage, getBitmapHistogram, getBitmapMismatch, getBitmapPixel, getBitmapPixelChannel, getBitmapPixelLuminance, getBitmapPixelRgb, glowBitmap, gradientBevelBitmap, gradientGlowBitmap, hasBitmapEncodeOperation, innerGlowBitmap, innerShadowBitmap, invalidateBitmap, medianBitmap, mergeBitmap, mergeBitmapChannels, multiplyBitmapAlpha, parseBitmapFingerprint, pixelateBitmap, premultiplyBitmapPixels, resizeBitmap, rotateBitmap, rotateBitmap180, rotateBitmapClockwise, rotateBitmapCounterClockwise, scrollBitmap, setBitmapAlpha, setBitmapColorMatrixIdentity, setBitmapPixel, setBitmapPixelRgb, setBitmapRegion, sharpenBitmap, splitBitmapChannels, transformBitmap, trimBitmap, unpremultiplyBitmapPixels, warpBitmap, warpBitmapQuad, writeBitmapPixels, writeBitmapPixels32, } from './contract';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iCAAiC,EACjC,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,0BAA0B,EAC1B,kCAAkC,EAClC,wBAAwB,EACxB,gCAAgC,EAChC,aAAa,EACb,gCAAgC,EAChC,8BAA8B,EAC9B,uBAAuB,EACvB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,YAAY,EACZ,cAAc,EACd,4BAA4B,EAC5B,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,yBAAyB,EACzB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,iCAAiC,EACjC,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,WAAW,EACX,0BAA0B,EAC1B,kCAAkC,EAClC,wBAAwB,EACxB,gCAAgC,EAChC,aAAa,EACb,gCAAgC,EAChC,8BAA8B,EAC9B,uBAAuB,EACvB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EACtB,8BAA8B,EAC9B,2BAA2B,EAC3B,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,6BAA6B,EAC7B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,4BAA4B,EAC5B,YAAY,EACZ,cAAc,EACd,4BAA4B,EAC5B,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,yBAAyB,EACzB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/bitmap",
3
- "version": "0.5.0-next.1944.cd6b6e7",
3
+ "version": "0.5.1-edge.638.d4dbd4e",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,9 +38,9 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/image": "0.5.0-next.1944.cd6b6e7",
42
- "@flighthq/entity": "0.5.0-next.1944.cd6b6e7",
43
- "@flighthq/types": "0.5.0-next.1944.cd6b6e7"
41
+ "@flighthq/image": "0.5.1-edge.638.d4dbd4e",
42
+ "@flighthq/entity": "0.5.1-edge.638.d4dbd4e",
43
+ "@flighthq/types": "0.5.1-edge.638.d4dbd4e"
44
44
  },
45
45
  "devDependencies": {
46
46
  "typescript": "^5.3.0"