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 ): AsyncIterableIterator { 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; }