@forgeax/engine-import 0.1.20 → 0.1.23

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 (91) hide show
  1. package/README.md +91 -3
  2. package/dist/__tests__/ies-contract.unit.test.d.ts +2 -0
  3. package/dist/__tests__/ies-contract.unit.test.d.ts.map +1 -0
  4. package/dist/__tests__/ies-producer.unit.test.d.ts +2 -0
  5. package/dist/__tests__/ies-producer.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/mesh-lod-contract.unit.test.d.ts +2 -0
  7. package/dist/__tests__/mesh-lod-contract.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/mesh-lod-reimport.integration.test.d.ts +2 -0
  9. package/dist/__tests__/mesh-lod-reimport.integration.test.d.ts.map +1 -0
  10. package/dist/__tests__/parameterized-scriptable-pack.unit.test.d.ts +2 -0
  11. package/dist/__tests__/parameterized-scriptable-pack.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/scriptable-pack-file-snapshot.unit.test.d.ts +2 -0
  13. package/dist/__tests__/scriptable-pack-file-snapshot.unit.test.d.ts.map +1 -0
  14. package/dist/__tests__/source-package-publication-lod.integration.test.d.ts +2 -0
  15. package/dist/__tests__/source-package-publication-lod.integration.test.d.ts.map +1 -0
  16. package/dist/browser.d.ts +1 -0
  17. package/dist/browser.d.ts.map +1 -1
  18. package/dist/browser.mjs +230 -3
  19. package/dist/browser.mjs.map +1 -1
  20. package/dist/build-production.d.ts +1 -8
  21. package/dist/build-production.d.ts.map +1 -1
  22. package/dist/ies/ies-importer.d.ts +4 -0
  23. package/dist/ies/ies-importer.d.ts.map +1 -0
  24. package/dist/ies/parse-lm63.d.ts +13 -0
  25. package/dist/ies/parse-lm63.d.ts.map +1 -0
  26. package/dist/ies/resample-type-c.d.ts +4 -0
  27. package/dist/ies/resample-type-c.d.ts.map +1 -0
  28. package/dist/import-runner.d.ts.map +1 -1
  29. package/dist/index.d.ts +11 -6
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.mjs +2550 -1029
  32. package/dist/index.mjs.map +1 -1
  33. package/dist/mesh-bin.d.ts.map +1 -1
  34. package/dist/mesh-bin.mjs +29 -1
  35. package/dist/mesh-bin.mjs.map +1 -1
  36. package/dist/mesh-lod.d.ts +60 -0
  37. package/dist/mesh-lod.d.ts.map +1 -0
  38. package/dist/parameterized-scriptable-pack.d.ts +68 -0
  39. package/dist/parameterized-scriptable-pack.d.ts.map +1 -0
  40. package/dist/scriptable-pack-file-snapshot.d.ts +71 -0
  41. package/dist/scriptable-pack-file-snapshot.d.ts.map +1 -0
  42. package/dist/scriptable-pack-host.d.ts +70 -39
  43. package/dist/scriptable-pack-host.d.ts.map +1 -1
  44. package/dist/scriptable-pack-output-producers.d.ts +1 -0
  45. package/dist/scriptable-pack-output-producers.d.ts.map +1 -1
  46. package/dist/scriptable-pack-staged-snapshot.d.ts +2 -2
  47. package/dist/scriptable-pack-staged-snapshot.d.ts.map +1 -1
  48. package/dist/scriptable-pack.d.ts +13 -26
  49. package/dist/scriptable-pack.d.ts.map +1 -1
  50. package/dist/source-package-errors.d.ts.map +1 -1
  51. package/dist/source-package-publication.d.ts.map +1 -1
  52. package/package.json +8 -7
  53. package/src/__tests__/ies-contract.unit.test.ts +31 -0
  54. package/src/__tests__/ies-producer.unit.test.ts +104 -0
  55. package/src/__tests__/mesh-bin.test.ts +69 -0
  56. package/src/__tests__/mesh-lod-contract.unit.test.ts +92 -0
  57. package/src/__tests__/mesh-lod-reimport.integration.test.ts +15 -0
  58. package/src/__tests__/parameterized-scriptable-pack.unit.test.ts +270 -0
  59. package/src/__tests__/scriptable-pack-file-snapshot.unit.test.ts +177 -0
  60. package/src/__tests__/scriptable-pack-host.unit.test.ts +196 -4
  61. package/src/__tests__/scriptable-pack-production-producers.unit.test.ts +7 -1
  62. package/src/__tests__/scriptable-pack-staged-snapshot.unit.test.ts +43 -12
  63. package/src/__tests__/source-package-publication-lod.integration.test.ts +29 -0
  64. package/src/__tests__/source-package-publication.integration.test.ts +26 -1
  65. package/src/browser.ts +5 -0
  66. package/src/build-production.ts +498 -141
  67. package/src/ies/ies-importer.ts +126 -0
  68. package/src/ies/parse-lm63.ts +98 -0
  69. package/src/ies/resample-type-c.ts +108 -0
  70. package/src/import-runner.ts +58 -0
  71. package/src/index.ts +49 -19
  72. package/src/mesh-bin.ts +38 -0
  73. package/src/mesh-lod.ts +265 -0
  74. package/src/parameterized-scriptable-pack.ts +725 -0
  75. package/src/scriptable-pack-file-snapshot.ts +346 -0
  76. package/src/scriptable-pack-host.ts +790 -343
  77. package/src/scriptable-pack-output-producers.ts +58 -1
  78. package/src/scriptable-pack-staged-snapshot.ts +12 -11
  79. package/src/scriptable-pack.ts +16 -485
  80. package/src/source-package-errors.ts +6 -0
  81. package/src/source-package-publication.ts +32 -2
  82. package/dist/.tsbuildinfo +0 -1
  83. package/dist/__tests__/scriptable-pack-product.contract.test.d.ts +0 -2
  84. package/dist/__tests__/scriptable-pack-product.contract.test.d.ts.map +0 -1
  85. package/dist/__tests__/scriptable-pack.integration.test.d.ts +0 -2
  86. package/dist/__tests__/scriptable-pack.integration.test.d.ts.map +0 -1
  87. package/dist/scriptable-source-package.d.ts +0 -14
  88. package/dist/scriptable-source-package.d.ts.map +0 -1
  89. package/src/__tests__/scriptable-pack-product.contract.test.ts +0 -46
  90. package/src/__tests__/scriptable-pack.integration.test.ts +0 -435
  91. package/src/scriptable-source-package.ts +0 -88
@@ -1 +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 /**\n * Map a physical read path to the host's stable logical source identity.\n *\n * Hosts may expose the same source through different filesystem coordinates\n * (for example a symlink farm in a browser Vite root). The identity is used\n * only for dependency/revision facts; `readSource` and `readSibling` still\n * receive the physical path supplied by the importer.\n */\n sourceIdentityFor?(sourcePath: string): string;\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 dependencyIdentity(fs: ImportRunnerFs, sourcePath: string): string {\n return normalizeDependencyPath(fs.sourceIdentityFor?.(sourcePath) ?? sourcePath);\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(dependencyIdentity(fs, 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(dependencyIdentity(fs, 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"]}
1
+ {"version":3,"sources":["../src/import-product.ts","../src/mesh-lod.ts","../src/import-runner.ts","../src/importer-registry.ts","../src/mesh-bin.ts"],"names":["err","ok","product"],"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","import { err, ok, type Result } from '@forgeax/engine-types';\n\nexport interface MeshLodMetaEntry {\n readonly sourceKey: string;\n readonly meshGuid: string;\n readonly screenCoverage?: number;\n}\n\nexport interface MeshLodContractInput {\n readonly lods: readonly Readonly<{ meshGuid: string; screenCoverage: number }>[];\n readonly lodHysteresis?: number;\n readonly rootMeshGuid?: string;\n readonly refs?: readonly string[];\n readonly generation?: number;\n readonly rootBounds?: MeshLodBounds;\n readonly lodBounds?: readonly MeshLodBounds[];\n readonly rootMaterialSlots?: readonly MeshLodMaterialSlot[];\n readonly lodMaterialSlots?: readonly (readonly MeshLodMaterialSlot[])[];\n readonly relations?: readonly MeshLodRelation[];\n}\n\nexport interface MeshLodBounds {\n readonly min: readonly [number, number, number];\n readonly max: readonly [number, number, number];\n}\n\nexport interface MeshLodMaterialSlot {\n readonly sourceKey: string;\n}\n\nexport interface MeshLodRelation {\n readonly from: string;\n readonly to: string;\n}\n\nexport type MeshLodContractError =\n | { readonly code: 'mesh-lod-contract-invalid'; readonly reason: string }\n | {\n readonly code: 'mesh-lod-topology-change';\n readonly reason: string;\n readonly previousIndices: readonly number[];\n readonly nextIndices: readonly number[];\n }\n | { readonly code: 'mesh-lod-authority-conflict'; readonly reason: string };\n\nexport interface ReconciledMeshLodMeta {\n readonly lods: readonly (MeshLodMetaEntry & { readonly screenCoverage: number })[];\n}\n\n/** Generate the shared first-import screen coverage defaults, including LOD0. */\nexport function deriveDefaultLodScreenCoverages(levelCount: number): readonly number[] {\n if (!Number.isInteger(levelCount) || levelCount < 1 || levelCount > 8) {\n throw new RangeError('levelCount must be an integer in [1, 8]');\n }\n return Array.from(\n { length: levelCount - 1 },\n (_, index) => Math.round(0.5 * 0.4 ** index * 1_000_000) / 1_000_000,\n );\n}\n\nexport function validateMeshLodContract(\n input: MeshLodContractInput,\n): Result<\n Readonly<{ lods: readonly Readonly<{ meshGuid: string; screenCoverage: number }>[] }>,\n MeshLodContractError\n> {\n if (input.lods.length > 7) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'at most seven lower-detail levels are supported',\n });\n }\n if (\n input.lodHysteresis !== undefined &&\n (!Number.isFinite(input.lodHysteresis) || input.lodHysteresis < 0 || input.lodHysteresis >= 1)\n ) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'lodHysteresis must be finite and in [0, 1)',\n });\n }\n if (\n input.generation !== undefined &&\n (!Number.isSafeInteger(input.generation) || input.generation < 0)\n ) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'generation must be a non-negative safe integer',\n });\n }\n const guids = new Set<string>();\n let previous = 1;\n for (const level of input.lods) {\n if (level.meshGuid.trim() === '' || guids.has(level.meshGuid)) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'LOD mesh GUIDs must be unique and non-empty',\n });\n }\n if (\n !Number.isFinite(level.screenCoverage) ||\n level.screenCoverage <= 0 ||\n level.screenCoverage > 1\n ) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'screenCoverage must be finite and in (0, 1]',\n });\n }\n if (level.screenCoverage >= previous) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'screenCoverage must strictly decrease by level',\n });\n }\n guids.add(level.meshGuid);\n previous = level.screenCoverage;\n }\n if (input.refs !== undefined) {\n const refs = new Set(input.refs);\n for (const level of input.lods) {\n if (!refs.has(level.meshGuid)) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'every lower-detail mesh GUID must be enclosed by root refs',\n });\n }\n }\n }\n if (\n input.rootMeshGuid !== undefined &&\n input.refs !== undefined &&\n !input.refs.includes(input.rootMeshGuid)\n ) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'root mesh GUID must be included in refs',\n });\n }\n if (input.rootBounds !== undefined) {\n if (!validBounds(input.rootBounds)) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'root bounds must be finite and ordered',\n });\n }\n for (const bounds of input.lodBounds ?? []) {\n if (!validBounds(bounds) || !encloses(input.rootBounds, bounds)) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'root bounds must enclose every lower-detail bounds',\n });\n }\n }\n }\n if (input.lodBounds !== undefined && input.lodBounds.length !== input.lods.length) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'lod bounds must cover every lower level',\n });\n }\n if (input.rootMaterialSlots !== undefined || input.lodMaterialSlots !== undefined) {\n const rootSlots = input.rootMaterialSlots ?? [];\n const lowerSlots = input.lodMaterialSlots ?? [];\n if (\n lowerSlots.length !== input.lods.length ||\n lowerSlots.some((slots) => !sameSlots(rootSlots, slots))\n ) {\n return err({\n code: 'mesh-lod-contract-invalid',\n reason: 'lower-detail material slots must preserve root sourceKey order',\n });\n }\n }\n if (input.relations !== undefined && hasCycle(input.relations)) {\n return err({ code: 'mesh-lod-contract-invalid', reason: 'LOD relations must be acyclic' });\n }\n return ok({ lods: input.lods });\n}\n\nfunction validBounds(bounds: MeshLodBounds): boolean {\n const [minX, minY, minZ] = bounds.min;\n const [maxX, maxY, maxZ] = bounds.max;\n return (\n [minX, minY, minZ, maxX, maxY, maxZ].every(Number.isFinite) &&\n minX <= maxX &&\n minY <= maxY &&\n minZ <= maxZ\n );\n}\n\nfunction encloses(root: MeshLodBounds, child: MeshLodBounds): boolean {\n return (\n child.min[0] >= root.min[0] &&\n child.min[1] >= root.min[1] &&\n child.min[2] >= root.min[2] &&\n child.max[0] <= root.max[0] &&\n child.max[1] <= root.max[1] &&\n child.max[2] <= root.max[2]\n );\n}\n\nfunction sameSlots(\n root: readonly MeshLodMaterialSlot[],\n child: readonly MeshLodMaterialSlot[],\n): boolean {\n return (\n root.length === child.length &&\n root.every((slot, index) => slot.sourceKey === child[index]?.sourceKey)\n );\n}\n\nfunction hasCycle(relations: readonly MeshLodRelation[]): boolean {\n const edges = new Map<string, string[]>();\n for (const relation of relations)\n edges.set(relation.from, [...(edges.get(relation.from) ?? []), relation.to]);\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const visit = (node: string): boolean => {\n if (visiting.has(node)) return true;\n if (visited.has(node)) return false;\n visiting.add(node);\n for (const next of edges.get(node) ?? []) if (visit(next)) return true;\n visiting.delete(node);\n visited.add(node);\n return false;\n };\n return [...edges.keys()].some(visit);\n}\n\n/** Preserve sidecar facts by sourceKey while permitting only suffix changes. */\nexport function reconcileMeshLodMeta(\n previous: readonly MeshLodMetaEntry[],\n next: readonly MeshLodMetaEntry[],\n): Result<ReconciledMeshLodMeta, MeshLodContractError> {\n const overlap = Math.min(previous.length, next.length);\n for (let index = 0; index < overlap; index++) {\n const oldEntry = previous[index];\n const nextEntry = next[index];\n if (oldEntry?.sourceKey !== nextEntry?.sourceKey) {\n return err({\n code: 'mesh-lod-topology-change',\n reason: 'existing LOD source keys must remain prefix-stable',\n previousIndices: [index],\n nextIndices: [index],\n });\n }\n if (oldEntry?.meshGuid !== nextEntry?.meshGuid) {\n return err({\n code: 'mesh-lod-authority-conflict',\n reason: `sourceKey ${nextEntry?.sourceKey ?? '<missing>'} changed mesh GUID`,\n });\n }\n }\n const defaults = deriveDefaultLodScreenCoverages(next.length + 1);\n const lods = next.map((entry, index) => ({\n ...entry,\n screenCoverage: previous[index]?.screenCoverage ?? entry.screenCoverage ?? defaults[index] ?? 0,\n }));\n const valid = validateMeshLodContract({\n lods: lods.map(({ meshGuid, screenCoverage }) => ({ meshGuid, screenCoverage })),\n });\n if (!valid.ok) return valid;\n return ok({ lods });\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';\nimport { validateMeshLodContract } from './mesh-lod.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\nfunction declarationsSourceKey(\n declarations: readonly { readonly guid: string; readonly sourceKey?: string }[],\n guid: string,\n): string | undefined {\n return declarations.find((declaration) => declaration.guid === guid)?.sourceKey;\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 /**\n * Map a physical read path to the host's stable logical source identity.\n *\n * Hosts may expose the same source through different filesystem coordinates\n * (for example a symlink farm in a browser Vite root). The identity is used\n * only for dependency/revision facts; `readSource` and `readSibling` still\n * receive the physical path supplied by the importer.\n */\n sourceIdentityFor?(sourcePath: string): string;\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 dependencyIdentity(fs: ImportRunnerFs, sourcePath: string): string {\n return normalizeDependencyPath(fs.sourceIdentityFor?.(sourcePath) ?? sourcePath);\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(dependencyIdentity(fs, 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(dependencyIdentity(fs, 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 // LOD is a producer-authored MeshAsset fact. Validate it once at the\n // import boundary so malformed coverage never reaches DDC or runtime.\n for (const asset of produced) {\n if (asset.kind !== 'mesh' || asset.payload === null || typeof asset.payload !== 'object')\n continue;\n const payload = asset.payload as {\n readonly lods?: readonly {\n readonly mesh?: unknown;\n readonly meshGuid?: unknown;\n readonly screenCoverage?: unknown;\n }[];\n readonly lodHysteresis?: unknown;\n };\n if (payload.lods === undefined) continue;\n const lods = payload.lods.map((level) => ({\n meshGuid:\n typeof level.meshGuid === 'string'\n ? level.meshGuid\n : typeof level.mesh === 'string'\n ? level.mesh\n : JSON.stringify(level.mesh),\n screenCoverage: level.screenCoverage,\n }));\n const validated = validateMeshLodContract({\n lods: lods as readonly { meshGuid: string; screenCoverage: number }[],\n ...(payload.lodHysteresis === undefined\n ? {}\n : { lodHysteresis: payload.lodHysteresis as number }),\n });\n if (!validated.ok) {\n return errResult(\n new ImportError({\n code: validated.error.code,\n expected: 'MeshAsset LOD facts to satisfy the shared contract',\n hint: IMPORT_ERROR_HINTS[validated.error.code],\n detail: {\n meshLodSourceKey: declarationsSourceKey(meta.subAssets, asset.guid),\n reason: validated.error.reason,\n ...(validated.error.code === 'mesh-lod-topology-change'\n ? {\n previousIndices: validated.error.previousIndices,\n nextIndices: validated.error.nextIndices,\n }\n : {}),\n },\n }),\n );\n }\n }\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 if (payload.lods !== undefined && payload.lods.length > 7) {\n throw new Error('MeshAsset LOD chain supports at most seven lower-detail levels');\n }\n let previousCoverage = 1;\n const seenLodGuids = new Set<string>();\n const lods = payload.lods?.map((lod, lodIndex) => {\n const guid = AssetGuid.format(lod.mesh).toLowerCase();\n const meshRef = refs.findIndex((candidate) => candidate.toLowerCase() === guid);\n if (meshRef < 0) {\n throw new Error(`LOD ${lodIndex} mesh ${guid} is absent from refs`);\n }\n if (seenLodGuids.has(guid)) {\n throw new Error(`LOD ${lodIndex} mesh ${guid} is duplicated`);\n }\n if (\n !Number.isFinite(lod.screenCoverage) ||\n lod.screenCoverage <= 0 ||\n lod.screenCoverage > 1 ||\n lod.screenCoverage >= previousCoverage\n ) {\n throw new Error(\n `LOD ${lodIndex} screenCoverage must be finite, in (0, 1], and strictly decreasing`,\n );\n }\n seenLodGuids.add(guid);\n previousCoverage = lod.screenCoverage;\n return { meshRef, screenCoverage: lod.screenCoverage };\n });\n if (\n payload.lodHysteresis !== undefined &&\n (!Number.isFinite(payload.lodHysteresis) ||\n payload.lodHysteresis < 0 ||\n payload.lodHysteresis >= 1)\n ) {\n throw new Error('lodHysteresis must be finite and in [0, 1)');\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 ...(lods === undefined ? {} : { lods }),\n ...(payload.lodHysteresis === undefined ? {} : { lodHysteresis: payload.lodHysteresis }),\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"]}
@@ -1,6 +1,6 @@
1
1
  import { type CatalogBuildResult } from '@forgeax/engine-pack/build';
2
2
  import type { NativeCooker } from '@forgeax/engine-pack/native-cooker';
3
- import type { AssetPublicationEnvelope, PackIndexEntry, ResourceRevision, RuntimeAssetBinding } from '@forgeax/engine-types';
3
+ import type { PackIndexEntry, RuntimeAssetBinding } from '@forgeax/engine-types';
4
4
  import type { ImportRunnerFs } from './import-runner.js';
5
5
  import type { ImporterRegistry } from './importer-registry.js';
6
6
  export interface BuildProductionFailure {
@@ -37,12 +37,5 @@ export interface BuildProductionOptions {
37
37
  readonly sink: BuildProductionSink;
38
38
  readonly fail: (failure: BuildProductionFailure) => Error;
39
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
40
  export declare function produceBuildAssets(context: BuildProductionOptions): Promise<PackIndexEntry[]>;
48
41
  //# sourceMappingURL=build-production.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-production.d.ts","sourceRoot":"","sources":["../src/build-production.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,kBAAkB,EAMxB,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;AAiB/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;AA8ZD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,cAAc,EAAE,CAAC,CAqB3B"}
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;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AASvE,OAAO,KAAK,EAKV,cAAc,EACd,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAkB/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;AAowBD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,cAAc,EAAE,CAAC,CAkB3B"}
@@ -0,0 +1,4 @@
1
+ import type { IesProfileAsset, Importer, Result } from '@forgeax/engine-types';
2
+ export declare function validateIesProfilePayload(value: unknown): Result<IesProfileAsset, Error>;
3
+ export declare const iesImporter: Importer;
4
+ //# sourceMappingURL=ies-importer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ies-importer.d.ts","sourceRoot":"","sources":["../../src/ies/ies-importer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,QAAQ,EAER,MAAM,EACP,MAAM,uBAAuB,CAAC;AA2B/B,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAkBxF;AAuED,eAAO,MAAM,WAAW,EAAE,QAGzB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Result } from '@forgeax/engine-types';
2
+ export interface Lm63TypeC {
3
+ readonly tilt: 'NONE';
4
+ readonly verticalAnglesDeg: readonly number[];
5
+ readonly horizontalAnglesDeg: readonly number[];
6
+ readonly candela: readonly number[];
7
+ }
8
+ export interface Lm63ParseError {
9
+ readonly code: 'invalid-ies' | 'unsupported-tilt' | 'unsupported-photometric-type';
10
+ readonly reason: string;
11
+ }
12
+ export declare function parseLm63TypeC(source: string): Result<Lm63TypeC, Lm63ParseError>;
13
+ //# sourceMappingURL=parse-lm63.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-lm63.d.ts","sourceRoot":"","sources":["../../src/ies/parse-lm63.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,kBAAkB,GAAG,8BAA8B,CAAC;IACnF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAiBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAmEhF"}
@@ -0,0 +1,4 @@
1
+ import type { Lm63TypeC } from './parse-lm63.js';
2
+ export declare function readFloat16LE(bytes: Uint8Array, offset: number): number;
3
+ export declare function resampleTypeC(source: Lm63TypeC): Uint8Array;
4
+ //# sourceMappingURL=resample-type-c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resample-type-c.d.ts","sourceRoot":"","sources":["../../src/ies/resample-type-c.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAiEjD,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQvE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CA+B3D"}
@@ -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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"}
package/dist/index.d.ts CHANGED
@@ -1,18 +1,23 @@
1
- export type { AnimationClip, AnimationGraph, Asset, AudioClipAsset, EquirectAsset, FontAsset, MaterialAsset, MeshAsset, ParticleEffectAsset, RenderPipelineAsset, SamplerAsset, SceneAsset, SkeletonAsset, SkinAsset, TextureAsset, TilesetAsset, VideoAsset, } from '@forgeax/engine-types';
1
+ export type { AnimationClip, AnimationGraph, Asset, AudioClipAsset, EquirectAsset, FontAsset, IesProfileAsset, 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 { type BuildProductionFailure, type BuildProductionFile, type BuildProductionOptions, type BuildProductionSink, produceBuildAssets, type ScriptableBuildPackage, } from './build-production.js';
3
+ export { type BuildProductionFailure, type BuildProductionFile, type BuildProductionOptions, type BuildProductionSink, produceBuildAssets, } from './build-production.js';
4
4
  export { type CatalogImporterDisposition, type CatalogImporterPolicy, catalogImporterPolicy, DEFAULT_CATALOG_IMPORTER_KEYS, } from './catalog-importer-policy.js';
5
5
  export { buildCatalogResult } from './catalog-inventory.js';
6
+ export { iesImporter, validateIesProfilePayload, } from './ies/ies-importer.js';
7
+ export { type Lm63ParseError, type Lm63TypeC, parseLm63TypeC, } from './ies/parse-lm63.js';
8
+ export { readFloat16LE, resampleTypeC } from './ies/resample-type-c.js';
6
9
  export { createImportProduct, finalizeImportProducts, type ImportAssetProduct, type ImportProductContractError, type TerminalImportProduct, } from './import-product.js';
7
10
  export { type DdcPack, type ImportRunnerFs, normaliseForPack, type RunImportMeta, type RunImportOk, type RunImportProductResult, type RunImportResult, runImport, SHADER_RESERVED_IMPORTER_KEY, } from './import-runner.js';
8
11
  export { ImporterRegistry } from './importer-registry.js';
9
12
  export { type MeshBinEncodeError, packMeshBinV4, } from './mesh-bin.js';
13
+ export { deriveDefaultLodScreenCoverages, type MeshLodBounds, type MeshLodContractError, type MeshLodContractInput, type MeshLodMaterialSlot, type MeshLodMetaEntry, type MeshLodRelation, type ReconciledMeshLodMeta, reconcileMeshLodMeta, validateMeshLodContract, } from './mesh-lod.js';
10
14
  export { projectImportProductForBuild } from './pack-projection.js';
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';
12
- export { type AuthoredPackTransport, type CookedAuthoredPack, canonicalScriptableSourcePath, declaredPackExternalOutputs, materializePreparedScriptablePack, type PreparedScriptablePack, prepareAuthoredPackTransport, produceScriptablePackProducts, projectScriptablePackPublication, readCookedAuthoredPack, type ScriptablePackExternalImportOptions, type ScriptablePackInput, type ScriptablePackPublicationFacts, type ScriptablePackTransportPaths, type ScriptablePackTransportPolicy, type ScriptablePackTransportSink, scriptablePackInputs, } from './scriptable-pack-host.js';
13
- export { createSceneAssetOutputProducer, createStandardAssetOutputProducerRegistry, materialAssetOutputProducer, meshAssetOutputProducer, textureAssetOutputProducer, } from './scriptable-pack-output-producers.js';
15
+ export { buildParameterizedScriptablePack, buildParameterizedScriptablePackWorklist, type ParameterizedScriptablePackBuildOptions, type ParameterizedScriptablePackBuildProduct, type ParameterizedScriptablePackBuildResult, type ParameterizedScriptablePackWorkItem, type ParameterizedScriptablePackWorklistOptions, type ParameterizedScriptablePackWorklistProduct, } from './parameterized-scriptable-pack.js';
16
+ export { type AssetOutputInput, type AssetOutputPayload, type AssetOutputProducer, AssetOutputProducerRegistry, type AssetOutputProduct, type ScriptablePackAssetSnapshot, type ScriptablePackAssetSnapshotSource, type ScriptablePackBuildProduct, type ScriptablePackDomainError, type ScriptablePackExternalEvidence, type ScriptablePackExternalUsage, type ScriptablePackSourceClosureEntry, type ScriptablePackStagedOutput, } from './scriptable-pack.js';
17
+ export { createScriptablePackFileAssetSnapshotSource, type ScriptablePackFileAssetSnapshotError, type ScriptablePackFileAssetSnapshotSourceOptions, } from './scriptable-pack-file-snapshot.js';
18
+ export { canonicalScriptableSourcePath, type DirectPackTransport, type DirectPackTransportInput, declaredPackExternalOutputs, type LegacyPackTransport, materializePreparedParameterizedScriptablePack, type ParameterizedScriptablePackInput, type ParameterizedScriptablePackProductionOptions, type PreparedParameterizedScriptablePack, prepareDirectPackTransport, prepareLegacyPackTransport, produceParameterizedScriptablePackProducts, readCookedAuthoredPack, type ScriptablePackExternalImportOptions, type ScriptablePackPublicationFacts, type ScriptablePackTransportPaths, type ScriptablePackTransportSink, } from './scriptable-pack-host.js';
19
+ export { createPreExternalizedSceneAssetOutputProducer, createSceneAssetOutputProducer, createStandardAssetOutputProducerRegistry, materialAssetOutputProducer, meshAssetOutputProducer, textureAssetOutputProducer, } from './scriptable-pack-output-producers.js';
14
20
  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
21
  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
22
  export { containsSourcePackageError, normalizeSourcePackageError, type SourcePackageError, type SourcePackageErrorCode, type SourcePackageErrorContext, type SourcePackageErrorDetail, type SourcePackageErrorStage, sourcePackageError, } from './source-package-errors.js';
18
23
  export { commitImportPublication, discardImportPublication, type ImportPublicationError, type ImportPublicationInput, type ImportPublicationResult, publishImportPublication, restoreImportPublication, type StagedImportPublication, type StagedImportPublicationResult, stageImportPublication, } from './source-package-publication.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}