@loaders.gl/scene 5.0.0-beta.4 → 5.0.0-beta.6

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 (177) hide show
  1. package/DRACO-README.md +1 -1
  2. package/GLTF-README.md +1 -1
  3. package/OBJ-README.md +1 -1
  4. package/README.md +6 -1
  5. package/THIRD-PARTY-NOTICES.md +6 -0
  6. package/dist/dist.dev.js +2959 -750
  7. package/dist/dist.min.js +18 -18
  8. package/dist/draco/draco-javascript-loader-with-parser.d.ts +2 -2
  9. package/dist/draco/draco-loader-types.cjs +3 -3
  10. package/dist/draco/draco-loader-types.cjs.map +2 -2
  11. package/dist/draco/draco-loader-types.d.ts +1 -1
  12. package/dist/draco/draco-loader-types.d.ts.map +1 -1
  13. package/dist/draco/draco-loader-types.js +1 -1
  14. package/dist/draco/draco-loader-types.js.map +1 -1
  15. package/dist/draco/draco-loader.d.ts +2 -2
  16. package/dist/draco/draco-wasm-loader-with-parser.d.ts +2 -2
  17. package/dist/draco/draco3d-loader-with-parser.d.ts +2 -2
  18. package/dist/draco/lib/utils/version.cjs +1 -1
  19. package/dist/draco/lib/utils/version.js +1 -1
  20. package/dist/draco-worker-node.js +401 -113
  21. package/dist/draco-worker-node.js.map +4 -4
  22. package/dist/draco-worker.js +395 -113
  23. package/dist/draco-worker.js.map +4 -4
  24. package/dist/draco-writer-worker-node.cjs +655 -85
  25. package/dist/draco-writer-worker-node.cjs.map +4 -4
  26. package/dist/draco-writer-worker.js +625 -69
  27. package/dist/draco-writer-worker.js.map +4 -4
  28. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs +11 -4
  29. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.cjs.map +2 -2
  30. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.d.ts.map +1 -1
  31. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js +12 -2
  32. package/dist/gltf/lib/extensions/KHR_gaussian_splatting.js.map +1 -1
  33. package/dist/gltf/lib/parsers/parse-gltf.cjs.map +2 -2
  34. package/dist/gltf/lib/parsers/parse-gltf.d.ts +2 -0
  35. package/dist/gltf/lib/parsers/parse-gltf.d.ts.map +1 -1
  36. package/dist/gltf/lib/parsers/parse-gltf.js.map +1 -1
  37. package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs +22 -0
  38. package/dist/gltf/lib/types/gltf-additional-extension-schemas.cjs.map +2 -2
  39. package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts +23 -0
  40. package/dist/gltf/lib/types/gltf-additional-extension-schemas.d.ts.map +1 -1
  41. package/dist/gltf/lib/types/gltf-additional-extension-schemas.js +22 -0
  42. package/dist/gltf/lib/types/gltf-additional-extension-schemas.js.map +1 -1
  43. package/dist/gltf/lib/types/gltf-extension-schemas.cjs +8 -0
  44. package/dist/gltf/lib/types/gltf-extension-schemas.cjs.map +2 -2
  45. package/dist/gltf/lib/types/gltf-extension-schemas.d.ts +27 -0
  46. package/dist/gltf/lib/types/gltf-extension-schemas.d.ts.map +1 -1
  47. package/dist/gltf/lib/types/gltf-extension-schemas.js +8 -1
  48. package/dist/gltf/lib/types/gltf-extension-schemas.js.map +1 -1
  49. package/dist/gltf/lib/types/gltf-json-schema.cjs.map +1 -1
  50. package/dist/gltf/lib/types/gltf-json-schema.d.ts +2 -2
  51. package/dist/gltf/lib/types/gltf-json-schema.d.ts.map +1 -1
  52. package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts +34 -0
  53. package/dist/gltf/lib/types/gltf-version-zod-schemas.d.ts.map +1 -1
  54. package/dist/gltf/lib/types/gltf-zod-schema.cjs +1 -1
  55. package/dist/gltf/lib/types/gltf-zod-schema.cjs.map +2 -2
  56. package/dist/gltf/lib/types/gltf-zod-schema.d.ts +51 -0
  57. package/dist/gltf/lib/types/gltf-zod-schema.d.ts.map +1 -1
  58. package/dist/gltf/lib/types/gltf-zod-schema.js +2 -2
  59. package/dist/gltf/lib/types/gltf-zod-schema.js.map +1 -1
  60. package/dist/gltf/lib/utils/version.cjs +1 -1
  61. package/dist/gltf/lib/utils/version.js +1 -1
  62. package/dist/index.cjs +4 -1
  63. package/dist/index.cjs.map +2 -2
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -1
  67. package/dist/index.js.map +1 -1
  68. package/dist/mtl-loader-types.cjs +1 -1
  69. package/dist/obj/mtl-loader-types.cjs +1 -1
  70. package/dist/obj/mtl-loader-types.js +1 -1
  71. package/dist/obj/obj-loader-types.cjs +3 -3
  72. package/dist/obj/obj-loader-types.cjs.map +2 -2
  73. package/dist/obj/obj-loader-types.d.ts +1 -1
  74. package/dist/obj/obj-loader-types.d.ts.map +1 -1
  75. package/dist/obj/obj-loader-types.js +2 -2
  76. package/dist/obj/obj-loader-types.js.map +1 -1
  77. package/dist/obj/obj-loader.cjs +5 -5
  78. package/dist/obj/obj-loader.cjs.map +2 -2
  79. package/dist/obj/obj-loader.d.ts +1 -1
  80. package/dist/obj/obj-loader.d.ts.map +1 -1
  81. package/dist/obj/obj-loader.js +1 -1
  82. package/dist/obj/obj-loader.js.map +1 -1
  83. package/dist/obj/obj-writer.cjs +1 -1
  84. package/dist/obj/obj-writer.js +1 -1
  85. package/dist/obj-loader-types.cjs +3 -3
  86. package/dist/obj-loader-types.cjs.map +2 -2
  87. package/dist/obj-loader.cjs +5 -5
  88. package/dist/obj-loader.cjs.map +2 -2
  89. package/dist/obj-worker.js +568 -287
  90. package/dist/obj-writer.cjs +1 -1
  91. package/dist/stl/parse-stl.cjs +100 -0
  92. package/dist/stl/parse-stl.cjs.map +7 -0
  93. package/dist/stl/parse-stl.d.ts +4 -0
  94. package/dist/stl/parse-stl.d.ts.map +1 -0
  95. package/dist/stl/parse-stl.js +84 -0
  96. package/dist/stl/parse-stl.js.map +1 -0
  97. package/dist/stl-loader-types.cjs +58 -0
  98. package/dist/stl-loader-types.cjs.map +7 -0
  99. package/dist/stl-loader-types.d.ts +32 -0
  100. package/dist/stl-loader-types.d.ts.map +1 -0
  101. package/dist/stl-loader-types.js +25 -0
  102. package/dist/stl-loader-types.js.map +1 -0
  103. package/dist/stl-loader.cjs +38 -0
  104. package/dist/stl-loader.cjs.map +7 -0
  105. package/dist/stl-loader.d.ts +17 -0
  106. package/dist/stl-loader.d.ts.map +1 -0
  107. package/dist/stl-loader.js +13 -0
  108. package/dist/stl-loader.js.map +1 -0
  109. package/dist/usd/index.cjs.map +1 -1
  110. package/dist/usd/index.d.ts +1 -1
  111. package/dist/usd/index.d.ts.map +1 -1
  112. package/dist/usd/lib/parse-usd.cjs +42 -5
  113. package/dist/usd/lib/parse-usd.cjs.map +2 -2
  114. package/dist/usd/lib/parse-usd.d.ts.map +1 -1
  115. package/dist/usd/lib/parse-usd.js +53 -6
  116. package/dist/usd/lib/parse-usd.js.map +1 -1
  117. package/dist/usd/lib/parse-usdc.cjs +187 -0
  118. package/dist/usd/lib/parse-usdc.cjs.map +7 -0
  119. package/dist/usd/lib/parse-usdc.d.ts +4 -0
  120. package/dist/usd/lib/parse-usdc.d.ts.map +1 -0
  121. package/dist/usd/lib/parse-usdc.js +176 -0
  122. package/dist/usd/lib/parse-usdc.js.map +1 -0
  123. package/dist/usd/lib/parse-usdz.cjs +22 -0
  124. package/dist/usd/lib/parse-usdz.cjs.map +2 -2
  125. package/dist/usd/lib/parse-usdz.d.ts.map +1 -1
  126. package/dist/usd/lib/parse-usdz.js +26 -0
  127. package/dist/usd/lib/parse-usdz.js.map +1 -1
  128. package/dist/usd/lib/usd-types.cjs.map +1 -1
  129. package/dist/usd/lib/usd-types.d.ts +14 -1
  130. package/dist/usd/lib/usd-types.d.ts.map +1 -1
  131. package/dist/usd/lib/usd-types.js +1 -1
  132. package/dist/usd/lib/usd-types.js.map +1 -1
  133. package/dist/usd/libs/README.md +27 -0
  134. package/dist/usd/libs/THREE-LICENSE +21 -0
  135. package/dist/usd/libs/usdc-parser.d.ts +78 -0
  136. package/dist/usd/libs/usdc-parser.d.ts.map +1 -0
  137. package/dist/usd/libs/usdc-parser.js +1669 -0
  138. package/dist/usd/libs/usdc-parser.js.map +1 -0
  139. package/dist/usd/usd-loader-types.cjs +4 -4
  140. package/dist/usd/usd-loader-types.cjs.map +2 -2
  141. package/dist/usd/usd-loader-types.d.ts +7 -7
  142. package/dist/usd/usd-loader-types.d.ts.map +1 -1
  143. package/dist/usd/usd-loader-types.js +6 -6
  144. package/dist/usd/usd-loader-types.js.map +1 -1
  145. package/dist/usd/usd-loader.cjs.map +1 -1
  146. package/dist/usd/usd-loader.d.ts +4 -4
  147. package/dist/usd/usd-loader.d.ts.map +1 -1
  148. package/dist/usd/usd-loader.js +2 -2
  149. package/dist/usd/usd-loader.js.map +1 -1
  150. package/dist/usd-loader-types.cjs +4 -4
  151. package/dist/usd-loader-types.cjs.map +2 -2
  152. package/dist/usd-loader.cjs.map +1 -1
  153. package/package.json +14 -8
  154. package/src/draco/draco-loader-types.ts +1 -1
  155. package/src/gltf/lib/extensions/KHR_gaussian_splatting.ts +14 -4
  156. package/src/gltf/lib/parsers/parse-gltf.ts +2 -0
  157. package/src/gltf/lib/types/gltf-additional-extension-schemas.ts +32 -0
  158. package/src/gltf/lib/types/gltf-extension-schemas.ts +12 -0
  159. package/src/gltf/lib/types/gltf-json-schema.ts +2 -1
  160. package/src/gltf/lib/types/gltf-zod-schema.ts +2 -1
  161. package/src/index.ts +3 -1
  162. package/src/obj/obj-loader-types.ts +1 -1
  163. package/src/obj/obj-loader.ts +1 -1
  164. package/src/stl/parse-stl.ts +90 -0
  165. package/src/stl-loader-types.ts +28 -0
  166. package/src/stl-loader.ts +12 -0
  167. package/src/usd/index.ts +1 -0
  168. package/src/usd/lib/parse-usd.ts +68 -7
  169. package/src/usd/lib/parse-usdc.ts +188 -0
  170. package/src/usd/lib/parse-usdz.ts +28 -0
  171. package/src/usd/lib/usd-types.ts +16 -2
  172. package/src/usd/libs/README.md +27 -0
  173. package/src/usd/libs/THREE-LICENSE +21 -0
  174. package/src/usd/libs/usdc-parser.d.ts +18 -0
  175. package/src/usd/libs/usdc-parser.js +1669 -0
  176. package/src/usd/usd-loader-types.ts +5 -5
  177. package/src/usd/usd-loader.ts +2 -2
@@ -27,7 +27,7 @@ module.exports = __toCommonJS(obj_writer_exports);
27
27
  // src/obj/obj-writer.ts
28
28
  var import_schema_utils = require("@loaders.gl/core/schema-utils");
29
29
  var import_obj_format = require("./obj-format.cjs");
30
- var VERSION = true ? "5.0.0-beta.4" : "latest";
30
+ var VERSION = true ? "5.0.0-beta.6" : "latest";
31
31
  var OBJWriter = {
32
32
  ...import_obj_format.OBJFormat,
33
33
  dataType: null,
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/stl/parse-stl.ts
21
+ var parse_stl_exports = {};
22
+ __export(parse_stl_exports, {
23
+ parseSTL: () => parseSTL
24
+ });
25
+ module.exports = __toCommonJS(parse_stl_exports);
26
+ var import_schema_utils = require("@loaders.gl/core/schema-utils");
27
+ function parseSTL(data) {
28
+ const view = new DataView(data);
29
+ const binary = data.byteLength >= 84 && 84 + view.getUint32(80, true) * 50 === data.byteLength;
30
+ let positions;
31
+ let normals;
32
+ let header;
33
+ if (binary) {
34
+ const triangleCount = view.getUint32(80, true);
35
+ positions = new Float32Array(triangleCount * 9);
36
+ normals = new Float32Array(triangleCount * 9);
37
+ header = new TextDecoder().decode(data.slice(0, 80));
38
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
39
+ const offset = 84 + triangle * 50;
40
+ for (let component = 0; component < 9; component++) {
41
+ positions[triangle * 9 + component] = view.getFloat32(offset + 12 + component * 4, true);
42
+ normals[triangle * 9 + component] = view.getFloat32(offset + component % 3 * 4, true);
43
+ }
44
+ }
45
+ } else {
46
+ const lines = new TextDecoder().decode(data).trim().split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
47
+ const vertices = [];
48
+ const normalValues = [];
49
+ header = lines[0] || "";
50
+ let lineIndex = 0;
51
+ while (lineIndex < lines.length) {
52
+ if (!/^solid(?:\s|$)/i.test(lines[lineIndex++]))
53
+ throw new Error("STL: expected solid header or exact binary length");
54
+ while (lineIndex < lines.length && !/^endsolid(?:\s|$)/i.test(lines[lineIndex])) {
55
+ const normal = parseVector(lines[lineIndex++], "facet normal");
56
+ if (!/^outer\s+loop$/i.test(lines[lineIndex++] || ""))
57
+ throw new Error("STL: expected outer loop");
58
+ for (let vertex = 0; vertex < 3; vertex++) {
59
+ vertices.push(...parseVector(lines[lineIndex++], "vertex"));
60
+ normalValues.push(...normal);
61
+ }
62
+ if (!/^endloop$/i.test(lines[lineIndex++] || "") || !/^endfacet$/i.test(lines[lineIndex++] || ""))
63
+ throw new Error("STL: incomplete facet");
64
+ }
65
+ if (lineIndex >= lines.length) throw new Error("STL: missing endsolid");
66
+ lineIndex++;
67
+ }
68
+ if (!lines.length) throw new Error("STL: empty input");
69
+ positions = new Float32Array(vertices);
70
+ normals = new Float32Array(normalValues);
71
+ }
72
+ if (!positions.every(Number.isFinite) || !normals.every(Number.isFinite))
73
+ throw new Error("STL: non-finite coordinates");
74
+ const attributes = { POSITION: { value: positions, size: 3 }, NORMAL: { value: normals, size: 3 } };
75
+ return {
76
+ topology: "triangle-list",
77
+ mode: 4,
78
+ attributes,
79
+ schema: (0, import_schema_utils.deduceMeshSchema)(attributes),
80
+ header: {
81
+ vertexCount: positions.length / 3,
82
+ boundingBox: (0, import_schema_utils.getMeshBoundingBox)(attributes) ?? void 0
83
+ },
84
+ loaderData: { header, format: binary ? "binary" : "ascii" }
85
+ };
86
+ }
87
+ function parseVector(line, prefix) {
88
+ const tokens = line?.split(/\s+/) || [];
89
+ const prefixTokens = prefix.split(" ");
90
+ const components = tokens.slice(prefixTokens.length);
91
+ if (prefixTokens.some((token, index) => tokens[index]?.toLowerCase() !== token) || components.length !== 3 || components.some((value) => !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value))) {
92
+ throw new Error(`STL: invalid ${prefix} record`);
93
+ }
94
+ return components.map(Number);
95
+ }
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ parseSTL
99
+ });
100
+ //# sourceMappingURL=parse-stl.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/stl/parse-stl.ts"],
4
+ "sourcesContent": ["// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// loaders.gl\nimport type {Mesh} from '@loaders.gl/core/schema';\nimport {deduceMeshSchema, getMeshBoundingBox} from '@loaders.gl/core/schema-utils';\n\n/** Parses ASCII or little-endian binary STL without changing authored normals. */\nexport function parseSTL(data: ArrayBuffer): Mesh {\n const view = new DataView(data);\n const binary = data.byteLength >= 84 && 84 + view.getUint32(80, true) * 50 === data.byteLength;\n let positions: Float32Array;\n let normals: Float32Array;\n let header: string;\n if (binary) {\n const triangleCount = view.getUint32(80, true);\n positions = new Float32Array(triangleCount * 9);\n normals = new Float32Array(triangleCount * 9);\n header = new TextDecoder().decode(data.slice(0, 80));\n for (let triangle = 0; triangle < triangleCount; triangle++) {\n const offset = 84 + triangle * 50;\n for (let component = 0; component < 9; component++) {\n positions[triangle * 9 + component] = view.getFloat32(offset + 12 + component * 4, true);\n normals[triangle * 9 + component] = view.getFloat32(offset + (component % 3) * 4, true);\n }\n }\n } else {\n const lines = new TextDecoder()\n .decode(data)\n .trim()\n .split(/\\r?\\n/)\n .map(line => line.trim())\n .filter(Boolean);\n const vertices: number[] = [];\n const normalValues: number[] = [];\n header = lines[0] || '';\n let lineIndex = 0;\n while (lineIndex < lines.length) {\n if (!/^solid(?:\\s|$)/i.test(lines[lineIndex++]))\n throw new Error('STL: expected solid header or exact binary length');\n while (lineIndex < lines.length && !/^endsolid(?:\\s|$)/i.test(lines[lineIndex])) {\n const normal = parseVector(lines[lineIndex++], 'facet normal');\n if (!/^outer\\s+loop$/i.test(lines[lineIndex++] || ''))\n throw new Error('STL: expected outer loop');\n for (let vertex = 0; vertex < 3; vertex++) {\n vertices.push(...parseVector(lines[lineIndex++], 'vertex'));\n normalValues.push(...normal);\n }\n if (\n !/^endloop$/i.test(lines[lineIndex++] || '') ||\n !/^endfacet$/i.test(lines[lineIndex++] || '')\n )\n throw new Error('STL: incomplete facet');\n }\n if (lineIndex >= lines.length) throw new Error('STL: missing endsolid');\n lineIndex++;\n }\n if (!lines.length) throw new Error('STL: empty input');\n positions = new Float32Array(vertices);\n normals = new Float32Array(normalValues);\n }\n if (!positions.every(Number.isFinite) || !normals.every(Number.isFinite))\n throw new Error('STL: non-finite coordinates');\n const attributes = {POSITION: {value: positions, size: 3}, NORMAL: {value: normals, size: 3}};\n return {\n topology: 'triangle-list',\n mode: 4,\n attributes,\n schema: deduceMeshSchema(attributes),\n header: {\n vertexCount: positions.length / 3,\n boundingBox: getMeshBoundingBox(attributes) ?? undefined\n },\n loaderData: {header, format: binary ? 'binary' : 'ascii'}\n };\n}\n\n/** Reads exactly three finite decimal components after an ASCII record prefix. */\nfunction parseVector(line: string | undefined, prefix: string): number[] {\n const tokens = line?.split(/\\s+/) || [];\n const prefixTokens = prefix.split(' ');\n const components = tokens.slice(prefixTokens.length);\n if (\n prefixTokens.some((token, index) => tokens[index]?.toLowerCase() !== token) ||\n components.length !== 3 ||\n components.some(value => !/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i.test(value))\n ) {\n throw new Error(`STL: invalid ${prefix} record`);\n }\n return components.map(Number);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { Mesh } from '@loaders.gl/core/schema';
2
+ /** Parses ASCII or little-endian binary STL without changing authored normals. */
3
+ export declare function parseSTL(data: ArrayBuffer): Mesh;
4
+ //# sourceMappingURL=parse-stl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-stl.d.ts","sourceRoot":"","sources":["../../src/stl/parse-stl.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,yBAAyB,CAAC;AAGlD,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAmEhD"}
@@ -0,0 +1,84 @@
1
+ import { deduceMeshSchema, getMeshBoundingBox } from '@loaders.gl/core/schema-utils';
2
+ /** Parses ASCII or little-endian binary STL without changing authored normals. */
3
+ export function parseSTL(data) {
4
+ const view = new DataView(data);
5
+ const binary = data.byteLength >= 84 && 84 + view.getUint32(80, true) * 50 === data.byteLength;
6
+ let positions;
7
+ let normals;
8
+ let header;
9
+ if (binary) {
10
+ const triangleCount = view.getUint32(80, true);
11
+ positions = new Float32Array(triangleCount * 9);
12
+ normals = new Float32Array(triangleCount * 9);
13
+ header = new TextDecoder().decode(data.slice(0, 80));
14
+ for (let triangle = 0; triangle < triangleCount; triangle++) {
15
+ const offset = 84 + triangle * 50;
16
+ for (let component = 0; component < 9; component++) {
17
+ positions[triangle * 9 + component] = view.getFloat32(offset + 12 + component * 4, true);
18
+ normals[triangle * 9 + component] = view.getFloat32(offset + (component % 3) * 4, true);
19
+ }
20
+ }
21
+ }
22
+ else {
23
+ const lines = new TextDecoder()
24
+ .decode(data)
25
+ .trim()
26
+ .split(/\r?\n/)
27
+ .map(line => line.trim())
28
+ .filter(Boolean);
29
+ const vertices = [];
30
+ const normalValues = [];
31
+ header = lines[0] || '';
32
+ let lineIndex = 0;
33
+ while (lineIndex < lines.length) {
34
+ if (!/^solid(?:\s|$)/i.test(lines[lineIndex++]))
35
+ throw new Error('STL: expected solid header or exact binary length');
36
+ while (lineIndex < lines.length && !/^endsolid(?:\s|$)/i.test(lines[lineIndex])) {
37
+ const normal = parseVector(lines[lineIndex++], 'facet normal');
38
+ if (!/^outer\s+loop$/i.test(lines[lineIndex++] || ''))
39
+ throw new Error('STL: expected outer loop');
40
+ for (let vertex = 0; vertex < 3; vertex++) {
41
+ vertices.push(...parseVector(lines[lineIndex++], 'vertex'));
42
+ normalValues.push(...normal);
43
+ }
44
+ if (!/^endloop$/i.test(lines[lineIndex++] || '') ||
45
+ !/^endfacet$/i.test(lines[lineIndex++] || ''))
46
+ throw new Error('STL: incomplete facet');
47
+ }
48
+ if (lineIndex >= lines.length)
49
+ throw new Error('STL: missing endsolid');
50
+ lineIndex++;
51
+ }
52
+ if (!lines.length)
53
+ throw new Error('STL: empty input');
54
+ positions = new Float32Array(vertices);
55
+ normals = new Float32Array(normalValues);
56
+ }
57
+ if (!positions.every(Number.isFinite) || !normals.every(Number.isFinite))
58
+ throw new Error('STL: non-finite coordinates');
59
+ const attributes = { POSITION: { value: positions, size: 3 }, NORMAL: { value: normals, size: 3 } };
60
+ return {
61
+ topology: 'triangle-list',
62
+ mode: 4,
63
+ attributes,
64
+ schema: deduceMeshSchema(attributes),
65
+ header: {
66
+ vertexCount: positions.length / 3,
67
+ boundingBox: getMeshBoundingBox(attributes) ?? undefined
68
+ },
69
+ loaderData: { header, format: binary ? 'binary' : 'ascii' }
70
+ };
71
+ }
72
+ /** Reads exactly three finite decimal components after an ASCII record prefix. */
73
+ function parseVector(line, prefix) {
74
+ const tokens = line?.split(/\s+/) || [];
75
+ const prefixTokens = prefix.split(' ');
76
+ const components = tokens.slice(prefixTokens.length);
77
+ if (prefixTokens.some((token, index) => tokens[index]?.toLowerCase() !== token) ||
78
+ components.length !== 3 ||
79
+ components.some(value => !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value))) {
80
+ throw new Error(`STL: invalid ${prefix} record`);
81
+ }
82
+ return components.map(Number);
83
+ }
84
+ //# sourceMappingURL=parse-stl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-stl.js","sourceRoot":"","sources":["../../src/stl/parse-stl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/stl-loader-types.ts
31
+ var stl_loader_types_exports = {};
32
+ __export(stl_loader_types_exports, {
33
+ STLLoader: () => STLLoader
34
+ });
35
+ module.exports = __toCommonJS(stl_loader_types_exports);
36
+ var VERSION = true ? "5.0.0-beta.6" : "latest";
37
+ async function preload() {
38
+ const { STLLoaderWithParser } = await import("@loaders.gl/scene/stl-loader");
39
+ return STLLoaderWithParser;
40
+ }
41
+ var STLLoader = {
42
+ name: "STL",
43
+ id: "stl",
44
+ module: "scene",
45
+ version: VERSION,
46
+ extensions: ["stl"],
47
+ mimeTypes: ["model/stl"],
48
+ binary: true,
49
+ dataType: null,
50
+ batchType: null,
51
+ options: {},
52
+ preload
53
+ };
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ STLLoader
57
+ });
58
+ //# sourceMappingURL=stl-loader-types.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/stl-loader-types.ts"],
4
+ "sourcesContent": ["// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/** Package version injected by the build. */\n// @ts-ignore __VERSION__ is injected during compilation.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n// loaders.gl\nimport type {Mesh} from '@loaders.gl/core/schema';\n\n/** Loads the STL parser on demand. */\nasync function preload() {\n const {STLLoaderWithParser} = await import('@loaders.gl/scene/stl-loader');\n return STLLoaderWithParser;\n}\n\n/** Metadata-only loader for ASCII and binary STL triangle meshes. */\nexport const STLLoader = {\n name: 'STL',\n id: 'stl',\n module: 'scene',\n version: VERSION,\n extensions: ['stl'],\n mimeTypes: ['model/stl'],\n binary: true,\n dataType: null as unknown as Mesh,\n batchType: null as never,\n options: {},\n preload\n} as const;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,IAAM,UAAU,OAAqC,iBAAc;AAKnE,eAAe,UAAU;AACvB,QAAM,EAAC,oBAAmB,IAAI,MAAM,OAAO,8BAA8B;AACzE,SAAO;AACT;AAGO,IAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY,CAAC,KAAK;AAAA,EAClB,WAAW,CAAC,WAAW;AAAA,EACvB,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,SAAS,CAAC;AAAA,EACV;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,32 @@
1
+ import type { Mesh } from '@loaders.gl/core/schema';
2
+ /** Loads the STL parser on demand. */
3
+ declare function preload(): Promise<{
4
+ readonly parse: (data: ArrayBuffer) => Promise<Mesh>;
5
+ readonly parseSync: typeof import("./stl/parse-stl").parseSTL;
6
+ readonly name: "STL";
7
+ readonly id: "stl";
8
+ readonly module: "scene";
9
+ readonly version: any;
10
+ readonly extensions: readonly ["stl"];
11
+ readonly mimeTypes: readonly ["model/stl"];
12
+ readonly binary: true;
13
+ readonly dataType: Mesh;
14
+ readonly batchType: never;
15
+ readonly options: {};
16
+ }>;
17
+ /** Metadata-only loader for ASCII and binary STL triangle meshes. */
18
+ export declare const STLLoader: {
19
+ readonly name: "STL";
20
+ readonly id: "stl";
21
+ readonly module: "scene";
22
+ readonly version: any;
23
+ readonly extensions: readonly ["stl"];
24
+ readonly mimeTypes: readonly ["model/stl"];
25
+ readonly binary: true;
26
+ readonly dataType: Mesh;
27
+ readonly batchType: never;
28
+ readonly options: {};
29
+ readonly preload: typeof preload;
30
+ };
31
+ export {};
32
+ //# sourceMappingURL=stl-loader-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stl-loader-types.d.ts","sourceRoot":"","sources":["../src/stl-loader-types.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,yBAAyB,CAAC;AAElD,sCAAsC;AACtC,iBAAe,OAAO;;;;;;;;;;uBAcS,IAAI;wBACd,KAAK;;GAZzB;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS;;;;;;;;uBAQS,IAAI;wBACd,KAAK;;;CAGhB,CAAC"}
@@ -0,0 +1,25 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) vis.gl contributors
3
+ /** Package version injected by the build. */
4
+ // @ts-ignore __VERSION__ is injected during compilation.
5
+ const VERSION = typeof "5.0.0-beta.6" !== 'undefined' ? "5.0.0-beta.6" : 'latest';
6
+ /** Loads the STL parser on demand. */
7
+ async function preload() {
8
+ const { STLLoaderWithParser } = await import('@loaders.gl/scene/stl-loader');
9
+ return STLLoaderWithParser;
10
+ }
11
+ /** Metadata-only loader for ASCII and binary STL triangle meshes. */
12
+ export const STLLoader = {
13
+ name: 'STL',
14
+ id: 'stl',
15
+ module: 'scene',
16
+ version: VERSION,
17
+ extensions: ['stl'],
18
+ mimeTypes: ['model/stl'],
19
+ binary: true,
20
+ dataType: null,
21
+ batchType: null,
22
+ options: {},
23
+ preload
24
+ };
25
+ //# sourceMappingURL=stl-loader-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stl-loader-types.js","sourceRoot":"","sources":["../src/stl-loader-types.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,oCAAoC;AACpC,6CAA6C;AAC7C,yDAAyD;AACzD,MAAM,OAAO,GAAG,qBAAkB,KAAK,WAAW,CAAC,CAAC,gBAAa,CAAC,CAAC,QAAQ,CAAC;AAI5E,sCAAsC;AACtC,KAAK,UAAU,OAAO;IACpB,MAAM,EAAC,mBAAmB,EAAC,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC3E,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,qEAAqE;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,KAAK;IACX,EAAE,EAAE,KAAK;IACT,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,UAAU,EAAE,CAAC,KAAK,CAAC;IACnB,SAAS,EAAE,CAAC,WAAW,CAAC;IACxB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAuB;IACjC,SAAS,EAAE,IAAa;IACxB,OAAO,EAAE,EAAE;IACX,OAAO;CACC,CAAC"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/stl-loader.ts
21
+ var stl_loader_exports = {};
22
+ __export(stl_loader_exports, {
23
+ STLLoaderWithParser: () => STLLoaderWithParser
24
+ });
25
+ module.exports = __toCommonJS(stl_loader_exports);
26
+ var import_stl_loader_types = require("./stl-loader-types.cjs");
27
+ var import_parse_stl = require("./stl/parse-stl.cjs");
28
+ var { preload: _preload, ...metadata } = import_stl_loader_types.STLLoader;
29
+ var STLLoaderWithParser = {
30
+ ...metadata,
31
+ parse: async (data) => (0, import_parse_stl.parseSTL)(data),
32
+ parseSync: import_parse_stl.parseSTL
33
+ };
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ STLLoaderWithParser
37
+ });
38
+ //# sourceMappingURL=stl-loader.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/stl-loader.ts"],
4
+ "sourcesContent": ["// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// loaders.gl\nimport {STLLoader} from './stl-loader-types';\nimport {parseSTL} from './stl/parse-stl';\nconst {preload: _preload, ...metadata} = STLLoader;\n/** Parser-bearing STL loader returning renderer-independent triangle meshes. */\nexport const STLLoaderWithParser = {\n ...metadata,\n parse: async (data: ArrayBuffer) => parseSTL(data),\n parseSync: parseSTL\n} as const;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,8BAAwB;AACxB,uBAAuB;AACvB,IAAM,EAAC,SAAS,UAAU,GAAG,SAAQ,IAAI;AAElC,IAAM,sBAAsB;AAAA,EACjC,GAAG;AAAA,EACH,OAAO,OAAO,aAAsB,2BAAS,IAAI;AAAA,EACjD,WAAW;AACb;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import { parseSTL } from "./stl/parse-stl.js";
2
+ /** Parser-bearing STL loader returning renderer-independent triangle meshes. */
3
+ export declare const STLLoaderWithParser: {
4
+ readonly parse: (data: ArrayBuffer) => Promise<import("@loaders.gl/core/schema").Mesh>;
5
+ readonly parseSync: typeof parseSTL;
6
+ readonly name: "STL";
7
+ readonly id: "stl";
8
+ readonly module: "scene";
9
+ readonly version: any;
10
+ readonly extensions: readonly ["stl"];
11
+ readonly mimeTypes: readonly ["model/stl"];
12
+ readonly binary: true;
13
+ readonly dataType: import("@loaders.gl/core/schema").Mesh;
14
+ readonly batchType: never;
15
+ readonly options: {};
16
+ };
17
+ //# sourceMappingURL=stl-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stl-loader.d.ts","sourceRoot":"","sources":["../src/stl-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AAEzC,gFAAgF;AAChF,eAAO,MAAM,mBAAmB;2BAEV,WAAW;;;;;;;;;;;;CAEvB,CAAC"}
@@ -0,0 +1,13 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright (c) vis.gl contributors
3
+ // loaders.gl
4
+ import { STLLoader } from "./stl-loader-types.js";
5
+ import { parseSTL } from "./stl/parse-stl.js";
6
+ const { preload: _preload, ...metadata } = STLLoader;
7
+ /** Parser-bearing STL loader returning renderer-independent triangle meshes. */
8
+ export const STLLoaderWithParser = {
9
+ ...metadata,
10
+ parse: async (data) => parseSTL(data),
11
+ parseSync: parseSTL
12
+ };
13
+ //# sourceMappingURL=stl-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stl-loader.js","sourceRoot":"","sources":["../src/stl-loader.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,oCAAoC;AACpC,aAAa;AACb,OAAO,EAAC,SAAS,EAAC,8BAA2B;AAC7C,OAAO,EAAC,QAAQ,EAAC,2BAAwB;AACzC,MAAM,EAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAC,GAAG,SAAS,CAAC;AACnD,gFAAgF;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,GAAG,QAAQ;IACX,KAAK,EAAE,KAAK,EAAE,IAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClD,SAAS,EAAE,QAAQ;CACX,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/usd/index.ts"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {USDLoader} from './usd-loader-types';\nexport type {\n USDAssetPath,\n USDAttribute,\n USDLoaderOptions,\n USDPrim,\n USDScenePath,\n USDStage,\n USDValue,\n USDVariant\n} from './lib/usd-types';\n"],
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport {USDLoader} from './usd-loader-types';\nexport type {\n USDAssetPath,\n USDAttribute,\n USDEmbeddedAsset,\n USDLoaderOptions,\n USDPrim,\n USDScenePath,\n USDStage,\n USDValue,\n USDVariant\n} from './lib/usd-types';\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,8BAAwB;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,3 @@
1
1
  export { USDLoader } from "./usd-loader-types.js";
2
- export type { USDAssetPath, USDAttribute, USDLoaderOptions, USDPrim, USDScenePath, USDStage, USDValue, USDVariant } from "./lib/usd-types.js";
2
+ export type { USDAssetPath, USDAttribute, USDEmbeddedAsset, USDLoaderOptions, USDPrim, USDScenePath, USDStage, USDValue, USDVariant } from "./lib/usd-types.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/usd/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,8BAA2B;AAC7C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,2BAAwB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/usd/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAC,8BAA2B;AAC7C,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,EACX,2BAAwB"}
@@ -23,6 +23,7 @@ __export(parse_usd_exports, {
23
23
  parseUSD: () => parseUSD
24
24
  });
25
25
  module.exports = __toCommonJS(parse_usd_exports);
26
+ var import_parse_usdc = require("./parse-usdc.cjs");
26
27
  var import_parse_usda = require("./parse-usda.cjs");
27
28
  var import_parse_usdz = require("./parse-usdz.cjs");
28
29
  var TEXT_DECODER = new TextDecoder();
@@ -52,21 +53,32 @@ async function parseUSD(data, options = {}, context) {
52
53
  let stage;
53
54
  if (isZIPArchive(data)) {
54
55
  const archive = (0, import_parse_usdz.parseUSDZArchive)(data);
55
- const rootFilename = Array.from(archive.keys()).find((filename) => /\.usda?$/i.test(filename));
56
- if (!rootFilename) {
57
- throw new Error("USDZ archives with binary USDC root layers are not implemented yet.");
56
+ const rootFilename = archive.keys().next().value;
57
+ if (!rootFilename || !/\.(?:usd[ac]?)$/i.test(rootFilename)) {
58
+ throw new Error("USDZ archive has no supported USD root layer.");
58
59
  }
59
60
  const archiveBase = "https://usd.archive/";
61
+ const assets = /* @__PURE__ */ Object.create(null);
60
62
  for (const [filename, content] of archive) {
61
- environment.archiveFiles.set(new URL(filename, archiveBase).href, content);
63
+ const assetUrl = new URL(filename, archiveBase);
64
+ if (filename.startsWith("/") || /^[a-z][a-z\d+.-]*:/i.test(filename) || filename.includes("\\") || /[\u0000-\u001f\u007f]/.test(filename) || filename.trim() !== filename || filename.split("/").some((segment) => {
65
+ const normalizedSegment = segment.replace(/%2e/gi, ".");
66
+ return normalizedSegment === "." || normalizedSegment === "..";
67
+ }) || assetUrl.origin !== new URL(archiveBase).origin || assetUrl.search || assetUrl.hash || assets[assetUrl.href]) {
68
+ throw new Error(`USDZ entry "${filename}" has an ambiguous package URL.`);
69
+ }
70
+ environment.archiveFiles.set(assetUrl.href, content);
71
+ assets[assetUrl.href] = createEmbeddedAsset(filename, content);
62
72
  }
63
73
  const rootUrl = new URL(rootFilename, archiveBase).href;
64
74
  stage = parseUSDLayer(archive.get(rootFilename), rootUrl);
65
75
  stage.format = "usdz";
76
+ stage.assets = assets;
66
77
  } else {
67
78
  stage = parseUSDLayer(data, url);
68
79
  }
69
80
  if (stage.url) {
81
+ setAttributeSourceUrls(stage, stage.url);
70
82
  environment.layers.add(stage.url);
71
83
  }
72
84
  if (environment.options.usd?.compose !== false) {
@@ -78,6 +90,11 @@ async function parseUSD(data, options = {}, context) {
78
90
  }
79
91
  return stage;
80
92
  }
93
+ function createEmbeddedAsset(path, data) {
94
+ const extension = path.slice(path.lastIndexOf(".") + 1).toLowerCase();
95
+ const mimeType = extension === "png" ? "image/png" : /^(?:jpe?g)$/.test(extension) ? "image/jpeg" : void 0;
96
+ return mimeType ? { path, data, mimeType } : { path, data };
97
+ }
81
98
  function getSourceLocation(configuredLocation, contextLocation) {
82
99
  const configuredUrl = getAbsoluteUrl(configuredLocation);
83
100
  if (configuredUrl) {
@@ -110,10 +127,29 @@ var USD_LOADER_DEFAULT_OPTIONS = {
110
127
  function parseUSDLayer(data, url) {
111
128
  const signature = TEXT_DECODER.decode(data.slice(0, 8));
112
129
  if (signature === CRATE_SIGNATURE) {
113
- throw new Error("Binary USDC crate layers are not implemented yet; use ASCII USDA layers.");
130
+ return (0, import_parse_usdc.parseUSDC)(data, url);
114
131
  }
115
132
  return (0, import_parse_usda.parseUSDA)(TEXT_DECODER.decode(data), url);
116
133
  }
134
+ function setAttributeSourceUrls(stage, sourceUrl) {
135
+ const pendingContents = [...stage.rootPrims];
136
+ while (pendingContents.length) {
137
+ const contents = pendingContents.pop();
138
+ for (const attribute of Object.values(contents.attributes)) {
139
+ attribute.sourceUrl = sourceUrl;
140
+ }
141
+ for (const child of contents.children) {
142
+ pendingContents.push(child);
143
+ }
144
+ if ("variants" in contents) {
145
+ for (const variants of Object.values(contents.variants)) {
146
+ for (const variant of Object.values(variants)) {
147
+ pendingContents.push(variant);
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
117
153
  async function composePrims(prims, sourceUrl, inheritedVariants, environment, depth) {
118
154
  if (depth > (environment.options.usd?.maxReferenceDepth ?? 12)) {
119
155
  throw new Error("OpenUSD reference composition exceeded the configured depth limit.");
@@ -192,6 +228,7 @@ async function loadReferencedStage(url, environment) {
192
228
  content = response.arrayBuffer();
193
229
  }
194
230
  const stage = parseUSDLayer(await content, url);
231
+ setAttributeSourceUrls(stage, url);
195
232
  environment.layers.add(url);
196
233
  return stage;
197
234
  })();