import type { ArtifactDescriptor, LoadContext, Loader } from '@forgeax/engine-types'; export interface PackArtifactInput { readonly descriptor: ArtifactDescriptor; readonly bytes: Uint8Array; } export interface PackLoaderInput { readonly guid: string; readonly kind: string; readonly payload: Record; readonly refs: readonly string[]; readonly streams?: Readonly>; readonly artifacts: Readonly>; } export interface PackLoader { readonly kind: string; readonly references?: 'eager' | 'deferred'; load(input: PackLoaderInput, ctx: LoadContext): unknown; } export type PackLoadResult = { readonly ok: true; readonly value: unknown; } | { readonly ok: false; readonly error: unknown; }; /** * Injectable `asset.kind` -> {@link Loader} table held by `AssetRegistry`. * * @example Wire + dispatch (host side) * ```ts * import { LoaderRegistry, wireDefaultLoaders } from '@forgeax/engine-assets-runtime'; * const loaders = new LoaderRegistry(); * wireDefaultLoaders(loaders); * const meshLoader = loaders.get('mesh'); // Loader | undefined * ``` */ export declare class LoaderRegistry { referencePolicy(kind: string): 'eager' | 'deferred'; private readonly loaders; private readonly packLoaders; /** * Register a loader for its `loader.kind`. Fail-fast on a malformed loader * (charter P3); rejects a repeated kind so the canonical owner cannot be replaced. * * @param loader the `{ kind, load }` object to register. * @throws TypeError when `loader.kind` is empty or `loader.load` is not a * function — a wire-time misconfiguration the host must fix. */ register(loader: Loader): () => void; registerPackLoader(loader: PackLoader): () => void; loadPack(input: PackLoaderInput, ctx: LoadContext): Promise; /** * Look up the loader registered for `kind`. Returns `undefined` when no * loader is wired — the `AssetRegistry` consumer maps that to a structured * `AssetError(code='loader-not-registered')` with the registered kinds in * `.detail` (charter P3). */ get(kind: string): Loader | undefined; /** * The kinds currently wired, in insertion order. Fed into the * `loader-not-registered` error `.detail.registeredKinds` so AI users see * exactly what is injectable. */ registeredKinds(): readonly string[]; } //# sourceMappingURL=loader-registry.d.ts.map