60 lines
2.2 KiB
TypeScript
60 lines
2.2 KiB
TypeScript
import type {
|
|
PackedResourceLoadOptions,
|
|
StreamLoadEntry,
|
|
} from "../loader/loader-stream.types.js";
|
|
import type { PackedResourceManager } from "./manager.js";
|
|
import type { PackedResourceLoadCallOptions } from "./manager.types.js";
|
|
import type { ManagerStreamedEntry } from "./manager-stream.types.js";
|
|
|
|
/**
|
|
* Implementation of `PackedResourceManager.loadStream`. Builds the
|
|
* loader-side options bundle, drives the loader's streaming iterator,
|
|
* and inserts each entry into the manager's cache + emits a `load`
|
|
* event before yielding to the caller.
|
|
*
|
|
* Kept as a free function so `manager.ts` stays under the 300-line
|
|
* hard cap (CLAUDE.md §3).
|
|
*/
|
|
export async function* managerLoadStream(
|
|
manager: PackedResourceManager,
|
|
opts: PackedResourceLoadCallOptions,
|
|
inputs: ReadonlyArray<string | StreamLoadEntry>
|
|
): AsyncIterableIterator<ManagerStreamedEntry> {
|
|
manager._checkAbortedExt(opts.signal);
|
|
const loadOpts = buildLoaderOptions(manager, opts);
|
|
for await (const entry of manager
|
|
.getLoader()
|
|
.loadStream(inputs, loadOpts)) {
|
|
manager._streamInsert(
|
|
entry.inputUrl,
|
|
opts.verifyKey,
|
|
entry.blob,
|
|
entry.url,
|
|
entry.metadata
|
|
);
|
|
yield {
|
|
url: entry.url,
|
|
inputUrl: entry.inputUrl,
|
|
metadata: entry.metadata,
|
|
};
|
|
}
|
|
}
|
|
|
|
function buildLoaderOptions(
|
|
manager: PackedResourceManager,
|
|
opts: PackedResourceLoadCallOptions
|
|
): PackedResourceLoadOptions {
|
|
const loadOpts: PackedResourceLoadOptions = {};
|
|
if (opts.verifyChecksum !== undefined)
|
|
loadOpts.verifyChecksum = opts.verifyChecksum;
|
|
if (opts.verifyKey !== undefined) loadOpts.verifyKey = opts.verifyKey;
|
|
if (opts.signal !== undefined) loadOpts.signal = opts.signal;
|
|
if (opts.retryConfig !== undefined) loadOpts.retryConfig = opts.retryConfig;
|
|
if (opts.allowedMimePrefixes !== undefined)
|
|
loadOpts.allowedMimePrefixes = opts.allowedMimePrefixes;
|
|
if (opts.keyring !== undefined) loadOpts.keyring = opts.keyring;
|
|
const resolver = manager._getDefaultResolver();
|
|
if (resolver !== undefined) loadOpts.messageResolver = resolver;
|
|
return loadOpts;
|
|
}
|