@flighthq/image 0.5.1-next.731.0ae0aa4 → 0.5.1-next.799.62ef0c7
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/README.md +2 -2
- package/dist/imageBackend.d.ts.map +1 -1
- package/dist/imageBackend.js +5 -4
- package/dist/imageBackend.js.map +1 -1
- package/dist/imageResourceReference.js +8 -8
- package/dist/imageResourceReference.js.map +1 -1
- package/package.json +4 -4
- package/src/imageBackend.test.ts +5 -3
- package/src/imageResourceFrom.test.ts +3 -2
- package/src/imageResourceReference.test.ts +13 -8
package/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/image`. The `@flight
|
|
|
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/image@0.5.1-next.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/image@0.5.1-next.799.62ef0c7](https://github.com/flighthq/flight/tree/62ef0c74f09f24177aac3695b2487b2d743d4fe6/packages/image)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/62ef0c74f09f24177aac3695b2487b2d743d4fe6/LICENSE.md)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageBackend.d.ts","sourceRoot":"","sources":["../src/imageBackend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"imageBackend.d.ts","sourceRoot":"","sources":["../src/imageBackend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,2BAA2B,EAG3B,YAAY,EACZ,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAIlC,wBAAgB,qBAAqB,IAAI,YAAY,CAqCpD;AAsBD,wBAAgB,mBAAmB,IAAI,kBAAkB,CAaxD;AAID,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,qBAAqB,GAAG,2BAA2B,CAgBnG;AAED,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAE3E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAMnE;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAKlF;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAK/C;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAElE"}
|
package/dist/imageBackend.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { createEntity } from '@flighthq/entity/contract';
|
|
1
2
|
import { createImageResourceFromCanvas, createImageResourceFromImageElement } from './imageResourceFrom';
|
|
2
3
|
export function createWebImageBackend() {
|
|
3
|
-
return {
|
|
4
|
+
return createEntity({
|
|
4
5
|
createImageFromBitmap(bitmap) {
|
|
5
6
|
const canvas = document.createElement('canvas');
|
|
6
7
|
canvas.width = bitmap.width;
|
|
@@ -38,7 +39,7 @@ export function createWebImageBackend() {
|
|
|
38
39
|
}
|
|
39
40
|
return createImageResourceFromImageElement(img);
|
|
40
41
|
},
|
|
41
|
-
};
|
|
42
|
+
});
|
|
42
43
|
}
|
|
43
44
|
// ImageData is straight-alpha by contract. Preserve a Bitmap's declared representation at its own
|
|
44
45
|
// seam, then normalize only the scratch browser copy used to materialize a CanvasImageSource.
|
|
@@ -121,11 +122,11 @@ export function resetImageBackendForTest() {
|
|
|
121
122
|
export function setImageBackend(backend) {
|
|
122
123
|
_custom = backend;
|
|
123
124
|
}
|
|
124
|
-
const _sentinel = {
|
|
125
|
+
const _sentinel = createEntity({
|
|
125
126
|
loadImageFromUrl(_url, _crossOrigin, _signal) {
|
|
126
127
|
return Promise.reject(new Error('No image backend installed. Call enableHostWebImage() or setImageBackend() first.'));
|
|
127
128
|
},
|
|
128
|
-
};
|
|
129
|
+
});
|
|
129
130
|
let _custom = null;
|
|
130
131
|
let _host = null;
|
|
131
132
|
let _hostConflict = false;
|
package/dist/imageBackend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageBackend.js","sourceRoot":"","sources":["../src/imageBackend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"imageBackend.js","sourceRoot":"","sources":["../src/imageBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { BitmapTextureSourceKind, ImageResourceFailureKind, ImageResourceReferen
|
|
|
5
5
|
// out of its source and the reference borrows it, so a document that never resolves an image never pays for
|
|
6
6
|
// its pixels. `textures` starts empty and each waiting Texture subscribes itself.
|
|
7
7
|
export function createEmbeddedImageResourceReference(bytes, mimeType = null, alphaType = 'straight') {
|
|
8
|
-
return {
|
|
8
|
+
return createEntity({
|
|
9
9
|
alphaType,
|
|
10
10
|
bytes,
|
|
11
11
|
failure: null,
|
|
@@ -13,7 +13,7 @@ export function createEmbeddedImageResourceReference(bytes, mimeType = null, alp
|
|
|
13
13
|
mimeType,
|
|
14
14
|
state: ResourceResolutionState.Unresolved,
|
|
15
15
|
textures: [],
|
|
16
|
-
};
|
|
16
|
+
});
|
|
17
17
|
}
|
|
18
18
|
// The one encoded-byte producer for image resource references. A registered decoder owns format
|
|
19
19
|
// knowledge; this async resource layer turns its RGBA result into the live Bitmap entity renderers
|
|
@@ -43,7 +43,7 @@ async function decodeEmbeddedImageResourceReference(ref, signal) {
|
|
|
43
43
|
return createEntity(bitmap);
|
|
44
44
|
}
|
|
45
45
|
export function createExternalImageResourceReference(uri, basePath = null) {
|
|
46
|
-
return {
|
|
46
|
+
return createEntity({
|
|
47
47
|
basePath,
|
|
48
48
|
failure: null,
|
|
49
49
|
kind: ImageResourceReferenceKind.External,
|
|
@@ -51,15 +51,15 @@ export function createExternalImageResourceReference(uri, basePath = null) {
|
|
|
51
51
|
state: ResourceResolutionState.Unresolved,
|
|
52
52
|
textures: [],
|
|
53
53
|
uri,
|
|
54
|
-
};
|
|
54
|
+
});
|
|
55
55
|
}
|
|
56
56
|
// Reduces a thrown value to the serialization-safe categories a reference retains. Raw Error objects and
|
|
57
57
|
// arbitrary thrown values stay inside the resolving operation; diagnostics get category, name, and message.
|
|
58
58
|
export function createImageResourceFailure(cause) {
|
|
59
59
|
if (cause instanceof Error) {
|
|
60
|
-
return { kind: ImageResourceFailureKind.Error, message: cause.message, name: cause.name };
|
|
60
|
+
return createEntity({ kind: ImageResourceFailureKind.Error, message: cause.message, name: cause.name });
|
|
61
61
|
}
|
|
62
|
-
return { kind: ImageResourceFailureKind.Error, message: String(cause), name: null };
|
|
62
|
+
return createEntity({ kind: ImageResourceFailureKind.Error, message: String(cause), name: null });
|
|
63
63
|
}
|
|
64
64
|
async function resolveImageBitmapComposition(ref, signal) {
|
|
65
65
|
signal.throwIfAborted();
|
|
@@ -123,11 +123,11 @@ export async function resolveImageResourceReference(ref, fetch, signal) {
|
|
|
123
123
|
const decodeFailure = usesOrdinaryEmbeddedDecode
|
|
124
124
|
? explainImageDecodeFailure(ref.bytes, ref.mimeType ?? undefined)
|
|
125
125
|
: null;
|
|
126
|
-
ref.failure = {
|
|
126
|
+
ref.failure = createEntity({
|
|
127
127
|
kind: ImageResourceFailureKind.Unavailable,
|
|
128
128
|
message: decodeFailure?.reason ?? 'Image resource unavailable',
|
|
129
129
|
name: null,
|
|
130
|
-
};
|
|
130
|
+
});
|
|
131
131
|
ref.state = ResourceResolutionState.Failed;
|
|
132
132
|
return null;
|
|
133
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageResourceReference.js","sourceRoot":"","sources":["../src/imageResourceReference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,WAAW,EACX,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAaxC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAElC,0GAA0G;AAC1G,4GAA4G;AAC5G,kFAAkF;AAClF,MAAM,UAAU,oCAAoC,CAClD,KAAiB,EACjB,WAA0B,IAAI,EAC9B,YAAuB,UAAU;IAEjC,OAAO;
|
|
1
|
+
{"version":3,"file":"imageResourceReference.js","sourceRoot":"","sources":["../src/imageResourceReference.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/image",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.799.62ef0c7",
|
|
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/entity": "0.5.1-next.
|
|
42
|
-
"@flighthq/image-codec": "0.5.1-next.
|
|
43
|
-
"@flighthq/types": "0.5.1-next.
|
|
41
|
+
"@flighthq/entity": "0.5.1-next.799.62ef0c7",
|
|
42
|
+
"@flighthq/image-codec": "0.5.1-next.799.62ef0c7",
|
|
43
|
+
"@flighthq/types": "0.5.1-next.799.62ef0c7"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^5.3.0"
|
package/src/imageBackend.test.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ImageResource, ImageBackend } from '@flighthq/types/contract';
|
|
2
|
+
import { EntityRuntimeKey } from '@flighthq/types/contract';
|
|
2
3
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
3
4
|
|
|
4
5
|
import {
|
|
@@ -21,6 +22,7 @@ function recordingBackend(): { backend: ImageBackend; calls: unknown[][] } {
|
|
|
21
22
|
const calls: unknown[][] = [];
|
|
22
23
|
return {
|
|
23
24
|
backend: {
|
|
25
|
+
[EntityRuntimeKey]: undefined,
|
|
24
26
|
loadImageFromUrl(url, crossOrigin, signal): Promise<ImageResource> {
|
|
25
27
|
calls.push([url, crossOrigin, signal]);
|
|
26
28
|
return Promise.resolve({} as ImageResource);
|
|
@@ -82,7 +84,7 @@ describe('explainImageOperation', () => {
|
|
|
82
84
|
operation: 'createImageFromBitmap',
|
|
83
85
|
});
|
|
84
86
|
|
|
85
|
-
setImageBackend({ loadImageFromUrl: vi.fn() });
|
|
87
|
+
setImageBackend({ [EntityRuntimeKey]: undefined, loadImageFromUrl: vi.fn() });
|
|
86
88
|
expect(explainImageOperation('createImageFromBitmap')).toEqual({
|
|
87
89
|
implemented: false,
|
|
88
90
|
layer: 'none',
|
|
@@ -91,7 +93,7 @@ describe('explainImageOperation', () => {
|
|
|
91
93
|
});
|
|
92
94
|
|
|
93
95
|
it('reports the unsupported Bitmap operation without claiming URL loading is absent', () => {
|
|
94
|
-
const backend: ImageBackend = { loadImageFromUrl: vi.fn() };
|
|
96
|
+
const backend: ImageBackend = { [EntityRuntimeKey]: undefined, loadImageFromUrl: vi.fn() };
|
|
95
97
|
setImageBackend(backend);
|
|
96
98
|
|
|
97
99
|
expect(explainImageOperation('createImageFromBitmap')).toEqual({
|
|
@@ -145,7 +147,7 @@ describe('hasImageOperation', () => {
|
|
|
145
147
|
expect(hasImageOperation(operation)).toBe(explainImageOperation(operation).implemented);
|
|
146
148
|
}
|
|
147
149
|
|
|
148
|
-
setImageBackend({ loadImageFromUrl: vi.fn() });
|
|
150
|
+
setImageBackend({ [EntityRuntimeKey]: undefined, loadImageFromUrl: vi.fn() });
|
|
149
151
|
for (const operation of ['createImageFromBitmap', 'loadImageFromUrl'] as const) {
|
|
150
152
|
expect(hasImageOperation(operation)).toBe(explainImageOperation(operation).implemented);
|
|
151
153
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createEntity } from '@flighthq/entity/contract';
|
|
2
2
|
import type { Bitmap, ImageResource, ImageBackend } from '@flighthq/types/contract';
|
|
3
|
-
import { BitmapTextureSourceKind } from '@flighthq/types/contract';
|
|
3
|
+
import { BitmapTextureSourceKind, EntityRuntimeKey } from '@flighthq/types/contract';
|
|
4
4
|
|
|
5
5
|
import { createWebImageBackend, resetImageBackendForTest, setImageBackend } from './imageBackend';
|
|
6
6
|
import { createImageResource } from './imageResource';
|
|
@@ -35,6 +35,7 @@ describe('createImageResourceFromBitmap', () => {
|
|
|
35
35
|
const expected = {} as ImageResource;
|
|
36
36
|
const createImageFromBitmap = vi.fn((_bitmap: Readonly<Bitmap>) => expected);
|
|
37
37
|
const backend: ImageBackend = {
|
|
38
|
+
[EntityRuntimeKey]: undefined,
|
|
38
39
|
createImageFromBitmap,
|
|
39
40
|
loadImageFromUrl: vi.fn(),
|
|
40
41
|
};
|
|
@@ -47,7 +48,7 @@ describe('createImageResourceFromBitmap', () => {
|
|
|
47
48
|
|
|
48
49
|
it('returns null for selected-backend absence without throwing or falling back to DOM', () => {
|
|
49
50
|
const createElement = vi.spyOn(document, 'createElement');
|
|
50
|
-
const backend: ImageBackend = { loadImageFromUrl: vi.fn() };
|
|
51
|
+
const backend: ImageBackend = { [EntityRuntimeKey]: undefined, loadImageFromUrl: vi.fn() };
|
|
51
52
|
setImageBackend(backend);
|
|
52
53
|
|
|
53
54
|
expect(() => createImageResourceFromBitmap(createTestBitmap(1, 1))).not.toThrow();
|
|
@@ -77,11 +77,11 @@ describe('createExternalImageResourceReference', () => {
|
|
|
77
77
|
describe('createImageResourceFailure', () => {
|
|
78
78
|
it('keeps an Error name and message', () => {
|
|
79
79
|
const failure = createImageResourceFailure(new TypeError('bad magic'));
|
|
80
|
-
expect(failure).
|
|
80
|
+
expect(failure).toMatchObject({ kind: ImageResourceFailureKind.Error, message: 'bad magic', name: 'TypeError' });
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
it('stringifies a non-Error cause with no name', () => {
|
|
84
|
-
expect(createImageResourceFailure('exploded')).
|
|
84
|
+
expect(createImageResourceFailure('exploded')).toMatchObject({
|
|
85
85
|
kind: ImageResourceFailureKind.Error,
|
|
86
86
|
message: 'exploded',
|
|
87
87
|
name: null,
|
|
@@ -123,11 +123,11 @@ describe('enableImageBitmapComposition', () => {
|
|
|
123
123
|
describe('explainImageResourceReferenceResolution', () => {
|
|
124
124
|
it('detaches the failure so a caller cannot mutate the reference', () => {
|
|
125
125
|
const ref = createEmbeddedImageResourceReference(new Uint8Array(1));
|
|
126
|
-
ref.failure = { kind: ImageResourceFailureKind.Error, message: 'nope', name: null };
|
|
126
|
+
ref.failure = { [EntityRuntimeKey]: undefined, kind: ImageResourceFailureKind.Error, message: 'nope', name: null };
|
|
127
127
|
ref.state = ResourceResolutionState.Failed;
|
|
128
128
|
const explanation = explainImageResourceReferenceResolution(ref);
|
|
129
129
|
expect(explanation.failure).not.toBe(ref.failure);
|
|
130
|
-
expect(explanation.failure).
|
|
130
|
+
expect(explanation.failure).toMatchObject(ref.failure!);
|
|
131
131
|
});
|
|
132
132
|
|
|
133
133
|
it('reports only a failed reference as retryable', () => {
|
|
@@ -141,7 +141,12 @@ describe('explainImageResourceReferenceResolution', () => {
|
|
|
141
141
|
describe('resetFailedImageResourceReference', () => {
|
|
142
142
|
it('clears a failed reference back to unresolved', () => {
|
|
143
143
|
const ref = createExternalImageResourceReference('a.png');
|
|
144
|
-
ref.failure = {
|
|
144
|
+
ref.failure = {
|
|
145
|
+
[EntityRuntimeKey]: undefined,
|
|
146
|
+
kind: ImageResourceFailureKind.Unavailable,
|
|
147
|
+
message: 'missing',
|
|
148
|
+
name: null,
|
|
149
|
+
};
|
|
145
150
|
ref.state = ResourceResolutionState.Failed;
|
|
146
151
|
expect(resetFailedImageResourceReference(ref)).toBe(true);
|
|
147
152
|
expect(ref.state).toBe(ResourceResolutionState.Unresolved);
|
|
@@ -231,7 +236,7 @@ describe('resolveImageResourceReference', () => {
|
|
|
231
236
|
const ref = createEmbeddedImageResourceReference(new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]));
|
|
232
237
|
|
|
233
238
|
expect(await resolveImageResourceReference(ref, unusedFetch, new AbortController().signal)).toBeNull();
|
|
234
|
-
expect(ref.failure).
|
|
239
|
+
expect(ref.failure).toMatchObject({
|
|
235
240
|
kind: ImageResourceFailureKind.Unavailable,
|
|
236
241
|
message: 'decoder-not-registered',
|
|
237
242
|
name: null,
|
|
@@ -259,7 +264,7 @@ describe('resolveImageResourceReference', () => {
|
|
|
259
264
|
const fetch = vi.fn().mockRejectedValue(new Error('network down'));
|
|
260
265
|
expect(await resolveImageResourceReference(ref, fetch, new AbortController().signal)).toBeNull();
|
|
261
266
|
expect(ref.state).toBe(ResourceResolutionState.Failed);
|
|
262
|
-
expect(ref.failure).
|
|
267
|
+
expect(ref.failure).toMatchObject({ kind: ImageResourceFailureKind.Error, message: 'network down', name: 'Error' });
|
|
263
268
|
});
|
|
264
269
|
|
|
265
270
|
it('treats an abort as a cancel: reverts to unresolved and rethrows', async () => {
|
|
@@ -276,7 +281,7 @@ describe('resolveImageResourceReference', () => {
|
|
|
276
281
|
|
|
277
282
|
it('clears a prior failure when the reference is retried', async () => {
|
|
278
283
|
const ref = createExternalImageResourceReference('flaky.png');
|
|
279
|
-
ref.failure = { kind: ImageResourceFailureKind.Error, message: 'old', name: null };
|
|
284
|
+
ref.failure = { [EntityRuntimeKey]: undefined, kind: ImageResourceFailureKind.Error, message: 'old', name: null };
|
|
280
285
|
ref.state = ResourceResolutionState.Failed;
|
|
281
286
|
const fetch = vi.fn().mockResolvedValue({ width: 1 } as ImageResource);
|
|
282
287
|
await resolveImageResourceReference(ref, fetch, new AbortController().signal);
|