module-resolver.ts (775B)
1 // Resolve indexed immutable manifests and verify their transport and module pins. 2 import { fetchBundle, type Bundle } from './bundle.js'; 3 import { moduleHash, moduleIdentity } from './module-identity.js'; 4 import type { Release } from './packages.js'; 5 export async function fetchModule(base: URL, reference: unknown, releases: readonly Release[]): Promise<Bundle> { 6 const manifest = moduleHash(reference); 7 const release = releases.find(r => (r.manifest as string) === manifest); 8 if (!release) throw new Error(`Unknown module manifest ${manifest}`); 9 const bundle = await fetchBundle(new URL(`/_arboricx/bundle/hash/${release.hash}`, base), release.hash); 10 if (await moduleIdentity(bundle) !== manifest) throw new Error('Module manifest mismatch'); 11 return bundle; 12 }