@forgeax/engine-import 0.1.3 → 0.1.4

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.
Files changed (76) hide show
  1. package/README.md +6 -5
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/__tests__/owner-chain.integration.test.d.ts +2 -0
  4. package/dist/__tests__/owner-chain.integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/scriptable-pack-product.contract.test.d.ts +2 -0
  6. package/dist/__tests__/scriptable-pack-product.contract.test.d.ts.map +1 -0
  7. package/dist/browser.d.ts +5 -0
  8. package/dist/browser.d.ts.map +1 -0
  9. package/dist/browser.mjs +782 -0
  10. package/dist/browser.mjs.map +1 -0
  11. package/dist/build-production.d.ts +48 -0
  12. package/dist/build-production.d.ts.map +1 -0
  13. package/dist/catalog-importer-policy.d.ts +13 -0
  14. package/dist/catalog-importer-policy.d.ts.map +1 -0
  15. package/dist/catalog-inventory.d.ts +4 -0
  16. package/dist/catalog-inventory.d.ts.map +1 -0
  17. package/dist/import-product.d.ts +16 -25
  18. package/dist/import-product.d.ts.map +1 -1
  19. package/dist/import-runner.d.ts +6 -3
  20. package/dist/import-runner.d.ts.map +1 -1
  21. package/dist/importer-registry.d.ts +9 -1
  22. package/dist/importer-registry.d.ts.map +1 -1
  23. package/dist/index.d.ts +11 -2
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.mjs +1315 -155
  26. package/dist/index.mjs.map +1 -1
  27. package/dist/mesh-bin.d.ts +1 -1
  28. package/dist/mesh-bin.d.ts.map +1 -1
  29. package/dist/mesh-bin.mjs +182 -0
  30. package/dist/mesh-bin.mjs.map +1 -0
  31. package/dist/pack-projection.d.ts +5 -0
  32. package/dist/pack-projection.d.ts.map +1 -0
  33. package/dist/scriptable-pack-host.d.ts +64 -0
  34. package/dist/scriptable-pack-host.d.ts.map +1 -0
  35. package/dist/scriptable-pack-output-producers.d.ts +3 -2
  36. package/dist/scriptable-pack-output-producers.d.ts.map +1 -1
  37. package/dist/scriptable-pack-staged-snapshot.d.ts +1 -2
  38. package/dist/scriptable-pack-staged-snapshot.d.ts.map +1 -1
  39. package/dist/scriptable-pack.d.ts +6 -18
  40. package/dist/scriptable-pack.d.ts.map +1 -1
  41. package/dist/scriptable-source-package.d.ts +14 -0
  42. package/dist/scriptable-source-package.d.ts.map +1 -0
  43. package/dist/source-package-errors.d.ts +52 -0
  44. package/dist/source-package-errors.d.ts.map +1 -0
  45. package/dist/source-package-publication.d.ts +63 -0
  46. package/dist/source-package-publication.d.ts.map +1 -0
  47. package/dist/source-package.d.ts +60 -0
  48. package/dist/source-package.d.ts.map +1 -0
  49. package/package.json +13 -7
  50. package/src/__tests__/import-contract-migration.test.ts +33 -0
  51. package/src/__tests__/import-local-artifacts.test.ts +3 -1
  52. package/src/__tests__/owner-chain.integration.test.ts +37 -0
  53. package/src/__tests__/scriptable-pack-product.contract.test.ts +47 -0
  54. package/src/__tests__/scriptable-pack-production-producers.unit.test.ts +78 -19
  55. package/src/__tests__/scriptable-pack-staged-snapshot.unit.test.ts +52 -20
  56. package/src/browser.ts +14 -0
  57. package/src/build-production.ts +487 -0
  58. package/src/catalog-importer-policy.ts +58 -0
  59. package/src/catalog-inventory.ts +24 -0
  60. package/src/import-product.ts +37 -69
  61. package/src/import-runner.ts +36 -7
  62. package/src/importer-registry.ts +24 -1
  63. package/src/index.ts +79 -8
  64. package/src/mesh-bin.ts +2 -2
  65. package/src/pack-projection.ts +21 -0
  66. package/src/scriptable-pack-host.ts +461 -0
  67. package/src/scriptable-pack-output-producers.ts +48 -58
  68. package/src/scriptable-pack-staged-snapshot.ts +17 -6
  69. package/src/scriptable-pack.ts +37 -26
  70. package/src/scriptable-source-package.ts +88 -0
  71. package/src/source-package-errors.ts +201 -0
  72. package/src/source-package-publication.ts +295 -0
  73. package/src/source-package.ts +187 -0
  74. package/dist/__tests__/material-import-product.unit.test.d.ts +0 -2
  75. package/dist/__tests__/material-import-product.unit.test.d.ts.map +0 -1
  76. package/src/__tests__/material-import-product.unit.test.ts +0 -56
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/import-product.ts","../src/import-runner.ts","../src/importer-registry.ts","../src/mesh-bin.ts"],"names":["product","err","ok"],"mappings":"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","file":"browser.mjs","sourcesContent":["import type {\n ArtifactDescriptor,\n AssetRef,\n CookProduct,\n CookReceipt,\n ImportedArtifactBody,\n ImportedAsset,\n ImportProduct,\n Result,\n} from '@forgeax/engine-types';\nimport { err, ok } from '@forgeax/engine-types';\n\nexport interface TerminalImportProduct<P = unknown> extends ImportProduct<P> {\n readonly refs: readonly AssetRef[];\n readonly artifacts: Readonly<Record<string, ImportedArtifactBody>>;\n readonly receipts: readonly CookReceipt[];\n readonly diagnostics: readonly unknown[];\n readonly sourceRevision: string;\n readonly sourceKey?: string;\n}\n\nexport interface ImportAssetProduct<P = unknown> {\n readonly payload: P;\n readonly refs: readonly AssetRef[];\n readonly artifacts: Readonly<Record<string, ImportedArtifactBody>>;\n}\n\nexport interface ImportProductContractError {\n readonly code: 'import-product-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: { readonly field: string };\n}\n\nfunction invalidProduct(field: string): Result<never, ImportProductContractError> {\n return err({\n code: 'import-product-invalid',\n expected: 'a complete terminal import product with source identity',\n hint: 'preserve refs, artifacts, receipts, diagnostics, and source revision at the product boundary',\n detail: { field },\n });\n}\n\nexport function createImportProduct<P = unknown>(\n input: TerminalImportProduct<P>,\n): Result<TerminalImportProduct<P>, ImportProductContractError> {\n if (!Array.isArray(input.assets)) return invalidProduct('assets');\n if (!Array.isArray(input.sourceDependencies)) return invalidProduct('sourceDependencies');\n if (input.sourceRevision.trim().length === 0) return invalidProduct('sourceRevision');\n if (!Array.isArray(input.refs)) return invalidProduct('refs');\n if (input.artifacts === null || typeof input.artifacts !== 'object') {\n return invalidProduct('artifacts');\n }\n if (!Array.isArray(input.receipts)) return invalidProduct('receipts');\n if (!Array.isArray(input.diagnostics)) return invalidProduct('diagnostics');\n return ok({ ...input });\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (subtle === undefined) throw new Error('Web Crypto API is required for importer digests');\n const owned = new Uint8Array(bytes.byteLength);\n owned.set(bytes);\n const digest = await subtle.digest('SHA-256', owned.buffer);\n return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nasync function artifactDigest(bytes: Uint8Array): Promise<string> {\n return `sha256:${await sha256Hex(bytes)}`;\n}\n\nfunction concatBytes(chunks: readonly (Uint8Array | string)[]): Uint8Array {\n const encoder = new TextEncoder();\n const encoded = chunks.map((chunk) =>\n typeof chunk === 'string' ? encoder.encode(chunk) : chunk,\n );\n const totalLength = encoded.reduce((total, chunk) => total + chunk.byteLength, 0);\n const bytes = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of encoded) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n\nasync function productDigest(\n asset: ImportedAsset<unknown>,\n artifacts: Readonly<Record<string, ArtifactDescriptor>>,\n): Promise<string> {\n const chunks: (Uint8Array | string)[] = [\n JSON.stringify(projectImportedAssetPayload(asset)),\n JSON.stringify(asset.refs.map((ref) => ref.guid)),\n JSON.stringify(artifacts),\n ];\n for (const [key, artifact] of Object.entries(asset.artifacts).sort(([left], [right]) =>\n left.localeCompare(right),\n )) {\n chunks.push(key, artifact.bytes);\n }\n return `sha256:${await sha256Hex(concatBytes(chunks))}`;\n}\n\nasync function artifactDescriptors(\n artifacts: Readonly<Record<string, ImportedArtifactBody>>,\n): Promise<Readonly<Record<string, ArtifactDescriptor>>> {\n const entries: [string, ArtifactDescriptor][] = [];\n for (const [path, artifact] of Object.entries(artifacts)) {\n entries.push([\n path,\n {\n path,\n mediaType: artifact.mediaType,\n byteLength: artifact.bytes.byteLength,\n integrity: { algorithm: 'sha256' as const, digest: await artifactDigest(artifact.bytes) },\n ...(artifact.assetCodec === undefined ? {} : { assetCodec: artifact.assetCodec }),\n },\n ]);\n }\n return Object.fromEntries(entries);\n}\n\nexport function projectImportedAssetPayload(\n asset: ImportedAsset<unknown>,\n): Record<string, unknown> {\n const payload = asset.payload as Record<string, unknown>;\n if (Object.keys(asset.artifacts).length === 0) return payload;\n if (asset.kind === 'mesh') return { kind: 'mesh' };\n if (asset.kind === 'texture' || asset.kind === 'equirect') {\n const { data: _runtimeBytes, ...metadata } = payload;\n return metadata;\n }\n return payload;\n}\n\n/** Convert each importer asset into the shared completed producer product. */\nexport function finalizeImportProducts(\n product: ImportProduct<unknown>,\n inputFingerprint: string,\n): Promise<readonly CookProduct[]> {\n return (async () => {\n const products: CookProduct[] = [];\n for (const asset of product.assets) {\n const artifacts = await artifactDescriptors(asset.artifacts);\n const digest = await productDigest(asset, artifacts);\n products.push({\n guid: asset.guid,\n payload: asset.payload,\n refs: asset.refs.map((ref) => ref.guid),\n artifacts,\n digest,\n receipt: {\n guid: asset.guid,\n origin: 'sourceMeta' as const,\n status: 'succeeded' as const,\n inputFingerprint,\n outputDigest: digest,\n },\n });\n }\n return products;\n })();\n}\n","// @forgeax/engine-import - import runner (feat-20260603-asset-import-loader-injection M2 / w15).\n//\n// The build-time orchestration that turns one parsed `*.meta.json` sidecar\n// into the logical Pack v2 package. It is the consumer side of\n// the ImporterRegistry: it reads `meta.importer`, looks up the registered\n// Importer, calls `importer.import(ctx)`, enforces the GUID import-stable iron\n// law against the produced asset set, then folds the produced PODs into\n// logical `assets[]` rows. Artifact bytes stay with their owning asset;\n// final paths and integrity belong to M3.\n//\n// Error model (charter P3, ImportErrorCode 5 closed members):\n// - importer-not-registered : registry.get(meta.importer) === undefined\n// - source-read-failed : ctx.readSource() failed\n// - import-internal-error : importer conversion or CookProduct finalization threw (never bare-throws out)\n// - guid-mismatch : produced a GUID not declared in subAssets[]\n// - import-produced-no-assets: produced [], or omitted a declared GUID\n//\n// The reserved key `importer: 'shader'` is skipped (plan-strategy D-4 /\n// research Finding 10): shader sidecars are consumed by the orthogonal\n// `@forgeax/engine-vite-plugin-shader` transform pipeline, never by asset\n// import. `runImport` returns `{ ok: true, value: { skipped: 'shader' } }`\n// for them so the caller can account for the sidecar without writing a DDC.\n\nimport type {\n AssetRelation,\n CatalogDiagnostic,\n CookProduct,\n ImportContext,\n ImportDiagnostic,\n ImportError as ImportErrorType,\n ImportedArtifactBody,\n ImportProduct,\n ProviderProvenance,\n ResourceRevision,\n SourceOverrideMap,\n} from '@forgeax/engine-types';\nimport {\n canonicalizeSourceOverrides,\n IMPORT_ERROR_HINTS,\n ImportError,\n validateSourceOverrideMap,\n} from '@forgeax/engine-types';\nimport {\n createImportProduct,\n finalizeImportProducts,\n type TerminalImportProduct,\n} from './import-product.js';\nimport type { ImporterRegistry } from './importer-registry.js';\n\n/** Reserved `meta.importer` key consumed by vite-plugin-shader, not the import runner. */\nexport const SHADER_RESERVED_IMPORTER_KEY = 'shader';\n\n/**\n * Classify an importer throw as a build-time module-LOAD failure (the importer\n * module / native addon could not be imported) vs a conversion THROW (the\n * loaded importer ran and threw). feat-20260629 D-5: both keep the\n * `import-internal-error` code, but a load failure surfaces `.detail.loadError`\n * so AI users distinguish \"my importer is not loadable / not built\" from \"my\n * importer ran and crashed\" without parsing `.message`.\n *\n * Node signals a module-load failure via `err.code` (`MODULE_NOT_FOUND` for\n * CJS `require`, `ERR_MODULE_NOT_FOUND` for ESM `import()`, `ERR_DLOPEN_FAILED`\n * for a broken native `.node` addon) or a recognizable message. Native FBX-style\n * bindings throw a plain Error whose message names the missing addon.\n */\nfunction isModuleLoadFailure(e: unknown): boolean {\n if (!(e instanceof Error)) return false;\n const code = (e as { code?: unknown }).code;\n if (\n code === 'MODULE_NOT_FOUND' ||\n code === 'ERR_MODULE_NOT_FOUND' ||\n code === 'ERR_DLOPEN_FAILED'\n ) {\n return true;\n }\n const msg = e.message;\n return (\n msg.includes('Cannot find module') || msg.includes('native addon') || msg.includes('.node')\n );\n}\n\n/**\n * bug-20260610-pack-typed-array-roundtrip: normalise a value tree so every\n * typed-array becomes a plain `number[]`. The DDC pack is serialised via\n * `JSON.stringify`; left as-is, a `Float32Array` round-trips to an indexed\n * object (`{ \"0\": v0, ... }`) and the runtime mesh / animation-clip loaders\n * reject it with `asset-parse-failed`. Walking the tree once at the importer\n * boundary keeps every downstream consumer (build emitFile, dev startMetaImport,\n * and any future pack-cache tool) aligned on the same on-disk shape.\n */\nexport function normaliseForPack(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (\n value instanceof Float32Array ||\n value instanceof Float64Array ||\n value instanceof Uint8Array ||\n value instanceof Uint16Array ||\n value instanceof Uint32Array ||\n value instanceof Int8Array ||\n value instanceof Int16Array ||\n value instanceof Int32Array\n ) {\n return Array.from(value as ArrayLike<number>);\n }\n if (Array.isArray(value)) {\n return value.map(normaliseForPack);\n }\n if (typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = normaliseForPack(v);\n }\n return out;\n }\n return value;\n}\n\n/** Result envelope returned by {@link runImport} (mirrors the engine `Result<T,E>` shape). */\nexport type RunImportResult =\n | { readonly ok: true; readonly value: RunImportOk }\n | { readonly ok: false; readonly error: ImportErrorType };\n\nexport type RunImportProductResult =\n | {\n readonly ok: true;\n readonly value:\n | { readonly skipped: 'shader' }\n | {\n readonly product: TerminalImportProduct;\n readonly cookProducts: readonly CookProduct[];\n };\n }\n | { readonly ok: false; readonly error: ImportErrorType };\n\n/**\n * Success payload. `skipped: 'shader'` marks a reserved shader sidecar the\n * runner intentionally did not import (no DDC written); otherwise `pack` is the\n * logical Pack v2 document. Artifact bytes remain owned by each asset.\n */\nexport type RunImportOk =\n | { readonly skipped: 'shader' }\n | {\n readonly product: TerminalImportProduct;\n readonly cookProducts: readonly CookProduct[];\n readonly pack: DdcPack;\n };\n\n/** The logical Pack v2 document consumed by the shared finalizer. */\nexport interface DdcPack {\n readonly schemaVersion: '2.0.0';\n readonly kind: 'internal-text-package';\n readonly packageId?: string;\n readonly provenance?: ProviderProvenance;\n readonly revision?: ResourceRevision;\n readonly diagnostics?: readonly CatalogDiagnostic[];\n readonly assets: ReadonlyArray<{\n readonly guid: string;\n readonly kind: string;\n readonly name?: string;\n readonly sourceKey?: string;\n readonly sourceIndex?: number;\n readonly relations?: readonly AssetRelation[];\n readonly payload: Record<string, unknown>;\n readonly refs: readonly string[];\n readonly artifacts: Readonly<Record<string, ImportedArtifactBody>>;\n }>;\n}\n\n/** Minimal parsed-meta shape the runner reads (a superset of the sidecar). */\nexport interface RunImportMeta {\n readonly importer: string;\n readonly source: string;\n /** Scanner-owned source declaration revision; avoids reopening validated Meta. */\n readonly sourceRevision?: string;\n readonly packageId?: string;\n readonly provenance?: ProviderProvenance;\n readonly revision?: ResourceRevision;\n readonly diagnostics?: readonly CatalogDiagnostic[];\n readonly importSettings?: Readonly<Record<string, unknown>>;\n readonly sourceOverrides?: SourceOverrideMap;\n /** Skip the normalized DDC pack when a downstream finalizer owns publication. */\n readonly buildPack?: boolean;\n readonly subAssets: ReadonlyArray<{\n readonly guid: string;\n readonly sourceIndex: number;\n readonly kind: string;\n readonly sourceKey?: string;\n readonly relations?: readonly AssetRelation[];\n }>;\n}\n\nfunction declarationFields(\n declaration: RunImportMeta['subAssets'][number] | undefined,\n): Pick<DdcPack['assets'][number], 'sourceKey' | 'sourceIndex' | 'relations'> {\n if (declaration === undefined) return {};\n return {\n sourceIndex: declaration.sourceIndex,\n ...(declaration.sourceKey !== undefined ? { sourceKey: declaration.sourceKey } : {}),\n ...(declaration.relations !== undefined ? { relations: declaration.relations } : {}),\n };\n}\n\n/** Filesystem + decode capabilities the runner needs to drive an importer.\n *\n * `readSource` reads the primary source bytes addressed by `meta.source`.\n * `readSibling` reads a co-located file (e.g. an external `.bin` / `.png`\n * referenced from a `.gltf` via relative URI). Optional today so existing\n * callers stay green; importers that depend on it (gltfImporter texture\n * external-uri path) gate on its presence and surface a structured\n * `'source-read-failed'` ImportError when the host did not wire it.\n *\n * `decodeImage` is the M3 D-1 seam: gltfImporter funnels all three image\n * sources (bufferView / data-uri / external-uri) through one callback so\n * `@forgeax/engine-gltf` carries no `from '@forgeax/engine-image'` edge\n * (the grep gate `packages/gltf/scripts/check-no-image-import.mjs` enforces\n * this). The concrete decode lives in `@forgeax/engine-image/image-importer`;\n * the build-time orchestrator binds the callback when constructing this\n * `ImportRunnerFs`.\n */\nexport interface ImportRunnerFs {\n readSource(\n sourcePath: string,\n ): Promise<\n | { readonly ok: true; readonly value: Uint8Array }\n | { readonly ok: false; readonly error: unknown }\n >;\n readSibling?(\n sourcePath: string,\n uri: string,\n ): Promise<\n | { readonly ok: true; readonly value: Uint8Array }\n | { readonly ok: false; readonly error: unknown }\n >;\n decodeImage?: ImportContext['decodeImage'];\n}\n\n/**\n * Resolve an `images[].uri` (or any sibling reference) against the directory\n * of `meta.source`. Pure path arithmetic — no I/O. Used as the default\n * `readSibling` fallback when the host did not wire one explicitly.\n */\nfunction joinSiblingPath(sourcePath: string, uri: string): string {\n const slash = Math.max(sourcePath.lastIndexOf('/'), sourcePath.lastIndexOf('\\\\'));\n const dir = slash >= 0 ? sourcePath.slice(0, slash + 1) : '';\n return `${dir}${uri}`;\n}\n\nfunction normalizeDependencyPath(path: string): string {\n const slash = path.replaceAll('\\\\', '/');\n const parts: string[] = [];\n for (const part of slash.split('/')) {\n if (part === '' || part === '.') continue;\n if (part === '..') {\n parts.pop();\n } else {\n parts.push(part);\n }\n }\n return parts.join('/');\n}\n\nfunction errResult(error: ImportErrorType): {\n readonly ok: false;\n readonly error: ImportErrorType;\n} {\n return { ok: false, error };\n}\n\nfunction sourceKeyActual(value: unknown): string {\n if (typeof value === 'string') return JSON.stringify(value);\n if (value === undefined) return 'missing';\n return typeof value;\n}\n\ntype SourceReaderErrorMetadata = {\n readonly code?: unknown;\n readonly name?: unknown;\n readonly message?: unknown;\n readonly detail?: unknown;\n};\n\nfunction sourceReadFailureReason(error: unknown): string {\n if (typeof error !== 'object' || error === null) {\n return typeof error === 'string' ? error : 'unknown';\n }\n const metadata = error as SourceReaderErrorMetadata;\n const token =\n typeof metadata.code === 'string'\n ? metadata.code\n : typeof metadata.name === 'string'\n ? metadata.name\n : undefined;\n switch (token) {\n case 'ENOENT':\n case 'NotFoundError':\n return 'not-found';\n case 'EACCES':\n case 'EPERM':\n case 'PermissionDeniedError':\n case 'NotAllowedError':\n case 'SecurityError':\n return 'permission-denied';\n case 'EAGAIN':\n case 'EBUSY':\n case 'EINTR':\n case 'ECONNABORTED':\n case 'ECONNREFUSED':\n case 'ECONNRESET':\n case 'EHOSTUNREACH':\n case 'ENETDOWN':\n case 'ENETUNREACH':\n case 'ETIMEDOUT':\n case 'EPIPE':\n case 'ABORT_ERR':\n case 'AbortError':\n case 'TimeoutError':\n return 'transient';\n default:\n if (typeof metadata.detail === 'object' && metadata.detail !== null) {\n const reason = (metadata.detail as { readonly reason?: unknown }).reason;\n if (typeof reason === 'string' && reason.length > 0) return reason;\n }\n if (typeof metadata.message === 'string' && metadata.message.length > 0) {\n return metadata.message;\n }\n return 'unknown';\n }\n}\n\n/**\n * Validate producer identity before source work or DDC product finalization.\n * Multi-output declarations cannot recover identity from sourceIndex, array\n * order, or a path, so every row must carry one unique semantic sourceKey.\n * Single-output declarations may omit the key for legacy source compatibility;\n * producers that expose a semantic output should still declare it so Catalog\n * evidence remains stable when the output later gains siblings.\n */\nfunction validateOutputSourceKeys(meta: RunImportMeta): ImportErrorType | undefined {\n if (meta.subAssets.length <= 1) return undefined;\n\n const diagnostics: ImportDiagnostic[] = [];\n const seen = new Map<string, number>();\n for (const [index, declaration] of meta.subAssets.entries()) {\n const sourcePath = `${meta.source}#subAssets[${index}]`;\n const sourceRange = { start: 0, end: 0, line: 1, column: 1 };\n const sourceKey = declaration.sourceKey;\n if (typeof sourceKey !== 'string' || sourceKey.trim().length === 0) {\n diagnostics.push({\n code: 'source-key-required',\n severity: 'error',\n sourcePath,\n sourceRange,\n rule: 'import-output-source-key',\n expected: 'a non-empty producer-owned sourceKey',\n actual: sourceKeyActual(sourceKey),\n hint: 'publish a stable semantic sourceKey; sourceIndex is only a locator',\n });\n continue;\n }\n const prior = seen.get(sourceKey);\n if (prior !== undefined) {\n diagnostics.push({\n code: 'duplicate-source-key',\n severity: 'error',\n sourcePath,\n sourceRange,\n rule: 'import-output-source-key-unique',\n expected: 'sourceKey to be unique within one imported package',\n actual: `${JSON.stringify(sourceKey)} duplicates subAssets[${prior}]`,\n hint: 'rename the duplicate semantic output before writing Meta',\n });\n continue;\n }\n seen.set(sourceKey, index);\n }\n if (diagnostics.length === 0) return undefined;\n return new ImportError({\n code: 'source-validation-failed',\n expected: 'every writable imported output to declare a unique non-empty sourceKey',\n hint: IMPORT_ERROR_HINTS['source-validation-failed'],\n detail: { diagnostics },\n });\n}\n\n/**\n * Run the importer for one parsed meta sidecar and produce its DDC.\n *\n * @param meta the parsed `*.meta.json` (importer + source + subAssets[]).\n * @param registry the wired {@link ImporterRegistry}.\n * @param fs the source-read capability (injected so the runner stays\n * testable without touching real disk).\n */\nexport function runImport(\n meta: RunImportMeta & { readonly buildPack: false },\n registry: ImporterRegistry,\n fs: ImportRunnerFs,\n): Promise<RunImportProductResult>;\nexport function runImport(\n meta: RunImportMeta,\n registry: ImporterRegistry,\n fs: ImportRunnerFs,\n): Promise<RunImportResult>;\nexport async function runImport(\n meta: RunImportMeta,\n registry: ImporterRegistry,\n fs: ImportRunnerFs,\n): Promise<RunImportResult | RunImportProductResult> {\n // Reserved shader key: orthogonal vite-plugin-shader pipeline owns these.\n if (meta.importer === SHADER_RESERVED_IMPORTER_KEY) {\n return { ok: true, value: { skipped: 'shader' } };\n }\n\n const sourceKeyError = validateOutputSourceKeys(meta);\n if (sourceKeyError !== undefined) return errResult(sourceKeyError);\n\n const declaredSourceKeys = meta.subAssets.flatMap((subAsset) =>\n subAsset.sourceKey === undefined ? [] : [subAsset.sourceKey],\n );\n const sourceOverridesResult = validateSourceOverrideMap(meta.sourceOverrides, declaredSourceKeys);\n if (!sourceOverridesResult.ok) {\n const error = new ImportError({\n code: sourceOverridesResult.error.code,\n expected: sourceOverridesResult.error.expected,\n hint: IMPORT_ERROR_HINTS[sourceOverridesResult.error.code],\n detail: {\n sourceKey: sourceOverridesResult.error.actual,\n declaredSourceKeys,\n reason: sourceOverridesResult.error.hint,\n },\n });\n if (sourceOverridesResult.error.actual !== undefined) {\n Object.assign(error, { actual: sourceOverridesResult.error.actual });\n }\n return errResult(error);\n }\n\n const importer = registry.get(meta.importer);\n if (importer === undefined) {\n return errResult(\n new ImportError({\n code: 'importer-not-registered',\n expected: `an importer registered for meta.importer \"${meta.importer}\"`,\n hint: IMPORT_ERROR_HINTS['importer-not-registered'],\n detail: {\n importer: meta.importer,\n registeredImporters: registry.registeredImporters(),\n },\n }),\n );\n }\n\n const dependencies = new Set<string>();\n const readSource = async (sourcePath: string) => {\n dependencies.add(normalizeDependencyPath(sourcePath));\n try {\n return await fs.readSource(sourcePath);\n } catch (error) {\n return { ok: false as const, error };\n }\n };\n\n const readSibling = async (\n uri: string,\n ): Promise<\n | { readonly ok: true; readonly value: Uint8Array }\n | { readonly ok: false; readonly error: ImportErrorType }\n > => {\n let inner:\n | { readonly ok: true; readonly value: Uint8Array }\n | { readonly ok: false; readonly error: unknown }\n | { readonly ok: false; readonly error: ImportErrorType };\n try {\n if (fs.readSibling) {\n dependencies.add(normalizeDependencyPath(joinSiblingPath(meta.source, uri)));\n inner = await fs.readSibling(meta.source, uri);\n } else {\n inner = await readSource(joinSiblingPath(meta.source, uri));\n }\n } catch (error) {\n inner = { ok: false, error };\n }\n if (inner.ok) {\n return { ok: true, value: inner.value };\n }\n return {\n ok: false,\n error: new ImportError({\n code: 'source-read-failed',\n expected: `readable sibling file \"${uri}\" co-located with meta.source \"${meta.source}\"`,\n hint: IMPORT_ERROR_HINTS['source-read-failed'],\n detail: {\n source: uri,\n reason: sourceReadFailureReason(inner.error),\n },\n }),\n };\n };\n\n const decodeImage: ImportContext['decodeImage'] =\n fs.decodeImage ??\n (async () => {\n throw new Error(\n 'ImportRunnerFs.decodeImage was not provided; gltfImporter texture extraction requires the host (vite-plugin-pack / cli-gltf / test) to bind decodeImage when constructing the ImportRunnerFs',\n );\n });\n\n const canonicalSourceOverrides = canonicalizeSourceOverrides(sourceOverridesResult.value);\n const ctx: ImportContext = {\n source: meta.source,\n readSource: () => readSource(meta.source),\n readSibling,\n decodeImage,\n subAssets: meta.subAssets.map(({ guid, sourceIndex, sourceKey, kind }) => ({\n guid,\n sourceIndex,\n ...(sourceKey === undefined ? {} : { sourceKey }),\n kind,\n })),\n importSettings: meta.importSettings ?? {},\n ...(canonicalSourceOverrides === undefined\n ? {}\n : { sourceOverrides: canonicalSourceOverrides }),\n };\n\n // Probe the source once up-front so a missing/unreadable source surfaces as\n // source-read-failed rather than as an opaque import-internal-error inside\n // the importer (charter P3 precise attribution).\n const sourceProbe = await readSource(meta.source);\n if (!sourceProbe.ok) {\n return errResult(\n new ImportError({\n code: 'source-read-failed',\n expected: `readable source file at meta.source \"${meta.source}\"`,\n hint: IMPORT_ERROR_HINTS['source-read-failed'],\n detail: {\n source: meta.source,\n reason: sourceReadFailureReason(sourceProbe.error),\n },\n }),\n );\n }\n\n let product: ImportProduct;\n try {\n const imported = (await importer.import(ctx)) as\n | { readonly ok: boolean; readonly value?: ImportProduct; readonly error?: ImportErrorType }\n | undefined;\n if (\n imported === undefined ||\n imported === null ||\n typeof imported !== 'object' ||\n !('ok' in imported)\n ) {\n throw new Error(\n 'importer returned a legacy or malformed result; expected ImportResult<ImportProduct>',\n );\n } else {\n if (!imported.ok) {\n if (imported.error === undefined)\n throw new Error('importer returned an invalid failure result');\n if (imported.error instanceof ImportError) return errResult(imported.error);\n return errResult(\n new ImportError({\n code: 'import-internal-error',\n expected: `importer \"${meta.importer}\" to return a structured ImportError`,\n hint: IMPORT_ERROR_HINTS['import-internal-error'],\n detail: { reason: String(imported.error) },\n }),\n );\n }\n if (imported.value === undefined)\n throw new Error('importer returned an invalid success result');\n const value = imported.value;\n if (\n value === undefined ||\n !Array.isArray(value.assets) ||\n !Array.isArray(value.sourceDependencies) ||\n 'artifacts' in value\n ) {\n throw new Error('importer returned an invalid ImportProduct');\n }\n for (const asset of value.assets) {\n if (\n asset === null ||\n typeof asset !== 'object' ||\n !('artifacts' in asset) ||\n asset.artifacts === null ||\n typeof asset.artifacts !== 'object' ||\n Array.isArray(asset.artifacts)\n ) {\n throw new Error('importer returned an asset without local artifacts');\n }\n }\n product = value;\n }\n } catch (e) {\n if (e instanceof ImportError) return errResult(e);\n const message = e instanceof Error ? e.message : String(e);\n // D-5: a module-LOAD failure rides `.detail.loadError`; a conversion THROW\n // rides `.detail.reason`. Same `import-internal-error` code (no new closed\n // union member); AI users branch on the `.detail` shape.\n if (isModuleLoadFailure(e)) {\n return errResult(\n new ImportError({\n code: 'import-internal-error',\n expected: `importer module \"${meta.importer}\" to load (module + native addon present)`,\n hint: IMPORT_ERROR_HINTS['import-internal-error'],\n detail: { loadError: message },\n }),\n );\n }\n return errResult(\n new ImportError({\n code: 'import-internal-error',\n expected: `importer \"${meta.importer}\" to convert the source without throwing`,\n hint: IMPORT_ERROR_HINTS['import-internal-error'],\n detail: { reason: message },\n }),\n );\n }\n\n const produced = product.assets;\n\n // GUID import-stable iron law: the produced GUID set must be a superset of\n // the declared set, and must not contain any GUID the meta never declared.\n const declared = new Set(meta.subAssets.map((s) => s.guid));\n const producedGuids = new Set(produced.map((a) => a.guid));\n\n const unexpectedGuids = [...producedGuids].filter((g) => !declared.has(g));\n if (unexpectedGuids.length > 0) {\n return errResult(\n new ImportError({\n code: 'guid-mismatch',\n expected: 'every produced GUID to be declared in meta.subAssets[]',\n hint: IMPORT_ERROR_HINTS['guid-mismatch'],\n detail: { unexpectedGuids },\n }),\n );\n }\n\n const missingGuids = [...declared].filter((g) => !producedGuids.has(g));\n if (produced.length === 0 || missingGuids.length > 0) {\n return errResult(\n new ImportError({\n code: 'import-produced-no-assets',\n expected:\n produced.length === 0\n ? 'the importer to produce at least one ImportedAsset'\n : 'the produced GUID set to be a superset of meta.subAssets[]',\n hint: IMPORT_ERROR_HINTS['import-produced-no-assets'],\n detail: { missingGuids },\n }),\n );\n }\n\n const declarations = new Map(\n meta.subAssets.map((declaration) => [declaration.guid, declaration]),\n );\n const productWithDependencies = {\n ...product,\n sourceDependencies: [...dependencies],\n };\n const inputFingerprint = `source:${[...dependencies].sort().join('|')}`;\n let cookProducts: readonly CookProduct[];\n try {\n cookProducts = await finalizeImportProducts(productWithDependencies, inputFingerprint);\n } catch (e) {\n const reason = e instanceof Error ? e.message : String(e);\n return errResult(\n new ImportError({\n code: 'import-internal-error',\n expected: `importer \"${meta.importer}\" finalization to produce complete CookProduct digests`,\n hint: IMPORT_ERROR_HINTS['import-internal-error'],\n detail: { reason: `finalization/digest: ${reason}` },\n }),\n );\n }\n const terminalProduct = createImportProduct({\n ...productWithDependencies,\n refs: productWithDependencies.assets.flatMap((asset) => asset.refs),\n artifacts: Object.fromEntries(\n productWithDependencies.assets.flatMap((asset) =>\n Object.entries(asset.artifacts).map(([key, artifact]) => [\n `${asset.guid}/${key}`,\n artifact,\n ]),\n ),\n ),\n receipts: cookProducts.map((product) => product.receipt),\n diagnostics: meta.diagnostics ?? [],\n sourceRevision: inputFingerprint,\n });\n if (!terminalProduct.ok) {\n return errResult(\n new ImportError({\n code: 'import-internal-error',\n expected: 'the import product to retain complete terminal producer facts',\n hint: 'preserve source identity and producer evidence when returning the import product',\n detail: { reason: terminalProduct.error.detail.field },\n }),\n );\n }\n if (meta.buildPack === false) {\n return {\n ok: true,\n value: { product: terminalProduct.value, cookProducts },\n };\n }\n\n const assets = produced.map((a) => {\n const outputFields = declarationFields(declarations.get(a.guid));\n return {\n guid: a.guid,\n kind: a.kind,\n ...outputFields,\n ...(a.name !== undefined ? { name: a.name } : {}),\n // bug-20260610: mesh / scene / animation-clip payloads carry Float32Array\n // / Uint16Array / Uint32Array fields. JSON.stringify on a typed array\n // serialises to `{ \"0\": v0, \"1\": v1, ... }` (a plain object), which the\n // runtime mesh / animation loaders reject (`vertexData instanceof\n // Float32Array` and `Array.isArray(vertexData)` both fail). Convert\n // every typed-array field to a plain Array here so the pack is JSON-\n // roundtrip safe end-to-end. This matches the convention every\n // existing pack-fixture test uses (`vertices: Array.from(...)`).\n payload: normaliseForPack(a.payload as unknown) as Record<string, unknown>,\n refs: a.refs.map((r) => r.guid),\n artifacts: a.artifacts,\n };\n });\n\n const pack: DdcPack = {\n schemaVersion: '2.0.0',\n kind: 'internal-text-package',\n ...(meta.packageId !== undefined ? { packageId: meta.packageId } : {}),\n ...(meta.provenance !== undefined ? { provenance: meta.provenance } : {}),\n ...(meta.revision !== undefined ? { revision: meta.revision } : {}),\n ...(meta.diagnostics !== undefined ? { diagnostics: meta.diagnostics } : {}),\n assets,\n };\n\n return {\n ok: true,\n value: {\n product: terminalProduct.value,\n cookProducts,\n pack,\n },\n };\n}\n","// @forgeax/engine-import - ImporterRegistry (feat-20260603-asset-import-loader-injection M2 / w14).\n//\n// The build-time twin of the runtime LoaderRegistry\n// (packages/runtime/src/loader-registry.ts): an injectable table that maps a\n// `meta.importer` string key -> an `Importer` (the contract SSOT lives in\n// `@forgeax/engine-types`). The import runner holds one of these and dispatches\n// on `meta.importer` through `get(key)` instead of a hardcoded\n// `if (importer === ...)` chain (plan-strategy D-1).\n//\n// Shape mirrors the runtime LoaderRegistry + Console `Registry`\n// (packages/console/src/registry.ts) register/lookup pattern (research\n// Finding 8). The injected unit is an **object** `{ key, import }`, not a bare\n// function, so a \"one importer key -> one Importer\" dispatch table is the\n// natural shape.\n//\n// Fail-fast semantics (charter P3): `register` throws on a malformed importer\n// (empty key or non-function `import`) at wire time, so a misconfigured host\n// surfaces immediately rather than at the first import run. `register` is\n// idempotent on a repeated key (last write wins, no throw) so re-wiring a\n// registry across build invocations is safe.\n\nimport type { Importer, ImporterCapabilities, ImportSubAsset } from '@forgeax/engine-types';\n\n/**\n * Injectable `meta.importer` -> {@link Importer} table held by the import\n * runner.\n *\n * @example Wire + dispatch (build tooling side)\n * ```ts\n * import { ImporterRegistry } from '@forgeax/engine-import';\n * import { gltfImporter } from '@forgeax/engine-gltf';\n * const importers = new ImporterRegistry();\n * importers.register(gltfImporter);\n * const gltf = importers.get('gltf'); // Importer | undefined\n * ```\n */\nexport class ImporterRegistry {\n private readonly importers = new Map<string, Importer>();\n\n /**\n * Register an importer for its `importer.key`. Fail-fast on a malformed\n * importer (charter P3); idempotent on a repeated key (last write wins).\n *\n * @param importer the `{ key, import }` object to register.\n * @throws TypeError when `importer.key` is empty or `importer.import` is not\n * a function - a wire-time misconfiguration the host must fix.\n */\n register(importer: Importer): void {\n if (typeof importer.key !== 'string' || importer.key.length === 0) {\n throw new TypeError(\n `ImporterRegistry.register: importer.key must be a non-empty string (got ${JSON.stringify(importer.key)})`,\n );\n }\n if (typeof importer.import !== 'function') {\n throw new TypeError(\n `ImporterRegistry.register: importer.import must be a function for key \"${importer.key}\"`,\n );\n }\n this.importers.set(importer.key, importer);\n }\n\n /**\n * Look up the importer registered for `key`. Returns `undefined` when no\n * importer is wired - the import runner maps that to a structured\n * `ImportError(code='importer-not-registered')` with the registered keys in\n * `.detail.registeredImporters` (charter P3).\n */\n get(key: string): Importer | undefined {\n return this.importers.get(key);\n }\n\n /**\n * The importer keys currently wired, in insertion order. Fed into the\n * `importer-not-registered` error `.detail.registeredImporters` so AI users\n * see exactly what is injectable.\n */\n registeredImporters(): readonly string[] {\n return [...this.importers.keys()];\n }\n\n /** Project the first registered producer capability into the runner context. */\n contextCapabilities(): ImporterCapabilities {\n for (const importer of this.importers.values()) {\n const decoder = importer.capabilities?.decodeImage;\n if (decoder !== undefined) return { decodeImage: decoder };\n }\n return {};\n }\n\n /** Ask the registered producer whether a declaration has a Catalog product. */\n shouldPublishCatalog(input: {\n readonly importer: string;\n readonly importSettings: Readonly<Record<string, unknown>>;\n readonly subAssets: readonly ImportSubAsset[];\n }): boolean {\n return (\n this.get(input.importer)?.capabilities?.catalog?.publish?.({\n importSettings: input.importSettings,\n subAssets: input.subAssets,\n }) ?? true\n );\n }\n}\n","import { deriveVertexLayoutProjection } from '@forgeax/engine-geometry';\nimport { AssetGuid } from '@forgeax/engine-pack/guid';\nimport {\n MESH_BIN_HEADER_V4_BYTES,\n type MeshBinContractError,\n type MeshBinHeaderV4,\n writeMeshBinHeader,\n} from '@forgeax/engine-pack/mesh-bin-contract';\nimport {\n err,\n type MeshAsset,\n ok,\n type Result,\n type VertexAttributeMap,\n} from '@forgeax/engine-types';\n\ntype MeshPayloadIn = { readonly [Key in keyof MeshAsset]?: MeshAsset[Key] | undefined } & {\n readonly vertexCount?: number;\n};\n\nexport type MeshBinEncodeError =\n | MeshBinContractError\n | {\n readonly code: 'mesh-bin-payload-invalid';\n readonly subject: 'mesh-bin';\n readonly sourceKey: string;\n readonly expected: string;\n readonly actual: string;\n readonly recovery: string;\n };\n\nfunction failure(sourceKey: string, expected: string, actual: string): MeshBinEncodeError {\n return {\n code: 'mesh-bin-payload-invalid',\n subject: 'mesh-bin',\n sourceKey,\n expected,\n actual,\n recovery: 're-cook the source with its Meta sidecar through the build-time importer',\n };\n}\n\nfunction asAttributeMap(value: unknown): VertexAttributeMap {\n return (value ?? {}) as VertexAttributeMap;\n}\n\nfunction jsonValue(value: unknown): unknown {\n if (value instanceof Float32Array || value instanceof Uint16Array) return Array.from(value);\n if (Array.isArray(value)) return value.map(jsonValue);\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, nested]) => [key, jsonValue(nested)]),\n );\n }\n return value;\n}\n\nfunction refsMeta(payload: MeshPayloadIn, refs: readonly string[]): Record<string, unknown> {\n const materialSlots = (payload.materialSlots ?? [{ slotName: 'Default' }]).map(\n (slot, slotIndex) => {\n const defaultMaterial = slot.defaultMaterial;\n let defaultMaterialRef: number | undefined;\n if (defaultMaterial !== undefined) {\n const guid = AssetGuid.format(defaultMaterial);\n defaultMaterialRef = refs.findIndex((candidate) => candidate.toLowerCase() === guid);\n if (defaultMaterialRef < 0) {\n throw new Error(\n `material slot ${slotIndex} default material ${guid} is absent from refs`,\n );\n }\n }\n return {\n slotName: slot.slotName,\n ...(slot.sourceKey === undefined ? {} : { sourceKey: slot.sourceKey }),\n ...(defaultMaterialRef === undefined ? {} : { defaultMaterialRef }),\n };\n },\n );\n return {\n submeshes:\n payload.submeshes === undefined || payload.submeshes.length === 0\n ? [{ indexOffset: 0, indexCount: payload.indices?.length ?? 0, materialSlot: 0 }]\n : payload.submeshes,\n materialSlots,\n ...(payload.aabb === undefined ? {} : { aabb: jsonValue(payload.aabb) }),\n ...(payload.morphTargets === undefined\n ? {}\n : { morphTargets: jsonValue(payload.morphTargets) }),\n ...(payload.morphWeights === undefined\n ? {}\n : { morphWeights: jsonValue(payload.morphWeights) }),\n };\n}\n\n/** Encode one canonical v4 mesh binary. No legacy version is accepted or emitted. */\nexport function packMeshBinV4(\n payload: MeshPayloadIn,\n sourceKey: string,\n refs: readonly string[] = [],\n): Result<Uint8Array, MeshBinEncodeError> {\n try {\n const vertices = payload.vertices;\n const indices = payload.indices;\n if (!(vertices instanceof Float32Array)) {\n return err(\n failure(sourceKey, 'Float32Array interleaved vertices', 'vertices is not Float32Array'),\n );\n }\n if (\n indices !== undefined &&\n !(indices instanceof Uint16Array || indices instanceof Uint32Array)\n ) {\n return err(\n failure(sourceKey, 'Uint16Array or Uint32Array indices', 'indices has an unsupported type'),\n );\n }\n const attributes = asAttributeMap(payload.attributes);\n const projection = deriveVertexLayoutProjection(attributes);\n if (projection.attributes.length === 0 || projection.arrayStride === 0) {\n return err(\n failure(\n sourceKey,\n 'a non-empty canonical geometry projection',\n 'projection has no attributes',\n ),\n );\n }\n const vertexCount = payload.vertexCount ?? vertices.byteLength / projection.arrayStride;\n if (!Number.isSafeInteger(vertexCount) || vertexCount < 0) {\n return err(\n failure(sourceKey, 'a non-negative safe vertex cardinality', `vertexCount=${vertexCount}`),\n );\n }\n if (vertices.byteLength !== vertexCount * projection.arrayStride) {\n return err(\n failure(\n sourceKey,\n `vertices.byteLength=${vertexCount * projection.arrayStride}`,\n `vertices.byteLength=${vertices.byteLength}; stride=${projection.arrayStride}`,\n ),\n );\n }\n for (const attribute of projection.attributes) {\n const value = attributes[attribute.key];\n const components = attribute.byteLength / (attribute.format === 'uint16x4' ? 2 : 4);\n if (\n value === undefined ||\n (!(value instanceof Float32Array) && !(value instanceof Uint16Array)) ||\n value.length !== vertexCount * components\n ) {\n return err(\n failure(\n sourceKey,\n `${attribute.key} cardinality=${vertexCount * components}`,\n `${attribute.key} cardinality=${value?.byteLength ?? 'missing'}`,\n ),\n );\n }\n }\n const interleaved = new Uint8Array(vertexCount * projection.arrayStride);\n const interleavedView = new DataView(interleaved.buffer);\n for (const attribute of projection.attributes) {\n const value = attributes[attribute.key];\n if (value === undefined) continue;\n const components = attribute.byteLength / (attribute.format === 'uint16x4' ? 2 : 4);\n for (let vertex = 0; vertex < vertexCount; vertex++) {\n for (let component = 0; component < components; component++) {\n const sourceIndex = vertex * components + component;\n const targetOffset =\n vertex * projection.arrayStride +\n attribute.offset +\n component * (attribute.format === 'uint16x4' ? 2 : 4);\n if (attribute.format === 'uint16x4') {\n interleavedView.setUint16(targetOffset, (value as Uint16Array)[sourceIndex] ?? 0, true);\n } else {\n interleavedView.setFloat32(\n targetOffset,\n (value as Float32Array)[sourceIndex] ?? 0,\n true,\n );\n }\n }\n }\n }\n const indexCount = indices?.length ?? 0;\n const indexWidth = indices === undefined || indexCount === 0 ? 0 : indices.BYTES_PER_ELEMENT;\n const indexBytes = indexCount * indexWidth;\n if (!Number.isSafeInteger(indexBytes) || indexBytes > 0xffffffff) {\n return err(failure(sourceKey, 'safe index payload byte length', `indexBytes=${indexBytes}`));\n }\n const meta = new TextEncoder().encode(JSON.stringify(refsMeta(payload, refs)));\n const header: MeshBinHeaderV4 = {\n version: 4,\n projectionVersion: projection.schemaVersion,\n mask: projection.mask,\n digest: projection.digest,\n stride: projection.arrayStride,\n vertexCount,\n vertexBytes: interleaved.byteLength,\n indexCount,\n indexWidth: indexWidth as 0 | 2 | 4,\n indexBytes,\n jsonBytes: meta.byteLength,\n };\n const total = MESH_BIN_HEADER_V4_BYTES + interleaved.byteLength + indexBytes + meta.byteLength;\n if (!Number.isSafeInteger(total) || total > 0xffffffff) {\n return err(failure(sourceKey, 'safe mesh binary byte length', `total=${total}`));\n }\n const out = new Uint8Array(total);\n writeMeshBinHeader(header, out);\n let offset = MESH_BIN_HEADER_V4_BYTES;\n out.set(interleaved, offset);\n offset += interleaved.byteLength;\n if (indices !== undefined && indexBytes > 0) {\n out.set(new Uint8Array(indices.buffer, indices.byteOffset, indices.byteLength), offset);\n offset += indexBytes;\n }\n out.set(meta, offset);\n return ok(out);\n } catch (error) {\n return err(\n failure(\n sourceKey,\n 'valid canonical mesh payload',\n error instanceof Error ? error.message : String(error),\n ),\n );\n }\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import { type CatalogBuildResult } from '@forgeax/engine-pack/build';
2
+ import type { NativeCooker } from '@forgeax/engine-pack/native-cooker';
3
+ import type { AssetPublicationEnvelope, PackIndexEntry, ResourceRevision, RuntimeAssetBinding } from '@forgeax/engine-types';
4
+ import type { ImportRunnerFs } from './import-runner.js';
5
+ import type { ImporterRegistry } from './importer-registry.js';
6
+ export interface BuildProductionFailure {
7
+ readonly code: string;
8
+ readonly expected: string;
9
+ readonly hint: string;
10
+ readonly detail?: unknown;
11
+ readonly cause?: unknown;
12
+ }
13
+ export interface BuildProductionFile {
14
+ readonly type: 'asset';
15
+ readonly fileName?: string;
16
+ readonly name?: string;
17
+ readonly originalFileName?: string;
18
+ readonly source: string | Uint8Array;
19
+ }
20
+ export interface BuildProductionSink {
21
+ emitFile(file: BuildProductionFile): string;
22
+ getFileName(referenceId: string): string;
23
+ fileUrl(fileName: string): string;
24
+ }
25
+ export interface BuildProductionOptions {
26
+ readonly inventory: CatalogBuildResult;
27
+ readonly cwd: string;
28
+ readonly basePrefix: string;
29
+ readonly generation: number;
30
+ readonly cookers: readonly NativeCooker[];
31
+ readonly importerRegistry: ImporterRegistry;
32
+ readonly fsForImport: ImportRunnerFs;
33
+ readonly cookedCurrentProjection: Record<string, unknown>;
34
+ readonly directCurrentProjection: Record<string, unknown>;
35
+ readonly authoredCookedCurrentProjection: Record<string, unknown>;
36
+ readonly runtimeBinding?: Pick<RuntimeAssetBinding, 'scopeId' | 'generation'>;
37
+ readonly sink: BuildProductionSink;
38
+ readonly fail: (failure: BuildProductionFailure) => Error;
39
+ }
40
+ export interface ScriptableBuildPackage {
41
+ readonly packageUrl: string;
42
+ readonly receiptUrls: ReadonlyMap<string, string>;
43
+ readonly refs: ReadonlyMap<string, readonly string[]>;
44
+ readonly revision: ResourceRevision;
45
+ readonly publication: AssetPublicationEnvelope;
46
+ }
47
+ export declare function produceBuildAssets(context: BuildProductionOptions): Promise<PackIndexEntry[]>;
48
+ //# sourceMappingURL=build-production.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-production.d.ts","sourceRoot":"","sources":["../src/build-production.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EAKxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EACV,wBAAwB,EAExB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAgB/D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAC5C,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,+BAA+B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,YAAY,CAAC,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,KAAK,CAAC;CAC3D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;CAChD;AAkYD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,cAAc,EAAE,CAAC,CAqB3B"}
@@ -0,0 +1,13 @@
1
+ import type { CatalogImporterPolicy } from '@forgeax/engine-pack/build';
2
+ export type { CatalogImporterPolicy } from '@forgeax/engine-pack/build';
3
+ /** Provider keys whose external declarations have a standard Catalog route. */
4
+ export declare const DEFAULT_CATALOG_IMPORTER_KEYS: readonly ["image", "gltf", "fbx", "audio", "font", "ui"];
5
+ export type CatalogImporterDisposition = 'publish' | 'exclude' | 'missing';
6
+ /**
7
+ * Resolve Catalog visibility from provider registration, not from a Vite
8
+ * adapter's importer list. The shader transform is deliberately excluded;
9
+ * every other provider must either be a standard provider or be registered by
10
+ * the host before its declarations can become authoritative.
11
+ */
12
+ export declare function catalogImporterPolicy(importer: string, hostImporterKeys: ReadonlySet<string>): CatalogImporterPolicy;
13
+ //# sourceMappingURL=catalog-importer-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-importer-policy.d.ts","sourceRoot":"","sources":["../src/catalog-importer-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,+EAA+E;AAC/E,eAAO,MAAM,6BAA6B,0DAOhC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,qBAAqB,CA+BvB"}
@@ -0,0 +1,4 @@
1
+ import { type CatalogBuildResult, type CatalogProducerVisibility } from '@forgeax/engine-pack/build';
2
+ import type { ScanOptions } from '@forgeax/engine-pack/scanner';
3
+ export declare function buildCatalogResult(roots: readonly string[], base?: string, registeredImporterKeys?: ReadonlySet<string>, scanOptions?: ScanOptions, catalogVisibility?: CatalogProducerVisibility): Promise<CatalogBuildResult>;
4
+ //# sourceMappingURL=catalog-inventory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-inventory.d.ts","sourceRoot":"","sources":["../src/catalog-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,IAAI,SAAM,EACV,sBAAsB,GAAE,WAAW,CAAC,MAAM,CAAa,EACvD,WAAW,GAAE,WAAgB,EAC7B,iBAAiB,GAAE,yBAAsC,GACxD,OAAO,CAAC,kBAAkB,CAAC,CAQ7B"}
@@ -1,36 +1,27 @@
1
- import type { CookProduct, ImportedAsset, ImportProduct, MaterialAsset, Result } from '@forgeax/engine-types';
2
- export interface MaterialImportRefs {
3
- readonly parent: readonly string[];
4
- readonly textures: readonly string[];
5
- readonly samplers: readonly string[];
6
- readonly modules: readonly string[];
1
+ import type { AssetRef, CookProduct, CookReceipt, ImportedArtifactBody, ImportedAsset, ImportProduct, Result } from '@forgeax/engine-types';
2
+ export interface TerminalImportProduct<P = unknown> extends ImportProduct<P> {
3
+ readonly refs: readonly AssetRef[];
4
+ readonly artifacts: Readonly<Record<string, ImportedArtifactBody>>;
5
+ readonly receipts: readonly CookReceipt[];
6
+ readonly diagnostics: readonly unknown[];
7
+ readonly sourceRevision: string;
8
+ readonly sourceKey?: string;
7
9
  }
8
- export interface MaterialSourceEvidence {
9
- readonly inputFingerprint: string;
10
- readonly importerVersion: string;
10
+ export interface ImportAssetProduct<P = unknown> {
11
+ readonly payload: P;
12
+ readonly refs: readonly AssetRef[];
13
+ readonly artifacts: Readonly<Record<string, ImportedArtifactBody>>;
11
14
  }
12
- export interface MaterialImportProductInput {
13
- readonly guid: string;
14
- readonly sourcePath: string;
15
- readonly material: MaterialAsset;
16
- readonly refs: MaterialImportRefs;
17
- readonly sourceEvidence: MaterialSourceEvidence;
18
- }
19
- export interface MaterialImportProduct {
20
- readonly asset: ImportedAsset<MaterialAsset>;
21
- readonly sourcePath: string;
22
- readonly sourceEvidence: MaterialSourceEvidence;
23
- }
24
- export interface MaterialImportProductError {
25
- readonly code: 'material-import-product-invalid';
15
+ export interface ImportProductContractError {
16
+ readonly code: 'import-product-invalid';
26
17
  readonly expected: string;
27
18
  readonly hint: string;
28
19
  readonly detail: {
29
20
  readonly field: string;
30
21
  };
31
22
  }
32
- export declare function createMaterialImportProduct(input: MaterialImportProductInput): Result<MaterialImportProduct, MaterialImportProductError>;
33
- export declare function materialImportProductReady(product: MaterialImportProduct, availableRefs: ReadonlySet<string>): boolean;
23
+ export declare function createImportProduct<P = unknown>(input: TerminalImportProduct<P>): Result<TerminalImportProduct<P>, ImportProductContractError>;
24
+ export declare function projectImportedAssetPayload(asset: ImportedAsset<unknown>): Record<string, unknown>;
34
25
  /** Convert each importer asset into the shared completed producer product. */
35
26
  export declare function finalizeImportProducts(product: ImportProduct<unknown>, inputFingerprint: string): Promise<readonly CookProduct[]>;
36
27
  //# sourceMappingURL=import-product.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import-product.d.ts","sourceRoot":"","sources":["../src/import-product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EAEX,aAAa,EACb,aAAa,EACb,aAAa,EACb,MAAM,EACP,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;CACjD;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAeD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,0BAA0B,GAChC,MAAM,CAAC,qBAAqB,EAAE,0BAA0B,CAAC,CAuB3D;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,GACjC,OAAO,CAET;AA6ED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAuBjC"}
1
+ {"version":3,"file":"import-product.d.ts","sourceRoot":"","sources":["../src/import-product.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,MAAM,EACP,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,SAAS,OAAO,EAAE,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAWD,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC7C,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAC9B,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAW9D;AAkED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,EAC/B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAuBjC"}
@@ -1,4 +1,5 @@
1
- import type { AssetRelation, CatalogDiagnostic, CookProduct, ImportContext, ImportError as ImportErrorType, ImportedArtifactBody, ImportProduct, ProviderProvenance, ResourceRevision, SourceOverrideMap } from '@forgeax/engine-types';
1
+ import type { AssetRelation, CatalogDiagnostic, CookProduct, ImportContext, ImportError as ImportErrorType, ImportedArtifactBody, ProviderProvenance, ResourceRevision, SourceOverrideMap } from '@forgeax/engine-types';
2
+ import { type TerminalImportProduct } from './import-product.js';
2
3
  import type { ImporterRegistry } from './importer-registry.js';
3
4
  /** Reserved `meta.importer` key consumed by vite-plugin-shader, not the import runner. */
4
5
  export declare const SHADER_RESERVED_IMPORTER_KEY = "shader";
@@ -25,7 +26,7 @@ export type RunImportProductResult = {
25
26
  readonly value: {
26
27
  readonly skipped: 'shader';
27
28
  } | {
28
- readonly product: ImportProduct;
29
+ readonly product: TerminalImportProduct;
29
30
  readonly cookProducts: readonly CookProduct[];
30
31
  };
31
32
  } | {
@@ -40,7 +41,7 @@ export type RunImportProductResult = {
40
41
  export type RunImportOk = {
41
42
  readonly skipped: 'shader';
42
43
  } | {
43
- readonly product: ImportProduct;
44
+ readonly product: TerminalImportProduct;
44
45
  readonly cookProducts: readonly CookProduct[];
45
46
  readonly pack: DdcPack;
46
47
  };
@@ -68,6 +69,8 @@ export interface DdcPack {
68
69
  export interface RunImportMeta {
69
70
  readonly importer: string;
70
71
  readonly source: string;
72
+ /** Scanner-owned source declaration revision; avoids reopening validated Meta. */
73
+ readonly sourceRevision?: string;
71
74
  readonly packageId?: string;
72
75
  readonly provenance?: ProviderProvenance;
73
76
  readonly revision?: ResourceRevision;
@@ -1 +1 @@
1
- {"version":3,"file":"import-runner.d.ts","sourceRoot":"","sources":["../src/import-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-runner.d.ts","sourceRoot":"","sources":["../src/import-runner.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Importer } from '@forgeax/engine-types';
1
+ import type { Importer, ImporterCapabilities, ImportSubAsset } from '@forgeax/engine-types';
2
2
  /**
3
3
  * Injectable `meta.importer` -> {@link Importer} table held by the import
4
4
  * runner.
@@ -36,5 +36,13 @@ export declare class ImporterRegistry {
36
36
  * see exactly what is injectable.
37
37
  */
38
38
  registeredImporters(): readonly string[];
39
+ /** Project the first registered producer capability into the runner context. */
40
+ contextCapabilities(): ImporterCapabilities;
41
+ /** Ask the registered producer whether a declaration has a Catalog product. */
42
+ shouldPublishCatalog(input: {
43
+ readonly importer: string;
44
+ readonly importSettings: Readonly<Record<string, unknown>>;
45
+ readonly subAssets: readonly ImportSubAsset[];
46
+ }): boolean;
39
47
  }
40
48
  //# sourceMappingURL=importer-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"importer-registry.d.ts","sourceRoot":"","sources":["../src/importer-registry.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAclC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAItC;;;;OAIG;IACH,mBAAmB,IAAI,SAAS,MAAM,EAAE;CAGzC"}
1
+ {"version":3,"file":"importer-registry.d.ts","sourceRoot":"","sources":["../src/importer-registry.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5F;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAclC;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAItC;;;;OAIG;IACH,mBAAmB,IAAI,SAAS,MAAM,EAAE;IAIxC,gFAAgF;IAChF,mBAAmB,IAAI,oBAAoB;IAQ3C,+EAA+E;IAC/E,oBAAoB,CAAC,KAAK,EAAE;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;KAC/C,GAAG,OAAO;CAQZ"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,19 @@
1
1
  export type { AnimationClip, AnimationGraph, Asset, AudioClipAsset, EquirectAsset, FontAsset, MaterialAsset, MeshAsset, ParticleEffectAsset, RenderPipelineAsset, SamplerAsset, SceneAsset, SkeletonAsset, SkinAsset, TextureAsset, TilesetAsset, VideoAsset, } from '@forgeax/engine-types';
2
2
  export { type CookProduct, IMPORT_ERROR_HINTS, type ImportContext, ImportError, type ImportErrorCode, type ImportErrorDetail, type ImportedAsset, type Importer, type ImportSubAsset, type ImportTransport, } from '@forgeax/engine-types';
3
- export { createMaterialImportProduct, finalizeImportProducts, type MaterialImportProduct, type MaterialImportProductError, type MaterialImportProductInput, type MaterialImportRefs, type MaterialSourceEvidence, materialImportProductReady, } from './import-product.js';
3
+ export { type BuildProductionFailure, type BuildProductionFile, type BuildProductionOptions, type BuildProductionSink, produceBuildAssets, type ScriptableBuildPackage, } from './build-production.js';
4
+ export { type CatalogImporterDisposition, type CatalogImporterPolicy, catalogImporterPolicy, DEFAULT_CATALOG_IMPORTER_KEYS, } from './catalog-importer-policy.js';
5
+ export { buildCatalogResult } from './catalog-inventory.js';
6
+ export { createImportProduct, finalizeImportProducts, type ImportAssetProduct, type ImportProductContractError, type TerminalImportProduct, } from './import-product.js';
4
7
  export { type DdcPack, type ImportRunnerFs, normaliseForPack, type RunImportMeta, type RunImportOk, type RunImportProductResult, type RunImportResult, runImport, SHADER_RESERVED_IMPORTER_KEY, } from './import-runner.js';
5
8
  export { ImporterRegistry } from './importer-registry.js';
6
9
  export { type MeshBinEncodeError, packMeshBinV4, } from './mesh-bin.js';
10
+ export { projectImportProductForBuild } from './pack-projection.js';
7
11
  export { type AssetOutputInput, type AssetOutputPayload, type AssetOutputProducer, AssetOutputProducerRegistry, type AssetOutputProduct, type BuildScriptablePackOptions, buildScriptablePack, type ScriptablePackAssetSnapshot, type ScriptablePackAssetSnapshotSource, type ScriptablePackBuildBridgeResult, type ScriptablePackBuildProduct, type ScriptablePackDomainError, type ScriptablePackExternalEvidence, type ScriptablePackExternalUsage, type ScriptablePackSourceClosureEntry, type ScriptablePackStagedOutput, } from './scriptable-pack.js';
8
- export { createStandardAssetOutputProducerRegistry, materialAssetOutputProducer, meshAssetOutputProducer, sceneAssetOutputProducer, } from './scriptable-pack-output-producers.js';
12
+ export { type AuthoredPackTransport, type CookedAuthoredPack, canonicalScriptableSourcePath, declaredPackExternalOutputs, materializePreparedScriptablePack, type PreparedScriptablePack, prepareAuthoredPackTransport, produceScriptablePackProducts, projectScriptablePackPublication, readCookedAuthoredPack, type ScriptablePackInput, type ScriptablePackPublicationFacts, type ScriptablePackTransportPaths, type ScriptablePackTransportPolicy, type ScriptablePackTransportSink, scriptablePackInputs, } from './scriptable-pack-host.js';
13
+ export { createSceneAssetOutputProducer, createStandardAssetOutputProducerRegistry, materialAssetOutputProducer, meshAssetOutputProducer, } from './scriptable-pack-output-producers.js';
9
14
  export { createScriptablePackStagedAssetSnapshotSource, type ScriptablePackSnapshotError, type ScriptablePackStagedOwner, type ScriptablePackStagedSnapshotOptions, } from './scriptable-pack-staged-snapshot.js';
15
+ export { produceScriptableSourcePackage, type ScriptableSourcePackageProduct, type ScriptableSourcePackageResult, } from './scriptable-source-package.js';
16
+ export { finalizeSourcePackage, type ProducerReadiness, type ProducerReadinessError, type ProducerReadinessResult, parseProducerReadiness, produceSourcePackage, type SourcePackageClosureDetail, type SourcePackageClosureError, type SourcePackageProducerInput, type SourcePackageProducerResult, type SourcePackageProduct, sourcePackageAssetsByGuid, } from './source-package.js';
17
+ export { normalizeSourcePackageError, type SourcePackageError, type SourcePackageErrorCode, type SourcePackageErrorContext, type SourcePackageErrorDetail, type SourcePackageErrorStage, sourcePackageError, } from './source-package-errors.js';
18
+ export { commitImportPublication, discardImportPublication, type ImportPublicationError, type ImportPublicationInput, type ImportPublicationResult, publishImportPublication, restoreImportPublication, type StagedImportPublication, type StagedImportPublicationResult, stageImportPublication, } from './source-package-publication.js';
10
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,YAAY,EACV,aAAa,EACb,cAAc,EACd,KAAK,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,WAAW,EAChB,kBAAkB,EAClB,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,SAAS,EACT,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,KAAK,kBAAkB,EACvB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,mBAAmB,EACnB,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,GAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,yCAAyC,EACzC,2BAA2B,EAC3B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,6CAA6C,EAC7C,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,GACzC,MAAM,sCAAsC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,YAAY,EACV,aAAa,EACb,cAAc,EACd,KAAK,EACL,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,WAAW,EAChB,kBAAkB,EAClB,KAAK,aAAa,EAClB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,EAC1B,qBAAqB,EACrB,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,SAAS,EACT,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,KAAK,kBAAkB,EACvB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,mBAAmB,EACnB,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,gCAAgC,EACrC,KAAK,0BAA0B,GAChC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,iCAAiC,EACjC,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,8BAA8B,EAC9B,yCAAyC,EACzC,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,6CAA6C,EAC7C,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,GACzC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,8BAA8B,EAC9B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,GACnC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,2BAA2B,EAC3B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAClC,sBAAsB,GACvB,MAAM,iCAAiC,CAAC"}