@carbonenginejs/runtime-resource 0.11.1 → 0.12.0

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 (72) hide show
  1. package/dist/formats/bnk/CjsBnkFormat.js +12 -2
  2. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  3. package/dist/formats/bnk/core/graph.js +3 -6
  4. package/dist/formats/bnk/core/graph.js.map +1 -1
  5. package/dist/formats/bnk/core/helpers.js +53 -11
  6. package/dist/formats/bnk/core/helpers.js.map +1 -1
  7. package/dist/formats/bnk/core/sfxNodes.js +532 -0
  8. package/dist/formats/bnk/core/sfxNodes.js.map +1 -0
  9. package/dist/formats/bnk/core/soundbanksInfo.js +59 -51
  10. package/dist/formats/bnk/core/soundbanksInfo.js.map +1 -1
  11. package/dist/formats/gr2/CjsGr2Format.js +256 -13
  12. package/dist/formats/gr2/CjsGr2Format.js.map +1 -1
  13. package/dist/formats/gr2/core/helpers.js +15 -15
  14. package/dist/formats/gr2/core/helpers.js.map +1 -1
  15. package/dist/formats/gr2/core/json.js +1 -1
  16. package/dist/formats/gr2/core/json.js.map +1 -1
  17. package/dist/formats/gr2/core/targets.js +1 -1
  18. package/dist/formats/gr2/core/targets.js.map +1 -1
  19. package/dist/formats/gr2/index.js +0 -1
  20. package/dist/formats/gr2/index.js.map +1 -1
  21. package/dist/formats/hlsl/core/analysis.js +1 -1
  22. package/dist/formats/hlsl/index.js +1 -0
  23. package/dist/formats/hlsl/index.js.map +1 -1
  24. package/dist/formats/index.js +3 -6
  25. package/dist/formats/index.js.map +1 -1
  26. package/dist/formats/webgl/core/cewg/binary.js +3 -3
  27. package/dist/formats/webgl/core/cewg/binary.js.map +1 -1
  28. package/dist/formats/webgl/core/effectPackage.js +4 -1
  29. package/dist/formats/webgl/core/effectPackage.js.map +1 -1
  30. package/dist/formats/webgl/core/errors.js +3 -3
  31. package/dist/formats/webgl/core/errors.js.map +1 -1
  32. package/docs/formats/dxbc/README.md +68 -0
  33. package/docs/formats/dxbc/architecture.md +80 -0
  34. package/docs/formats/dxbc/reference/api.md +77 -0
  35. package/docs/formats/dxbc/reference/classes/README.md +76 -0
  36. package/docs/formats/dxbc/reference/decoded-output.md +122 -0
  37. package/docs/formats/gr2.md +3 -4
  38. package/docs/formats/hlsl/README.md +54 -0
  39. package/docs/formats/hlsl/architecture.md +67 -0
  40. package/docs/formats/hlsl/guides/hydrating-json-output.md +62 -0
  41. package/docs/formats/hlsl/guides/reading-effects.md +64 -0
  42. package/docs/formats/hlsl/reference/advanced-analysis.md +66 -0
  43. package/docs/formats/hlsl/reference/api.md +97 -0
  44. package/docs/formats/hlsl/reference/classes/README.md +16 -0
  45. package/docs/formats/hlsl/reference/classes/carbon-compatibility.md +66 -0
  46. package/docs/formats/hlsl/reference/classes/public-api.md +26 -0
  47. package/docs/formats/hlsl/reference/classes/tr2-effect-model.md +150 -0
  48. package/docs/formats/hlsl/reference/json-graph.md +100 -0
  49. package/docs/formats/hlsl/reference/portable-reflection.md +141 -0
  50. package/docs/formats/provenance.md +9 -4
  51. package/docs/formats/webgl/README.md +57 -0
  52. package/docs/formats/webgl/architecture.md +70 -0
  53. package/docs/formats/webgl/carbon-constant-layouts.md +326 -0
  54. package/docs/formats/webgl/decl-io.md +1234 -0
  55. package/docs/formats/webgl/effect-reflection.md +127 -0
  56. package/docs/formats/webgl/memory-structured.md +871 -0
  57. package/docs/formats/webgl/reference/classes/README.md +96 -0
  58. package/docs/formats/webgl/texture-sample.md +964 -0
  59. package/docs/formats/webgpu/README.md +81 -0
  60. package/docs/formats/webgpu/architecture.md +93 -0
  61. package/docs/formats/webgpu/formats/cewgpu.md +479 -0
  62. package/docs/formats/webgpu/guides/effect-packaging.md +199 -0
  63. package/docs/formats/webgpu/reference/api.md +197 -0
  64. package/docs/formats/webgpu/reference/classes/README.md +66 -0
  65. package/docs/formats/webgpu/reference/wgsl-compatibility.md +1442 -0
  66. package/docs/formats/wwise.md +16 -1
  67. package/docs/reference/classes/formats.md +10 -10
  68. package/format-notices/bnk/NOTICE +5 -4
  69. package/format-notices/webgl/NOTICE +1 -1
  70. package/package.json +1 -1
  71. package/dist/formats/gr2/core/CjsFormatGr2.js +0 -273
  72. package/dist/formats/gr2/core/CjsFormatGr2.js.map +0 -1
@@ -26,7 +26,7 @@ function normalizeEmit(emit) {
26
26
  if (emit === OUTPUT_GR2) return OUTPUT_GR2;
27
27
  if (emit === OUTPUT_CMF) return OUTPUT_CMF;
28
28
  if (emit === OUTPUT_RAW) return OUTPUT_RAW;
29
- throw new Error(`CjsFormatGr2 unknown emit value "${emit}"`);
29
+ throw new Error(`CjsGr2Format unknown emit value "${emit}"`);
30
30
  }
31
31
  function hasOwn(value, key) {
32
32
  return Object.prototype.hasOwnProperty.call(value, key);
@@ -50,25 +50,25 @@ function cloneValues(values) {
50
50
  function assertKnownOptions(options) {
51
51
  for (const key of Object.keys(options)) {
52
52
  if (!OPTION_KEYS.has(key)) {
53
- throw new TypeError(`CjsFormatGr2 unknown option "${key}"`);
53
+ throw new TypeError(`CjsGr2Format unknown option "${key}"`);
54
54
  }
55
55
  }
56
56
  }
57
57
  function validateBoolean(name, value) {
58
58
  if (typeof value !== "boolean") {
59
- throw new TypeError(`CjsFormatGr2 ${name} option must be true or false`);
59
+ throw new TypeError(`CjsGr2Format ${name} option must be true or false`);
60
60
  }
61
61
  return value;
62
62
  }
63
63
  function validateRule(name, value) {
64
64
  if (typeof value === "boolean" || typeof value === "function") return value;
65
- throw new TypeError(`CjsFormatGr2 ${name} option must be true, false, or a function`);
65
+ throw new TypeError(`CjsGr2Format ${name} option must be true, false, or a function`);
66
66
  }
67
67
 
68
68
  /** Validates a requested runtime class key for the GR2 format reader. */
69
69
  function validateClassKey(key) {
70
70
  if (!CLASS_KEYS.includes(key)) {
71
- throw new Error(`CjsFormatGr2 unknown class type "${key}"`);
71
+ throw new Error(`CjsGr2Format unknown class type "${key}"`);
72
72
  }
73
73
  }
74
74
 
@@ -76,12 +76,12 @@ function validateClassKey(key) {
76
76
  function validateClass(type, Class) {
77
77
  validateClassKey(type);
78
78
  if (typeof Class !== "function") {
79
- throw new TypeError(`CjsFormatGr2 class "${type}" must be a constructor`);
79
+ throw new TypeError(`CjsGr2Format class "${type}" must be a constructor`);
80
80
  }
81
81
  }
82
82
  function mergeClasses(values, classes) {
83
83
  if (!classes || typeof classes !== "object") {
84
- throw new TypeError("CjsFormatGr2 classes option must be an object");
84
+ throw new TypeError("CjsGr2Format classes option must be an object");
85
85
  }
86
86
  const next = {
87
87
  ...values.classes
@@ -105,7 +105,7 @@ function optionValue(options, keys) {
105
105
  */
106
106
  function normalizeValues(base = DEFAULT_VALUES, options = {}) {
107
107
  if (!options || typeof options !== "object") {
108
- throw new TypeError("CjsFormatGr2 options must be an object");
108
+ throw new TypeError("CjsGr2Format options must be an object");
109
109
  }
110
110
  assertKnownOptions(options);
111
111
  const values = cloneValues(base);
@@ -133,7 +133,7 @@ function normalizeValues(base = DEFAULT_VALUES, options = {}) {
133
133
  mergeClasses(values, options.classes);
134
134
  }
135
135
  if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes)) {
136
- throw new TypeError(`CjsFormatGr2 emit "${values.emit}" requires explicit classes`);
136
+ throw new TypeError(`CjsGr2Format emit "${values.emit}" requires explicit classes`);
137
137
  }
138
138
  return values;
139
139
  }
@@ -158,7 +158,7 @@ function toBytes(input) {
158
158
  if (input instanceof Uint8Array) return input;
159
159
  if (typeof ArrayBuffer !== "undefined" && input instanceof ArrayBuffer) return new Uint8Array(input);
160
160
  if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);
161
- throw new TypeError("CjsFormatGr2: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)");
161
+ throw new TypeError("CjsGr2Format: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)");
162
162
  }
163
163
 
164
164
  /** Reads and validates raw input bytes for the GR2 format reader. */
@@ -178,7 +178,7 @@ function hasVertexChannel(mesh, channel) {
178
178
  function requireVertexChannel(mesh, meshIndex, channel, feature) {
179
179
  const value = vertexChannel(mesh, channel);
180
180
  if (!value || value.length === 0) {
181
- throw new Error(`CjsFormatGr2 ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);
181
+ throw new Error(`CjsGr2Format ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);
182
182
  }
183
183
  return value;
184
184
  }
@@ -188,7 +188,7 @@ function triangleFaces(mesh, meshIndex, feature) {
188
188
  if (group && group.faces) faces.push(...group.faces);
189
189
  }
190
190
  if (faces.length === 0) {
191
- throw new Error(`CjsFormatGr2 ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);
191
+ throw new Error(`CjsGr2Format ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);
192
192
  }
193
193
  return faces;
194
194
  }
@@ -200,7 +200,7 @@ function shouldApplyMeshRule(reader, rule, context) {
200
200
  if (typeof rule === "function") {
201
201
  const result = rule(fullContext);
202
202
  if (typeof result !== "boolean") {
203
- throw new TypeError(`CjsFormatGr2 ${context.feature} rule must return true or false`);
203
+ throw new TypeError(`CjsGr2Format ${context.feature} rule must return true or false`);
204
204
  }
205
205
  return result;
206
206
  }
@@ -308,7 +308,7 @@ function toJsonValue(value, seen = new WeakSet()) {
308
308
  if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));
309
309
  if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));
310
310
  if (seen.has(value)) {
311
- throw new TypeError("CjsFormatGr2.toJSON cannot convert circular data");
311
+ throw new TypeError("CjsGr2Format.toJSON cannot convert circular data");
312
312
  }
313
313
  if (typeof value.toJSON === "function") {
314
314
  seen.add(value);
@@ -333,7 +333,7 @@ function inspectRawGr2Result(parsed) {
333
333
  const fileInfo = parsed.fileInfo || {},
334
334
  count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;
335
335
  return {
336
- reader: "CjsFormatGr2",
336
+ reader: "CjsGr2Format",
337
337
  format: "gr2",
338
338
  version: parsed.version | 0,
339
339
  sectionCount: parsed.secCount | 0,
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gr2/core/helpers.js"],"sourcesContent":["import { readGr2Raw } from \"./reader.js\";\nimport { emitJson, CLASS_KEYS as GR2_CLASS_KEYS } from \"./json.js\";\nimport { tangents } from \"./tangents.js\";\nimport { decompressAnimationCurves } from \"./curves.js\";\nimport { buildCmfFromShared, CMF_CLASS_KEYS, hydrateCmf } from \"./targets.js\";\n\nexport const CLASS_KEYS = Object.freeze(Array.from(new Set([\n ...GR2_CLASS_KEYS,\n ...CMF_CLASS_KEYS\n])));\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_GR2_JSON = \"gr2Json\";\nexport const OUTPUT_CMF = \"cmf\";\nexport const OUTPUT_RAW = \"raw\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n decompressCurves: false,\n unpackTangents: false,\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"decompressCurves\",\n \"unpackTangents\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;\n if (emit === OUTPUT_GR2_JSON) return OUTPUT_GR2_JSON;\n if (emit === OUTPUT_GR2) return OUTPUT_GR2;\n if (emit === OUTPUT_CMF) return OUTPUT_CMF;\n if (emit === OUTPUT_RAW) return OUTPUT_RAW;\n throw new Error(`CjsFormatGr2 unknown emit value \"${emit}\"`);\n}\n\nfunction hasOwn(value, key)\n{\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction classMap(values)\n{\n return values && values.classes ? values.classes : {};\n}\n\nfunction cloneValues(values)\n{\n return {\n emit: values.emit,\n decompressCurves: values.decompressCurves,\n unpackTangents: values.unpackTangents,\n rebuildMissingNormals: values.rebuildMissingNormals,\n rebuildMissingTangents: values.rebuildMissingTangents,\n rebuildMissingBiNormals: values.rebuildMissingBiNormals,\n classes: { ...classMap(values) }\n };\n}\n\nfunction assertKnownOptions(options)\n{\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`CjsFormatGr2 unknown option \"${key}\"`);\n }\n }\n}\n\nfunction validateBoolean(name, value)\n{\n if (typeof value !== \"boolean\")\n {\n throw new TypeError(`CjsFormatGr2 ${name} option must be true or false`);\n }\n return value;\n}\n\nfunction validateRule(name, value)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`CjsFormatGr2 ${name} option must be true, false, or a function`);\n}\n\n/** Validates a requested runtime class key for the GR2 format reader. */\nexport function validateClassKey(key)\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`CjsFormatGr2 unknown class type \"${key}\"`);\n }\n}\n\n/** Validates a resolved runtime class constructor for the GR2 format reader. */\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CjsFormatGr2 class \"${type}\" must be a constructor`);\n }\n}\n\nfunction mergeClasses(values, classes)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(\"CjsFormatGr2 classes option must be an object\");\n }\n\n const next = { ...values.classes };\n for (const [ type, Class ] of Object.entries(classes))\n {\n validateClass(type, Class);\n next[type] = Class;\n }\n values.classes = next;\n}\n\nfunction optionValue(options, keys)\n{\n for (const key of keys)\n {\n if (hasOwn(options, key)) return options[key];\n }\n return undefined;\n}\n\n/**\n * Normalizes reader options against their supported defaults for the GR2 format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {})\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(\"CjsFormatGr2 options must be an object\");\n }\n\n assertKnownOptions(options);\n\n const values = cloneValues(base);\n\n if (hasOwn(options, \"emit\")) values.emit = normalizeEmit(options.emit);\n if (hasOwn(options, \"decompressCurves\"))\n {\n values.decompressCurves = validateBoolean(\"decompressCurves\", options.decompressCurves);\n }\n\n const unpackTangents = optionValue(options, [ \"unpackTangents\" ]);\n if (unpackTangents !== undefined)\n {\n values.unpackTangents = validateRule(\"unpackTangents\", unpackTangents);\n }\n\n const rebuildMissingNormals = optionValue(options, [ \"rebuildMissingNormals\" ]);\n if (rebuildMissingNormals !== undefined)\n {\n values.rebuildMissingNormals = validateRule(\"rebuildMissingNormals\", rebuildMissingNormals);\n }\n\n const rebuildMissingTangents = optionValue(options, [ \"rebuildMissingTangents\" ]);\n if (rebuildMissingTangents !== undefined)\n {\n values.rebuildMissingTangents = validateRule(\"rebuildMissingTangents\", rebuildMissingTangents);\n }\n\n const rebuildMissingBiNormals = optionValue(options, [ \"rebuildMissingBiNormals\" ]);\n if (rebuildMissingBiNormals !== undefined)\n {\n values.rebuildMissingBiNormals = validateRule(\"rebuildMissingBiNormals\", rebuildMissingBiNormals);\n }\n\n if (hasOwn(options, \"classes\"))\n {\n mergeClasses(values, options.classes);\n }\n\n if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes))\n {\n throw new TypeError(`CjsFormatGr2 emit \"${values.emit}\" requires explicit classes`);\n }\n\n return values;\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nfunction isRawGr2Result(value)\n{\n return !!value && typeof value === \"object\" && \"fileInfo\" in value &&\n typeof value.version === \"number\";\n}\n\n/**\n * Normalizes GR2 input into a Uint8Array. readGr2Raw indexes `.buffer`,\n * `.byteOffset`, `.byteLength` and calls `.subarray()`, so a raw\n * ArrayBuffer (e.g. from `fetch(...).then(r => r.arrayBuffer())`, which\n * is how ccpwgl's resource loader supplies bytes) must be wrapped in a\n * view before it reaches readGr2Raw, not passed straight through.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input GR2 bytes.\n * @returns {Uint8Array} A Uint8Array view over the same bytes.\n */\nfunction toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"CjsFormatGr2: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)\");\n}\n\n/** Reads and validates raw input bytes for the GR2 format reader. */\nexport function readRawInput(input)\n{\n return isRawGr2Result(input) ? input : readGr2Raw(toBytes(input));\n}\n\nfunction meshName(mesh, meshIndex)\n{\n return mesh && mesh.name ? `\"${mesh.name}\"` : `#${meshIndex}`;\n}\n\nfunction vertexChannel(mesh, channel)\n{\n return mesh && mesh.vertex && mesh.vertex[channel];\n}\n\nfunction hasVertexChannel(mesh, channel)\n{\n const value = vertexChannel(mesh, channel);\n return !!value && value.length > 0;\n}\n\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = vertexChannel(mesh, channel);\n if (!value || value.length === 0)\n {\n throw new Error(`CjsFormatGr2 ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);\n }\n return value;\n}\n\nfunction triangleFaces(mesh, meshIndex, feature)\n{\n const faces = [];\n for (const group of mesh.indices || [])\n {\n if (group && group.faces) faces.push(...group.faces);\n }\n\n if (faces.length === 0)\n {\n throw new Error(`CjsFormatGr2 ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);\n }\n\n return faces;\n}\n\nfunction shouldApplyMeshRule(reader, rule, context)\n{\n const fullContext = { reader, ...context };\n\n if (typeof rule === \"function\")\n {\n const result = rule(fullContext);\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsFormatGr2 ${context.feature} rule must return true or false`);\n }\n return result;\n }\n\n return rule;\n}\n\nfunction unpackMeshTangents(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (shouldApplyMeshRule(reader, values.unpackTangents, {\n options: values, raw, json, mesh, meshIndex,\n feature: \"unpackTangents\",\n channel: \"tangent\"\n }))\n {\n tangents.unpack(mesh);\n }\n }\n}\n\nfunction rebuildMeshNormals(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\");\n\n mesh.vertex.normal = Array.from(tangents.generateNormals(positions, faces));\n}\n\nfunction rebuildMeshTangents(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n uvs = requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\");\n\n mesh.vertex.tangent = Array.from(tangents.generateTangents(positions, normals, uvs, faces));\n}\n\nfunction rebuildMeshBiNormals(mesh, meshIndex)\n{\n const\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingBiNormals\"),\n tangentValues = requireVertexChannel(mesh, meshIndex, \"tangent\", \"rebuildMissingBiNormals\");\n\n mesh.vertex.binormal = tangents.generateBiNormals(normals, tangentValues);\n}\n\nfunction rebuildMissingMeshData(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (!hasVertexChannel(mesh, \"normal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingNormals\", channel: \"normal\" }))\n {\n rebuildMeshNormals(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingTangents,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingTangents\", channel: \"tangent\" }))\n {\n rebuildMeshTangents(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingBiNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }))\n {\n rebuildMeshBiNormals(mesh, meshIndex);\n }\n }\n}\n\nfunction processMeshData(reader, json, raw, values)\n{\n unpackMeshTangents(reader, json, raw, values);\n rebuildMissingMeshData(reader, json, raw, values);\n}\n\nfunction buildJson(reader, raw, values)\n{\n const json = emitJson(raw.fileInfo, raw.version, {\n classes: values.emit === OUTPUT_GR2 || ((values.emit === OUTPUT_JSON || values.emit === OUTPUT_GR2_JSON) && hasClasses(values.classes))\n ? values.classes\n : {}\n });\n\n if (values.decompressCurves)\n {\n decompressAnimationCurves(json);\n }\n\n processMeshData(reader, json, raw, values);\n\n return json;\n}\n\n/** Reads input using normalized format options for the GR2 format reader. */\nexport function readWithValues(reader, input, values)\n{\n const parsed = readRawInput(input);\n if (values.emit === OUTPUT_RAW) return parsed;\n const json = buildJson(reader, parsed, values);\n return values.emit === OUTPUT_CMF\n ? hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source })\n : json;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the GR2 format reader. */\nexport function toJsonValue(value, seen = new WeakSet())\n{\n if (value === null || typeof value !== \"object\") return value;\n if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));\n if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));\n\n if (seen.has(value))\n {\n throw new TypeError(\"CjsFormatGr2.toJSON cannot convert circular data\");\n }\n\n if (typeof value.toJSON === \"function\")\n {\n seen.add(value);\n const json = toJsonValue(value.toJSON(), seen);\n seen.delete(value);\n return json;\n }\n\n seen.add(value);\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key], seen);\n }\n seen.delete(value);\n return out;\n}\n\n/**\n * Inspects raw GR2 result without materializing the full GR2 format reader\n * payload.\n */\nexport function inspectRawGr2Result(parsed)\n{\n const\n fileInfo = parsed.fileInfo || {},\n count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;\n\n return {\n reader: \"CjsFormatGr2\",\n format: \"gr2\",\n version: parsed.version | 0,\n sectionCount: parsed.secCount | 0,\n source: fileInfo.FromFileName ?? \"\",\n counts: {\n meshes: count(fileInfo.Meshes),\n models: count(fileInfo.Models),\n animations: count(fileInfo.Animations),\n materials: count(fileInfo.Materials),\n textures: count(fileInfo.Textures)\n }\n };\n}\n"],"names":["CLASS_KEYS","Object","freeze","Array","from","Set","GR2_CLASS_KEYS","CMF_CLASS_KEYS","OUTPUT_JSON","OUTPUT_GR2","OUTPUT_GR2_JSON","OUTPUT_CMF","OUTPUT_RAW","DEFAULT_VALUES","emit","decompressCurves","unpackTangents","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","normalizeEmit","undefined","Error","hasOwn","value","key","prototype","hasOwnProperty","call","classMap","values","cloneValues","assertKnownOptions","options","keys","has","TypeError","validateBoolean","name","validateRule","validateClassKey","includes","validateClass","type","Class","mergeClasses","next","entries","optionValue","normalizeValues","base","hasClasses","some","isRawGr2Result","version","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","readRawInput","readGr2Raw","meshName","mesh","meshIndex","vertexChannel","channel","vertex","hasVertexChannel","length","requireVertexChannel","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","reader","rule","context","fullContext","result","unpackMeshTangents","json","raw","meshes","tangents","unpack","rebuildMeshNormals","positions","normal","generateNormals","rebuildMeshTangents","normals","uvs","tangent","generateTangents","rebuildMeshBiNormals","tangentValues","binormal","generateBiNormals","rebuildMissingMeshData","processMeshData","buildJson","emitJson","fileInfo","decompressAnimationCurves","readWithValues","parsed","hydrateCmf","buildCmfFromShared","source","toJsonValue","seen","WeakSet","item","isArray","map","toJSON","add","delete","out","inspectRawGr2Result","count","filter","Boolean","format","sectionCount","secCount","FromFileName","counts","Meshes","models","Models","animations","Animations","materials","Materials","textures","Textures"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../../../src/formats/gr2/core/helpers.js"],"sourcesContent":["import { readGr2Raw } from \"./reader.js\";\nimport { emitJson, CLASS_KEYS as GR2_CLASS_KEYS } from \"./json.js\";\nimport { tangents } from \"./tangents.js\";\nimport { decompressAnimationCurves } from \"./curves.js\";\nimport { buildCmfFromShared, CMF_CLASS_KEYS, hydrateCmf } from \"./targets.js\";\n\nexport const CLASS_KEYS = Object.freeze(Array.from(new Set([\n ...GR2_CLASS_KEYS,\n ...CMF_CLASS_KEYS\n])));\n\nexport const OUTPUT_JSON = \"json\";\nexport const OUTPUT_GR2 = \"gr2\";\nexport const OUTPUT_GR2_JSON = \"gr2Json\";\nexport const OUTPUT_CMF = \"cmf\";\nexport const OUTPUT_RAW = \"raw\";\n\nexport const DEFAULT_VALUES = Object.freeze({\n emit: OUTPUT_JSON,\n decompressCurves: false,\n unpackTangents: false,\n rebuildMissingNormals: false,\n rebuildMissingTangents: false,\n rebuildMissingBiNormals: false,\n classes: Object.freeze({})\n});\n\nconst OPTION_KEYS = new Set([\n \"emit\",\n \"decompressCurves\",\n \"unpackTangents\",\n \"rebuildMissingNormals\",\n \"rebuildMissingTangents\",\n \"rebuildMissingBiNormals\",\n \"classes\"\n]);\n\nfunction normalizeEmit(emit)\n{\n if (emit === undefined || emit === OUTPUT_JSON) return OUTPUT_JSON;\n if (emit === OUTPUT_GR2_JSON) return OUTPUT_GR2_JSON;\n if (emit === OUTPUT_GR2) return OUTPUT_GR2;\n if (emit === OUTPUT_CMF) return OUTPUT_CMF;\n if (emit === OUTPUT_RAW) return OUTPUT_RAW;\n throw new Error(`CjsGr2Format unknown emit value \"${emit}\"`);\n}\n\nfunction hasOwn(value, key)\n{\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction classMap(values)\n{\n return values && values.classes ? values.classes : {};\n}\n\nfunction cloneValues(values)\n{\n return {\n emit: values.emit,\n decompressCurves: values.decompressCurves,\n unpackTangents: values.unpackTangents,\n rebuildMissingNormals: values.rebuildMissingNormals,\n rebuildMissingTangents: values.rebuildMissingTangents,\n rebuildMissingBiNormals: values.rebuildMissingBiNormals,\n classes: { ...classMap(values) }\n };\n}\n\nfunction assertKnownOptions(options)\n{\n for (const key of Object.keys(options))\n {\n if (!OPTION_KEYS.has(key))\n {\n throw new TypeError(`CjsGr2Format unknown option \"${key}\"`);\n }\n }\n}\n\nfunction validateBoolean(name, value)\n{\n if (typeof value !== \"boolean\")\n {\n throw new TypeError(`CjsGr2Format ${name} option must be true or false`);\n }\n return value;\n}\n\nfunction validateRule(name, value)\n{\n if (typeof value === \"boolean\" || typeof value === \"function\") return value;\n throw new TypeError(`CjsGr2Format ${name} option must be true, false, or a function`);\n}\n\n/** Validates a requested runtime class key for the GR2 format reader. */\nexport function validateClassKey(key)\n{\n if (!CLASS_KEYS.includes(key))\n {\n throw new Error(`CjsGr2Format unknown class type \"${key}\"`);\n }\n}\n\n/** Validates a resolved runtime class constructor for the GR2 format reader. */\nexport function validateClass(type, Class)\n{\n validateClassKey(type);\n if (typeof Class !== \"function\")\n {\n throw new TypeError(`CjsGr2Format class \"${type}\" must be a constructor`);\n }\n}\n\nfunction mergeClasses(values, classes)\n{\n if (!classes || typeof classes !== \"object\")\n {\n throw new TypeError(\"CjsGr2Format classes option must be an object\");\n }\n\n const next = { ...values.classes };\n for (const [ type, Class ] of Object.entries(classes))\n {\n validateClass(type, Class);\n next[type] = Class;\n }\n values.classes = next;\n}\n\nfunction optionValue(options, keys)\n{\n for (const key of keys)\n {\n if (hasOwn(options, key)) return options[key];\n }\n return undefined;\n}\n\n/**\n * Normalizes reader options against their supported defaults for the GR2 format\n * reader.\n */\nexport function normalizeValues(base = DEFAULT_VALUES, options = {})\n{\n if (!options || typeof options !== \"object\")\n {\n throw new TypeError(\"CjsGr2Format options must be an object\");\n }\n\n assertKnownOptions(options);\n\n const values = cloneValues(base);\n\n if (hasOwn(options, \"emit\")) values.emit = normalizeEmit(options.emit);\n if (hasOwn(options, \"decompressCurves\"))\n {\n values.decompressCurves = validateBoolean(\"decompressCurves\", options.decompressCurves);\n }\n\n const unpackTangents = optionValue(options, [ \"unpackTangents\" ]);\n if (unpackTangents !== undefined)\n {\n values.unpackTangents = validateRule(\"unpackTangents\", unpackTangents);\n }\n\n const rebuildMissingNormals = optionValue(options, [ \"rebuildMissingNormals\" ]);\n if (rebuildMissingNormals !== undefined)\n {\n values.rebuildMissingNormals = validateRule(\"rebuildMissingNormals\", rebuildMissingNormals);\n }\n\n const rebuildMissingTangents = optionValue(options, [ \"rebuildMissingTangents\" ]);\n if (rebuildMissingTangents !== undefined)\n {\n values.rebuildMissingTangents = validateRule(\"rebuildMissingTangents\", rebuildMissingTangents);\n }\n\n const rebuildMissingBiNormals = optionValue(options, [ \"rebuildMissingBiNormals\" ]);\n if (rebuildMissingBiNormals !== undefined)\n {\n values.rebuildMissingBiNormals = validateRule(\"rebuildMissingBiNormals\", rebuildMissingBiNormals);\n }\n\n if (hasOwn(options, \"classes\"))\n {\n mergeClasses(values, options.classes);\n }\n\n if ((values.emit === OUTPUT_GR2 || values.emit === OUTPUT_CMF) && !hasClasses(values.classes))\n {\n throw new TypeError(`CjsGr2Format emit \"${values.emit}\" requires explicit classes`);\n }\n\n return values;\n}\n\nfunction hasClasses(classes)\n{\n return !!classes && Object.values(classes).some((Class) => typeof Class === \"function\");\n}\n\nfunction isRawGr2Result(value)\n{\n return !!value && typeof value === \"object\" && \"fileInfo\" in value &&\n typeof value.version === \"number\";\n}\n\n/**\n * Normalizes GR2 input into a Uint8Array. readGr2Raw indexes `.buffer`,\n * `.byteOffset`, `.byteLength` and calls `.subarray()`, so a raw\n * ArrayBuffer (e.g. from `fetch(...).then(r => r.arrayBuffer())`, which\n * is how ccpwgl's resource loader supplies bytes) must be wrapped in a\n * view before it reaches readGr2Raw, not passed straight through.\n *\n * @param {Uint8Array|ArrayBuffer|Buffer|DataView} input GR2 bytes.\n * @returns {Uint8Array} A Uint8Array view over the same bytes.\n */\nfunction toBytes(input)\n{\n if (input instanceof Uint8Array) return input;\n if (typeof ArrayBuffer !== \"undefined\" && input instanceof ArrayBuffer) return new Uint8Array(input);\n if (ArrayBuffer.isView(input)) return new Uint8Array(input.buffer, input.byteOffset, input.byteLength);\n throw new TypeError(\"CjsGr2Format: input must be GR2 bytes (Uint8Array, Buffer, DataView or ArrayBuffer)\");\n}\n\n/** Reads and validates raw input bytes for the GR2 format reader. */\nexport function readRawInput(input)\n{\n return isRawGr2Result(input) ? input : readGr2Raw(toBytes(input));\n}\n\nfunction meshName(mesh, meshIndex)\n{\n return mesh && mesh.name ? `\"${mesh.name}\"` : `#${meshIndex}`;\n}\n\nfunction vertexChannel(mesh, channel)\n{\n return mesh && mesh.vertex && mesh.vertex[channel];\n}\n\nfunction hasVertexChannel(mesh, channel)\n{\n const value = vertexChannel(mesh, channel);\n return !!value && value.length > 0;\n}\n\nfunction requireVertexChannel(mesh, meshIndex, channel, feature)\n{\n const value = vertexChannel(mesh, channel);\n if (!value || value.length === 0)\n {\n throw new Error(`CjsGr2Format ${feature} requires mesh.vertex.${channel} for mesh ${meshName(mesh, meshIndex)}`);\n }\n return value;\n}\n\nfunction triangleFaces(mesh, meshIndex, feature)\n{\n const faces = [];\n for (const group of mesh.indices || [])\n {\n if (group && group.faces) faces.push(...group.faces);\n }\n\n if (faces.length === 0)\n {\n throw new Error(`CjsGr2Format ${feature} requires triangle indices for mesh ${meshName(mesh, meshIndex)}`);\n }\n\n return faces;\n}\n\nfunction shouldApplyMeshRule(reader, rule, context)\n{\n const fullContext = { reader, ...context };\n\n if (typeof rule === \"function\")\n {\n const result = rule(fullContext);\n if (typeof result !== \"boolean\")\n {\n throw new TypeError(`CjsGr2Format ${context.feature} rule must return true or false`);\n }\n return result;\n }\n\n return rule;\n}\n\nfunction unpackMeshTangents(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (shouldApplyMeshRule(reader, values.unpackTangents, {\n options: values, raw, json, mesh, meshIndex,\n feature: \"unpackTangents\",\n channel: \"tangent\"\n }))\n {\n tangents.unpack(mesh);\n }\n }\n}\n\nfunction rebuildMeshNormals(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingNormals\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingNormals\");\n\n mesh.vertex.normal = Array.from(tangents.generateNormals(positions, faces));\n}\n\nfunction rebuildMeshTangents(mesh, meshIndex)\n{\n const\n positions = requireVertexChannel(mesh, meshIndex, \"position\", \"rebuildMissingTangents\"),\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingTangents\"),\n uvs = requireVertexChannel(mesh, meshIndex, \"texcoord0\", \"rebuildMissingTangents\"),\n faces = triangleFaces(mesh, meshIndex, \"rebuildMissingTangents\");\n\n mesh.vertex.tangent = Array.from(tangents.generateTangents(positions, normals, uvs, faces));\n}\n\nfunction rebuildMeshBiNormals(mesh, meshIndex)\n{\n const\n normals = requireVertexChannel(mesh, meshIndex, \"normal\", \"rebuildMissingBiNormals\"),\n tangentValues = requireVertexChannel(mesh, meshIndex, \"tangent\", \"rebuildMissingBiNormals\");\n\n mesh.vertex.binormal = tangents.generateBiNormals(normals, tangentValues);\n}\n\nfunction rebuildMissingMeshData(reader, json, raw, values)\n{\n for (let meshIndex = 0; meshIndex < (json.meshes || []).length; meshIndex++)\n {\n const mesh = json.meshes[meshIndex];\n if (!hasVertexChannel(mesh, \"normal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingNormals\", channel: \"normal\" }))\n {\n rebuildMeshNormals(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"tangent\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingTangents,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingTangents\", channel: \"tangent\" }))\n {\n rebuildMeshTangents(mesh, meshIndex);\n }\n\n if (!hasVertexChannel(mesh, \"binormal\") && shouldApplyMeshRule(\n reader,\n values.rebuildMissingBiNormals,\n { options: values, raw, json, mesh, meshIndex, feature: \"rebuildMissingBiNormals\", channel: \"binormal\" }))\n {\n rebuildMeshBiNormals(mesh, meshIndex);\n }\n }\n}\n\nfunction processMeshData(reader, json, raw, values)\n{\n unpackMeshTangents(reader, json, raw, values);\n rebuildMissingMeshData(reader, json, raw, values);\n}\n\nfunction buildJson(reader, raw, values)\n{\n const json = emitJson(raw.fileInfo, raw.version, {\n classes: values.emit === OUTPUT_GR2 || ((values.emit === OUTPUT_JSON || values.emit === OUTPUT_GR2_JSON) && hasClasses(values.classes))\n ? values.classes\n : {}\n });\n\n if (values.decompressCurves)\n {\n decompressAnimationCurves(json);\n }\n\n processMeshData(reader, json, raw, values);\n\n return json;\n}\n\n/** Reads input using normalized format options for the GR2 format reader. */\nexport function readWithValues(reader, input, values)\n{\n const parsed = readRawInput(input);\n if (values.emit === OUTPUT_RAW) return parsed;\n const json = buildJson(reader, parsed, values);\n return values.emit === OUTPUT_CMF\n ? hydrateCmf(buildCmfFromShared(json), values.classes, { source: values.source })\n : json;\n}\n\n/** Converts a parsed payload into a JSON-safe value for the GR2 format reader. */\nexport function toJsonValue(value, seen = new WeakSet())\n{\n if (value === null || typeof value !== \"object\") return value;\n if (ArrayBuffer.isView(value)) return Array.from(value, item => toJsonValue(item, seen));\n if (Array.isArray(value)) return value.map(item => toJsonValue(item, seen));\n\n if (seen.has(value))\n {\n throw new TypeError(\"CjsGr2Format.toJSON cannot convert circular data\");\n }\n\n if (typeof value.toJSON === \"function\")\n {\n seen.add(value);\n const json = toJsonValue(value.toJSON(), seen);\n seen.delete(value);\n return json;\n }\n\n seen.add(value);\n const out = {};\n for (const key of Object.keys(value))\n {\n out[key] = toJsonValue(value[key], seen);\n }\n seen.delete(value);\n return out;\n}\n\n/**\n * Inspects raw GR2 result without materializing the full GR2 format reader\n * payload.\n */\nexport function inspectRawGr2Result(parsed)\n{\n const\n fileInfo = parsed.fileInfo || {},\n count = value => Array.isArray(value) ? value.filter(Boolean).length : 0;\n\n return {\n reader: \"CjsGr2Format\",\n format: \"gr2\",\n version: parsed.version | 0,\n sectionCount: parsed.secCount | 0,\n source: fileInfo.FromFileName ?? \"\",\n counts: {\n meshes: count(fileInfo.Meshes),\n models: count(fileInfo.Models),\n animations: count(fileInfo.Animations),\n materials: count(fileInfo.Materials),\n textures: count(fileInfo.Textures)\n }\n };\n}\n"],"names":["CLASS_KEYS","Object","freeze","Array","from","Set","GR2_CLASS_KEYS","CMF_CLASS_KEYS","OUTPUT_JSON","OUTPUT_GR2","OUTPUT_GR2_JSON","OUTPUT_CMF","OUTPUT_RAW","DEFAULT_VALUES","emit","decompressCurves","unpackTangents","rebuildMissingNormals","rebuildMissingTangents","rebuildMissingBiNormals","classes","OPTION_KEYS","normalizeEmit","undefined","Error","hasOwn","value","key","prototype","hasOwnProperty","call","classMap","values","cloneValues","assertKnownOptions","options","keys","has","TypeError","validateBoolean","name","validateRule","validateClassKey","includes","validateClass","type","Class","mergeClasses","next","entries","optionValue","normalizeValues","base","hasClasses","some","isRawGr2Result","version","toBytes","input","Uint8Array","ArrayBuffer","isView","buffer","byteOffset","byteLength","readRawInput","readGr2Raw","meshName","mesh","meshIndex","vertexChannel","channel","vertex","hasVertexChannel","length","requireVertexChannel","feature","triangleFaces","faces","group","indices","push","shouldApplyMeshRule","reader","rule","context","fullContext","result","unpackMeshTangents","json","raw","meshes","tangents","unpack","rebuildMeshNormals","positions","normal","generateNormals","rebuildMeshTangents","normals","uvs","tangent","generateTangents","rebuildMeshBiNormals","tangentValues","binormal","generateBiNormals","rebuildMissingMeshData","processMeshData","buildJson","emitJson","fileInfo","decompressAnimationCurves","readWithValues","parsed","hydrateCmf","buildCmfFromShared","source","toJsonValue","seen","WeakSet","item","isArray","map","toJSON","add","delete","out","inspectRawGr2Result","count","filter","Boolean","format","sectionCount","secCount","FromFileName","counts","Meshes","models","Models","animations","Animations","materials","Materials","textures","Textures"],"mappings":"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"}
@@ -77,7 +77,7 @@ function build(classes, key, props, hydrationOptions = {}) {
77
77
  }
78
78
  function populate(instance, props, hydrationOptions = {}) {
79
79
  if (!instance || typeof instance.SetValues !== "function") {
80
- throw new TypeError("CjsFormatGr2 class population requires classes to implement SetValues(values)");
80
+ throw new TypeError("CjsGr2Format class population requires classes to implement SetValues(values)");
81
81
  }
82
82
  instance.SetValues(props, {
83
83
  ...hydrationOptions,
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sources":["../../../../../src/formats/gr2/core/json.js"],"sourcesContent":["/**\n * GR2 JSON emitter.\n * @author cppctamber\n * `emitJson(fileInfo, version)` returns a plain object whose key order\n * mirrors the reader schema. Normalized integer values are dequantized with\n * float32 reciprocals, Real16 values are already converted by reader.js, and\n * non-finite floats are serialized as 0.\n */\n\nconst fr = Math.fround;\n\n/**\n * Member type ids whose numeric values need conversion for GR2 JSON output.\n */\nconst MEMBER_TYPES = Object.freeze({\n Real32: 10, Int8: 11, UInt8: 12, BinormalInt8: 13, NormalUInt8: 14,\n Int16: 15, UInt16: 16, BinormalInt16: 17, NormalUInt16: 18,\n Int32: 19, UInt32: 20, Real16: 21\n});\nconst T = MEMBER_TYPES;\n\n/** Float32 reciprocal used to dequantize NormalUInt8 values. */\nconst INV255_VALUE = fr(1 / 255);\n\n/** Float32 reciprocal used to dequantize NormalUInt16 values. */\nconst INV65535_VALUE = fr(1 / 65535);\n\n/** Float32 reciprocal used to dequantize BinormalInt8 values. */\nconst INV127_VALUE = fr(1 / 127);\n\n/** Float32 reciprocal used to dequantize BinormalInt16 values. */\nconst INV32767_VALUE = fr(1 / 32767);\n\nconst\n INV255 = INV255_VALUE,\n INV65535 = INV65535_VALUE,\n INV127 = INV127_VALUE,\n INV32767 = INV32767_VALUE;\n\n/**\n * Node keys accepted by {@link emitJson}'s `options.classes` map.\n *\n * Each key names one GR2 JSON node shape; the mapped constructor is\n * instantiated with `new` and populated with that node's usual fields instead\n * of a plain object literal.\n */\nexport const CLASS_KEYS = Object.freeze([\n \"Root\", \"Mesh\", \"BoneBinding\", \"IndexGroup\", \"MorphTarget\", \"Model\",\n \"Skeleton\", \"Bone\", \"Animation\", \"TrackGroup\", \"TransformTrack\", \"Curve\"\n]);\n\n/**\n * Constructors used to hydrate GR2 JSON nodes as class instances.\n *\n * Every key is optional; node types with no matching constructor keep the\n * default plain-object shape. See {@link CLASS_KEYS} for valid keys.\n *\n * @typedef {{[key: string]: new () => object}} Gr2NodeClasses\n */\n\n/**\n * Instantiate and populate a node class, or return the plain props unchanged.\n *\n * @param {Gr2NodeClasses} classes Opt-in node class map.\n * @param {string} key Node key to look up in `classes`.\n * @param {object} props Fields to populate onto the instance.\n * @returns {object} A populated class instance, or `props` when no\n * constructor is registered for `key`.\n */\nfunction build(classes, key, props, hydrationOptions = {})\n{\n const Ctor = classes[key];\n return Ctor ? populate(new Ctor(), props, hydrationOptions) : props;\n}\n\nfunction populate(instance, props, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsFormatGr2 class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(props, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\n/**\n * Root object emitted in the GR2 JSON shape.\n *\n * @typedef {object} Gr2JsonRoot\n * @property {number} grannyFileFormatRevision Granny file format revision.\n * @property {string} grannyFileSource Original source filename, or an empty string.\n * @property {object[]} meshes Mesh records with deinterleaved vertex channels.\n * @property {object[]} models Model records with skeleton and mesh bindings.\n * @property {object[]} animations Animation records and transform tracks.\n */\n\n/**\n * Convert a reflected numeric value to the float convention used by GR2 JSON.\n *\n * @param {number} v Raw reflected numeric value.\n * @param {number} memberType Granny member type id.\n * @returns {number} Converted and float32-rounded value.\n */\nfunction convert(v, memberType)\n{\n switch (memberType)\n {\n case T.NormalUInt8:\n return fr(v * INV255);\n\n case T.NormalUInt16:\n return fr(v * INV65535);\n\n case T.BinormalInt8:\n return fr(v * INV127);\n\n case T.BinormalInt16:\n return fr(v * INV32767);\n\n default:\n return fr(v);\n }\n}\n\n/**\n * Replace non-finite JSON numbers with zero.\n *\n * @param {number} v Candidate numeric value.\n * @returns {number} The original finite value, or zero.\n */\nfunction sf(v) { return Number.isFinite(v) ? v : 0; }\n\n/**\n * Copy and dequantize one vertex channel from reflected vertex objects.\n *\n * Missing Granny members return an empty channel.\n *\n * @param {object[]} vertices Reflected vertex array with non-enumerable type metadata.\n * @param {string} memberName Granny vertex member name to copy.\n * @param {number} destWidth Number of components in the emitted channel.\n * @returns {number[]} Flat deinterleaved channel values.\n */\nfunction copyChannel(vertices, memberName, destWidth)\n{\n const\n type = vertices.__type || [],\n m = type.find(x => x.name === memberName);\n if (!m) return [];\n const\n srcWidth = m.arrayWidth > 1 ? m.arrayWidth : 1,\n n = Math.min(srcWidth, destWidth),\n out = new Array(vertices.length * destWidth).fill(0);\n for (let i = 0; i < vertices.length; i++)\n {\n const\n raw = vertices[i][memberName],\n arr = Array.isArray(raw) ? raw : [ raw ],\n base = i * destWidth;\n for (let k = 0; k < n; k++)\n {\n out[base + k] = sf(convert(arr[k], m.type));\n }\n }\n return out;\n}\n\nconst VERTEX_CHANNELS = Object.freeze([\n [ \"position\", \"Position\", 3 ],\n [ \"blendIndice\", \"BoneIndices\", 4 ],\n [ \"tangent\", \"Tangent\", 4 ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"texcoord0\", \"TextureCoordinates0\", 2 ],\n [ \"texcoord1\", \"TextureCoordinates1\", 2 ],\n [ \"binormal\", \"Binormal\", 4 ],\n [ \"blendWeight\", \"BoneWeights\", 4 ]\n]);\n\nfunction emitVertexChannels(vertices)\n{\n const channels = {};\n for (const [ name, memberName, width ] of VERTEX_CHANNELS)\n {\n channels[name] = copyChannel(vertices, memberName, width);\n }\n return channels;\n}\n\n/**\n * Flatten reflected scalar-array wrappers into plain JavaScript values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array or already-flat array.\n * @returns {any[]} Plain scalar values.\n */\nfunction scalarArray(a)\n{\n if (!a || !a.length) return [];\n if (typeof a[0] === \"object\" && a[0] !== null)\n {\n const k = Object.keys(a[0])[0];\n return a.map(x => x[k]);\n }\n return a;\n}\n\n/**\n * Granny curve format ids emitted by the GR2 JSON curve serializer.\n */\nconst CURVE_FORMATS = Object.freeze({\n DaKeyframes32f: 0, DaK32fC32f: 1, DaIdentity: 2, DaConstant32f: 3,\n D3Constant32f: 4, D4Constant32f: 5, DaK16uC16u: 6, DaK8uC8u: 7,\n D4nK16uC15u: 8, D4nK8uC7u: 9, D3K16uC16u: 10, D3K8uC8u: 11,\n D9I1K16uC16u: 12, D9I3K16uC16u: 13, D9I1K8uC8u: 14, D9I3K8uC8u: 15,\n D3I1K32fC32f: 16, D3I1K16uC16u: 17, D3I1K8uC8u: 18\n});\nconst F = CURVE_FORMATS;\n\n/**\n * Locate the inline curve-data header inside a reflected curve-data object.\n *\n * @param {object} cd Reflected Granny curve-data object.\n * @returns {{Format: number, Degree: number}|null} Header object when present.\n */\nfunction curveHeader(cd)\n{\n for (const k of Object.keys(cd))\n {\n if (k.startsWith(\"CurveDataHeader\")) return cd[k];\n }\n return null;\n}\n\n/**\n * Convert a reflected scalar array to float32-rounded finite numbers.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Float array.\n */\nfunction farr(a) { return scalarArray(a).map(x => sf(fr(x))); }\n\n/**\n * Convert a reflected scalar array to unsigned 32-bit integer values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Unsigned integer array.\n */\nfunction uarr(a) { return scalarArray(a).map(x => x >>> 0); }\n\n/**\n * Emit one Granny Curve2 object in GR2 JSON form.\n *\n * @param {object} curve2 Reflected Granny curve object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Compact curve record with format-specific fields.\n */\nfunction emitCurve(curve2, classes = {})\n{\n const cd = curve2 && curve2.CurveData;\n if (!cd) return build(classes, \"Curve\", { format: 0, degree: 0, error: \"no curve data\" });\n const\n h = curveHeader(cd) || { Format: 0, Degree: 0 },\n format = h.Format,\n degree = h.Degree,\n o = { format, degree };\n switch (format)\n {\n case F.DaIdentity:\n break;\n\n case F.DaKeyframes32f:\n o.dimension = cd.Dimension;\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaConstant32f:\n o.controls = farr(cd.Controls);\n break;\n\n case F.D3Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0 ]).slice(0, 3).map(x => sf(fr(x)));\n break;\n\n case F.D4Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0, 0 ]).slice(0, 4).map(x => sf(fr(x)));\n break;\n\n case F.DaK32fC32f:\n o.knots = farr(cd.Knots);\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaK16uC16u:\n case F.DaK8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScaleOffsets = farr(cd.ControlScaleOffsets);\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D4nK16uC15u:\n case F.D4nK8uC7u:\n o.scaleOffsetTableEntries = cd.ScaleOffsetTableEntries;\n o.oneOverKnotScale = sf(fr(cd.OneOverKnotScale));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3K16uC16u:\n case F.D3K8uC8u:\n case F.D3I1K16uC16u:\n case F.D3I1K8uC8u:\n case F.D9I3K16uC16u:\n case F.D9I3K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3I1K32fC32f:\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = farr(cd.KnotsControls);\n break;\n\n case F.D9I1K16uC16u:\n case F.D9I1K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = [ sf(fr(cd.ControlScale)) ];\n o.controlOffsets = [ sf(fr(cd.ControlOffset)) ];\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n default:\n o.error = `Unknown format ${format}`;\n }\n return build(classes, \"Curve\", o);\n}\n\n/**\n * Convert arbitrary reflected variant data to JSON-safe plain values.\n *\n * @param {any} v Reflected variant value.\n * @returns {JsonValue} JSON-compatible value.\n */\nfunction emitVariant(v)\n{\n if (v === null || v === undefined) return null;\n if (Array.isArray(v)) return v.map(emitVariant);\n if (typeof v === \"object\")\n {\n const o = {};\n for (const k of Object.keys(v))\n {\n o[k] = emitVariant(v[k]);\n }\n return o;\n }\n if (typeof v === \"number\") return Number.isInteger(v) ? v : sf(fr(v));\n return v;\n}\n\n/**\n * Attach converted extended data when the reflected variant is present.\n *\n * @param {object} target Emitted GR2 JSON object to mutate.\n * @param {object|null|undefined} ext Reflected extended-data variant.\n * @returns {void}\n */\nfunction addExtendedData(target, ext)\n{\n if (ext !== null && ext !== undefined && typeof ext === \"object\")\n {\n target.extendedData = emitVariant(ext);\n }\n}\n\n/**\n * Emit one reflected Granny morph target (blend shape) in GR2 JSON shape.\n *\n * Morph target vertex data uses the same deinterleaved channel layout as a\n * mesh's primary vertex data.\n *\n * @param {object} mt Reflected Granny `granny_morph_target` object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted morph-target record.\n */\nfunction emitMorphTarget(mt, classes = {})\n{\n const\n vd = mt.VertexData,\n verts = (vd && vd.Vertices) || [];\n return build(classes, \"MorphTarget\", {\n name: mt.ScalarName ?? \"\",\n dataIsDeltas: !!mt.DataIsDeltas,\n vertex: emitVertexChannels(verts)\n });\n}\n\nfunction mappedAnnotationRows(set, vertexCount)\n{\n const\n annotations = set.VertexAnnotations || [],\n map = scalarArray(set.VertexAnnotationIndices),\n rows = [],\n vertexIndices = [];\n\n if (set.IndicesMapFromVertexToAnnotation)\n {\n for (let vertexIndex = 0; vertexIndex < Math.min(map.length, vertexCount); vertexIndex++)\n {\n const annotationIndex = map[vertexIndex];\n if (!Number.isInteger(annotationIndex) || annotationIndex < 0 || annotationIndex >= annotations.length) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n else\n {\n const count = map.length ? Math.min(map.length, annotations.length) : annotations.length;\n for (let annotationIndex = 0; annotationIndex < count; annotationIndex++)\n {\n const vertexIndex = map.length ? map[annotationIndex] : annotationIndex;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n\n Object.defineProperty(rows, \"__type\", {\n value: annotations.__type || [],\n configurable: true\n });\n\n const identity = rows.length === vertexCount && vertexIndices.every((value, index) => value === index);\n return { rows, vertexIndices: identity ? null : vertexIndices };\n}\n\nfunction emitVertexAnnotationTarget(set, vertexCount, classes = {})\n{\n if (!set || !set.VertexAnnotations?.length) return null;\n\n const mapped = mappedAnnotationRows(set, vertexCount);\n if (!mapped.rows.length) return null;\n\n const target = {\n name: set.Name ?? \"\",\n dataIsDeltas: true,\n vertex: emitVertexChannels(mapped.rows)\n };\n if (mapped.vertexIndices) target.vertexIndices = mapped.vertexIndices;\n return build(classes, \"MorphTarget\", target);\n}\n\n/**\n * Emit a reflected Granny mesh in GR2 JSON shape.\n *\n * @param {object} mesh Reflected Granny mesh object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted mesh record.\n */\nfunction emitMesh(mesh, classes = {})\n{\n const o = {};\n o.name = mesh.Name ?? \"\";\n o.minBounds = [ 0, 0, 0 ];\n o.maxBounds = [ 0, 0, 0 ];\n\n o.boneBindings = (mesh.BoneBindings || []).map(bb => build(classes, \"BoneBinding\", {\n name: bb.BoneName ?? \"\",\n minBounds: (bb.OBBMin || [ 0, 0, 0 ]).map(x => sf(fr(x))),\n maxBounds: (bb.OBBMax || [ 0, 0, 0 ]).map(x => sf(fr(x)))\n }));\n\n const\n vd = mesh.PrimaryVertexData,\n verts = (vd && vd.Vertices) || [];\n o.vertex = emitVertexChannels(verts);\n o.morphTargets = (mesh.MorphTargets || []).map(mt => emitMorphTarget(mt, classes));\n o.morphTargets.push(...(vd?.VertexAnnotationSets || [])\n .map(set => emitVertexAnnotationTarget(set, verts.length, classes))\n .filter(Boolean));\n\n const\n topo = mesh.PrimaryTopology || {},\n i32arr = scalarArray(topo.Indices),\n i16arr = scalarArray(topo.Indices16),\n groups = topo.Groups || [];\n o.indices = [];\n let indices = null, bpi = 0;\n if (i32arr.length) { indices = i32arr; bpi = 4; }\n else if (i16arr.length) { indices = i16arr.map(x => x & 0xffff); bpi = 2; }\n if (indices)\n {\n for (const g of groups)\n {\n const\n faces = new Array(g.TriCount * 3),\n start = g.TriFirst * 3;\n for (let i = 0; i < g.TriCount * 3; i++)\n {\n faces[i] = indices[start + i] >>> 0;\n }\n o.indices.push(build(classes, \"IndexGroup\", {\n name: `area_${g.MaterialIndex}`,\n bytesPerIndex: bpi,\n faces\n }));\n }\n }\n return build(classes, \"Mesh\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton bone in GR2 JSON shape.\n *\n * @param {object} bone Reflected Granny bone object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted bone record.\n */\nfunction emitBone(bone, classes = {})\n{\n const\n t = bone.LocalTransform || bone.Transform ||\n { flags: 0, position: [ 0, 0, 0 ], orientation: [ 0, 0, 0, 1 ], scaleShear: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] },\n o = {};\n o.name = bone.Name ?? \"\";\n o.parentIndex = bone.ParentIndex | 0;\n o.flag = t.flags;\n if (t.flags & 1) o.position = t.position.map(x => sf(fr(x)));\n if (t.flags & 2) o.orientation = t.orientation.map(x => sf(fr(x)));\n if (t.flags & 4) o.scaleShear = t.scaleShear.map(x => sf(fr(x)));\n addExtendedData(o, bone.ExtendedData);\n return build(classes, \"Bone\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton in GR2 JSON shape.\n *\n * @param {object|null} skel Reflected Granny skeleton object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted skeleton record.\n */\nfunction emitSkeleton(skel, classes = {})\n{\n const o = {};\n o.name = skel ? (skel.Name ?? \"\") : \"\";\n o.bones = skel ? (skel.Bones || []).map(b => emitBone(b, classes)) : [];\n if (skel) addExtendedData(o, skel.ExtendedData);\n return build(classes, \"Skeleton\", o);\n}\n\n/**\n * Emit a reflected Granny model in GR2 JSON shape.\n *\n * @param {object} model Reflected Granny model object.\n * @param {object} fileInfo Root reflected Granny file-info object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted model record.\n */\nfunction emitModel(model, fileInfo, classes = {})\n{\n const o = {};\n o.name = model.Name ?? \"\";\n o.skeleton = emitSkeleton(model.Skeleton, classes);\n const meshes = fileInfo.Meshes || [];\n o.meshBindings = (model.MeshBindings || []).map(mb =>\n {\n const idx = meshes.indexOf(mb && mb.Mesh);\n return idx;\n });\n addExtendedData(o, model.ExtendedData);\n return build(classes, \"Model\", o);\n}\n\n/**\n * Emit a reflected Granny transform track in GR2 JSON shape.\n *\n * @param {object} tt Reflected Granny transform-track object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted transform-track record.\n */\nfunction emitTransformTrack(tt, classes = {})\n{\n return build(classes, \"TransformTrack\", {\n name: tt.Name ?? \"\",\n flags: tt.Flags | 0,\n orientation: emitCurve(tt.OrientationCurve, classes),\n position: emitCurve(tt.PositionCurve, classes),\n scaleShear: emitCurve(tt.ScaleShearCurve, classes)\n });\n}\n\n/**\n * Emit a reflected Granny track group in GR2 JSON shape.\n *\n * @param {object} tg Reflected Granny track-group object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted track-group record.\n */\nfunction emitTrackGroup(tg, classes = {})\n{\n return build(classes, \"TrackGroup\", {\n name: tg.Name ?? \"\",\n transformTracks: (tg.TransformTracks || []).map(tt => emitTransformTrack(tt, classes))\n });\n}\n\n/**\n * Emit a reflected Granny animation in GR2 JSON shape.\n *\n * @param {object} anim Reflected Granny animation object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted animation record.\n */\nfunction emitAnimation(anim, classes = {})\n{\n const o = {};\n o.name = anim.Name ?? \"\";\n o.duration = sf(fr(anim.Duration));\n o.timeStep = sf(fr(anim.TimeStep));\n o.oversampling = sf(fr(anim.Oversampling));\n o.defaultLoopCount = anim.DefaultLoopCount | 0;\n o.flags = anim.Flags | 0;\n o.trackGroups = (anim.TrackGroups || []).filter(t => t).map(tg => emitTrackGroup(tg, classes));\n addExtendedData(o, anim.ExtendedData);\n return build(classes, \"Animation\", o);\n}\n\n/**\n * Convert a reflected `granny_file_info` graph into a GR2 JSON object.\n *\n * The key order and numeric conversion rules are stable so downstream tools can\n * compare emitted data.\n *\n * When `options.classes` is given, matching node types are instantiated and\n * populated as class instances instead of plain object literals; an opt-in\n * alternative to walking the returned JSON into application-specific classes\n * by hand. See {@link CLASS_KEYS} for the recognized keys.\n *\n * @param {object} fileInfo Reflected `granny_file_info` object from `reader.js`.\n * @param {number} version Granny file format revision.\n * @param {object} [options] Emission options.\n * @param {Gr2NodeClasses} [options.classes] Opt-in node class map.\n * @returns {Gr2JsonRoot} Plain JSON-compatible `GR2 JSON` object, or a\n * populated `classes.Root` instance when provided.\n */\nexport function emitJson(fileInfo, version, options = {})\n{\n const { classes = {}, ...hydrationOptions } = options;\n return build(classes, \"Root\", {\n grannyFileFormatRevision: version | 0,\n grannyFileSource: fileInfo.FromFileName ?? \"\",\n meshes: (fileInfo.Meshes || []).filter(m => m).map(m => emitMesh(m, classes)),\n models: (fileInfo.Models || []).filter(m => m).map(m => emitModel(m, fileInfo, classes)),\n animations: (fileInfo.Animations || []).filter(a => a).map(a => emitAnimation(a, classes))\n }, hydrationOptions);\n}\n"],"names":["fr","Math","fround","MEMBER_TYPES","Object","freeze","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","T","INV255_VALUE","INV65535_VALUE","INV127_VALUE","INV32767_VALUE","INV255","INV65535","INV127","INV32767","CLASS_KEYS","build","classes","key","props","hydrationOptions","Ctor","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","convert","v","memberType","sf","Number","isFinite","copyChannel","vertices","memberName","destWidth","type","__type","m","find","x","name","srcWidth","arrayWidth","n","min","out","Array","length","fill","i","raw","arr","isArray","base","k","VERTEX_CHANNELS","emitVertexChannels","channels","width","scalarArray","a","keys","map","CURVE_FORMATS","DaKeyframes32f","DaK32fC32f","DaIdentity","DaConstant32f","D3Constant32f","D4Constant32f","DaK16uC16u","DaK8uC8u","D4nK16uC15u","D4nK8uC7u","D3K16uC16u","D3K8uC8u","D9I1K16uC16u","D9I3K16uC16u","D9I1K8uC8u","D9I3K8uC8u","D3I1K32fC32f","D3I1K16uC16u","D3I1K8uC8u","F","curveHeader","cd","startsWith","farr","uarr","emitCurve","curve2","CurveData","format","degree","error","h","Format","Degree","o","dimension","Dimension","controls","Controls","slice","knots","Knots","oneOverKnotScaleTrunc","OneOverKnotScaleTrunc","controlScaleOffsets","ControlScaleOffsets","knotsControls","KnotsControls","scaleOffsetTableEntries","ScaleOffsetTableEntries","oneOverKnotScale","OneOverKnotScale","controlScales","ControlScales","controlOffsets","ControlOffsets","ControlScale","ControlOffset","emitVariant","undefined","isInteger","addExtendedData","target","ext","extendedData","emitMorphTarget","mt","vd","VertexData","verts","Vertices","ScalarName","dataIsDeltas","DataIsDeltas","vertex","mappedAnnotationRows","set","vertexCount","annotations","VertexAnnotations","VertexAnnotationIndices","rows","vertexIndices","IndicesMapFromVertexToAnnotation","vertexIndex","annotationIndex","push","count","defineProperty","value","configurable","identity","every","index","emitVertexAnnotationTarget","mapped","Name","emitMesh","mesh","minBounds","maxBounds","boneBindings","BoneBindings","bb","BoneName","OBBMin","OBBMax","PrimaryVertexData","morphTargets","MorphTargets","VertexAnnotationSets","filter","Boolean","topo","PrimaryTopology","i32arr","Indices","i16arr","Indices16","groups","Groups","indices","bpi","g","faces","TriCount","start","TriFirst","MaterialIndex","bytesPerIndex","emitBone","bone","t","LocalTransform","Transform","flags","position","orientation","scaleShear","parentIndex","ParentIndex","flag","ExtendedData","emitSkeleton","skel","bones","Bones","b","emitModel","model","fileInfo","skeleton","Skeleton","meshes","Meshes","meshBindings","MeshBindings","mb","idx","indexOf","Mesh","emitTransformTrack","tt","Flags","OrientationCurve","PositionCurve","ScaleShearCurve","emitTrackGroup","tg","transformTracks","TransformTracks","emitAnimation","anim","duration","Duration","timeStep","TimeStep","oversampling","Oversampling","defaultLoopCount","DefaultLoopCount","trackGroups","TrackGroups","emitJson","version","options","grannyFileFormatRevision","grannyFileSource","FromFileName","models","Models","animations","Animations"],"mappings":"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"}
1
+ {"version":3,"file":"json.js","sources":["../../../../../src/formats/gr2/core/json.js"],"sourcesContent":["/**\n * GR2 JSON emitter.\n * @author cppctamber\n * `emitJson(fileInfo, version)` returns a plain object whose key order\n * mirrors the reader schema. Normalized integer values are dequantized with\n * float32 reciprocals, Real16 values are already converted by reader.js, and\n * non-finite floats are serialized as 0.\n */\n\nconst fr = Math.fround;\n\n/**\n * Member type ids whose numeric values need conversion for GR2 JSON output.\n */\nconst MEMBER_TYPES = Object.freeze({\n Real32: 10, Int8: 11, UInt8: 12, BinormalInt8: 13, NormalUInt8: 14,\n Int16: 15, UInt16: 16, BinormalInt16: 17, NormalUInt16: 18,\n Int32: 19, UInt32: 20, Real16: 21\n});\nconst T = MEMBER_TYPES;\n\n/** Float32 reciprocal used to dequantize NormalUInt8 values. */\nconst INV255_VALUE = fr(1 / 255);\n\n/** Float32 reciprocal used to dequantize NormalUInt16 values. */\nconst INV65535_VALUE = fr(1 / 65535);\n\n/** Float32 reciprocal used to dequantize BinormalInt8 values. */\nconst INV127_VALUE = fr(1 / 127);\n\n/** Float32 reciprocal used to dequantize BinormalInt16 values. */\nconst INV32767_VALUE = fr(1 / 32767);\n\nconst\n INV255 = INV255_VALUE,\n INV65535 = INV65535_VALUE,\n INV127 = INV127_VALUE,\n INV32767 = INV32767_VALUE;\n\n/**\n * Node keys accepted by {@link emitJson}'s `options.classes` map.\n *\n * Each key names one GR2 JSON node shape; the mapped constructor is\n * instantiated with `new` and populated with that node's usual fields instead\n * of a plain object literal.\n */\nexport const CLASS_KEYS = Object.freeze([\n \"Root\", \"Mesh\", \"BoneBinding\", \"IndexGroup\", \"MorphTarget\", \"Model\",\n \"Skeleton\", \"Bone\", \"Animation\", \"TrackGroup\", \"TransformTrack\", \"Curve\"\n]);\n\n/**\n * Constructors used to hydrate GR2 JSON nodes as class instances.\n *\n * Every key is optional; node types with no matching constructor keep the\n * default plain-object shape. See {@link CLASS_KEYS} for valid keys.\n *\n * @typedef {{[key: string]: new () => object}} Gr2NodeClasses\n */\n\n/**\n * Instantiate and populate a node class, or return the plain props unchanged.\n *\n * @param {Gr2NodeClasses} classes Opt-in node class map.\n * @param {string} key Node key to look up in `classes`.\n * @param {object} props Fields to populate onto the instance.\n * @returns {object} A populated class instance, or `props` when no\n * constructor is registered for `key`.\n */\nfunction build(classes, key, props, hydrationOptions = {})\n{\n const Ctor = classes[key];\n return Ctor ? populate(new Ctor(), props, hydrationOptions) : props;\n}\n\nfunction populate(instance, props, hydrationOptions = {})\n{\n if (!instance || typeof instance.SetValues !== \"function\")\n {\n throw new TypeError(\"CjsGr2Format class population requires classes to implement SetValues(values)\");\n }\n instance.SetValues(props, { ...hydrationOptions, skipUpdate: true, skipEvents: true });\n return instance;\n}\n\n/**\n * Root object emitted in the GR2 JSON shape.\n *\n * @typedef {object} Gr2JsonRoot\n * @property {number} grannyFileFormatRevision Granny file format revision.\n * @property {string} grannyFileSource Original source filename, or an empty string.\n * @property {object[]} meshes Mesh records with deinterleaved vertex channels.\n * @property {object[]} models Model records with skeleton and mesh bindings.\n * @property {object[]} animations Animation records and transform tracks.\n */\n\n/**\n * Convert a reflected numeric value to the float convention used by GR2 JSON.\n *\n * @param {number} v Raw reflected numeric value.\n * @param {number} memberType Granny member type id.\n * @returns {number} Converted and float32-rounded value.\n */\nfunction convert(v, memberType)\n{\n switch (memberType)\n {\n case T.NormalUInt8:\n return fr(v * INV255);\n\n case T.NormalUInt16:\n return fr(v * INV65535);\n\n case T.BinormalInt8:\n return fr(v * INV127);\n\n case T.BinormalInt16:\n return fr(v * INV32767);\n\n default:\n return fr(v);\n }\n}\n\n/**\n * Replace non-finite JSON numbers with zero.\n *\n * @param {number} v Candidate numeric value.\n * @returns {number} The original finite value, or zero.\n */\nfunction sf(v) { return Number.isFinite(v) ? v : 0; }\n\n/**\n * Copy and dequantize one vertex channel from reflected vertex objects.\n *\n * Missing Granny members return an empty channel.\n *\n * @param {object[]} vertices Reflected vertex array with non-enumerable type metadata.\n * @param {string} memberName Granny vertex member name to copy.\n * @param {number} destWidth Number of components in the emitted channel.\n * @returns {number[]} Flat deinterleaved channel values.\n */\nfunction copyChannel(vertices, memberName, destWidth)\n{\n const\n type = vertices.__type || [],\n m = type.find(x => x.name === memberName);\n if (!m) return [];\n const\n srcWidth = m.arrayWidth > 1 ? m.arrayWidth : 1,\n n = Math.min(srcWidth, destWidth),\n out = new Array(vertices.length * destWidth).fill(0);\n for (let i = 0; i < vertices.length; i++)\n {\n const\n raw = vertices[i][memberName],\n arr = Array.isArray(raw) ? raw : [ raw ],\n base = i * destWidth;\n for (let k = 0; k < n; k++)\n {\n out[base + k] = sf(convert(arr[k], m.type));\n }\n }\n return out;\n}\n\nconst VERTEX_CHANNELS = Object.freeze([\n [ \"position\", \"Position\", 3 ],\n [ \"blendIndice\", \"BoneIndices\", 4 ],\n [ \"tangent\", \"Tangent\", 4 ],\n [ \"normal\", \"Normal\", 3 ],\n [ \"texcoord0\", \"TextureCoordinates0\", 2 ],\n [ \"texcoord1\", \"TextureCoordinates1\", 2 ],\n [ \"binormal\", \"Binormal\", 4 ],\n [ \"blendWeight\", \"BoneWeights\", 4 ]\n]);\n\nfunction emitVertexChannels(vertices)\n{\n const channels = {};\n for (const [ name, memberName, width ] of VERTEX_CHANNELS)\n {\n channels[name] = copyChannel(vertices, memberName, width);\n }\n return channels;\n}\n\n/**\n * Flatten reflected scalar-array wrappers into plain JavaScript values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array or already-flat array.\n * @returns {any[]} Plain scalar values.\n */\nfunction scalarArray(a)\n{\n if (!a || !a.length) return [];\n if (typeof a[0] === \"object\" && a[0] !== null)\n {\n const k = Object.keys(a[0])[0];\n return a.map(x => x[k]);\n }\n return a;\n}\n\n/**\n * Granny curve format ids emitted by the GR2 JSON curve serializer.\n */\nconst CURVE_FORMATS = Object.freeze({\n DaKeyframes32f: 0, DaK32fC32f: 1, DaIdentity: 2, DaConstant32f: 3,\n D3Constant32f: 4, D4Constant32f: 5, DaK16uC16u: 6, DaK8uC8u: 7,\n D4nK16uC15u: 8, D4nK8uC7u: 9, D3K16uC16u: 10, D3K8uC8u: 11,\n D9I1K16uC16u: 12, D9I3K16uC16u: 13, D9I1K8uC8u: 14, D9I3K8uC8u: 15,\n D3I1K32fC32f: 16, D3I1K16uC16u: 17, D3I1K8uC8u: 18\n});\nconst F = CURVE_FORMATS;\n\n/**\n * Locate the inline curve-data header inside a reflected curve-data object.\n *\n * @param {object} cd Reflected Granny curve-data object.\n * @returns {{Format: number, Degree: number}|null} Header object when present.\n */\nfunction curveHeader(cd)\n{\n for (const k of Object.keys(cd))\n {\n if (k.startsWith(\"CurveDataHeader\")) return cd[k];\n }\n return null;\n}\n\n/**\n * Convert a reflected scalar array to float32-rounded finite numbers.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Float array.\n */\nfunction farr(a) { return scalarArray(a).map(x => sf(fr(x))); }\n\n/**\n * Convert a reflected scalar array to unsigned 32-bit integer values.\n *\n * @param {ArrayLike<any>} a Reflected scalar array.\n * @returns {number[]} Unsigned integer array.\n */\nfunction uarr(a) { return scalarArray(a).map(x => x >>> 0); }\n\n/**\n * Emit one Granny Curve2 object in GR2 JSON form.\n *\n * @param {object} curve2 Reflected Granny curve object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Compact curve record with format-specific fields.\n */\nfunction emitCurve(curve2, classes = {})\n{\n const cd = curve2 && curve2.CurveData;\n if (!cd) return build(classes, \"Curve\", { format: 0, degree: 0, error: \"no curve data\" });\n const\n h = curveHeader(cd) || { Format: 0, Degree: 0 },\n format = h.Format,\n degree = h.Degree,\n o = { format, degree };\n switch (format)\n {\n case F.DaIdentity:\n break;\n\n case F.DaKeyframes32f:\n o.dimension = cd.Dimension;\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaConstant32f:\n o.controls = farr(cd.Controls);\n break;\n\n case F.D3Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0 ]).slice(0, 3).map(x => sf(fr(x)));\n break;\n\n case F.D4Constant32f:\n o.controls = (cd.Controls || [ 0, 0, 0, 0 ]).slice(0, 4).map(x => sf(fr(x)));\n break;\n\n case F.DaK32fC32f:\n o.knots = farr(cd.Knots);\n o.controls = farr(cd.Controls);\n break;\n\n case F.DaK16uC16u:\n case F.DaK8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScaleOffsets = farr(cd.ControlScaleOffsets);\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D4nK16uC15u:\n case F.D4nK8uC7u:\n o.scaleOffsetTableEntries = cd.ScaleOffsetTableEntries;\n o.oneOverKnotScale = sf(fr(cd.OneOverKnotScale));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3K16uC16u:\n case F.D3K8uC8u:\n case F.D3I1K16uC16u:\n case F.D3I1K8uC8u:\n case F.D9I3K16uC16u:\n case F.D9I3K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n case F.D3I1K32fC32f:\n o.controlScales = (cd.ControlScales || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.controlOffsets = (cd.ControlOffsets || [ 0, 0, 0 ]).map(x => sf(fr(x)));\n o.knotsControls = farr(cd.KnotsControls);\n break;\n\n case F.D9I1K16uC16u:\n case F.D9I1K8uC8u:\n o.oneOverKnotScaleTrunc = cd.OneOverKnotScaleTrunc;\n o.controlScales = [ sf(fr(cd.ControlScale)) ];\n o.controlOffsets = [ sf(fr(cd.ControlOffset)) ];\n o.knotsControls = uarr(cd.KnotsControls);\n break;\n\n default:\n o.error = `Unknown format ${format}`;\n }\n return build(classes, \"Curve\", o);\n}\n\n/**\n * Convert arbitrary reflected variant data to JSON-safe plain values.\n *\n * @param {any} v Reflected variant value.\n * @returns {JsonValue} JSON-compatible value.\n */\nfunction emitVariant(v)\n{\n if (v === null || v === undefined) return null;\n if (Array.isArray(v)) return v.map(emitVariant);\n if (typeof v === \"object\")\n {\n const o = {};\n for (const k of Object.keys(v))\n {\n o[k] = emitVariant(v[k]);\n }\n return o;\n }\n if (typeof v === \"number\") return Number.isInteger(v) ? v : sf(fr(v));\n return v;\n}\n\n/**\n * Attach converted extended data when the reflected variant is present.\n *\n * @param {object} target Emitted GR2 JSON object to mutate.\n * @param {object|null|undefined} ext Reflected extended-data variant.\n * @returns {void}\n */\nfunction addExtendedData(target, ext)\n{\n if (ext !== null && ext !== undefined && typeof ext === \"object\")\n {\n target.extendedData = emitVariant(ext);\n }\n}\n\n/**\n * Emit one reflected Granny morph target (blend shape) in GR2 JSON shape.\n *\n * Morph target vertex data uses the same deinterleaved channel layout as a\n * mesh's primary vertex data.\n *\n * @param {object} mt Reflected Granny `granny_morph_target` object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted morph-target record.\n */\nfunction emitMorphTarget(mt, classes = {})\n{\n const\n vd = mt.VertexData,\n verts = (vd && vd.Vertices) || [];\n return build(classes, \"MorphTarget\", {\n name: mt.ScalarName ?? \"\",\n dataIsDeltas: !!mt.DataIsDeltas,\n vertex: emitVertexChannels(verts)\n });\n}\n\nfunction mappedAnnotationRows(set, vertexCount)\n{\n const\n annotations = set.VertexAnnotations || [],\n map = scalarArray(set.VertexAnnotationIndices),\n rows = [],\n vertexIndices = [];\n\n if (set.IndicesMapFromVertexToAnnotation)\n {\n for (let vertexIndex = 0; vertexIndex < Math.min(map.length, vertexCount); vertexIndex++)\n {\n const annotationIndex = map[vertexIndex];\n if (!Number.isInteger(annotationIndex) || annotationIndex < 0 || annotationIndex >= annotations.length) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n else\n {\n const count = map.length ? Math.min(map.length, annotations.length) : annotations.length;\n for (let annotationIndex = 0; annotationIndex < count; annotationIndex++)\n {\n const vertexIndex = map.length ? map[annotationIndex] : annotationIndex;\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0 || vertexIndex >= vertexCount) continue;\n rows.push(annotations[annotationIndex]);\n vertexIndices.push(vertexIndex);\n }\n }\n\n Object.defineProperty(rows, \"__type\", {\n value: annotations.__type || [],\n configurable: true\n });\n\n const identity = rows.length === vertexCount && vertexIndices.every((value, index) => value === index);\n return { rows, vertexIndices: identity ? null : vertexIndices };\n}\n\nfunction emitVertexAnnotationTarget(set, vertexCount, classes = {})\n{\n if (!set || !set.VertexAnnotations?.length) return null;\n\n const mapped = mappedAnnotationRows(set, vertexCount);\n if (!mapped.rows.length) return null;\n\n const target = {\n name: set.Name ?? \"\",\n dataIsDeltas: true,\n vertex: emitVertexChannels(mapped.rows)\n };\n if (mapped.vertexIndices) target.vertexIndices = mapped.vertexIndices;\n return build(classes, \"MorphTarget\", target);\n}\n\n/**\n * Emit a reflected Granny mesh in GR2 JSON shape.\n *\n * @param {object} mesh Reflected Granny mesh object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted mesh record.\n */\nfunction emitMesh(mesh, classes = {})\n{\n const o = {};\n o.name = mesh.Name ?? \"\";\n o.minBounds = [ 0, 0, 0 ];\n o.maxBounds = [ 0, 0, 0 ];\n\n o.boneBindings = (mesh.BoneBindings || []).map(bb => build(classes, \"BoneBinding\", {\n name: bb.BoneName ?? \"\",\n minBounds: (bb.OBBMin || [ 0, 0, 0 ]).map(x => sf(fr(x))),\n maxBounds: (bb.OBBMax || [ 0, 0, 0 ]).map(x => sf(fr(x)))\n }));\n\n const\n vd = mesh.PrimaryVertexData,\n verts = (vd && vd.Vertices) || [];\n o.vertex = emitVertexChannels(verts);\n o.morphTargets = (mesh.MorphTargets || []).map(mt => emitMorphTarget(mt, classes));\n o.morphTargets.push(...(vd?.VertexAnnotationSets || [])\n .map(set => emitVertexAnnotationTarget(set, verts.length, classes))\n .filter(Boolean));\n\n const\n topo = mesh.PrimaryTopology || {},\n i32arr = scalarArray(topo.Indices),\n i16arr = scalarArray(topo.Indices16),\n groups = topo.Groups || [];\n o.indices = [];\n let indices = null, bpi = 0;\n if (i32arr.length) { indices = i32arr; bpi = 4; }\n else if (i16arr.length) { indices = i16arr.map(x => x & 0xffff); bpi = 2; }\n if (indices)\n {\n for (const g of groups)\n {\n const\n faces = new Array(g.TriCount * 3),\n start = g.TriFirst * 3;\n for (let i = 0; i < g.TriCount * 3; i++)\n {\n faces[i] = indices[start + i] >>> 0;\n }\n o.indices.push(build(classes, \"IndexGroup\", {\n name: `area_${g.MaterialIndex}`,\n bytesPerIndex: bpi,\n faces\n }));\n }\n }\n return build(classes, \"Mesh\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton bone in GR2 JSON shape.\n *\n * @param {object} bone Reflected Granny bone object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted bone record.\n */\nfunction emitBone(bone, classes = {})\n{\n const\n t = bone.LocalTransform || bone.Transform ||\n { flags: 0, position: [ 0, 0, 0 ], orientation: [ 0, 0, 0, 1 ], scaleShear: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] },\n o = {};\n o.name = bone.Name ?? \"\";\n o.parentIndex = bone.ParentIndex | 0;\n o.flag = t.flags;\n if (t.flags & 1) o.position = t.position.map(x => sf(fr(x)));\n if (t.flags & 2) o.orientation = t.orientation.map(x => sf(fr(x)));\n if (t.flags & 4) o.scaleShear = t.scaleShear.map(x => sf(fr(x)));\n addExtendedData(o, bone.ExtendedData);\n return build(classes, \"Bone\", o);\n}\n\n/**\n * Emit a reflected Granny skeleton in GR2 JSON shape.\n *\n * @param {object|null} skel Reflected Granny skeleton object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted skeleton record.\n */\nfunction emitSkeleton(skel, classes = {})\n{\n const o = {};\n o.name = skel ? (skel.Name ?? \"\") : \"\";\n o.bones = skel ? (skel.Bones || []).map(b => emitBone(b, classes)) : [];\n if (skel) addExtendedData(o, skel.ExtendedData);\n return build(classes, \"Skeleton\", o);\n}\n\n/**\n * Emit a reflected Granny model in GR2 JSON shape.\n *\n * @param {object} model Reflected Granny model object.\n * @param {object} fileInfo Root reflected Granny file-info object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted model record.\n */\nfunction emitModel(model, fileInfo, classes = {})\n{\n const o = {};\n o.name = model.Name ?? \"\";\n o.skeleton = emitSkeleton(model.Skeleton, classes);\n const meshes = fileInfo.Meshes || [];\n o.meshBindings = (model.MeshBindings || []).map(mb =>\n {\n const idx = meshes.indexOf(mb && mb.Mesh);\n return idx;\n });\n addExtendedData(o, model.ExtendedData);\n return build(classes, \"Model\", o);\n}\n\n/**\n * Emit a reflected Granny transform track in GR2 JSON shape.\n *\n * @param {object} tt Reflected Granny transform-track object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted transform-track record.\n */\nfunction emitTransformTrack(tt, classes = {})\n{\n return build(classes, \"TransformTrack\", {\n name: tt.Name ?? \"\",\n flags: tt.Flags | 0,\n orientation: emitCurve(tt.OrientationCurve, classes),\n position: emitCurve(tt.PositionCurve, classes),\n scaleShear: emitCurve(tt.ScaleShearCurve, classes)\n });\n}\n\n/**\n * Emit a reflected Granny track group in GR2 JSON shape.\n *\n * @param {object} tg Reflected Granny track-group object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted track-group record.\n */\nfunction emitTrackGroup(tg, classes = {})\n{\n return build(classes, \"TrackGroup\", {\n name: tg.Name ?? \"\",\n transformTracks: (tg.TransformTracks || []).map(tt => emitTransformTrack(tt, classes))\n });\n}\n\n/**\n * Emit a reflected Granny animation in GR2 JSON shape.\n *\n * @param {object} anim Reflected Granny animation object.\n * @param {Gr2NodeClasses} [classes] Opt-in node class map.\n * @returns {object} Emitted animation record.\n */\nfunction emitAnimation(anim, classes = {})\n{\n const o = {};\n o.name = anim.Name ?? \"\";\n o.duration = sf(fr(anim.Duration));\n o.timeStep = sf(fr(anim.TimeStep));\n o.oversampling = sf(fr(anim.Oversampling));\n o.defaultLoopCount = anim.DefaultLoopCount | 0;\n o.flags = anim.Flags | 0;\n o.trackGroups = (anim.TrackGroups || []).filter(t => t).map(tg => emitTrackGroup(tg, classes));\n addExtendedData(o, anim.ExtendedData);\n return build(classes, \"Animation\", o);\n}\n\n/**\n * Convert a reflected `granny_file_info` graph into a GR2 JSON object.\n *\n * The key order and numeric conversion rules are stable so downstream tools can\n * compare emitted data.\n *\n * When `options.classes` is given, matching node types are instantiated and\n * populated as class instances instead of plain object literals; an opt-in\n * alternative to walking the returned JSON into application-specific classes\n * by hand. See {@link CLASS_KEYS} for the recognized keys.\n *\n * @param {object} fileInfo Reflected `granny_file_info` object from `reader.js`.\n * @param {number} version Granny file format revision.\n * @param {object} [options] Emission options.\n * @param {Gr2NodeClasses} [options.classes] Opt-in node class map.\n * @returns {Gr2JsonRoot} Plain JSON-compatible `GR2 JSON` object, or a\n * populated `classes.Root` instance when provided.\n */\nexport function emitJson(fileInfo, version, options = {})\n{\n const { classes = {}, ...hydrationOptions } = options;\n return build(classes, \"Root\", {\n grannyFileFormatRevision: version | 0,\n grannyFileSource: fileInfo.FromFileName ?? \"\",\n meshes: (fileInfo.Meshes || []).filter(m => m).map(m => emitMesh(m, classes)),\n models: (fileInfo.Models || []).filter(m => m).map(m => emitModel(m, fileInfo, classes)),\n animations: (fileInfo.Animations || []).filter(a => a).map(a => emitAnimation(a, classes))\n }, hydrationOptions);\n}\n"],"names":["fr","Math","fround","MEMBER_TYPES","Object","freeze","Real32","Int8","UInt8","BinormalInt8","NormalUInt8","Int16","UInt16","BinormalInt16","NormalUInt16","Int32","UInt32","Real16","T","INV255_VALUE","INV65535_VALUE","INV127_VALUE","INV32767_VALUE","INV255","INV65535","INV127","INV32767","CLASS_KEYS","build","classes","key","props","hydrationOptions","Ctor","populate","instance","SetValues","TypeError","skipUpdate","skipEvents","convert","v","memberType","sf","Number","isFinite","copyChannel","vertices","memberName","destWidth","type","__type","m","find","x","name","srcWidth","arrayWidth","n","min","out","Array","length","fill","i","raw","arr","isArray","base","k","VERTEX_CHANNELS","emitVertexChannels","channels","width","scalarArray","a","keys","map","CURVE_FORMATS","DaKeyframes32f","DaK32fC32f","DaIdentity","DaConstant32f","D3Constant32f","D4Constant32f","DaK16uC16u","DaK8uC8u","D4nK16uC15u","D4nK8uC7u","D3K16uC16u","D3K8uC8u","D9I1K16uC16u","D9I3K16uC16u","D9I1K8uC8u","D9I3K8uC8u","D3I1K32fC32f","D3I1K16uC16u","D3I1K8uC8u","F","curveHeader","cd","startsWith","farr","uarr","emitCurve","curve2","CurveData","format","degree","error","h","Format","Degree","o","dimension","Dimension","controls","Controls","slice","knots","Knots","oneOverKnotScaleTrunc","OneOverKnotScaleTrunc","controlScaleOffsets","ControlScaleOffsets","knotsControls","KnotsControls","scaleOffsetTableEntries","ScaleOffsetTableEntries","oneOverKnotScale","OneOverKnotScale","controlScales","ControlScales","controlOffsets","ControlOffsets","ControlScale","ControlOffset","emitVariant","undefined","isInteger","addExtendedData","target","ext","extendedData","emitMorphTarget","mt","vd","VertexData","verts","Vertices","ScalarName","dataIsDeltas","DataIsDeltas","vertex","mappedAnnotationRows","set","vertexCount","annotations","VertexAnnotations","VertexAnnotationIndices","rows","vertexIndices","IndicesMapFromVertexToAnnotation","vertexIndex","annotationIndex","push","count","defineProperty","value","configurable","identity","every","index","emitVertexAnnotationTarget","mapped","Name","emitMesh","mesh","minBounds","maxBounds","boneBindings","BoneBindings","bb","BoneName","OBBMin","OBBMax","PrimaryVertexData","morphTargets","MorphTargets","VertexAnnotationSets","filter","Boolean","topo","PrimaryTopology","i32arr","Indices","i16arr","Indices16","groups","Groups","indices","bpi","g","faces","TriCount","start","TriFirst","MaterialIndex","bytesPerIndex","emitBone","bone","t","LocalTransform","Transform","flags","position","orientation","scaleShear","parentIndex","ParentIndex","flag","ExtendedData","emitSkeleton","skel","bones","Bones","b","emitModel","model","fileInfo","skeleton","Skeleton","meshes","Meshes","meshBindings","MeshBindings","mb","idx","indexOf","Mesh","emitTransformTrack","tt","Flags","OrientationCurve","PositionCurve","ScaleShearCurve","emitTrackGroup","tg","transformTracks","TransformTracks","emitAnimation","anim","duration","Duration","timeStep","TimeStep","oversampling","Oversampling","defaultLoopCount","DefaultLoopCount","trackGroups","TrackGroups","emitJson","version","options","grannyFileFormatRevision","grannyFileSource","FromFileName","models","Models","animations","Animations"],"mappings":"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"}
@@ -339,7 +339,7 @@ function hydrate(type, fields, classes, hydrationOptions = {}) {
339
339
  }
340
340
  function populate(instance, fields, hydrationOptions = {}) {
341
341
  if (!instance || typeof instance.SetValues !== "function") {
342
- throw new TypeError("CjsFormatGr2 CMF class population requires classes to implement SetValues(values)");
342
+ throw new TypeError("CjsGr2Format CMF class population requires classes to implement SetValues(values)");
343
343
  }
344
344
  instance.SetValues(fields, {
345
345
  ...hydrationOptions,