@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,"file":"mesh-bin.d.ts","sourceRoot":"","sources":["../src/mesh-bin.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,MAAM,EAEZ,MAAM,uBAAuB,CAAC;AAE/B,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;CAAE,GAAG;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,oBAAoB,GACpB;IACE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAiEN,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAiIxC"}
1
+ {"version":3,"file":"mesh-bin.d.ts","sourceRoot":"","sources":["../src/mesh-bin.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAEL,KAAK,SAAS,EAEd,KAAK,MAAM,EAEZ,MAAM,uBAAuB,CAAC;AAE/B,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS;CAAE,GAAG;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,oBAAoB,GACpB;IACE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAuGN,qFAAqF;AACrF,wBAAgB,aAAa,CAC3B,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAiIxC"}
package/dist/mesh-bin.mjs CHANGED
@@ -48,12 +48,40 @@ function refsMeta(payload, refs) {
48
48
  };
49
49
  }
50
50
  );
51
+ if (payload.lods !== void 0 && payload.lods.length > 7) {
52
+ throw new Error("MeshAsset LOD chain supports at most seven lower-detail levels");
53
+ }
54
+ let previousCoverage = 1;
55
+ const seenLodGuids = /* @__PURE__ */ new Set();
56
+ const lods = payload.lods?.map((lod, lodIndex) => {
57
+ const guid = AssetGuid.format(lod.mesh).toLowerCase();
58
+ const meshRef = refs.findIndex((candidate) => candidate.toLowerCase() === guid);
59
+ if (meshRef < 0) {
60
+ throw new Error(`LOD ${lodIndex} mesh ${guid} is absent from refs`);
61
+ }
62
+ if (seenLodGuids.has(guid)) {
63
+ throw new Error(`LOD ${lodIndex} mesh ${guid} is duplicated`);
64
+ }
65
+ if (!Number.isFinite(lod.screenCoverage) || lod.screenCoverage <= 0 || lod.screenCoverage > 1 || lod.screenCoverage >= previousCoverage) {
66
+ throw new Error(
67
+ `LOD ${lodIndex} screenCoverage must be finite, in (0, 1], and strictly decreasing`
68
+ );
69
+ }
70
+ seenLodGuids.add(guid);
71
+ previousCoverage = lod.screenCoverage;
72
+ return { meshRef, screenCoverage: lod.screenCoverage };
73
+ });
74
+ if (payload.lodHysteresis !== void 0 && (!Number.isFinite(payload.lodHysteresis) || payload.lodHysteresis < 0 || payload.lodHysteresis >= 1)) {
75
+ throw new Error("lodHysteresis must be finite and in [0, 1)");
76
+ }
51
77
  return {
52
78
  submeshes: payload.submeshes === void 0 || payload.submeshes.length === 0 ? [{ indexOffset: 0, indexCount: payload.indices?.length ?? 0, materialSlot: 0 }] : payload.submeshes,
53
79
  materialSlots,
54
80
  ...payload.aabb === void 0 ? {} : { aabb: jsonValue(payload.aabb) },
55
81
  ...payload.morphTargets === void 0 ? {} : { morphTargets: jsonValue(payload.morphTargets) },
56
- ...payload.morphWeights === void 0 ? {} : { morphWeights: jsonValue(payload.morphWeights) }
82
+ ...payload.morphWeights === void 0 ? {} : { morphWeights: jsonValue(payload.morphWeights) },
83
+ ...lods === void 0 ? {} : { lods },
84
+ ...payload.lodHysteresis === void 0 ? {} : { lodHysteresis: payload.lodHysteresis }
57
85
  };
58
86
  }
59
87
  function packMeshBinV4(payload, sourceKey, refs = []) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mesh-bin.ts"],"names":[],"mappings":"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","file":"mesh-bin.mjs","sourcesContent":["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/mesh-bin.ts"],"names":[],"mappings":"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","file":"mesh-bin.mjs","sourcesContent":["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"]}
@@ -0,0 +1,60 @@
1
+ import { type Result } from '@forgeax/engine-types';
2
+ export interface MeshLodMetaEntry {
3
+ readonly sourceKey: string;
4
+ readonly meshGuid: string;
5
+ readonly screenCoverage?: number;
6
+ }
7
+ export interface MeshLodContractInput {
8
+ readonly lods: readonly Readonly<{
9
+ meshGuid: string;
10
+ screenCoverage: number;
11
+ }>[];
12
+ readonly lodHysteresis?: number;
13
+ readonly rootMeshGuid?: string;
14
+ readonly refs?: readonly string[];
15
+ readonly generation?: number;
16
+ readonly rootBounds?: MeshLodBounds;
17
+ readonly lodBounds?: readonly MeshLodBounds[];
18
+ readonly rootMaterialSlots?: readonly MeshLodMaterialSlot[];
19
+ readonly lodMaterialSlots?: readonly (readonly MeshLodMaterialSlot[])[];
20
+ readonly relations?: readonly MeshLodRelation[];
21
+ }
22
+ export interface MeshLodBounds {
23
+ readonly min: readonly [number, number, number];
24
+ readonly max: readonly [number, number, number];
25
+ }
26
+ export interface MeshLodMaterialSlot {
27
+ readonly sourceKey: string;
28
+ }
29
+ export interface MeshLodRelation {
30
+ readonly from: string;
31
+ readonly to: string;
32
+ }
33
+ export type MeshLodContractError = {
34
+ readonly code: 'mesh-lod-contract-invalid';
35
+ readonly reason: string;
36
+ } | {
37
+ readonly code: 'mesh-lod-topology-change';
38
+ readonly reason: string;
39
+ readonly previousIndices: readonly number[];
40
+ readonly nextIndices: readonly number[];
41
+ } | {
42
+ readonly code: 'mesh-lod-authority-conflict';
43
+ readonly reason: string;
44
+ };
45
+ export interface ReconciledMeshLodMeta {
46
+ readonly lods: readonly (MeshLodMetaEntry & {
47
+ readonly screenCoverage: number;
48
+ })[];
49
+ }
50
+ /** Generate the shared first-import screen coverage defaults, including LOD0. */
51
+ export declare function deriveDefaultLodScreenCoverages(levelCount: number): readonly number[];
52
+ export declare function validateMeshLodContract(input: MeshLodContractInput): Result<Readonly<{
53
+ lods: readonly Readonly<{
54
+ meshGuid: string;
55
+ screenCoverage: number;
56
+ }>[];
57
+ }>, MeshLodContractError>;
58
+ /** Preserve sidecar facts by sourceKey while permitting only suffix changes. */
59
+ export declare function reconcileMeshLodMeta(previous: readonly MeshLodMetaEntry[], next: readonly MeshLodMetaEntry[]): Result<ReconciledMeshLodMeta, MeshLodContractError>;
60
+ //# sourceMappingURL=mesh-lod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesh-lod.d.ts","sourceRoot":"","sources":["../src/mesh-lod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { type AnyParameterizedPackDefinition, type PackAuthoringError, PackageId, type PackParameterValue } from '@forgeax/engine-pack/source';
2
+ import type { AssetPublicationEnvelope, Result } from '@forgeax/engine-types';
3
+ import { AssetError, ImportError } from '@forgeax/engine-types';
4
+ import { type TerminalImportProduct } from './import-product.js';
5
+ import type { AssetOutputProducerRegistry, ScriptablePackAssetSnapshotSource, ScriptablePackBuildProduct, ScriptablePackDomainError, ScriptablePackSourceClosureEntry, ScriptablePackStagedOutput } from './scriptable-pack.js';
6
+ export interface ParameterizedScriptablePackBuildOptions {
7
+ readonly definition: AnyParameterizedPackDefinition;
8
+ readonly sourcePath: string;
9
+ /** Instance identity. Omitted for a root source and defaults to definition.packageId. */
10
+ readonly subjectPackageId?: PackageId;
11
+ /** Sparse instance values; defaults are applied before build. */
12
+ readonly values?: Readonly<Record<string, unknown>>;
13
+ /** Effective parent values supplied by the inheritance resolver. */
14
+ readonly inheritedValues?: Readonly<Record<string, PackParameterValue>>;
15
+ readonly assetSource?: ScriptablePackAssetSnapshotSource;
16
+ readonly outputs: AssetOutputProducerRegistry;
17
+ readonly sourceClosure?: readonly ScriptablePackSourceClosureEntry[];
18
+ readonly authoringContractVersion?: string;
19
+ /** Known published GUIDs used for the optional global reference gate. */
20
+ readonly availableGuids?: ReadonlySet<string>;
21
+ /** Worklist mode defers reference closure until every subject is materialized. */
22
+ readonly deferReferenceValidation?: boolean;
23
+ readonly publication?: AssetPublicationEnvelope;
24
+ }
25
+ export interface ParameterizedScriptablePackBuildProduct extends ScriptablePackBuildProduct {
26
+ readonly publication?: AssetPublicationEnvelope;
27
+ }
28
+ export type ParameterizedScriptablePackBuildResult = Result<ParameterizedScriptablePackBuildProduct, PackAuthoringError | ScriptablePackDomainError | AssetError | ImportError | {
29
+ readonly code: string;
30
+ readonly expected: string;
31
+ readonly hint: string;
32
+ readonly detail?: unknown;
33
+ }>;
34
+ /**
35
+ * Execute a v2 Pack source and project its dynamic output map through the
36
+ * existing importer producers. No output GUID or output manifest is read.
37
+ */
38
+ export declare function buildParameterizedScriptablePack(options: ParameterizedScriptablePackBuildOptions): Promise<ParameterizedScriptablePackBuildResult>;
39
+ export interface ParameterizedScriptablePackWorkItem {
40
+ readonly definition: AnyParameterizedPackDefinition;
41
+ readonly sourcePath: string;
42
+ readonly subjectPackageId?: PackageId;
43
+ readonly values?: Readonly<Record<string, unknown>>;
44
+ readonly inheritedValues?: Readonly<Record<string, PackParameterValue>>;
45
+ readonly sourceClosure?: readonly ScriptablePackSourceClosureEntry[];
46
+ }
47
+ export interface ParameterizedScriptablePackWorklistOptions {
48
+ readonly subjects: readonly ParameterizedScriptablePackWorkItem[];
49
+ readonly outputs: AssetOutputProducerRegistry;
50
+ readonly assetSource?: ScriptablePackAssetSnapshotSource;
51
+ readonly availableGuids?: ReadonlySet<string>;
52
+ readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
53
+ readonly maxPasses?: number;
54
+ }
55
+ export interface ParameterizedScriptablePackWorklistProduct {
56
+ readonly products: readonly TerminalImportProduct<unknown>[];
57
+ readonly buildProducts: readonly ParameterizedScriptablePackBuildProduct[];
58
+ readonly stagedOutputs: readonly ScriptablePackStagedOutput[];
59
+ readonly iterations: number;
60
+ }
61
+ /** Build subjects in stable passes; content reads may wait for a later subject. */
62
+ export declare function buildParameterizedScriptablePackWorklist(options: ParameterizedScriptablePackWorklistOptions): Promise<Result<ParameterizedScriptablePackWorklistProduct, PackAuthoringError | ScriptablePackDomainError | AssetError | ImportError | {
63
+ readonly code: string;
64
+ readonly expected: string;
65
+ readonly hint: string;
66
+ readonly detail?: unknown;
67
+ }>>;
68
+ //# sourceMappingURL=parameterized-scriptable-pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameterized-scriptable-pack.d.ts","sourceRoot":"","sources":["../src/parameterized-scriptable-pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { ScriptablePackAssetSnapshotSource } from './scriptable-pack.js';
2
+ export interface ScriptablePackFileAssetSnapshotSourceOptions {
3
+ readonly assetRoots: readonly string[];
4
+ }
5
+ export type ScriptablePackFileAssetSnapshotError = {
6
+ readonly code: 'scriptable-pack-file-root-unreadable';
7
+ readonly expected: string;
8
+ readonly hint: string;
9
+ readonly detail: {
10
+ readonly root: string;
11
+ readonly reason: string;
12
+ };
13
+ } | {
14
+ readonly code: 'scriptable-pack-file-unreadable';
15
+ readonly expected: string;
16
+ readonly hint: string;
17
+ readonly detail: {
18
+ readonly path: string;
19
+ readonly reason: string;
20
+ };
21
+ } | {
22
+ readonly code: 'scriptable-pack-file-json-invalid';
23
+ readonly expected: string;
24
+ readonly hint: string;
25
+ readonly detail: {
26
+ readonly path: string;
27
+ readonly reason: string;
28
+ };
29
+ } | {
30
+ readonly code: 'scriptable-pack-file-invalid';
31
+ readonly expected: string;
32
+ readonly hint: string;
33
+ readonly detail: {
34
+ readonly path: string;
35
+ readonly ajvErrors: readonly {
36
+ readonly instancePath: string;
37
+ readonly message: string;
38
+ }[];
39
+ };
40
+ } | {
41
+ readonly code: 'scriptable-pack-file-guid-collision';
42
+ readonly expected: string;
43
+ readonly hint: string;
44
+ readonly detail: {
45
+ readonly guid: string;
46
+ readonly paths: readonly [string, string];
47
+ };
48
+ } | {
49
+ readonly code: 'scriptable-pack-file-asset-invalid';
50
+ readonly expected: string;
51
+ readonly hint: string;
52
+ readonly detail: {
53
+ readonly path: string;
54
+ readonly guid: string;
55
+ readonly reason: string;
56
+ };
57
+ } | {
58
+ readonly code: 'asset-not-found';
59
+ readonly expected: string;
60
+ readonly hint: string;
61
+ readonly detail: {
62
+ readonly guid: string;
63
+ };
64
+ };
65
+ /**
66
+ * Create a build-time ScriptablePack reader backed by ordinary `.pack.json`
67
+ * files below the configured asset roots. The first read builds one immutable
68
+ * GUID index; subsequent reads return private Asset snapshots from that index.
69
+ */
70
+ export declare function createScriptablePackFileAssetSnapshotSource(options: ScriptablePackFileAssetSnapshotSourceOptions): ScriptablePackAssetSnapshotSource;
71
+ //# sourceMappingURL=scriptable-pack-file-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptable-pack-file-snapshot.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-file-snapshot.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,iCAAiC,EAClC,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,4CAA4C;IAC3D,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,MAAM,oCAAoC,GAC5C;IACE,QAAQ,CAAC,IAAI,EAAE,sCAAsC,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iCAAiC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,8BAA8B,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,SAAS,EAAE,SAAS;YAAE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC5F,CAAC;CACH,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,qCAAqC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CACvF,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,oCAAoC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5F,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C,CAAC;AA4PN;;;;GAIG;AACH,wBAAgB,2CAA2C,CACzD,OAAO,EAAE,4CAA4C,GACpD,iCAAiC,CAyBnC"}
@@ -1,32 +1,44 @@
1
- import { type AuthoredPackInput, finalizePackageTransportSource, type PackageFinalizePolicy } from '@forgeax/engine-pack/build';
1
+ import { finalizePackageTransportSource, type PackageFinalizePolicy } from '@forgeax/engine-pack/build';
2
+ import { type PackageId as PackageIdType } from '@forgeax/engine-pack/guid';
2
3
  import { type NativeCooker } from '@forgeax/engine-pack/native-cooker';
3
- import type { ScanSourceDeclaration } from '@forgeax/engine-pack/scanner';
4
- import { type ScriptablePackDefinition, type ScriptablePackSourceClosureEntry } from '@forgeax/engine-pack/source';
4
+ import type { LegacyPackInventoryDocument, ScanSourceDeclaration } from '@forgeax/engine-pack/scanner';
5
+ import { type AnyParameterizedPackDefinition, type DirectPackAssetProjection, type ScriptablePackSourceClosureEntry } from '@forgeax/engine-pack/source';
5
6
  import type { AssetGuid as AssetGuidType, AssetPublicationEnvelope, AssetPublicationOutput, ResourceRevision, Result } from '@forgeax/engine-types';
6
7
  import type { DdcPack, ImportRunnerFs } from './import-runner.js';
7
8
  import type { ImporterRegistry } from './importer-registry.js';
8
- import type { ScriptablePackDomainError, ScriptablePackStagedOutput } from './scriptable-pack.js';
9
- import { type ScriptableSourcePackageProduct, type ScriptableSourcePackageResult } from './scriptable-source-package.js';
9
+ import { type ParameterizedScriptablePackBuildProduct } from './parameterized-scriptable-pack.js';
10
+ import type { ScriptablePackAssetSnapshotSource, ScriptablePackStagedOutput } from './scriptable-pack.js';
10
11
  type FinalizedPackageTransport = Awaited<ReturnType<typeof finalizePackageTransportSource>>;
11
- export interface ScriptablePackInput {
12
+ export interface ParameterizedScriptablePackInput {
12
13
  readonly sourcePath: string;
13
14
  readonly displaySourcePath: string;
14
- readonly definition: Readonly<ScriptablePackDefinition>;
15
+ readonly definition: AnyParameterizedPackDefinition;
15
16
  readonly sourceClosure: readonly ScriptablePackSourceClosureEntry[];
16
17
  readonly publicationGeneration: number;
17
- readonly policy: ScriptablePackTransportPolicy;
18
+ readonly policy: PackageFinalizePolicy | ((product: ParameterizedScriptablePackBuildProduct) => PackageFinalizePolicy);
19
+ readonly subjectPackageId?: PackageIdType;
20
+ readonly values?: Readonly<Record<string, unknown>>;
21
+ readonly inheritedValues?: Readonly<Record<string, import('@forgeax/engine-pack/source').PackParameterValue>>;
18
22
  }
19
- export interface ScriptablePackPublicationFacts {
20
- readonly outputs: readonly AssetPublicationOutput[];
21
- readonly refs: ReadonlyMap<string, readonly string[]>;
22
- }
23
- export interface PreparedScriptablePack {
24
- readonly product: ScriptableSourcePackageProduct;
23
+ export interface PreparedParameterizedScriptablePack {
24
+ readonly product: ParameterizedScriptablePackBuildProduct;
25
25
  readonly finalized: FinalizedPackageTransport;
26
26
  readonly facts: ScriptablePackPublicationFacts;
27
27
  readonly revision: ResourceRevision;
28
28
  readonly publication: AssetPublicationEnvelope;
29
29
  }
30
+ export interface ParameterizedScriptablePackProductionOptions {
31
+ readonly sources: readonly ParameterizedScriptablePackInput[];
32
+ readonly declaredExternalOutputs?: readonly ScriptablePackStagedOutput[];
33
+ readonly assetSource?: ScriptablePackAssetSnapshotSource;
34
+ readonly availableGuids?: ReadonlySet<string>;
35
+ readonly incomingRefs?: ReadonlyMap<string, readonly string[]>;
36
+ readonly maxPasses?: number;
37
+ }
38
+ export interface ScriptablePackPublicationFacts {
39
+ readonly outputs: readonly AssetPublicationOutput[];
40
+ readonly refs: ReadonlyMap<string, readonly string[]>;
41
+ }
30
42
  export interface ScriptablePackTransportPaths {
31
43
  readonly packagePath: string;
32
44
  readonly artifactPath: (path: string) => string;
@@ -37,36 +49,55 @@ export interface ScriptablePackTransportSink {
37
49
  writeArtifact(path: string, bytes: Uint8Array, mimeType: string): void | Promise<void>;
38
50
  writeReceipt(path: string, body: string): void | Promise<void>;
39
51
  }
40
- export type ScriptablePackTransportPolicy = PackageFinalizePolicy | ((product: ScriptableSourcePackageProduct) => PackageFinalizePolicy);
41
- type ScriptablePackHostError = ScriptableSourcePackageResult extends Result<unknown, infer E> ? E : never;
42
- export interface CookedAuthoredPack {
43
- readonly logicalPackage: DdcPack;
44
- readonly refsByGuid: ReadonlyMap<string, readonly string[]>;
45
- }
46
- export interface AuthoredPackTransport {
47
- readonly pack: AuthoredPackInput;
48
- readonly firstGuid?: string;
49
- readonly cooked?: CookedAuthoredPack;
50
- readonly finalized?: FinalizedPackageTransport;
51
- }
52
- /** Build-time capabilities required to expose ordinary Meta products to a ScriptablePack. */
52
+ /** Build-time capabilities required to expose ordinary Meta products to a Pack. */
53
53
  export interface ScriptablePackExternalImportOptions {
54
54
  readonly importerRegistry: ImporterRegistry;
55
55
  readonly fsForImport: ImportRunnerFs;
56
- /** Package path aliases from forgeax.assets.paths; defaults to the current project config. */
57
- readonly assetPaths?: Readonly<Record<string, string>>;
58
56
  }
59
57
  export declare function canonicalScriptableSourcePath(sourcePath: string): string;
60
- export declare function scriptablePackInputs(sourcePaths: readonly string[], declarations: ReadonlyMap<string, ScanSourceDeclaration>, cwd: string, generationFor: (displaySourcePath: string) => number, policyFor: (displaySourcePath: string) => ScriptablePackTransportPolicy, sourceIdentityFor?: (sourcePath: string) => string): ScriptablePackInput[];
61
- /** Materialize one accepted ScriptablePack without duplicating dev/build loops. */
62
- export declare function materializePreparedScriptablePack(prepared: PreparedScriptablePack, paths: ScriptablePackTransportPaths, sink: ScriptablePackTransportSink): Promise<ReadonlyMap<string, string>>;
63
- export declare function readCookedAuthoredPack(authoredPack: AuthoredPackInput, cookers?: readonly NativeCooker[], sourcePath?: string): Promise<CookedAuthoredPack | undefined>;
58
+ /** Stage materialized outputs owned by Meta or an already-cooked Pack v2 document. */
64
59
  export declare function declaredPackExternalOutputs(declarations: ReadonlyMap<string, ScanSourceDeclaration>, cookers?: readonly NativeCooker[], requiredGuids?: readonly AssetGuidType[], externalImport?: ScriptablePackExternalImportOptions): Promise<readonly ScriptablePackStagedOutput[]>;
65
- /** Normalize one authored Pack and, when needed, run its registered cooker once. */
66
- export declare function prepareAuthoredPackTransport(authoredPack: AuthoredPackInput, cookers: readonly NativeCooker[] | undefined, policyFor: (guid: string) => PackageFinalizePolicy, sourcePath?: string): Promise<AuthoredPackTransport>;
67
- /** Project one produced ScriptablePack into the publication tuple shared by dev and build. */
68
- export declare function projectScriptablePackPublication(product: ScriptableSourcePackageProduct): Result<ScriptablePackPublicationFacts, ScriptablePackDomainError>;
69
- /** Produce selected ScriptablePacks through one inventory and one staged owner boundary. */
70
- export declare function produceScriptablePackProducts(sources: readonly ScriptablePackInput[], declaredExternalOutputs?: readonly ScriptablePackStagedOutput[]): Promise<Result<ReadonlyMap<string, PreparedScriptablePack>, ScriptablePackHostError>>;
60
+ /** Cook the explicit legacy Pack v2 transport without exposing v1 authoring APIs. */
61
+ export declare function readCookedAuthoredPack(authoredPack: LegacyPackInventoryDocument, cookers?: readonly NativeCooker[], sourcePath?: string): Promise<{
62
+ readonly logicalPackage: Pick<DdcPack, 'assets'>;
63
+ readonly refsByGuid: ReadonlyMap<string, readonly string[]>;
64
+ } | undefined>;
65
+ export interface LegacyPackTransport {
66
+ readonly pack: LegacyPackInventoryDocument;
67
+ readonly firstGuid?: string;
68
+ readonly cooked?: Awaited<ReturnType<typeof readCookedAuthoredPack>>;
69
+ readonly finalized?: FinalizedPackageTransport;
70
+ }
71
+ export interface DirectPackTransport {
72
+ readonly projected: {
73
+ readonly packageId: string;
74
+ readonly assets: readonly DirectPackAssetProjection[];
75
+ };
76
+ readonly product: ParameterizedScriptablePackBuildProduct;
77
+ readonly finalized: FinalizedPackageTransport;
78
+ readonly facts: ScriptablePackPublicationFacts;
79
+ readonly revision: ResourceRevision;
80
+ }
81
+ export interface DirectPackTransportInput {
82
+ readonly projected: DirectPackTransport['projected'];
83
+ readonly sourcePath: string;
84
+ readonly displaySourcePath?: string;
85
+ readonly sourceRevision: string;
86
+ readonly policy: PackageFinalizePolicy;
87
+ readonly availableGuids?: ReadonlySet<string>;
88
+ readonly cookers?: readonly NativeCooker[];
89
+ }
90
+ /** Cook one direct v3 Pack through the same producer/finalizer seam as pack.ts. */
91
+ export declare function prepareDirectPackTransport(input: DirectPackTransportInput): Promise<Result<DirectPackTransport, unknown>>;
92
+ /** Normalize one explicit Pack v2 transport and invoke its registered cookers once. */
93
+ export declare function prepareLegacyPackTransport(authoredPack: LegacyPackInventoryDocument, cookers: readonly NativeCooker[] | undefined, policyFor: (guid: string) => PackageFinalizePolicy, sourcePath?: string): Promise<LegacyPackTransport>;
94
+ /** Materialize a dynamic Pack product through the same dev transport seam. */
95
+ export declare function materializePreparedParameterizedScriptablePack(prepared: PreparedParameterizedScriptablePack, paths: ScriptablePackTransportPaths, sink: ScriptablePackTransportSink): Promise<ReadonlyMap<string, string>>;
96
+ /**
97
+ * Build parameterized sources in one generation and hand their terminal
98
+ * products to the ordinary Pack v2 finalizer. The worklist is deliberately
99
+ * below publication: it only decides which current-generation products exist.
100
+ */
101
+ export declare function produceParameterizedScriptablePackProducts(options: ParameterizedScriptablePackProductionOptions): Promise<Result<ReadonlyMap<string, PreparedParameterizedScriptablePack>, unknown>>;
71
102
  export {};
72
103
  //# sourceMappingURL=scriptable-pack-host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scriptable-pack-host.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-host.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@ export declare const materialAssetOutputProducer: AssetOutputProducer;
4
4
  export declare const meshAssetOutputProducer: AssetOutputProducer;
5
5
  export declare const textureAssetOutputProducer: AssetOutputProducer;
6
6
  export declare function createSceneAssetOutputProducer(sceneComponents?: readonly ScriptablePackSceneComponent[]): AssetOutputProducer;
7
+ export declare function createPreExternalizedSceneAssetOutputProducer(): AssetOutputProducer;
7
8
  export declare function createStandardAssetOutputProducerRegistry(sceneComponents?: readonly ScriptablePackSceneComponent[]): AssetOutputProducerRegistry;
8
9
  //# sourceMappingURL=scriptable-pack-output-producers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scriptable-pack-output-producers.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-output-producers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAkChF,OAAO,EAEL,KAAK,mBAAmB,EACxB,2BAA2B,EAE5B,MAAM,sBAAsB,CAAC;AAuZ9B,eAAO,MAAM,2BAA2B,qBAIvC,CAAC;AACF,eAAO,MAAM,uBAAuB,qBAA2D,CAAC;AAChG,eAAO,MAAM,0BAA0B,qBAItC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,mBAAmB,CAKrB;AAED,wBAAgB,yCAAyC,CACvD,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,2BAA2B,CAuB7B"}
1
+ {"version":3,"file":"scriptable-pack-output-producers.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-output-producers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAmChF,OAAO,EAEL,KAAK,mBAAmB,EACxB,2BAA2B,EAE5B,MAAM,sBAAsB,CAAC;AA0c9B,eAAO,MAAM,2BAA2B,qBAIvC,CAAC;AACF,eAAO,MAAM,uBAAuB,qBAA2D,CAAC;AAChG,eAAO,MAAM,0BAA0B,qBAItC,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,mBAAmB,CAKrB;AAED,wBAAgB,6CAA6C,IAAI,mBAAmB,CAEnF;AAED,wBAAgB,yCAAyC,CACvD,eAAe,GAAE,SAAS,4BAA4B,EAAO,GAC5D,2BAA2B,CAwB7B"}
@@ -1,8 +1,8 @@
1
- import type { ScriptablePackError } from '@forgeax/engine-pack/source';
1
+ import type { PackAuthoringError } from '@forgeax/engine-pack/source';
2
2
  import type { AssetGuid as AssetGuidType, ImportError, Result } from '@forgeax/engine-types';
3
3
  import { AssetError } from '@forgeax/engine-types';
4
4
  import type { ScriptablePackAssetSnapshotSource, ScriptablePackDomainError, ScriptablePackStagedOutput } from './scriptable-pack.js';
5
- export type ScriptablePackSnapshotError = AssetError | ImportError | ScriptablePackError | ScriptablePackDomainError;
5
+ export type ScriptablePackSnapshotError = AssetError | ImportError | PackAuthoringError | ScriptablePackDomainError;
6
6
  export interface ScriptablePackStagedOwner {
7
7
  readonly id: string;
8
8
  readonly guids: readonly AssetGuidType[];
@@ -1 +1 @@
1
- {"version":3,"file":"scriptable-pack-staged-snapshot.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-staged-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAS,SAAS,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAW,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAEV,iCAAiC,EACjC,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,2BAA2B,GACnC,UAAU,GACV,WAAW,GACX,mBAAmB,GACnB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,KAAK,CACH,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,MAAM,CAAC,SAAS,0BAA0B,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC;CACxF;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACtD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC1E;AA8CD;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,mCAAmC,GAC3C,iCAAiC,CA0FnC"}
1
+ {"version":3,"file":"scriptable-pack-staged-snapshot.d.ts","sourceRoot":"","sources":["../src/scriptable-pack-staged-snapshot.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAS,SAAS,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAE,UAAU,EAAW,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAEV,iCAAiC,EACjC,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,2BAA2B,GACnC,UAAU,GACV,WAAW,GACX,kBAAkB,GAClB,yBAAyB,CAAC;AAE9B,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,KAAK,CACH,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,MAAM,CAAC,SAAS,0BAA0B,EAAE,EAAE,2BAA2B,CAAC,CAAC,CAAC;CACxF;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACtD,QAAQ,CAAC,uBAAuB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC1E;AA+CD;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,mCAAmC,GAC3C,iCAAiC,CA0FnC"}