@carbonenginejs/runtime-resource 0.8.0 → 0.9.1

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 (297) hide show
  1. package/LICENSE +21 -21
  2. package/NOTICE +31 -29
  3. package/README.md +67 -548
  4. package/dist/CjsMotherLode.js +1271 -1271
  5. package/dist/CjsResMan.js +3005 -3005
  6. package/dist/CjsResManQueue.js +214 -214
  7. package/dist/CjsResource.js +566 -566
  8. package/dist/CjsResourceSource.js +68 -59
  9. package/dist/CjsResourceSource.js.map +1 -1
  10. package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -153
  11. package/dist/format/CjsBlueReader.js +269 -269
  12. package/dist/format/CjsFormat.js +197 -192
  13. package/dist/format/CjsFormat.js.map +1 -1
  14. package/dist/format/CjsReader.js +18 -18
  15. package/dist/format/CjsResourceProbe.js +277 -277
  16. package/dist/format/payloadContract.js +173 -173
  17. package/dist/formats/black/CjsBlackFormat.js +278 -278
  18. package/dist/formats/black/core/CjsBlackBinaryReader.js +157 -153
  19. package/dist/formats/black/core/CjsBlackBinaryReader.js.map +1 -1
  20. package/dist/formats/black/core/CjsBlackPropertyReaders.js +387 -382
  21. package/dist/formats/black/core/CjsBlackPropertyReaders.js.map +1 -1
  22. package/dist/formats/black/core/CjsBlackReader.js +639 -639
  23. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +437 -433
  24. package/dist/formats/black/core/CjsBlackSchemaRegistry.js.map +1 -1
  25. package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js +4 -0
  26. package/dist/formats/black/core/black-schema-v1-2026-07-23.json.js.map +1 -0
  27. package/dist/formats/black/core/blackConstants.js +7 -7
  28. package/dist/formats/black/core/blackDefinitions.js +10 -10
  29. package/dist/formats/black/core/blackDefinitions.js.map +1 -1
  30. package/dist/formats/black/core/blackEnums.js +6 -6
  31. package/dist/formats/black/core/blackSchema.js +3 -3
  32. package/dist/formats/black/core/blackVersion.js +22 -22
  33. package/dist/formats/black/core/helpers.js +182 -182
  34. package/dist/formats/black/core/schema.js +4 -4
  35. package/dist/formats/black/index.js +2 -2
  36. package/dist/formats/bnk/CjsBnkFormat.js +125 -125
  37. package/dist/formats/bnk/core/graph.js +140 -140
  38. package/dist/formats/bnk/core/helpers.js +409 -409
  39. package/dist/formats/bnk/core/musicNodes.js +493 -489
  40. package/dist/formats/bnk/core/musicNodes.js.map +1 -1
  41. package/dist/formats/bnk/core/soundbanksInfo.js +246 -246
  42. package/dist/formats/bnk/index.js +2 -2
  43. package/dist/formats/cmf/CjsCmfFormat.js +497 -497
  44. package/dist/formats/cmf/core/binary.js +123 -118
  45. package/dist/formats/cmf/core/binary.js.map +1 -1
  46. package/dist/formats/cmf/core/buffers.js +233 -233
  47. package/dist/formats/cmf/core/constants.js +47 -47
  48. package/dist/formats/cmf/core/gr2Anim.js +453 -453
  49. package/dist/formats/cmf/core/helpers.js +287 -287
  50. package/dist/formats/cmf/core/pack.js +276 -276
  51. package/dist/formats/cmf/core/schema.js +364 -364
  52. package/dist/formats/cmf/core/shared.js +268 -268
  53. package/dist/formats/cmf/core/writer.js +517 -517
  54. package/dist/formats/cmf/index.js +2 -2
  55. package/dist/formats/dds/CjsDdsFormat.js +200 -193
  56. package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
  57. package/dist/formats/dds/core/bc6h.js +288 -288
  58. package/dist/formats/dds/core/bc7.js +256 -251
  59. package/dist/formats/dds/core/bc7.js.map +1 -1
  60. package/dist/formats/dds/core/helpers.js +815 -815
  61. package/dist/formats/dds/index.js +2 -2
  62. package/dist/formats/fbx/CjsFbxFormat.js +266 -266
  63. package/dist/formats/fbx/core/helpers.js +3911 -3901
  64. package/dist/formats/fbx/core/helpers.js.map +1 -1
  65. package/dist/formats/fbx/index.js +2 -2
  66. package/dist/formats/flac/CjsFlacFormat.js +93 -87
  67. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  68. package/dist/formats/flac/core/helpers.js +295 -295
  69. package/dist/formats/flac/index.js +2 -2
  70. package/dist/formats/gif/CjsGifFormat.js +92 -87
  71. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  72. package/dist/formats/gif/core/helpers.js +360 -360
  73. package/dist/formats/gif/index.js +2 -2
  74. package/dist/formats/gltf/CjsGltfFormat.js +290 -290
  75. package/dist/formats/gltf/core/helpers.js +292 -292
  76. package/dist/formats/gltf/core/json.js +79 -79
  77. package/dist/formats/gltf/core/parser.js +666 -666
  78. package/dist/formats/gltf/core/targets.js +163 -163
  79. package/dist/formats/gltf/index.js +2 -2
  80. package/dist/formats/gr2/CjsGr2Format.js +46 -0
  81. package/dist/formats/gr2/CjsGr2Format.js.map +1 -0
  82. package/dist/formats/gr2/core/CjsFormatGr2.js +273 -0
  83. package/dist/formats/gr2/core/CjsFormatGr2.js.map +1 -0
  84. package/dist/formats/gr2/core/bitknit2.js +280 -0
  85. package/dist/formats/gr2/core/bitknit2.js.map +1 -0
  86. package/dist/formats/gr2/core/curves.js +1047 -0
  87. package/dist/formats/gr2/core/curves.js.map +1 -0
  88. package/dist/formats/gr2/core/gsf.js +72 -0
  89. package/dist/formats/gr2/core/gsf.js.map +1 -0
  90. package/dist/formats/gr2/core/helpers.js +332 -0
  91. package/dist/formats/gr2/core/helpers.js.map +1 -0
  92. package/dist/formats/gr2/core/json.js +622 -0
  93. package/dist/formats/gr2/core/json.js.map +1 -0
  94. package/dist/formats/gr2/core/oodle1.js +388 -0
  95. package/dist/formats/gr2/core/oodle1.js.map +1 -0
  96. package/dist/formats/gr2/core/reader.js +617 -0
  97. package/dist/formats/gr2/core/reader.js.map +1 -0
  98. package/dist/formats/gr2/core/tangents.js +48 -0
  99. package/dist/formats/gr2/core/tangents.js.map +1 -0
  100. package/dist/formats/gr2/core/targets.js +351 -0
  101. package/dist/formats/gr2/core/targets.js.map +1 -0
  102. package/dist/formats/gr2/index.js +3 -0
  103. package/dist/formats/gr2/index.js.map +1 -0
  104. package/dist/formats/index.js +30 -23
  105. package/dist/formats/index.js.map +1 -1
  106. package/dist/formats/jpeg/CjsJpegFormat.js +212 -206
  107. package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
  108. package/dist/formats/jpeg/core/helpers.js +350 -350
  109. package/dist/formats/jpeg/core/jpeg.js +387 -377
  110. package/dist/formats/jpeg/core/jpeg.js.map +1 -1
  111. package/dist/formats/jpeg/index.js +2 -2
  112. package/dist/formats/mp3/CjsMp3Format.js +197 -192
  113. package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
  114. package/dist/formats/mp3/core/helpers.js +338 -338
  115. package/dist/formats/mp3/index.js +2 -2
  116. package/dist/formats/mp4/CjsMp4Format.js +197 -191
  117. package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
  118. package/dist/formats/mp4/core/helpers.js +449 -449
  119. package/dist/formats/mp4/index.js +2 -2
  120. package/dist/formats/obj/CjsObjFormat.js +253 -253
  121. package/dist/formats/obj/core/helpers.js +573 -573
  122. package/dist/formats/obj/core/json.js +64 -64
  123. package/dist/formats/obj/core/parser.js +321 -321
  124. package/dist/formats/obj/index.js +2 -2
  125. package/dist/formats/ogg/CjsOggFormat.js +94 -88
  126. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  127. package/dist/formats/ogg/core/helpers.js +387 -387
  128. package/dist/formats/ogg/core/imdct.js +178 -178
  129. package/dist/formats/ogg/core/vorbis.js +1004 -999
  130. package/dist/formats/ogg/core/vorbis.js.map +1 -1
  131. package/dist/formats/ogg/index.js +2 -2
  132. package/dist/formats/png/CjsPngFormat.js +201 -195
  133. package/dist/formats/png/CjsPngFormat.js.map +1 -1
  134. package/dist/formats/png/core/helpers.js +583 -583
  135. package/dist/formats/png/index.js +2 -2
  136. package/dist/formats/red/CjsRedFormat.js +261 -261
  137. package/dist/formats/red/core/CjsRedReader.js +194 -194
  138. package/dist/formats/red/core/blackDefinitions.js +3 -3
  139. package/dist/formats/red/core/helpers.js +139 -139
  140. package/dist/formats/red/core/redGraph.js +68 -68
  141. package/dist/formats/red/core/schema.js +4 -4
  142. package/dist/formats/red/index.js +2 -2
  143. package/dist/formats/stl/CjsStlFormat.js +365 -365
  144. package/dist/formats/stl/core/helpers.js +261 -261
  145. package/dist/formats/stl/core/json.js +51 -51
  146. package/dist/formats/stl/core/stl.js +634 -629
  147. package/dist/formats/stl/core/stl.js.map +1 -1
  148. package/dist/formats/stl/core/targets.js +163 -163
  149. package/dist/formats/stl/index.js +2 -2
  150. package/dist/formats/tga/CjsTgaFormat.js +197 -192
  151. package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
  152. package/dist/formats/tga/core/helpers.js +446 -446
  153. package/dist/formats/tga/index.js +2 -2
  154. package/dist/formats/wav/CjsWavFormat.js +198 -192
  155. package/dist/formats/wav/CjsWavFormat.js.map +1 -1
  156. package/dist/formats/wav/core/helpers.js +328 -328
  157. package/dist/formats/wav/index.js +2 -2
  158. package/dist/formats/webm/CjsWebmFormat.js +197 -191
  159. package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
  160. package/dist/formats/webm/core/helpers.js +537 -537
  161. package/dist/formats/webm/index.js +2 -2
  162. package/dist/formats/webp/CjsWebpFormat.js +91 -86
  163. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  164. package/dist/formats/webp/core/helpers.js +214 -214
  165. package/dist/formats/webp/index.js +2 -2
  166. package/dist/formats/wem/CjsWemFormat.js +242 -241
  167. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  168. package/dist/formats/wem/core/bitStream.js +259 -259
  169. package/dist/formats/wem/core/codebookLibrary.js +164 -164
  170. package/dist/formats/wem/core/helpers.js +417 -417
  171. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
  172. package/dist/formats/wem/core/ptadpcm.js +77 -77
  173. package/dist/formats/wem/core/resolve.js +121 -121
  174. package/dist/formats/wem/core/wemToOgg.js +485 -485
  175. package/dist/formats/wem/index.js +2 -2
  176. package/dist/formats/yaml/CjsYamlFormat.js +89 -83
  177. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  178. package/dist/formats/yaml/core/CjsYamlReader.js +311 -305
  179. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  180. package/dist/formats/yaml/core/helpers.js +160 -160
  181. package/dist/formats/yaml/index.js +2 -2
  182. package/dist/index.js +49 -48
  183. package/dist/index.js.map +1 -1
  184. package/dist/resourcePath.js +18 -18
  185. package/dist/resourceStates.js +9 -9
  186. package/dist/resources/AudioGeometryResData.js +47 -47
  187. package/dist/resources/GStateBindingCallbackData.js +31 -31
  188. package/dist/resources/MeshDecalData.js +37 -37
  189. package/dist/resources/MeshDecalLodData.js +34 -34
  190. package/dist/resources/Tr2EffectRes.js +71 -71
  191. package/dist/resources/Tr2GrannyIntersectionResult.js +60 -60
  192. package/dist/resources/Tr2GrannyStateRes.js +44 -44
  193. package/dist/resources/Tr2ImageRes.js +114 -114
  194. package/dist/resources/Tr2LightProfileRes.js +40 -40
  195. package/dist/resources/Tr2MaterialArea.js +34 -34
  196. package/dist/resources/Tr2MaterialMesh.js +31 -31
  197. package/dist/resources/Tr2MaterialRes.js +34 -34
  198. package/dist/resources/Tr2ShaderPermutation.js +43 -43
  199. package/dist/resources/Tr2TextureLodManager.js +80 -80
  200. package/dist/resources/Tr2TextureLodUpdateRequest.js +37 -37
  201. package/dist/resources/Tr2TexturePackChannel.js +37 -37
  202. package/dist/resources/Tr2TexturePipeline.js +52 -52
  203. package/dist/resources/Tr2TexturePipelineParams.js +34 -34
  204. package/dist/resources/Tr2TexturePipelineStepCompress.js +40 -40
  205. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js +22 -0
  206. package/dist/resources/Tr2TexturePipelineStepGenerateMips.js.map +1 -0
  207. package/dist/resources/Tr2TexturePipelineStepLimitSize.js +34 -34
  208. package/dist/resources/Tr2TexturePipelineStepLoad.js +31 -31
  209. package/dist/resources/Tr2TexturePipelineStepPack.js +43 -43
  210. package/dist/resources/TriGeometryRes.js +239 -239
  211. package/dist/resources/TriGeometryResAreaData.js +59 -59
  212. package/dist/resources/TriGeometryResJointData.js +38 -38
  213. package/dist/resources/TriGeometryResLodData.js +88 -88
  214. package/dist/resources/TriGeometryResMeshData.js +63 -63
  215. package/dist/resources/TriGeometryResSkeletonData.js +34 -34
  216. package/dist/resources/TriGrannyRes.js +43 -43
  217. package/dist/resources/TriJointBinding.js +38 -38
  218. package/dist/resources/TriMorphTargetGeometryConstants.js +46 -46
  219. package/dist/resources/TriRtGeometryConstants.js +88 -88
  220. package/dist/resources/TriTextureRes.js +304 -304
  221. package/dist/resources/enums.js +18 -18
  222. package/dist/resources/resourceBoundary.js +47 -47
  223. package/dist/resources/texturePipelineBehavior.js +308 -308
  224. package/dist/texture/CjsTextureArrayRes.js +406 -406
  225. package/dist/texture/CjsTextureParameterProxy.js +133 -133
  226. package/docs/README.md +73 -0
  227. package/docs/architecture.md +86 -0
  228. package/docs/concepts/resource-lifecycle.md +217 -0
  229. package/docs/formats/README.md +105 -0
  230. package/docs/formats/gr2.md +161 -0
  231. package/{FORMAT-PROVENANCE.md → docs/formats/provenance.md} +173 -155
  232. package/docs/formats/stl.md +37 -0
  233. package/docs/formats/wwise.md +44 -0
  234. package/docs/reference/classes/README.md +33 -0
  235. package/docs/reference/classes/core.md +106 -0
  236. package/docs/reference/classes/dropped.md +46 -0
  237. package/docs/reference/classes/formats.md +522 -0
  238. package/docs/reference/classes/resources.md +346 -0
  239. package/docs/reference/classes/texture.md +26 -0
  240. package/docs/reference/events.md +92 -0
  241. package/docs/reference/motherlode-cache.md +244 -0
  242. package/docs/reference/queues.md +102 -0
  243. package/docs/reference/reload.md +107 -0
  244. package/docs/reference/texture-arrays.md +113 -0
  245. package/docs/reference/texture-pipeline.md +53 -0
  246. package/docs/roadmap.md +104 -0
  247. package/format-notices/black/LICENSE +21 -21
  248. package/format-notices/black/NOTICE +47 -47
  249. package/format-notices/bnk/LICENSE +21 -21
  250. package/format-notices/bnk/NOTICE +20 -20
  251. package/format-notices/cmf/LICENSE +21 -21
  252. package/format-notices/cmf/NOTICE +36 -36
  253. package/format-notices/dds/LICENSE +21 -21
  254. package/format-notices/dds/NOTICE +14 -14
  255. package/format-notices/fbx/LICENSE +21 -21
  256. package/format-notices/fbx/NOTICE +14 -14
  257. package/format-notices/flac/LICENSE +21 -21
  258. package/format-notices/flac/NOTICE +14 -14
  259. package/format-notices/gif/LICENSE +21 -21
  260. package/format-notices/gif/NOTICE +14 -14
  261. package/format-notices/gltf/LICENSE +21 -21
  262. package/format-notices/gltf/NOTICE +27 -27
  263. package/format-notices/gr2/LICENSE +21 -0
  264. package/format-notices/gr2/NOTICE +60 -0
  265. package/format-notices/gr2/THIRD-PARTY-NOTICES.md +93 -0
  266. package/format-notices/jpeg/LICENSE +21 -21
  267. package/format-notices/jpeg/NOTICE +14 -14
  268. package/format-notices/mp3/LICENSE +21 -21
  269. package/format-notices/mp3/NOTICE +14 -14
  270. package/format-notices/mp4/LICENSE +21 -21
  271. package/format-notices/mp4/NOTICE +14 -14
  272. package/format-notices/obj/LICENSE +21 -21
  273. package/format-notices/obj/NOTICE +26 -26
  274. package/format-notices/ogg/LICENSE +21 -21
  275. package/format-notices/ogg/NOTICE +28 -28
  276. package/format-notices/png/LICENSE +21 -21
  277. package/format-notices/png/NOTICE +14 -14
  278. package/format-notices/red/LICENSE +21 -21
  279. package/format-notices/red/NOTICE +31 -31
  280. package/format-notices/stl/LICENSE +21 -21
  281. package/format-notices/stl/NOTICE +21 -21
  282. package/format-notices/tga/LICENSE +21 -21
  283. package/format-notices/tga/NOTICE +14 -14
  284. package/format-notices/wav/LICENSE +21 -21
  285. package/format-notices/wav/NOTICE +14 -14
  286. package/format-notices/webm/LICENSE +21 -21
  287. package/format-notices/webm/NOTICE +14 -14
  288. package/format-notices/webp/LICENSE +21 -21
  289. package/format-notices/webp/NOTICE +14 -14
  290. package/format-notices/wem/LICENSE +57 -57
  291. package/format-notices/wem/NOTICE +33 -33
  292. package/format-notices/yaml/LICENSE +21 -21
  293. package/format-notices/yaml/NOTICE +44 -44
  294. package/package.json +52 -51
  295. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +0 -4
  296. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js.map +0 -1
  297. package/resource-lifecycle.md +0 -679
@@ -1,292 +1,292 @@
1
- import { CLASS_KEYS as CLASS_KEYS$1, hydrateJson } from './json.js';
2
- import { CMF_CLASS_KEYS, hydrateCmf, buildCmfFromShared } from './targets.js';
3
- import { parseInput, parseGltfToJson, inspectGltf } from './parser.js';
4
- export { isGlb, toBytes } from './parser.js';
5
- import { generateNormals, generateTangents, generateBiNormals } from '@carbonenginejs/core-math/mesh';
6
- import { packTangentFrames } from '@carbonenginejs/core-math/tangent';
7
- import { normalize, cross } from '@carbonenginejs/core-math/vec3';
8
-
9
- /**
10
- * Internal read-pipeline glue for CjsGltfFormat.
11
- */
12
-
13
- const CLASS_KEYS = Object.freeze(Array.from(new Set([...CLASS_KEYS$1, ...CMF_CLASS_KEYS])));
14
- const OUTPUT_JSON = "json";
15
- const OUTPUT_GLTF_JSON = "gltfJson";
16
- const OUTPUT_SHARED = "shared";
17
- const OUTPUT_GR2 = "gr2";
18
- const OUTPUT_CMF = "cmf";
19
- const DEFAULT_VALUES = Object.freeze({
20
- emit: OUTPUT_GLTF_JSON,
21
- source: "memory",
22
- buffers: null,
23
- packTangents: false,
24
- uvHandedness: "right",
25
- rebuildMissingNormals: false,
26
- rebuildMissingTangents: false,
27
- rebuildMissingBiNormals: false,
28
- classes: Object.freeze({})
29
- });
30
- const OPTION_KEYS = new Set(["emit", "source", "buffers", "packTangents", "uvHandedness", "rebuildMissingNormals", "rebuildMissingTangents", "rebuildMissingBiNormals", "classes"]);
31
- function validateClassKey(key, readerName = "CjsGltfFormat") {
32
- if (!CLASS_KEYS.includes(key)) {
33
- throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(", ")}`);
34
- }
35
- }
36
- function validateClass(key, Class, readerName = "CjsGltfFormat") {
37
- validateClassKey(key, readerName);
38
- if (typeof Class !== "function") {
39
- throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);
40
- }
41
- }
42
- function mergeClasses(base, classes, readerName) {
43
- if (!classes || typeof classes !== "object") {
44
- throw new TypeError(`${readerName}: classes option must be an object`);
45
- }
46
- const next = {
47
- ...base
48
- };
49
- for (const [key, Class] of Object.entries(classes)) {
50
- if (Class === null || Class === undefined) {
51
- delete next[key];
52
- continue;
53
- }
54
- validateClass(key, Class, readerName);
55
- next[key] = Class;
56
- }
57
- return next;
58
- }
59
- function validateRule(name, value, readerName) {
60
- if (typeof value === "boolean" || typeof value === "function") return value;
61
- throw new TypeError(`${readerName}: ${name} must be true, false, or a function`);
62
- }
63
- function normalizeUvHandedness(value, readerName) {
64
- if (value === undefined || value === null) return DEFAULT_VALUES.uvHandedness;
65
- if (value === "right" || value === 1 || value === "positive") return "right";
66
- if (value === "left" || value === -1 || value === "negative") return "left";
67
- throw new TypeError(`${readerName}: uvHandedness must be "right" or "left"`);
68
- }
69
- function normalizeValues(base, options = {}, readerName = "CjsGltfFormat") {
70
- if (!options || typeof options !== "object") {
71
- throw new TypeError(`${readerName}: options must be an object`);
72
- }
73
- for (const key of Object.keys(options)) {
74
- if (!OPTION_KEYS.has(key)) {
75
- throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);
76
- }
77
- }
78
- const values = {
79
- ...base,
80
- ...options
81
- };
82
- const emit = normalizeEmit(values.emit, readerName);
83
- const classes = Object.prototype.hasOwnProperty.call(options, "classes") ? mergeClasses(base.classes || {}, options.classes, readerName) : {
84
- ...(base.classes || {})
85
- };
86
- if ((emit === OUTPUT_GR2 || emit === OUTPUT_CMF) && !hasClasses(classes)) {
87
- throw new TypeError(`${readerName}: emit "${emit}" requires explicit classes`);
88
- }
89
- if (typeof values.source !== "string" || !values.source) {
90
- values.source = DEFAULT_VALUES.source;
91
- }
92
- return {
93
- emit,
94
- source: values.source,
95
- buffers: values.buffers || null,
96
- packTangents: validateRule("packTangents", values.packTangents, readerName),
97
- uvHandedness: normalizeUvHandedness(values.uvHandedness, readerName),
98
- rebuildMissingNormals: validateRule("rebuildMissingNormals", values.rebuildMissingNormals, readerName),
99
- rebuildMissingTangents: validateRule("rebuildMissingTangents", values.rebuildMissingTangents, readerName),
100
- rebuildMissingBiNormals: validateRule("rebuildMissingBiNormals", values.rebuildMissingBiNormals, readerName),
101
- classes
102
- };
103
- }
104
- function normalizeEmit(emit, readerName) {
105
- if (emit === undefined || emit === null || emit === OUTPUT_JSON || emit === OUTPUT_GLTF_JSON || emit === OUTPUT_SHARED) {
106
- return OUTPUT_GLTF_JSON;
107
- }
108
- if (emit === OUTPUT_GR2 || emit === OUTPUT_CMF) return emit;
109
- throw new TypeError(`${readerName}: emit must be "${OUTPUT_SHARED}", "${OUTPUT_GLTF_JSON}", "${OUTPUT_GR2}", or "${OUTPUT_CMF}", got ${JSON.stringify(emit)}`);
110
- }
111
- function hasClasses(classes) {
112
- return !!classes && Object.values(classes).some(Class => typeof Class === "function");
113
- }
114
- function hasVertexChannel(mesh, channel) {
115
- const value = mesh && mesh.vertex && mesh.vertex[channel];
116
- return !!value && value.length > 0;
117
- }
118
- function requireVertexChannel(mesh, meshIndex, channel, feature) {
119
- const value = mesh && mesh.vertex && mesh.vertex[channel];
120
- if (!value || value.length === 0) {
121
- const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;
122
- throw new Error(`CjsGltfFormat: ${feature} requires mesh.vertex.${channel} for mesh ${name}`);
123
- }
124
- return value;
125
- }
126
- function triangleFaces(mesh, meshIndex, feature) {
127
- const faces = [];
128
- for (const group of mesh.indices || []) {
129
- if (group && group.faces) faces.push(...group.faces);
130
- }
131
- if (faces.length === 0) {
132
- const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;
133
- throw new Error(`CjsGltfFormat: ${feature} requires triangle indices for mesh ${name}`);
134
- }
135
- return faces;
136
- }
137
- function shouldApplyMeshRule(format, rule, context) {
138
- if (typeof rule === "function") {
139
- const result = rule({
140
- format,
141
- reader: format,
142
- ...context
143
- });
144
- if (typeof result !== "boolean") {
145
- throw new TypeError(`CjsGltfFormat: ${context.feature} rule must return true or false`);
146
- }
147
- return result;
148
- }
149
- return rule;
150
- }
151
- function vertexCount(mesh) {
152
- return mesh.vertex.position.length / 3;
153
- }
154
- function tangentXyz(mesh) {
155
- const tangent = requireVertexChannel(mesh, 0, "tangent", "tangent conversion"),
156
- count = vertexCount(mesh),
157
- width = tangent.length / count;
158
- if (width === 3) return tangent.slice();
159
- if (width !== 4) throw new Error("CjsGltfFormat: tangent channel must have 3 or 4 components per vertex");
160
- const out = new Array(count * 3);
161
- for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3) {
162
- out[o] = tangent[i];
163
- out[o + 1] = tangent[i + 1];
164
- out[o + 2] = tangent[i + 2];
165
- }
166
- return out;
167
- }
168
- function generatedBiNormalsForMesh(mesh, values) {
169
- const normals = requireVertexChannel(mesh, 0, "normal", "binormal generation"),
170
- tangent = requireVertexChannel(mesh, 0, "tangent", "binormal generation"),
171
- count = vertexCount(mesh),
172
- width = tangent.length / count;
173
- if (width === 3) {
174
- return generateBiNormals(normals, tangent, {
175
- uvHandedness: values.uvHandedness
176
- });
177
- }
178
- if (width !== 4) throw new Error("CjsGltfFormat: tangent channel must have 3 or 4 components per vertex");
179
- const out = new Array(count * 3);
180
- for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3) {
181
- const b = normalize([0, 0, 0], cross([0, 0, 0], [normals[o], normals[o + 1], normals[o + 2]], [tangent[i], tangent[i + 1], tangent[i + 2]]));
182
- const sign = tangent[i + 3] < 0 ? -1 : 1;
183
- out[o] = b[0] * sign;
184
- out[o + 1] = b[1] * sign;
185
- out[o + 2] = b[2] * sign;
186
- }
187
- return out;
188
- }
189
- function rebuildMissingMeshData(format, json, values) {
190
- for (let meshIndex = 0; meshIndex < json.meshes.length; meshIndex++) {
191
- const mesh = json.meshes[meshIndex],
192
- common = {
193
- options: values,
194
- raw: null,
195
- json,
196
- mesh,
197
- meshIndex
198
- },
199
- shouldPackTangents = shouldApplyMeshRule(format, values.packTangents, {
200
- ...common,
201
- feature: "packTangents",
202
- channel: "tangent"
203
- });
204
- if (!hasVertexChannel(mesh, "normal") && (shouldApplyMeshRule(format, values.rebuildMissingNormals, {
205
- ...common,
206
- feature: "rebuildMissingNormals",
207
- channel: "normal"
208
- }) || shouldPackTangents)) {
209
- mesh.vertex.normal = generateNormals(requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingNormals"), triangleFaces(mesh, meshIndex, "rebuildMissingNormals"));
210
- }
211
- if (!hasVertexChannel(mesh, "tangent") && (shouldApplyMeshRule(format, values.rebuildMissingTangents, {
212
- ...common,
213
- feature: "rebuildMissingTangents",
214
- channel: "tangent"
215
- }) || shouldPackTangents)) {
216
- mesh.vertex.tangent = generateTangents(requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingTangents"), requireVertexChannel(mesh, meshIndex, "normal", "rebuildMissingTangents"), requireVertexChannel(mesh, meshIndex, "texcoord0", "rebuildMissingTangents"), triangleFaces(mesh, meshIndex, "rebuildMissingTangents"));
217
- }
218
- if (!hasVertexChannel(mesh, "binormal") && (shouldApplyMeshRule(format, values.rebuildMissingBiNormals, {
219
- ...common,
220
- feature: "rebuildMissingBiNormals",
221
- channel: "binormal"
222
- }) || shouldPackTangents)) {
223
- mesh.vertex.binormal = generatedBiNormalsForMesh(mesh, values);
224
- }
225
- if (shouldPackTangents) {
226
- mesh.vertex.tangent = packTangentFrames(requireVertexChannel(mesh, meshIndex, "normal", "packTangents"), tangentXyz(mesh), requireVertexChannel(mesh, meshIndex, "binormal", "packTangents"));
227
- mesh.vertex.normal = [];
228
- mesh.vertex.binormal = [];
229
- }
230
- }
231
- }
232
- function readWithValues(format, input, values) {
233
- const parsed = parseInput(input);
234
- const json = parseGltfToJson(parsed.gltf, {
235
- binaryChunk: parsed.binaryChunk,
236
- source: values.source,
237
- buffers: values.buffers
238
- });
239
- rebuildMissingMeshData(format, json, values);
240
- if (values.emit === OUTPUT_CMF) return hydrateCmf(buildCmfFromShared(json), values.classes, {
241
- source: values.source
242
- });
243
- return hydrateJson(json, {
244
- classes: values.classes,
245
- source: values.source
246
- });
247
- }
248
- function inspectWithValues(input, values) {
249
- const parsed = parseInput(input);
250
- return inspectGltf(parsed.gltf, {
251
- format: parsed.format,
252
- source: values.source
253
- });
254
- }
255
- function toJsonValue(value) {
256
- if (value === null || value === undefined) return value;
257
- if (typeof value !== "object") return value;
258
- if (typeof value.toJSON === "function") {
259
- const next = value.toJSON();
260
- if (next !== value) return toJsonValue(next);
261
- }
262
- if (Array.isArray(value)) return value.map(toJsonValue);
263
- if (ArrayBuffer.isView(value) && !(value instanceof DataView)) return Array.from(value);
264
- const out = {};
265
- for (const key of Object.keys(value)) {
266
- out[key] = toJsonValue(value[key]);
267
- }
268
- return out;
269
- }
270
-
271
- /**
272
- * Imports a Node built-in module without exposing the specifier to any
273
- * bundler's static import graph.
274
- *
275
- * `await import("node:fs/promises")` written as a literal is resolved
276
- * eagerly by webpack/Rollup/esbuild alike when they walk the module
277
- * graph, breaking browser builds even though this path only ever runs
278
- * under Node (readFile is a Node-only convenience). Building the
279
- * specifier inside a `Function` body hides it from every bundler's
280
- * static analysis - it only exists at runtime, in the Node process that
281
- * actually calls readFile.
282
- *
283
- * @param {string} specifier Node built-in module specifier, e.g. "node:fs/promises".
284
- * @returns {Promise<any>} The imported module namespace.
285
- */
286
- function importNodeModule(specifier) {
287
- // eslint-disable-next-line no-new-func
288
- return new Function("s", "return import(s)")(specifier);
289
- }
290
-
291
- export { CLASS_KEYS, DEFAULT_VALUES, OUTPUT_CMF, OUTPUT_GLTF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_SHARED, importNodeModule, inspectWithValues, normalizeValues, readWithValues, toJsonValue, validateClass, validateClassKey };
292
- //# sourceMappingURL=helpers.js.map
1
+ import { CLASS_KEYS as CLASS_KEYS$1, hydrateJson } from './json.js';
2
+ import { CMF_CLASS_KEYS, hydrateCmf, buildCmfFromShared } from './targets.js';
3
+ import { parseInput, parseGltfToJson, inspectGltf } from './parser.js';
4
+ export { isGlb, toBytes } from './parser.js';
5
+ import { generateNormals, generateTangents, generateBiNormals } from '@carbonenginejs/core-math/mesh';
6
+ import { packTangentFrames } from '@carbonenginejs/core-math/tangent';
7
+ import { normalize, cross } from '@carbonenginejs/core-math/vec3';
8
+
9
+ /**
10
+ * Internal read-pipeline glue for CjsGltfFormat.
11
+ */
12
+
13
+ const CLASS_KEYS = Object.freeze(Array.from(new Set([...CLASS_KEYS$1, ...CMF_CLASS_KEYS])));
14
+ const OUTPUT_JSON = "json";
15
+ const OUTPUT_GLTF_JSON = "gltfJson";
16
+ const OUTPUT_SHARED = "shared";
17
+ const OUTPUT_GR2 = "gr2";
18
+ const OUTPUT_CMF = "cmf";
19
+ const DEFAULT_VALUES = Object.freeze({
20
+ emit: OUTPUT_GLTF_JSON,
21
+ source: "memory",
22
+ buffers: null,
23
+ packTangents: false,
24
+ uvHandedness: "right",
25
+ rebuildMissingNormals: false,
26
+ rebuildMissingTangents: false,
27
+ rebuildMissingBiNormals: false,
28
+ classes: Object.freeze({})
29
+ });
30
+ const OPTION_KEYS = new Set(["emit", "source", "buffers", "packTangents", "uvHandedness", "rebuildMissingNormals", "rebuildMissingTangents", "rebuildMissingBiNormals", "classes"]);
31
+ function validateClassKey(key, readerName = "CjsGltfFormat") {
32
+ if (!CLASS_KEYS.includes(key)) {
33
+ throw new Error(`${readerName}: unknown class key ${JSON.stringify(key)}; expected one of ${CLASS_KEYS.join(", ")}`);
34
+ }
35
+ }
36
+ function validateClass(key, Class, readerName = "CjsGltfFormat") {
37
+ validateClassKey(key, readerName);
38
+ if (typeof Class !== "function") {
39
+ throw new TypeError(`${readerName}: class ${JSON.stringify(key)} must be a constructor`);
40
+ }
41
+ }
42
+ function mergeClasses(base, classes, readerName) {
43
+ if (!classes || typeof classes !== "object") {
44
+ throw new TypeError(`${readerName}: classes option must be an object`);
45
+ }
46
+ const next = {
47
+ ...base
48
+ };
49
+ for (const [key, Class] of Object.entries(classes)) {
50
+ if (Class === null || Class === undefined) {
51
+ delete next[key];
52
+ continue;
53
+ }
54
+ validateClass(key, Class, readerName);
55
+ next[key] = Class;
56
+ }
57
+ return next;
58
+ }
59
+ function validateRule(name, value, readerName) {
60
+ if (typeof value === "boolean" || typeof value === "function") return value;
61
+ throw new TypeError(`${readerName}: ${name} must be true, false, or a function`);
62
+ }
63
+ function normalizeUvHandedness(value, readerName) {
64
+ if (value === undefined || value === null) return DEFAULT_VALUES.uvHandedness;
65
+ if (value === "right" || value === 1 || value === "positive") return "right";
66
+ if (value === "left" || value === -1 || value === "negative") return "left";
67
+ throw new TypeError(`${readerName}: uvHandedness must be "right" or "left"`);
68
+ }
69
+ function normalizeValues(base, options = {}, readerName = "CjsGltfFormat") {
70
+ if (!options || typeof options !== "object") {
71
+ throw new TypeError(`${readerName}: options must be an object`);
72
+ }
73
+ for (const key of Object.keys(options)) {
74
+ if (!OPTION_KEYS.has(key)) {
75
+ throw new TypeError(`${readerName}: unknown option ${JSON.stringify(key)}`);
76
+ }
77
+ }
78
+ const values = {
79
+ ...base,
80
+ ...options
81
+ };
82
+ const emit = normalizeEmit(values.emit, readerName);
83
+ const classes = Object.prototype.hasOwnProperty.call(options, "classes") ? mergeClasses(base.classes || {}, options.classes, readerName) : {
84
+ ...(base.classes || {})
85
+ };
86
+ if ((emit === OUTPUT_GR2 || emit === OUTPUT_CMF) && !hasClasses(classes)) {
87
+ throw new TypeError(`${readerName}: emit "${emit}" requires explicit classes`);
88
+ }
89
+ if (typeof values.source !== "string" || !values.source) {
90
+ values.source = DEFAULT_VALUES.source;
91
+ }
92
+ return {
93
+ emit,
94
+ source: values.source,
95
+ buffers: values.buffers || null,
96
+ packTangents: validateRule("packTangents", values.packTangents, readerName),
97
+ uvHandedness: normalizeUvHandedness(values.uvHandedness, readerName),
98
+ rebuildMissingNormals: validateRule("rebuildMissingNormals", values.rebuildMissingNormals, readerName),
99
+ rebuildMissingTangents: validateRule("rebuildMissingTangents", values.rebuildMissingTangents, readerName),
100
+ rebuildMissingBiNormals: validateRule("rebuildMissingBiNormals", values.rebuildMissingBiNormals, readerName),
101
+ classes
102
+ };
103
+ }
104
+ function normalizeEmit(emit, readerName) {
105
+ if (emit === undefined || emit === null || emit === OUTPUT_JSON || emit === OUTPUT_GLTF_JSON || emit === OUTPUT_SHARED) {
106
+ return OUTPUT_GLTF_JSON;
107
+ }
108
+ if (emit === OUTPUT_GR2 || emit === OUTPUT_CMF) return emit;
109
+ throw new TypeError(`${readerName}: emit must be "${OUTPUT_SHARED}", "${OUTPUT_GLTF_JSON}", "${OUTPUT_GR2}", or "${OUTPUT_CMF}", got ${JSON.stringify(emit)}`);
110
+ }
111
+ function hasClasses(classes) {
112
+ return !!classes && Object.values(classes).some(Class => typeof Class === "function");
113
+ }
114
+ function hasVertexChannel(mesh, channel) {
115
+ const value = mesh && mesh.vertex && mesh.vertex[channel];
116
+ return !!value && value.length > 0;
117
+ }
118
+ function requireVertexChannel(mesh, meshIndex, channel, feature) {
119
+ const value = mesh && mesh.vertex && mesh.vertex[channel];
120
+ if (!value || value.length === 0) {
121
+ const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;
122
+ throw new Error(`CjsGltfFormat: ${feature} requires mesh.vertex.${channel} for mesh ${name}`);
123
+ }
124
+ return value;
125
+ }
126
+ function triangleFaces(mesh, meshIndex, feature) {
127
+ const faces = [];
128
+ for (const group of mesh.indices || []) {
129
+ if (group && group.faces) faces.push(...group.faces);
130
+ }
131
+ if (faces.length === 0) {
132
+ const name = mesh && mesh.name ? JSON.stringify(mesh.name) : `#${meshIndex}`;
133
+ throw new Error(`CjsGltfFormat: ${feature} requires triangle indices for mesh ${name}`);
134
+ }
135
+ return faces;
136
+ }
137
+ function shouldApplyMeshRule(format, rule, context) {
138
+ if (typeof rule === "function") {
139
+ const result = rule({
140
+ format,
141
+ reader: format,
142
+ ...context
143
+ });
144
+ if (typeof result !== "boolean") {
145
+ throw new TypeError(`CjsGltfFormat: ${context.feature} rule must return true or false`);
146
+ }
147
+ return result;
148
+ }
149
+ return rule;
150
+ }
151
+ function vertexCount(mesh) {
152
+ return mesh.vertex.position.length / 3;
153
+ }
154
+ function tangentXyz(mesh) {
155
+ const tangent = requireVertexChannel(mesh, 0, "tangent", "tangent conversion"),
156
+ count = vertexCount(mesh),
157
+ width = tangent.length / count;
158
+ if (width === 3) return tangent.slice();
159
+ if (width !== 4) throw new Error("CjsGltfFormat: tangent channel must have 3 or 4 components per vertex");
160
+ const out = new Array(count * 3);
161
+ for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3) {
162
+ out[o] = tangent[i];
163
+ out[o + 1] = tangent[i + 1];
164
+ out[o + 2] = tangent[i + 2];
165
+ }
166
+ return out;
167
+ }
168
+ function generatedBiNormalsForMesh(mesh, values) {
169
+ const normals = requireVertexChannel(mesh, 0, "normal", "binormal generation"),
170
+ tangent = requireVertexChannel(mesh, 0, "tangent", "binormal generation"),
171
+ count = vertexCount(mesh),
172
+ width = tangent.length / count;
173
+ if (width === 3) {
174
+ return generateBiNormals(normals, tangent, {
175
+ uvHandedness: values.uvHandedness
176
+ });
177
+ }
178
+ if (width !== 4) throw new Error("CjsGltfFormat: tangent channel must have 3 or 4 components per vertex");
179
+ const out = new Array(count * 3);
180
+ for (let i = 0, o = 0; i < tangent.length; i += 4, o += 3) {
181
+ const b = normalize([0, 0, 0], cross([0, 0, 0], [normals[o], normals[o + 1], normals[o + 2]], [tangent[i], tangent[i + 1], tangent[i + 2]]));
182
+ const sign = tangent[i + 3] < 0 ? -1 : 1;
183
+ out[o] = b[0] * sign;
184
+ out[o + 1] = b[1] * sign;
185
+ out[o + 2] = b[2] * sign;
186
+ }
187
+ return out;
188
+ }
189
+ function rebuildMissingMeshData(format, json, values) {
190
+ for (let meshIndex = 0; meshIndex < json.meshes.length; meshIndex++) {
191
+ const mesh = json.meshes[meshIndex],
192
+ common = {
193
+ options: values,
194
+ raw: null,
195
+ json,
196
+ mesh,
197
+ meshIndex
198
+ },
199
+ shouldPackTangents = shouldApplyMeshRule(format, values.packTangents, {
200
+ ...common,
201
+ feature: "packTangents",
202
+ channel: "tangent"
203
+ });
204
+ if (!hasVertexChannel(mesh, "normal") && (shouldApplyMeshRule(format, values.rebuildMissingNormals, {
205
+ ...common,
206
+ feature: "rebuildMissingNormals",
207
+ channel: "normal"
208
+ }) || shouldPackTangents)) {
209
+ mesh.vertex.normal = generateNormals(requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingNormals"), triangleFaces(mesh, meshIndex, "rebuildMissingNormals"));
210
+ }
211
+ if (!hasVertexChannel(mesh, "tangent") && (shouldApplyMeshRule(format, values.rebuildMissingTangents, {
212
+ ...common,
213
+ feature: "rebuildMissingTangents",
214
+ channel: "tangent"
215
+ }) || shouldPackTangents)) {
216
+ mesh.vertex.tangent = generateTangents(requireVertexChannel(mesh, meshIndex, "position", "rebuildMissingTangents"), requireVertexChannel(mesh, meshIndex, "normal", "rebuildMissingTangents"), requireVertexChannel(mesh, meshIndex, "texcoord0", "rebuildMissingTangents"), triangleFaces(mesh, meshIndex, "rebuildMissingTangents"));
217
+ }
218
+ if (!hasVertexChannel(mesh, "binormal") && (shouldApplyMeshRule(format, values.rebuildMissingBiNormals, {
219
+ ...common,
220
+ feature: "rebuildMissingBiNormals",
221
+ channel: "binormal"
222
+ }) || shouldPackTangents)) {
223
+ mesh.vertex.binormal = generatedBiNormalsForMesh(mesh, values);
224
+ }
225
+ if (shouldPackTangents) {
226
+ mesh.vertex.tangent = packTangentFrames(requireVertexChannel(mesh, meshIndex, "normal", "packTangents"), tangentXyz(mesh), requireVertexChannel(mesh, meshIndex, "binormal", "packTangents"));
227
+ mesh.vertex.normal = [];
228
+ mesh.vertex.binormal = [];
229
+ }
230
+ }
231
+ }
232
+ function readWithValues(format, input, values) {
233
+ const parsed = parseInput(input);
234
+ const json = parseGltfToJson(parsed.gltf, {
235
+ binaryChunk: parsed.binaryChunk,
236
+ source: values.source,
237
+ buffers: values.buffers
238
+ });
239
+ rebuildMissingMeshData(format, json, values);
240
+ if (values.emit === OUTPUT_CMF) return hydrateCmf(buildCmfFromShared(json), values.classes, {
241
+ source: values.source
242
+ });
243
+ return hydrateJson(json, {
244
+ classes: values.classes,
245
+ source: values.source
246
+ });
247
+ }
248
+ function inspectWithValues(input, values) {
249
+ const parsed = parseInput(input);
250
+ return inspectGltf(parsed.gltf, {
251
+ format: parsed.format,
252
+ source: values.source
253
+ });
254
+ }
255
+ function toJsonValue(value) {
256
+ if (value === null || value === undefined) return value;
257
+ if (typeof value !== "object") return value;
258
+ if (typeof value.toJSON === "function") {
259
+ const next = value.toJSON();
260
+ if (next !== value) return toJsonValue(next);
261
+ }
262
+ if (Array.isArray(value)) return value.map(toJsonValue);
263
+ if (ArrayBuffer.isView(value) && !(value instanceof DataView)) return Array.from(value);
264
+ const out = {};
265
+ for (const key of Object.keys(value)) {
266
+ out[key] = toJsonValue(value[key]);
267
+ }
268
+ return out;
269
+ }
270
+
271
+ /**
272
+ * Imports a Node built-in module without exposing the specifier to any
273
+ * bundler's static import graph.
274
+ *
275
+ * `await import("node:fs/promises")` written as a literal is resolved
276
+ * eagerly by webpack/Rollup/esbuild alike when they walk the module
277
+ * graph, breaking browser builds even though this path only ever runs
278
+ * under Node (readFile is a Node-only convenience). Building the
279
+ * specifier inside a `Function` body hides it from every bundler's
280
+ * static analysis - it only exists at runtime, in the Node process that
281
+ * actually calls readFile.
282
+ *
283
+ * @param {string} specifier Node built-in module specifier, e.g. "node:fs/promises".
284
+ * @returns {Promise<any>} The imported module namespace.
285
+ */
286
+ function importNodeModule(specifier) {
287
+ // eslint-disable-next-line no-new-func
288
+ return new Function("s", "return import(s)")(specifier);
289
+ }
290
+
291
+ export { CLASS_KEYS, DEFAULT_VALUES, OUTPUT_CMF, OUTPUT_GLTF_JSON, OUTPUT_GR2, OUTPUT_JSON, OUTPUT_SHARED, importNodeModule, inspectWithValues, normalizeValues, readWithValues, toJsonValue, validateClass, validateClassKey };
292
+ //# sourceMappingURL=helpers.js.map