@flighthq/assets 0.3.0-next.906.07cea63 → 0.3.0

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.
@@ -1,8 +1,10 @@
1
- import type { AssetDescriptor, AssetGroupLoadOptions, AssetLibrary, AssetLoaderAdapter, AssetManifest, AssetType } from '@flighthq/types/contract';
1
+ import type { AssetAcquireGuard, AssetDescriptor, AssetGroupLoadOptions, AssetLibrary, AssetLoaderAdapter, AssetManifest, AssetType } from '@flighthq/types/contract';
2
2
  export declare function acquireAsset<T = unknown>(library: Readonly<AssetLibrary>, id: string): Promise<T>;
3
3
  export declare function createAssetLibrary(): AssetLibrary;
4
4
  export declare function disposeAssetLibrary(library: Readonly<AssetLibrary>): void;
5
5
  export declare function getAsset<T = unknown>(library: Readonly<AssetLibrary>, id: string): T | null;
6
+ export declare function getAssetGroupIds(library: Readonly<AssetLibrary>, name: string): readonly string[];
7
+ export declare function getAssetIds(library: Readonly<AssetLibrary>): readonly string[];
6
8
  export declare function getAssetRefCount(library: Readonly<AssetLibrary>, id: string): number;
7
9
  export declare function loadAssetGroup(library: Readonly<AssetLibrary>, name: string, options?: Readonly<AssetGroupLoadOptions>): Promise<void>;
8
10
  export declare function registerAssetDescriptor(library: Readonly<AssetLibrary>, descriptor: Readonly<AssetDescriptor>): void;
@@ -10,4 +12,5 @@ export declare function registerAssetLoader<T>(library: Readonly<AssetLibrary>,
10
12
  export declare function registerAssetManifest(library: Readonly<AssetLibrary>, manifest: AssetManifest): void;
11
13
  export declare function releaseAsset(library: Readonly<AssetLibrary>, id: string): void;
12
14
  export declare function releaseAssetGroup(library: Readonly<AssetLibrary>, name: string): void;
15
+ export declare function setAssetAcquireGuard(library: Readonly<AssetLibrary>, guard: AssetAcquireGuard | null): void;
13
16
  //# sourceMappingURL=assetLibrary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assetLibrary.d.ts","sourceRoot":"","sources":["../src/assetLibrary.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,eAAe,EACf,qBAAqB,EACrB,YAAY,EAEZ,kBAAkB,EAClB,aAAa,EACb,SAAS,EACV,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CA2CjG;AAKD,wBAAgB,kBAAkB,IAAI,YAAY,CAQjD;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAYzE;AAID,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAG3F;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAGpF;AAQD,wBAAsB,cAAc,CAClC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CAqCf;AAMD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAsBpH;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAEN;AAMD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAepG;AAKD,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAO9E;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIrF"}
1
+ {"version":3,"file":"assetLibrary.d.ts","sourceRoot":"","sources":["../src/assetLibrary.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,qBAAqB,EACrB,YAAY,EAEZ,kBAAkB,EAClB,aAAa,EACb,SAAS,EACV,MAAM,0BAA0B,CAAC;AAQlC,wBAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CA8CjG;AAKD,wBAAgB,kBAAkB,IAAI,YAAY,CAUjD;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAczE;AAID,wBAAgB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAG3F;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAEjG;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,SAAS,MAAM,EAAE,CAE9E;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAGpF;AAQD,wBAAsB,cAAc,CAClC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACxC,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAMD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAwBpH;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAC/B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GACvC,IAAI,CAEN;AAMD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAepG;AAKD,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAO9E;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIrF;AAID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAE3G"}
@@ -1,4 +1,4 @@
1
- import { createResourceLoader, disposeResourceLoader, queueResourceLoad, startResourceLoad, } from '@flighthq/loader/contract';
1
+ import { createResourceLoader, disposeResourceLoader, getResourceLoadCounts, queueResourceLoad, startResourceLoad, } from '@flighthq/loader/contract';
2
2
  import { connectSignal, emitSignal } from '@flighthq/signals/contract';
3
3
  // Increments the reference count for `id` and resolves its loaded value. If the asset is already
4
4
  // resident, resolves immediately. If a load is already in flight (a concurrent acquire), the same
@@ -10,11 +10,13 @@ export function acquireAsset(library, id) {
10
10
  const runtime = library.runtime;
11
11
  const descriptor = runtime.descriptors.get(id);
12
12
  if (descriptor === undefined) {
13
- return Promise.reject(new Error(`assets: no descriptor for id "${id}" (registerAssetDescriptor first)`));
13
+ runtime.acquireGuard?.(library, { id, refCount: 0, status: 'missing-descriptor', type: null });
14
+ return Promise.reject(new Error(`assets: no descriptor for id "${id}"`));
14
15
  }
15
16
  const adapter = runtime.adapters.get(descriptor.type);
16
17
  if (adapter === undefined) {
17
- return Promise.reject(new Error(`assets: no loader for type "${descriptor.type}" (registerAssetLoader first)`));
18
+ runtime.acquireGuard?.(library, { id, refCount: 0, status: 'missing-loader', type: descriptor.type });
19
+ return Promise.reject(new Error(`assets: no loader for type "${descriptor.type}"`));
18
20
  }
19
21
  const existing = runtime.entries.get(id);
20
22
  if (existing !== undefined) {
@@ -25,6 +27,7 @@ export function acquireAsset(library, id) {
25
27
  return existing.loadPromise;
26
28
  }
27
29
  const entry = { value: undefined, refcount: 1, loadPromise: null, resident: false };
30
+ runtime.freedIds.delete(id);
28
31
  runtime.entries.set(id, entry);
29
32
  const loadPromise = adapter.load(descriptor).then((value) => {
30
33
  if (runtime.entries.get(id) !== entry || entry.refcount <= 0) {
@@ -52,9 +55,11 @@ export function acquireAsset(library, id) {
52
55
  // in with registerAssetLoader.
53
56
  export function createAssetLibrary() {
54
57
  const runtime = {
58
+ acquireGuard: null,
55
59
  adapters: new Map(),
56
60
  descriptors: new Map(),
57
61
  entries: new Map(),
62
+ freedIds: new Set(),
58
63
  groups: new Map(),
59
64
  };
60
65
  return { runtime };
@@ -72,8 +77,10 @@ export function disposeAssetLibrary(library) {
72
77
  adapter.dispose(entry.value);
73
78
  }
74
79
  runtime.adapters.clear();
80
+ runtime.acquireGuard = null;
75
81
  runtime.descriptors.clear();
76
82
  runtime.entries.clear();
83
+ runtime.freedIds.clear();
77
84
  runtime.groups.clear();
78
85
  }
79
86
  // Returns the resident value for `id` synchronously, or null if it is not loaded (never acquired, or
@@ -82,6 +89,17 @@ export function getAsset(library, id) {
82
89
  const entry = library.runtime.entries.get(id);
83
90
  return entry !== undefined && entry.resident ? entry.value : null;
84
91
  }
92
+ // Returns an insertion-ordered snapshot of the descriptors tagged with `name`, whether or not they are
93
+ // currently resident. Unknown and empty groups return an empty array.
94
+ export function getAssetGroupIds(library, name) {
95
+ return library.runtime.groups.get(name)?.slice() ?? [];
96
+ }
97
+ // Returns an insertion-ordered snapshot of live cache ids. Both loading and resident entries are
98
+ // included because each is held by at least one unmatched acquire. Mutating the snapshot cannot change
99
+ // library state.
100
+ export function getAssetIds(library) {
101
+ return Array.from(library.runtime.entries.keys());
102
+ }
85
103
  // Returns the live holder count for `id`: how many acquires have not yet been matched by a release.
86
104
  // Zero for an id that was never acquired or has already been freed at reference count zero.
87
105
  export function getAssetRefCount(library, id) {
@@ -102,8 +120,13 @@ export async function loadAssetGroup(library, name, options) {
102
120
  const loader = createResourceLoader();
103
121
  const progress = options?.progress;
104
122
  if (progress !== undefined) {
105
- connectSignal(loader.onProgress, (loaded, total) => {
106
- emitSignal(progress, { loaded, total });
123
+ // AssetLoadProgress is defined in counts ("`loaded` members settled of `total` scheduled"), so it
124
+ // reads them from the counts query rather than from onProgress, which carries the 0..1 weighted
125
+ // fraction. Taking the fraction's argument as a count is exactly the conflation the loader's two
126
+ // currencies were separated to prevent.
127
+ connectSignal(loader.onProgress, () => {
128
+ const counts = getResourceLoadCounts(loader);
129
+ emitSignal(progress, { loaded: counts.settledItems, total: counts.totalItems });
107
130
  });
108
131
  }
109
132
  const itemPromises = [];
@@ -145,6 +168,8 @@ export function registerAssetDescriptor(library, descriptor) {
145
168
  }
146
169
  if (previous !== undefined)
147
170
  removeAssetDescriptorGroups(runtime, previous);
171
+ if (previous !== undefined && !isEquivalentAssetDescriptor(previous, descriptor))
172
+ runtime.freedIds.delete(descriptor.id);
148
173
  const storedDescriptor = copyAssetDescriptor(descriptor);
149
174
  runtime.descriptors.set(descriptor.id, storedDescriptor);
150
175
  const groups = storedDescriptor.groups;
@@ -209,11 +234,17 @@ export function releaseAssetGroup(library, name) {
209
234
  for (const id of ids)
210
235
  releaseAsset(library, id);
211
236
  }
237
+ // Installs or removes the optional acquire-misuse hook. The core remains logger-free; the separately
238
+ // importable enableAssetGuards module supplies the caller-facing messages.
239
+ export function setAssetAcquireGuard(library, guard) {
240
+ library.runtime.acquireGuard = guard;
241
+ }
212
242
  // Drops the cache entry and, when the asset actually decoded, frees it through its adapter. An entry
213
243
  // whose load never settled (released mid-flight) has nothing decoded to free; the in-flight load's own
214
244
  // continuation disposes the orphaned value once it resolves.
215
245
  function disposeAssetEntry(runtime, id, entry) {
216
246
  runtime.entries.delete(id);
247
+ runtime.freedIds.add(id);
217
248
  if (!entry.resident)
218
249
  return;
219
250
  const descriptor = runtime.descriptors.get(id);
@@ -1 +1 @@
1
- {"version":3,"file":"assetLibrary.js","sourceRoot":"","sources":["../src/assetLibrary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assetLibrary.js","sourceRoot":"","sources":["../src/assetLibrary.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  export * from './assetLibrary';
2
+ export * from './enableAssetGuards';
3
+ export * from './explainAssetLoad';
2
4
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
package/dist/contract.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './assetLibrary';
2
+ export * from './enableAssetGuards';
3
+ export * from './explainAssetLoad';
2
4
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AssetLibrary } from '@flighthq/types/contract';
2
+ export declare function areAssetGuardsEnabled(library: Readonly<AssetLibrary>): boolean;
3
+ export declare function disableAssetGuards(library: Readonly<AssetLibrary>): void;
4
+ export declare function enableAssetGuards(library: Readonly<AssetLibrary>): void;
5
+ //# sourceMappingURL=enableAssetGuards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableAssetGuards.d.ts","sourceRoot":"","sources":["../src/enableAssetGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,0BAA0B,CAAC;AAKnF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAE9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAExE;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAEvE"}
@@ -0,0 +1,23 @@
1
+ import { logOnce } from '@flighthq/log/contract';
2
+ import { LogLevel } from '@flighthq/types/contract';
3
+ import { setAssetAcquireGuard } from './assetLibrary';
4
+ export function areAssetGuardsEnabled(library) {
5
+ return library.runtime.acquireGuard === warnOnAssetAcquireFailure;
6
+ }
7
+ export function disableAssetGuards(library) {
8
+ setAssetAcquireGuard(library, null);
9
+ }
10
+ // Installs opt-in caller-misuse warnings for acquireAsset. Core retains terse rejected promises and a
11
+ // null hook by default; omitting this module sheds the messages and @flighthq/log dependency.
12
+ export function enableAssetGuards(library) {
13
+ setAssetAcquireGuard(library, warnOnAssetAcquireFailure);
14
+ }
15
+ function warnOnAssetAcquireFailure(_library, explanation) {
16
+ if (explanation.status !== 'missing-descriptor' && explanation.status !== 'missing-loader')
17
+ return;
18
+ const message = explanation.status === 'missing-descriptor'
19
+ ? `acquireAsset: no descriptor is registered for id "${explanation.id}"; call registerAssetDescriptor or registerAssetManifest before acquiring it.`
20
+ : `acquireAsset: no loader is registered for type "${explanation.type}"; call registerAssetLoader before acquiring "${explanation.id}".`;
21
+ logOnce(`assets:acquire:${explanation.status}:${explanation.type ?? ''}:${explanation.id}`, LogLevel.Warn, { ...explanation, message }, 'assets');
22
+ }
23
+ //# sourceMappingURL=enableAssetGuards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableAssetGuards.js","sourceRoot":"","sources":["../src/enableAssetGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,KAAK,yBAAyB,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA+B;IAChE,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,sGAAsG;AACtG,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAC/D,oBAAoB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAgC,EAChC,WAA2C;IAE3C,IAAI,WAAW,CAAC,MAAM,KAAK,oBAAoB,IAAI,WAAW,CAAC,MAAM,KAAK,gBAAgB;QAAE,OAAO;IACnG,MAAM,OAAO,GACX,WAAW,CAAC,MAAM,KAAK,oBAAoB;QACzC,CAAC,CAAC,qDAAqD,WAAW,CAAC,EAAE,+EAA+E;QACpJ,CAAC,CAAC,mDAAmD,WAAW,CAAC,IAAI,iDAAiD,WAAW,CAAC,EAAE,IAAI,CAAC;IAC7I,OAAO,CACL,kBAAkB,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,IAAI,EAAE,IAAI,WAAW,CAAC,EAAE,EAAE,EAClF,QAAQ,CAAC,IAAI,EACb,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,EAC3B,QAAQ,CACT,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AssetLibrary, AssetLoadExplanation } from '@flighthq/types/contract';
2
+ export declare function explainAssetLoad(library: Readonly<AssetLibrary>, id: string): AssetLoadExplanation;
3
+ //# sourceMappingURL=explainAssetLoad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainAssetLoad.d.ts","sourceRoot":"","sources":["../src/explainAssetLoad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAInF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,oBAAoB,CAwBlG"}
@@ -0,0 +1,27 @@
1
+ // Reports the id's catalog, adapter, and residency state without initiating work. This is the pull
2
+ // diagnostic for getAsset's null sentinel and getAssetRefCount's zero sentinel.
3
+ export function explainAssetLoad(library, id) {
4
+ const runtime = library.runtime;
5
+ const descriptor = runtime.descriptors.get(id);
6
+ if (descriptor === undefined)
7
+ return { id, refCount: 0, status: 'missing-descriptor', type: null };
8
+ const type = descriptor.type;
9
+ if (!runtime.adapters.has(type))
10
+ return { id, refCount: 0, status: 'missing-loader', type };
11
+ const entry = runtime.entries.get(id);
12
+ if (entry !== undefined) {
13
+ return {
14
+ id,
15
+ refCount: entry.refcount,
16
+ status: entry.resident ? 'resident' : 'loading',
17
+ type,
18
+ };
19
+ }
20
+ return {
21
+ id,
22
+ refCount: 0,
23
+ status: runtime.freedIds.has(id) ? 'freed' : 'never-acquired',
24
+ type,
25
+ };
26
+ }
27
+ //# sourceMappingURL=explainAssetLoad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainAssetLoad.js","sourceRoot":"","sources":["../src/explainAssetLoad.ts"],"names":[],"mappings":"AAEA,mGAAmG;AACnG,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,OAA+B,EAAE,EAAU;IAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEnG,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAE5F,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;YACL,EAAE;YACF,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC/C,IAAI;SACL,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE;QACF,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;QAC7D,IAAI;KACL,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { acquireAsset, createAssetLibrary, disposeAssetLibrary, getAsset, getAssetRefCount, loadAssetGroup, registerAssetDescriptor, registerAssetLoader, registerAssetManifest, releaseAsset, releaseAssetGroup, } from './contract';
1
+ export { acquireAsset, areAssetGuardsEnabled, createAssetLibrary, disableAssetGuards, disposeAssetLibrary, enableAssetGuards, explainAssetLoad, getAsset, getAssetGroupIds, getAssetIds, getAssetRefCount, loadAssetGroup, registerAssetDescriptor, registerAssetLoader, registerAssetManifest, releaseAsset, releaseAssetGroup, } 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,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { acquireAsset, createAssetLibrary, disposeAssetLibrary, getAsset, getAssetRefCount, loadAssetGroup, registerAssetDescriptor, registerAssetLoader, registerAssetManifest, releaseAsset, releaseAssetGroup, } from './contract';
1
+ export { acquireAsset, areAssetGuardsEnabled, createAssetLibrary, disableAssetGuards, disposeAssetLibrary, enableAssetGuards, explainAssetLoad, getAsset, getAssetGroupIds, getAssetIds, getAssetRefCount, loadAssetGroup, registerAssetDescriptor, registerAssetLoader, registerAssetManifest, releaseAsset, releaseAssetGroup, } 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,kBAAkB,EAClB,mBAAmB,EACnB,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,EACZ,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "name": "@flighthq/assets",
3
- "version": "0.3.0-next.906.07cea63",
3
+ "version": "0.3.0",
4
+ "author": "Joshua Granick and other contributors",
5
+ "license": "MIT",
4
6
  "repository": {
5
7
  "type": "git",
6
8
  "url": "https://github.com/flighthq/flight.git",
@@ -36,9 +38,10 @@
36
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
39
  },
38
40
  "dependencies": {
39
- "@flighthq/loader": "0.3.0-next.906.07cea63",
40
- "@flighthq/signals": "0.3.0-next.906.07cea63",
41
- "@flighthq/types": "0.3.0-next.906.07cea63"
41
+ "@flighthq/loader": "0.3.0",
42
+ "@flighthq/log": "0.3.0",
43
+ "@flighthq/signals": "0.3.0",
44
+ "@flighthq/types": "0.3.0"
42
45
  },
43
46
  "devDependencies": {
44
47
  "typescript": "^5.3.0"
@@ -7,6 +7,8 @@ import {
7
7
  createAssetLibrary,
8
8
  disposeAssetLibrary,
9
9
  getAsset,
10
+ getAssetGroupIds,
11
+ getAssetIds,
10
12
  getAssetRefCount,
11
13
  loadAssetGroup,
12
14
  registerAssetDescriptor,
@@ -14,6 +16,7 @@ import {
14
16
  registerAssetManifest,
15
17
  releaseAsset,
16
18
  releaseAssetGroup,
19
+ setAssetAcquireGuard,
17
20
  } from './assetLibrary';
18
21
 
19
22
  // A mock loader adapter: counts load calls, records disposed values, and holds each load open until
@@ -171,6 +174,34 @@ describe('getAsset', () => {
171
174
  });
172
175
  });
173
176
 
177
+ describe('getAssetGroupIds', () => {
178
+ it('returns a detached snapshot of catalog group membership', () => {
179
+ const library = createAssetLibrary();
180
+ registerAssetManifest(library, [
181
+ { groups: ['boot'], id: 'a', type: 'image', url: 'a.bin' },
182
+ { groups: ['boot', 'shared'], id: 'b', type: 'image', url: 'b.bin' },
183
+ ]);
184
+ const ids = getAssetGroupIds(library, 'boot') as string[];
185
+ expect(ids).toEqual(['a', 'b']);
186
+ ids.length = 0;
187
+ expect(getAssetGroupIds(library, 'boot')).toEqual(['a', 'b']);
188
+ expect(getAssetGroupIds(library, 'unknown')).toEqual([]);
189
+ });
190
+ });
191
+
192
+ describe('getAssetIds', () => {
193
+ it('enumerates held loading and resident entries, then drops freed ids', async () => {
194
+ const { library, mock } = libraryWith('hero');
195
+ const pending = acquireAsset(library, 'hero');
196
+ expect(getAssetIds(library)).toEqual(['hero']);
197
+ mock.flush();
198
+ await pending;
199
+ expect(getAssetIds(library)).toEqual(['hero']);
200
+ releaseAsset(library, 'hero');
201
+ expect(getAssetIds(library)).toEqual([]);
202
+ });
203
+ });
204
+
174
205
  describe('getAssetRefCount', () => {
175
206
  it('counts acquires and drops to zero when freed', async () => {
176
207
  const { library, mock } = libraryWith('hero');
@@ -438,3 +469,15 @@ describe('releaseAssetGroup', () => {
438
469
  expect(() => releaseAssetGroup(library, 'nope')).not.toThrow();
439
470
  });
440
471
  });
472
+
473
+ describe('setAssetAcquireGuard', () => {
474
+ it('installs and removes the per-library acquire failure hook', async () => {
475
+ const library = createAssetLibrary();
476
+ const statuses: string[] = [];
477
+ setAssetAcquireGuard(library, (_target, explanation) => statuses.push(explanation.status));
478
+ await expect(acquireAsset(library, 'missing')).rejects.toThrow('no descriptor');
479
+ setAssetAcquireGuard(library, null);
480
+ await expect(acquireAsset(library, 'still-missing')).rejects.toThrow('no descriptor');
481
+ expect(statuses).toEqual(['missing-descriptor']);
482
+ });
483
+ });
@@ -0,0 +1,73 @@
1
+ import { addLogSink, createMemoryLogSink, getMemoryLogSinkEntries, removeLogSink } from '@flighthq/log/contract';
2
+ import type { LogEntry } from '@flighthq/types/contract';
3
+
4
+ import { acquireAsset, createAssetLibrary, registerAssetDescriptor } from './assetLibrary';
5
+ import { areAssetGuardsEnabled, disableAssetGuards, enableAssetGuards } from './enableAssetGuards';
6
+
7
+ function captureLog(run: () => void): readonly LogEntry[] {
8
+ const sink = createMemoryLogSink(8);
9
+ addLogSink(sink.sink);
10
+ try {
11
+ run();
12
+ return getMemoryLogSinkEntries(sink);
13
+ } finally {
14
+ removeLogSink(sink.sink);
15
+ }
16
+ }
17
+
18
+ describe('areAssetGuardsEnabled', () => {
19
+ it('reports guard state per library', () => {
20
+ const guarded = createAssetLibrary();
21
+ const unguarded = createAssetLibrary();
22
+ enableAssetGuards(guarded);
23
+ expect(areAssetGuardsEnabled(guarded)).toBe(true);
24
+ expect(areAssetGuardsEnabled(unguarded)).toBe(false);
25
+ });
26
+ });
27
+
28
+ describe('disableAssetGuards', () => {
29
+ it('restores terse rejection without a warning', async () => {
30
+ const library = createAssetLibrary();
31
+ enableAssetGuards(library);
32
+ disableAssetGuards(library);
33
+ let rejection!: Promise<unknown>;
34
+ const entries = captureLog(() => {
35
+ rejection = acquireAsset(library, 'disabled');
36
+ });
37
+ await expect(rejection).rejects.toThrow('no descriptor');
38
+ expect(entries).toEqual([]);
39
+ });
40
+ });
41
+
42
+ describe('enableAssetGuards', () => {
43
+ it('warns once with descriptor registration guidance while preserving the rejection', async () => {
44
+ const library = createAssetLibrary();
45
+ enableAssetGuards(library);
46
+ let first!: Promise<unknown>;
47
+ let second!: Promise<unknown>;
48
+ const entries = captureLog(() => {
49
+ first = acquireAsset(library, 'guard-missing-descriptor');
50
+ second = acquireAsset(library, 'guard-missing-descriptor');
51
+ });
52
+ await expect(first).rejects.toThrow('no descriptor');
53
+ await expect(second).rejects.toThrow('no descriptor');
54
+ expect(entries).toHaveLength(1);
55
+ expect(entries[0]).toMatchObject({ channel: 'assets' });
56
+ expect(entries[0].data).toMatchObject({ id: 'guard-missing-descriptor', status: 'missing-descriptor' });
57
+ expect(String((entries[0].data as Record<string, unknown>).message)).toContain('registerAssetDescriptor');
58
+ });
59
+
60
+ it('identifies an unregistered loader type and names its fixing call', async () => {
61
+ const library = createAssetLibrary();
62
+ registerAssetDescriptor(library, { id: 'guard-missing-loader', type: 'acme.custom', url: 'asset.bin' });
63
+ enableAssetGuards(library);
64
+ let rejection!: Promise<unknown>;
65
+ const entries = captureLog(() => {
66
+ rejection = acquireAsset(library, 'guard-missing-loader');
67
+ });
68
+ await expect(rejection).rejects.toThrow('no loader');
69
+ expect(entries).toHaveLength(1);
70
+ expect(entries[0].data).toMatchObject({ status: 'missing-loader', type: 'acme.custom' });
71
+ expect(String((entries[0].data as Record<string, unknown>).message)).toContain('registerAssetLoader');
72
+ });
73
+ });
@@ -0,0 +1,64 @@
1
+ import type { AssetDescriptor } from '@flighthq/types/contract';
2
+
3
+ import {
4
+ acquireAsset,
5
+ createAssetLibrary,
6
+ registerAssetDescriptor,
7
+ registerAssetLoader,
8
+ releaseAsset,
9
+ } from './assetLibrary';
10
+ import { explainAssetLoad } from './explainAssetLoad';
11
+
12
+ describe('explainAssetLoad', () => {
13
+ it('distinguishes catalog, adapter, loading, resident, and freed states', async () => {
14
+ const library = createAssetLibrary();
15
+ expect(explainAssetLoad(library, 'hero')).toEqual({
16
+ id: 'hero',
17
+ refCount: 0,
18
+ status: 'missing-descriptor',
19
+ type: null,
20
+ });
21
+
22
+ const descriptor: AssetDescriptor = { id: 'hero', type: 'image', url: 'hero.bin' };
23
+ registerAssetDescriptor(library, descriptor);
24
+ expect(explainAssetLoad(library, 'hero')).toEqual({
25
+ id: 'hero',
26
+ refCount: 0,
27
+ status: 'missing-loader',
28
+ type: 'image',
29
+ });
30
+
31
+ let settle!: (value: { id: string }) => void;
32
+ registerAssetLoader(library, 'image', {
33
+ dispose(): void {},
34
+ load(): Promise<{ id: string }> {
35
+ return new Promise((resolve) => {
36
+ settle = resolve;
37
+ });
38
+ },
39
+ });
40
+ expect(explainAssetLoad(library, 'hero')).toMatchObject({ refCount: 0, status: 'never-acquired' });
41
+
42
+ const pending = acquireAsset(library, 'hero');
43
+ expect(explainAssetLoad(library, 'hero')).toMatchObject({ refCount: 1, status: 'loading' });
44
+ settle({ id: 'hero' });
45
+ await pending;
46
+ expect(explainAssetLoad(library, 'hero')).toMatchObject({ refCount: 1, status: 'resident' });
47
+
48
+ releaseAsset(library, 'hero');
49
+ expect(explainAssetLoad(library, 'hero')).toMatchObject({ refCount: 0, status: 'freed' });
50
+ });
51
+
52
+ it('treats a replacement descriptor as a new never-acquired catalog entry', async () => {
53
+ const library = createAssetLibrary();
54
+ registerAssetLoader(library, 'image', {
55
+ dispose(): void {},
56
+ load: async () => ({ id: 'hero' }),
57
+ });
58
+ registerAssetDescriptor(library, { id: 'hero', type: 'image', url: 'hero-a.bin' });
59
+ await acquireAsset(library, 'hero');
60
+ releaseAsset(library, 'hero');
61
+ registerAssetDescriptor(library, { id: 'hero', type: 'image', url: 'hero-b.bin' });
62
+ expect(explainAssetLoad(library, 'hero')).toMatchObject({ status: 'never-acquired' });
63
+ });
64
+ });