@forgeax/engine-gltf 0.0.0-dev.8d955ade1c79

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 (220) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +204 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/__tests__/animation-target-errors.unit.test.d.ts +2 -0
  5. package/dist/__tests__/animation-target-errors.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/bridge-material-samplers.unit.test.d.ts +2 -0
  7. package/dist/__tests__/bridge-material-samplers.unit.test.d.ts.map +1 -0
  8. package/dist/__tests__/bridge-material-values.unit.test.d.ts +2 -0
  9. package/dist/__tests__/bridge-material-values.unit.test.d.ts.map +1 -0
  10. package/dist/__tests__/bridge-mixed-color.unit.test.d.ts +2 -0
  11. package/dist/__tests__/bridge-mixed-color.unit.test.d.ts.map +1 -0
  12. package/dist/__tests__/bridge-sampler-required.test-d.d.ts +2 -0
  13. package/dist/__tests__/bridge-sampler-required.test-d.d.ts.map +1 -0
  14. package/dist/__tests__/bridge-skin-shader-route.unit.test.d.ts +2 -0
  15. package/dist/__tests__/bridge-skin-shader-route.unit.test.d.ts.map +1 -0
  16. package/dist/__tests__/bridge-skin-stride.unit.test.d.ts +2 -0
  17. package/dist/__tests__/bridge-skin-stride.unit.test.d.ts.map +1 -0
  18. package/dist/__tests__/bridge-test-helpers.d.ts +5 -0
  19. package/dist/__tests__/bridge-test-helpers.d.ts.map +1 -0
  20. package/dist/__tests__/bridge.unit.test.d.ts +2 -0
  21. package/dist/__tests__/bridge.unit.test.d.ts.map +1 -0
  22. package/dist/__tests__/cli-gltf.integration.test.d.ts +2 -0
  23. package/dist/__tests__/cli-gltf.integration.test.d.ts.map +1 -0
  24. package/dist/__tests__/color-0-accessor.unit.test.d.ts +2 -0
  25. package/dist/__tests__/color-0-accessor.unit.test.d.ts.map +1 -0
  26. package/dist/__tests__/data-uri-surface.unit.test.d.ts +2 -0
  27. package/dist/__tests__/data-uri-surface.unit.test.d.ts.map +1 -0
  28. package/dist/__tests__/extension-admission.unit.test.d.ts +2 -0
  29. package/dist/__tests__/extension-admission.unit.test.d.ts.map +1 -0
  30. package/dist/__tests__/gltf-error-derived-views.test-d.d.ts +2 -0
  31. package/dist/__tests__/gltf-error-derived-views.test-d.d.ts.map +1 -0
  32. package/dist/__tests__/gltf-error-migration.test.d.ts +2 -0
  33. package/dist/__tests__/gltf-error-migration.test.d.ts.map +1 -0
  34. package/dist/__tests__/gltf-error-policy-owner.unit.test.d.ts +2 -0
  35. package/dist/__tests__/gltf-error-policy-owner.unit.test.d.ts.map +1 -0
  36. package/dist/__tests__/gltf-importer.test.d.ts +2 -0
  37. package/dist/__tests__/gltf-importer.test.d.ts.map +1 -0
  38. package/dist/__tests__/gltf-local-artifacts.test.d.ts +2 -0
  39. package/dist/__tests__/gltf-local-artifacts.test.d.ts.map +1 -0
  40. package/dist/__tests__/gltf.unit.test.d.ts +2 -0
  41. package/dist/__tests__/gltf.unit.test.d.ts.map +1 -0
  42. package/dist/__tests__/malformed-buffer-data-uri.integration.test.d.ts +2 -0
  43. package/dist/__tests__/malformed-buffer-data-uri.integration.test.d.ts.map +1 -0
  44. package/dist/__tests__/material-missing-uv.unit.test.d.ts +2 -0
  45. package/dist/__tests__/material-missing-uv.unit.test.d.ts.map +1 -0
  46. package/dist/__tests__/material-pack-refs.integration.test.d.ts +2 -0
  47. package/dist/__tests__/material-pack-refs.integration.test.d.ts.map +1 -0
  48. package/dist/__tests__/material-per-slot-ir.unit.test.d.ts +2 -0
  49. package/dist/__tests__/material-per-slot-ir.unit.test.d.ts.map +1 -0
  50. package/dist/__tests__/material-texture-transform.unit.test.d.ts +2 -0
  51. package/dist/__tests__/material-texture-transform.unit.test.d.ts.map +1 -0
  52. package/dist/__tests__/material-unused-uv.unit.test.d.ts +2 -0
  53. package/dist/__tests__/material-unused-uv.unit.test.d.ts.map +1 -0
  54. package/dist/__tests__/meshopt-decode.unit.test.d.ts +2 -0
  55. package/dist/__tests__/meshopt-decode.unit.test.d.ts.map +1 -0
  56. package/dist/__tests__/meshopt-falsifier.unit.test.d.ts +2 -0
  57. package/dist/__tests__/meshopt-falsifier.unit.test.d.ts.map +1 -0
  58. package/dist/__tests__/meshopt-mode-filter-owner.test-d.d.ts +2 -0
  59. package/dist/__tests__/meshopt-mode-filter-owner.test-d.d.ts.map +1 -0
  60. package/dist/__tests__/meshopt-real-matrix.integration.test.d.ts +2 -0
  61. package/dist/__tests__/meshopt-real-matrix.integration.test.d.ts.map +1 -0
  62. package/dist/__tests__/morph-import.integration.test.d.ts +2 -0
  63. package/dist/__tests__/morph-import.integration.test.d.ts.map +1 -0
  64. package/dist/__tests__/morph-import.unit.test.d.ts +2 -0
  65. package/dist/__tests__/morph-import.unit.test.d.ts.map +1 -0
  66. package/dist/__tests__/parse-decode.unit.test.d.ts +2 -0
  67. package/dist/__tests__/parse-decode.unit.test.d.ts.map +1 -0
  68. package/dist/__tests__/parse-gltf-multi-uv.test.d.ts +2 -0
  69. package/dist/__tests__/parse-gltf-multi-uv.test.d.ts.map +1 -0
  70. package/dist/__tests__/parse-gltf-skin-attrs.unit.test.d.ts +2 -0
  71. package/dist/__tests__/parse-gltf-skin-attrs.unit.test.d.ts.map +1 -0
  72. package/dist/__tests__/parse-gltf.unit.test.d.ts +2 -0
  73. package/dist/__tests__/parse-gltf.unit.test.d.ts.map +1 -0
  74. package/dist/__tests__/pick-e2e.integration.test.d.ts +2 -0
  75. package/dist/__tests__/pick-e2e.integration.test.d.ts.map +1 -0
  76. package/dist/__tests__/public-surface.unit.test.d.ts +2 -0
  77. package/dist/__tests__/public-surface.unit.test.d.ts.map +1 -0
  78. package/dist/__tests__/source-key-diagnostics.integration.test.d.ts +2 -0
  79. package/dist/__tests__/source-key-diagnostics.integration.test.d.ts.map +1 -0
  80. package/dist/__tests__/source-key-producer.integration.test.d.ts +2 -0
  81. package/dist/__tests__/source-key-producer.integration.test.d.ts.map +1 -0
  82. package/dist/__tests__/source-key.unit.test.d.ts +2 -0
  83. package/dist/__tests__/source-key.unit.test.d.ts.map +1 -0
  84. package/dist/accessor/decode-accessor.d.ts +75 -0
  85. package/dist/accessor/decode-accessor.d.ts.map +1 -0
  86. package/dist/accessor/decode-color.d.ts +15 -0
  87. package/dist/accessor/decode-color.d.ts.map +1 -0
  88. package/dist/accessor/index.d.ts +3 -0
  89. package/dist/accessor/index.d.ts.map +1 -0
  90. package/dist/bridge.d.ts +103 -0
  91. package/dist/bridge.d.ts.map +1 -0
  92. package/dist/check-extensions.d.ts +29 -0
  93. package/dist/check-extensions.d.ts.map +1 -0
  94. package/dist/cli-gltf.d.ts +8 -0
  95. package/dist/cli-gltf.d.ts.map +1 -0
  96. package/dist/cli-gltf.mjs +2435 -0
  97. package/dist/cli-gltf.mjs.map +1 -0
  98. package/dist/data-uri.d.ts +6 -0
  99. package/dist/data-uri.d.ts.map +1 -0
  100. package/dist/errors.d.ts +201 -0
  101. package/dist/errors.d.ts.map +1 -0
  102. package/dist/extract-image-bytes.d.ts +42 -0
  103. package/dist/extract-image-bytes.d.ts.map +1 -0
  104. package/dist/gltf-importer.d.ts +21 -0
  105. package/dist/gltf-importer.d.ts.map +1 -0
  106. package/dist/image-color-space.d.ts +35 -0
  107. package/dist/image-color-space.d.ts.map +1 -0
  108. package/dist/importer-entry.d.ts +10 -0
  109. package/dist/importer-entry.d.ts.map +1 -0
  110. package/dist/importer-entry.mjs +3378 -0
  111. package/dist/importer-entry.mjs.map +1 -0
  112. package/dist/index.d.ts +25 -0
  113. package/dist/index.d.ts.map +1 -0
  114. package/dist/index.mjs +3673 -0
  115. package/dist/index.mjs.map +1 -0
  116. package/dist/meshopt-decode.d.ts +39 -0
  117. package/dist/meshopt-decode.d.ts.map +1 -0
  118. package/dist/node-file-entry.d.ts +14 -0
  119. package/dist/node-file-entry.d.ts.map +1 -0
  120. package/dist/node-file-entry.mjs +1946 -0
  121. package/dist/node-file-entry.mjs.map +1 -0
  122. package/dist/node-path.d.ts +14 -0
  123. package/dist/node-path.d.ts.map +1 -0
  124. package/dist/parse-animation.d.ts +70 -0
  125. package/dist/parse-animation.d.ts.map +1 -0
  126. package/dist/parse-glb-chunks.d.ts +25 -0
  127. package/dist/parse-glb-chunks.d.ts.map +1 -0
  128. package/dist/parse-glb.d.ts +3 -0
  129. package/dist/parse-glb.d.ts.map +1 -0
  130. package/dist/parse-gltf-header.d.ts +18 -0
  131. package/dist/parse-gltf-header.d.ts.map +1 -0
  132. package/dist/parse-gltf.d.ts +263 -0
  133. package/dist/parse-gltf.d.ts.map +1 -0
  134. package/dist/parse-skin.d.ts +70 -0
  135. package/dist/parse-skin.d.ts.map +1 -0
  136. package/dist/reimport-reuse-meta.d.ts +48 -0
  137. package/dist/reimport-reuse-meta.d.ts.map +1 -0
  138. package/dist/serialize-meta.d.ts +2 -0
  139. package/dist/serialize-meta.d.ts.map +1 -0
  140. package/dist/source-key.d.ts +44 -0
  141. package/dist/source-key.d.ts.map +1 -0
  142. package/dist/sub-asset-key.d.ts +12 -0
  143. package/dist/sub-asset-key.d.ts.map +1 -0
  144. package/dist/to-asset-pack.d.ts +2 -0
  145. package/dist/to-asset-pack.d.ts.map +1 -0
  146. package/dist/transform.d.ts +37 -0
  147. package/dist/transform.d.ts.map +1 -0
  148. package/package.json +92 -0
  149. package/src/__tests__/animation-target-errors.unit.test.ts +51 -0
  150. package/src/__tests__/bridge-material-samplers.unit.test.ts +67 -0
  151. package/src/__tests__/bridge-material-values.unit.test.ts +106 -0
  152. package/src/__tests__/bridge-mixed-color.unit.test.ts +100 -0
  153. package/src/__tests__/bridge-sampler-required.test-d.ts +59 -0
  154. package/src/__tests__/bridge-skin-shader-route.unit.test.ts +42 -0
  155. package/src/__tests__/bridge-skin-stride.unit.test.ts +115 -0
  156. package/src/__tests__/bridge-test-helpers.ts +9 -0
  157. package/src/__tests__/bridge.unit.test.ts +1227 -0
  158. package/src/__tests__/cli-gltf.integration.test.ts +122 -0
  159. package/src/__tests__/color-0-accessor.unit.test.ts +174 -0
  160. package/src/__tests__/data-uri-surface.unit.test.ts +26 -0
  161. package/src/__tests__/extension-admission.unit.test.ts +19 -0
  162. package/src/__tests__/fixtures/color-0/float-vec3.gltf +13 -0
  163. package/src/__tests__/fixtures/color-0/interleaved-vec3.gltf +6 -0
  164. package/src/__tests__/fixtures/color-0/normalized-ubyte.gltf +6 -0
  165. package/src/__tests__/fixtures/color-0/normalized-ushort.gltf +6 -0
  166. package/src/__tests__/gltf-error-derived-views.test-d.ts +152 -0
  167. package/src/__tests__/gltf-error-migration.test.ts +147 -0
  168. package/src/__tests__/gltf-error-policy-owner.unit.test.ts +185 -0
  169. package/src/__tests__/gltf-importer.test.ts +12 -0
  170. package/src/__tests__/gltf-local-artifacts.test.ts +11 -0
  171. package/src/__tests__/gltf.unit.test.ts +2975 -0
  172. package/src/__tests__/malformed-buffer-data-uri.integration.test.ts +140 -0
  173. package/src/__tests__/material-missing-uv.unit.test.ts +29 -0
  174. package/src/__tests__/material-pack-refs.integration.test.ts +58 -0
  175. package/src/__tests__/material-per-slot-ir.unit.test.ts +90 -0
  176. package/src/__tests__/material-texture-transform.unit.test.ts +105 -0
  177. package/src/__tests__/material-unused-uv.unit.test.ts +44 -0
  178. package/src/__tests__/meshopt-decode.unit.test.ts +87 -0
  179. package/src/__tests__/meshopt-falsifier.unit.test.ts +92 -0
  180. package/src/__tests__/meshopt-mode-filter-owner.test-d.ts +79 -0
  181. package/src/__tests__/meshopt-real-matrix.integration.test.ts +370 -0
  182. package/src/__tests__/morph-import.integration.test.ts +115 -0
  183. package/src/__tests__/morph-import.unit.test.ts +62 -0
  184. package/src/__tests__/parse-decode.unit.test.ts +919 -0
  185. package/src/__tests__/parse-gltf-multi-uv.test.ts +238 -0
  186. package/src/__tests__/parse-gltf-skin-attrs.unit.test.ts +191 -0
  187. package/src/__tests__/parse-gltf.unit.test.ts +133 -0
  188. package/src/__tests__/pick-e2e.integration.test.ts +238 -0
  189. package/src/__tests__/public-surface.unit.test.ts +10 -0
  190. package/src/__tests__/source-key-diagnostics.integration.test.ts +140 -0
  191. package/src/__tests__/source-key-producer.integration.test.ts +171 -0
  192. package/src/__tests__/source-key.unit.test.ts +159 -0
  193. package/src/accessor/decode-accessor.ts +309 -0
  194. package/src/accessor/decode-color.ts +128 -0
  195. package/src/accessor/index.ts +15 -0
  196. package/src/bridge.ts +928 -0
  197. package/src/check-extensions.ts +85 -0
  198. package/src/cli-gltf.ts +339 -0
  199. package/src/data-uri.ts +29 -0
  200. package/src/errors.ts +386 -0
  201. package/src/extract-image-bytes.ts +343 -0
  202. package/src/gltf-importer.ts +976 -0
  203. package/src/image-color-space.ts +104 -0
  204. package/src/importer-entry.ts +24 -0
  205. package/src/index.ts +148 -0
  206. package/src/meshopt-decode.ts +200 -0
  207. package/src/node-file-entry.ts +98 -0
  208. package/src/node-path.ts +41 -0
  209. package/src/parse-animation.ts +286 -0
  210. package/src/parse-glb-chunks.ts +167 -0
  211. package/src/parse-glb.ts +16 -0
  212. package/src/parse-gltf-header.ts +58 -0
  213. package/src/parse-gltf.ts +1731 -0
  214. package/src/parse-skin.ts +238 -0
  215. package/src/reimport-reuse-meta.ts +134 -0
  216. package/src/serialize-meta.ts +24 -0
  217. package/src/source-key.ts +106 -0
  218. package/src/sub-asset-key.ts +61 -0
  219. package/src/to-asset-pack.ts +8 -0
  220. package/src/transform.ts +117 -0
@@ -0,0 +1,6 @@
1
+ export declare class Base64DecodeError extends Error {
2
+ constructor(cause: unknown);
3
+ }
4
+ export declare function dataUriBase64Payload(uri: string): string | undefined;
5
+ export declare function decodeBase64(b64: string): Uint8Array;
6
+ //# sourceMappingURL=data-uri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-uri.d.ts","sourceRoot":"","sources":["../src/data-uri.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,KAAK,EAAE,OAAO;CAM3B;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAYpD"}
@@ -0,0 +1,201 @@
1
+ export { createMaterialError, err, type GltfMaterialUvSetMissingDetail, type MaterialError, ok, type Result, } from '@forgeax/engine-types';
2
+ import type { VertexAttributePackDetail } from '@forgeax/engine-types';
3
+ export declare const GLTF_MESHOPT_MODES: readonly ["ATTRIBUTES", "TRIANGLES", "INDICES"];
4
+ export type GltfMeshoptMode = (typeof GLTF_MESHOPT_MODES)[number];
5
+ export declare const GLTF_MESHOPT_FILTERS: readonly ["NONE", "OCTAHEDRAL", "QUATERNION", "EXPONENTIAL"];
6
+ export type GltfMeshoptFilter = (typeof GLTF_MESHOPT_FILTERS)[number];
7
+ /** `gltf-malformed-header` payload: GLB magic / chunk header surface. */
8
+ export interface GltfMalformedHeaderDetail {
9
+ readonly filePath: string;
10
+ readonly byteOffset: number;
11
+ readonly magic?: number;
12
+ }
13
+ /** `gltf-version-unsupported` payload: surfaced asset.version literal. */
14
+ export interface GltfVersionUnsupportedDetail {
15
+ readonly filePath: string;
16
+ readonly actualVersion: string;
17
+ }
18
+ /** `gltf-buffer-out-of-bounds` payload: accessor + bufferView coordinates. */
19
+ export interface GltfBufferOutOfBoundsDetail {
20
+ readonly accessor: number;
21
+ readonly byteOffset: number;
22
+ readonly byteLength: number;
23
+ readonly bufferIndex: number;
24
+ }
25
+ /** `gltf-extension-unsupported` payload: extension name + which array it appeared in. */
26
+ export interface GltfExtensionUnsupportedDetail {
27
+ readonly extension: string;
28
+ readonly source: 'extensionsRequired' | 'extensionsUsed';
29
+ }
30
+ /** `gltf-accessor-type-mismatch` payload: 4-member closed reason discriminator. */
31
+ export interface GltfAccessorTypeMismatchDetail {
32
+ readonly accessorIndex: number;
33
+ readonly reason: 'sparse' | 'morph' | 'interleaved' | 'unknownComponentType';
34
+ }
35
+ /** `gltf-texture-load-failed` payload: URI that failed to load. */
36
+ export interface GltfTextureLoadFailedDetail {
37
+ readonly uri: string;
38
+ }
39
+ /** `gltf-meta-missing` payload: source path + expected sidecar path. */
40
+ export interface GltfMetaMissingDetail {
41
+ readonly filePath: string;
42
+ readonly expectedMetaPath: string;
43
+ }
44
+ /** `gltf-image-mime-unsupported` payload: rejected MIME type. */
45
+ export interface GltfImageMimeUnsupportedDetail {
46
+ readonly mimeType: string;
47
+ }
48
+ /** `gltf-skin-joint-count-exceeded` payload: skin joint count exceeds MAX_JOINTS. */
49
+ export interface GltfSkinJointCountExceededDetail {
50
+ readonly skinIndex: number;
51
+ readonly jointCount: number;
52
+ readonly maxJoints: number;
53
+ }
54
+ /** `gltf-animation-cubicspline-unsupported` payload: CUBICSPLINE sampler. */
55
+ export interface GltfAnimationCubicsplineUnsupportedDetail {
56
+ readonly animationIndex: number;
57
+ readonly samplerIndex: number;
58
+ }
59
+ /** `gltf-morph-unsupported` payload: channel targeting morph weights. */
60
+ export interface GltfMorphUnsupportedDetail {
61
+ readonly animationIndex: number;
62
+ readonly channelIndex: number;
63
+ readonly nodeIndex: number;
64
+ }
65
+ /** `gltf-skin-joint-name-missing` payload: joint node has no name. */
66
+ export interface GltfSkinJointNameMissingDetail {
67
+ readonly reason: 'name-missing' | 'hierarchy-cycle';
68
+ readonly skinIndex: number;
69
+ readonly jointPathIndex: number;
70
+ readonly nodeIndex: number;
71
+ }
72
+ /** `gltf-image-extract-failed` payload: image bytes extraction failure. */
73
+ export interface GltfImageExtractFailedDetail {
74
+ readonly imageIndex: number;
75
+ readonly source: 'bufferView' | 'data-uri' | 'external-uri';
76
+ readonly reason: string;
77
+ }
78
+ /** `gltf-instancing-count-mismatch` payload: TRS accessor count disagreement. */
79
+ export interface GltfInstancingCountMismatchDetail {
80
+ readonly nodeIndex: number;
81
+ readonly accessor: 'TRANSLATION' | 'ROTATION' | 'SCALE';
82
+ readonly expectedCount: number;
83
+ readonly actualCount: number;
84
+ }
85
+ /** `gltf-skin-attr-asymmetric` payload: JOINTS_0/WEIGHTS_0 paired-presence fail. */
86
+ export interface GltfSkinAttrAsymmetricDetail {
87
+ readonly meshIndex: number;
88
+ readonly primitiveIndex: number;
89
+ readonly hasJoints: boolean;
90
+ readonly hasWeights: boolean;
91
+ }
92
+ export interface GltfAnimationTargetInvalidDetail {
93
+ readonly reason: 'name-missing' | 'path-invalid' | 'path-duplicate' | 'path-not-found' | 'hierarchy-cycle' | 'id-collision';
94
+ readonly animationIndex: number;
95
+ readonly channelIndex: number;
96
+ readonly nodeIndex: number;
97
+ }
98
+ export interface GltfMeshoptDecoderRequiredDetail {
99
+ readonly bufferView: number;
100
+ readonly actual: 'required' | 'compressed-only';
101
+ readonly hasCoreFallback: boolean;
102
+ }
103
+ export interface GltfMeshoptDecodeFailedDetail {
104
+ readonly bufferView: number;
105
+ readonly actual: string;
106
+ readonly mode: GltfMeshoptMode;
107
+ readonly filter: GltfMeshoptFilter;
108
+ }
109
+ export interface GltfMorphInvalidDetail {
110
+ readonly meshIndex: number;
111
+ readonly primitiveIndex: number;
112
+ readonly reason: 'target-count-exceeded' | 'attribute-count-exceeded' | 'attribute-length-mismatch' | 'weights-length-mismatch' | 'sparse-or-unsupported-accessor';
113
+ readonly targetCount: number;
114
+ readonly attributeCount: number;
115
+ readonly vertexCount: number;
116
+ }
117
+ export interface GltfColorAccessorUnsupportedDetail {
118
+ readonly semantic: 'COLOR_0';
119
+ readonly accessorIndex: number;
120
+ readonly reason: 'component' | 'type' | 'normalized' | 'sparse' | 'morph';
121
+ readonly expectedType?: string;
122
+ readonly expectedComponent?: string;
123
+ readonly expectedNormalized?: boolean;
124
+ }
125
+ export interface GltfColorAccessorMalformedDetail {
126
+ readonly semantic: 'COLOR_0';
127
+ readonly accessorIndex: number;
128
+ readonly reason: 'count' | 'bounds' | 'finite' | 'range' | 'reference';
129
+ readonly expectedCount?: string;
130
+ readonly expectedRange?: string;
131
+ }
132
+ /** Bridge-side mesh merge failure after the parser has produced a GltfMeshIr. */
133
+ export type GltfMeshBridgeInvalidDetail = {
134
+ readonly reason: 'empty-input';
135
+ readonly primitiveCount: 0;
136
+ } | {
137
+ readonly reason: 'morph-count-mismatch';
138
+ readonly meshIndex: number;
139
+ readonly primitiveIndex: number;
140
+ readonly expectedTargetCount: number;
141
+ readonly actualTargetCount: number;
142
+ } | {
143
+ readonly reason: 'color-cardinality';
144
+ readonly semantic: 'COLOR_0';
145
+ readonly meshIndex: number;
146
+ readonly primitiveIndex: number;
147
+ readonly vertexCount: number;
148
+ readonly expectedLength: number;
149
+ readonly actualLength: number;
150
+ } | {
151
+ readonly reason: 'layout-invalid';
152
+ readonly meshIndex: number;
153
+ readonly cause: VertexAttributePackDetail;
154
+ };
155
+ /** Discriminated detail family unifying all 19 GltfError variants. */
156
+ export type GltfErrorDetail = DetailFor[GltfErrorCode];
157
+ export type GltfErrorCode = keyof DetailFor;
158
+ export type GltfError = {
159
+ readonly [C in GltfErrorCode]: {
160
+ readonly code: C;
161
+ readonly expected: string;
162
+ readonly hint: string;
163
+ readonly detail: DetailFor[C];
164
+ };
165
+ }[GltfErrorCode];
166
+ export declare const GLTF_ERROR_HINTS: Readonly<Record<GltfErrorCode, string>>;
167
+ interface DetailFor {
168
+ readonly 'gltf-malformed-header': GltfMalformedHeaderDetail;
169
+ readonly 'gltf-version-unsupported': GltfVersionUnsupportedDetail;
170
+ readonly 'gltf-buffer-out-of-bounds': GltfBufferOutOfBoundsDetail;
171
+ readonly 'gltf-extension-unsupported': GltfExtensionUnsupportedDetail;
172
+ readonly 'gltf-accessor-type-mismatch': GltfAccessorTypeMismatchDetail;
173
+ readonly 'gltf-texture-load-failed': GltfTextureLoadFailedDetail;
174
+ readonly 'gltf-meta-missing': GltfMetaMissingDetail;
175
+ readonly 'gltf-instancing-count-mismatch': GltfInstancingCountMismatchDetail;
176
+ readonly 'gltf-image-mime-unsupported': GltfImageMimeUnsupportedDetail;
177
+ readonly 'gltf-skin-joint-count-exceeded': GltfSkinJointCountExceededDetail;
178
+ readonly 'gltf-animation-cubicspline-unsupported': GltfAnimationCubicsplineUnsupportedDetail;
179
+ readonly 'gltf-morph-unsupported': GltfMorphUnsupportedDetail;
180
+ readonly 'gltf-skin-joint-name-missing': GltfSkinJointNameMissingDetail;
181
+ readonly 'gltf-image-extract-failed': GltfImageExtractFailedDetail;
182
+ readonly 'gltf-skin-attr-asymmetric': GltfSkinAttrAsymmetricDetail;
183
+ readonly 'gltf-animation-target-invalid': GltfAnimationTargetInvalidDetail;
184
+ readonly 'gltf-meshopt-decoder-required': GltfMeshoptDecoderRequiredDetail;
185
+ readonly 'gltf-meshopt-decode-failed': GltfMeshoptDecodeFailedDetail;
186
+ readonly 'gltf-morph-invalid': GltfMorphInvalidDetail;
187
+ readonly 'gltf-color-accessor-unsupported': GltfColorAccessorUnsupportedDetail;
188
+ readonly 'gltf-color-accessor-malformed': GltfColorAccessorMalformedDetail;
189
+ readonly 'gltf-mesh-bridge-invalid': GltfMeshBridgeInvalidDetail;
190
+ }
191
+ /**
192
+ * Build a fully-typed GltfError. The discriminated-union return type lets
193
+ * call sites narrow with `switch (e.code)` on the result.
194
+ *
195
+ * Charter proposition 4 explicit-failure: `expected` + `hint` fields are
196
+ * sourced from the SSOT tables - no producer can omit them.
197
+ */
198
+ export declare function gltfErr<C extends GltfErrorCode>(code: C, detail: DetailFor[C]): Extract<GltfError, {
199
+ readonly code: C;
200
+ }>;
201
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ImportContext } from '@forgeax/engine-types';
2
+ /** Source of an image: matches `GltfImageExtractFailedDetail.source`. */
3
+ export type ImageSourceKind = 'bufferView' | 'data-uri' | 'external-uri';
4
+ /** One extracted image: bytes + the source kind that produced them. */
5
+ export interface ExtractedImage {
6
+ readonly bytes: Uint8Array;
7
+ readonly mimeType: 'image/png' | 'image/jpeg';
8
+ readonly source: ImageSourceKind;
9
+ }
10
+ /**
11
+ * Failure shape — the importer wraps this in a `gltf-image-extract-failed`
12
+ * GltfError. `source` may be undefined when the image row is malformed
13
+ * (no uri / no bufferView), so the importer can name 'bufferView' (most
14
+ * common) by default.
15
+ */
16
+ export interface ExtractFailure {
17
+ readonly imageIndex: number;
18
+ readonly source: ImageSourceKind;
19
+ readonly reason: string;
20
+ }
21
+ /**
22
+ * Extract raw image bytes for every `images[]` row in the parsed glTF doc.
23
+ *
24
+ * @param sourceBytes the original .glb / .gltf file bytes (the GLB BIN
25
+ * chunk is reconstructed from these for buffer-0 lookups).
26
+ * @param sourcePath the meta.source path; used only for diagnostics
27
+ * (parseGlbChunks errors carry it through).
28
+ * @param ctx the ImportContext — reused for `readSibling` (external
29
+ * buffer .bin / external image .png/.jpg). data: URIs do not call ctx.
30
+ *
31
+ * Returns a Map<imageIndex, ExtractedImage> with one entry per resolved
32
+ * image. Rows that fail to extract are returned in `failures[]` so the
33
+ * caller can emit one `gltf-image-extract-failed` per failure (single
34
+ * failure does not abort the whole importer — the runner's GUID iron-law
35
+ * check then surfaces missing image GUIDs as a structured outage instead
36
+ * of the silent white-box render).
37
+ */
38
+ export declare function extractImageBytes(sourceBytes: Uint8Array, sourcePath: string, ctx: ImportContext): Promise<{
39
+ readonly extracted: ReadonlyMap<number, ExtractedImage>;
40
+ readonly failures: readonly ExtractFailure[];
41
+ }>;
42
+ //# sourceMappingURL=extract-image-bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-image-bytes.d.ts","sourceRoot":"","sources":["../src/extract-image-bytes.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAkC,MAAM,uBAAuB,CAAC;AAI3F,yEAAyE;AACzE,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CAAC;AAEzE,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,YAAY,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AA0DD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC;IACT,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C,CAAC,CAqND"}
@@ -0,0 +1,21 @@
1
+ import type { AssetRef, Importer } from '@forgeax/engine-types';
2
+ import type { GltfBufferViewDecodeCapability } from './meshopt-decode.js';
3
+ import type { GltfDoc, GltfMaterialIr } from './parse-gltf.js';
4
+ /** Collect texture and sampler GUID refs for one material (AC-11 cross-edge). */
5
+ export declare function materialRefsForPack(mat: GltfMaterialIr, doc: GltfDoc, textureGuidByIndex: ReadonlyMap<number, string>, samplerGuidByIndex?: ReadonlyMap<number, string>): readonly AssetRef[];
6
+ /**
7
+ * The gltf {@link Importer}. Register it into an `ImporterRegistry` so the
8
+ * import runner dispatches `meta.importer === 'gltf'` sidecars here.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { ImporterRegistry } from '@forgeax/engine-import';
13
+ * import { gltfImporter } from '@forgeax/engine-gltf';
14
+ * const importers = new ImporterRegistry();
15
+ * importers.register(gltfImporter);
16
+ * ```
17
+ */
18
+ export declare function createGltfImporter(meshopt?: GltfBufferViewDecodeCapability): Importer;
19
+ /** Importer for hosts that provide an optional build-only Meshopt decoder. */
20
+ export declare const gltfImporter: Importer;
21
+ //# sourceMappingURL=gltf-importer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gltf-importer.d.ts","sourceRoot":"","sources":["../src/gltf-importer.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAEV,QAAQ,EAIR,QAAQ,EAMT,MAAM,uBAAuB,CAAC;AAiB/B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAwTlF,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,OAAO,EACZ,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/C,kBAAkB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAC1D,SAAS,QAAQ,EAAE,CA+BrB;AA2hBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,8BAA8B,GAAG,QAAQ,CAMrF;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,QAA+B,CAAC"}
@@ -0,0 +1,35 @@
1
+ export type ImageColorSpaceSrgbOrLinear = 'srgb' | 'linear';
2
+ type TextureBinding = number | {
3
+ readonly texture: number;
4
+ };
5
+ /** Slim view of a parsed material the classifier reads (subset of MaterialIr). */
6
+ export interface MaterialColorSpaceInput {
7
+ readonly baseColorTexture?: TextureBinding;
8
+ readonly metallicRoughnessTexture?: TextureBinding;
9
+ readonly normalTexture?: TextureBinding;
10
+ readonly emissiveTexture?: TextureBinding;
11
+ readonly occlusionTexture?: TextureBinding;
12
+ }
13
+ /** Slim view of a parsed `textures[]` row. */
14
+ export interface TextureColorSpaceInput {
15
+ readonly source: number;
16
+ }
17
+ /**
18
+ * Inputs for {@link deriveTextureColorSpace}: just the parts of the parsed
19
+ * doc that the classifier reads. Decoupled from `GltfDoc` so the helper is
20
+ * trivially testable without building a full doc.
21
+ */
22
+ export interface DeriveTextureColorSpaceInput {
23
+ readonly imageCount: number;
24
+ readonly textures: readonly TextureColorSpaceInput[] | undefined;
25
+ readonly materials: readonly MaterialColorSpaceInput[];
26
+ }
27
+ /**
28
+ * Walk the materials, follow each texture-slot binding back to the image
29
+ * it references, and produce `Map<imageIndex, 'srgb' | 'linear'>`. Slots
30
+ * disagreeing on the same image resolve to sRGB (see module header for
31
+ * the rationale). Orphan images default to linear.
32
+ */
33
+ export declare function deriveTextureColorSpace(input: DeriveTextureColorSpaceInput): Map<number, ImageColorSpaceSrgbOrLinear>;
34
+ export {};
35
+ //# sourceMappingURL=image-color-space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-color-space.d.ts","sourceRoot":"","sources":["../src/image-color-space.ts"],"names":[],"mappings":"AA2BA,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5D,KAAK,cAAc,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAC3C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,cAAc,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,cAAc,CAAC;CAC5C;AAED,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACxD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,4BAA4B,GAClC,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAuC1C"}
@@ -0,0 +1,10 @@
1
+ import type { GltfBufferViewDecodeCapability } from './meshopt-decode.js';
2
+ /** Browser/build consumer capability for EXT_meshopt_compression. */
3
+ export declare const meshoptDecoder: GltfBufferViewDecodeCapability;
4
+ /**
5
+ * Build-only glTF importer entry. The player-facing package remains free of
6
+ * the Meshopt WASM dependency; hosts opt into this entry when importing files.
7
+ */
8
+ export declare const gltfImporter: import("@forgeax/engine-types").Importer;
9
+ export { createGltfImporter } from './gltf-importer.js';
10
+ //# sourceMappingURL=importer-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-entry.d.ts","sourceRoot":"","sources":["../src/importer-entry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAI1E,qEAAqE;AACrE,eAAO,MAAM,cAAc,EAAE,8BAM5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,0CAEvB,CAAC;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}