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

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 +2958 -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 +400 -113
  21. package/dist/draco-worker-node.js.map +4 -4
  22. package/dist/draco-worker.js +394 -113
  23. package/dist/draco-worker.js.map +4 -4
  24. package/dist/draco-writer-worker-node.cjs +654 -85
  25. package/dist/draco-writer-worker-node.cjs.map +4 -4
  26. package/dist/draco-writer-worker.js +624 -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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/usd/lib/parse-usd.ts"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {LoaderContext} from '@loaders.gl/core/loader-utils';\nimport {parseUSDA} from './parse-usda';\nimport {parseUSDZArchive} from './parse-usdz';\nimport type {USDAssetPath, USDLoaderOptions, USDPrim, USDStage, USDValue} from './usd-types';\n\ntype USDParseEnvironment = {\n /** Fetch implementation used for external layers. */\n fetch: (url: string) => Promise<Response>;\n /** Pending and resolved external layers keyed by URL. */\n cache: Map<string, Promise<USDStage>>;\n /** Files extracted from the active USDZ archive. */\n archiveFiles: Map<string, ArrayBuffer>;\n /** Layer URLs participating in the composed stage. */\n layers: Set<string>;\n /** Effective loader options. */\n options: USDLoaderOptions;\n};\n\nconst TEXT_DECODER = new TextDecoder();\nconst CRATE_SIGNATURE = 'PXR-USDC';\nconst ZIP_SIGNATURE = 0x04034b50;\n\n/** Parses and optionally composes an OpenUSD stage. */\nexport async function parseUSD(\n data: ArrayBuffer,\n options: USDLoaderOptions = {},\n context?: LoaderContext\n): Promise<USDStage> {\n const url = getSourceLocation(options.core?.baseUrl, context?.url);\n const environment: USDParseEnvironment = {\n fetch: async resourceUrl => {\n const response = await (context?.fetch || fetch)(resourceUrl);\n if (!(response instanceof Response)) {\n throw new Error(`OpenUSD reference \"${resourceUrl}\" did not return an HTTP response.`);\n }\n if (!response.ok) {\n throw new Error(`Unable to load OpenUSD reference \"${resourceUrl}\": ${response.status}.`);\n }\n return response;\n },\n cache: new Map(),\n archiveFiles: new Map(),\n layers: new Set(),\n options: {\n ...options,\n usd: {...USD_LOADER_DEFAULT_OPTIONS, ...options.usd}\n }\n };\n\n let stage: USDStage;\n if (isZIPArchive(data)) {\n const archive = parseUSDZArchive(data);\n const rootFilename = Array.from(archive.keys()).find(filename => /\\.usda?$/i.test(filename));\n if (!rootFilename) {\n throw new Error('USDZ archives with binary USDC root layers are not implemented yet.');\n }\n\n const archiveBase = 'https://usd.archive/';\n for (const [filename, content] of archive) {\n environment.archiveFiles.set(new URL(filename, archiveBase).href, content);\n }\n const rootUrl = new URL(rootFilename, archiveBase).href;\n stage = parseUSDLayer(archive.get(rootFilename)!, rootUrl);\n stage.format = 'usdz';\n } else {\n stage = parseUSDLayer(data, url);\n }\n\n if (stage.url) {\n environment.layers.add(stage.url);\n }\n if (environment.options.usd?.compose !== false) {\n stage.rootPrims = await composePrims(stage.rootPrims, stage.url, {}, environment, 0);\n }\n stage.layers = Array.from(environment.layers);\n if (url) {\n stage.url = url;\n }\n return stage;\n}\n\n/** Selects a source location suitable for resolving referenced layers. */\nfunction getSourceLocation(\n configuredLocation: string | undefined,\n contextLocation: string | undefined\n): string | undefined {\n const configuredUrl = getAbsoluteUrl(configuredLocation);\n if (configuredUrl) {\n return configuredUrl;\n }\n const contextUrl = getAbsoluteUrl(contextLocation);\n return contextUrl || configuredLocation || contextLocation;\n}\n\n/** Returns an absolute URL when the candidate contains one. */\nfunction getAbsoluteUrl(candidate: string | undefined): string | undefined {\n try {\n return candidate ? new URL(candidate).href : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Resolves an asset path against either a URL or a filesystem path. */\nfunction resolveAssetPath(assetPath: string, sourceLocation: string): string {\n try {\n return new URL(assetPath, sourceLocation).href;\n } catch {\n const slashIndex = Math.max(sourceLocation.lastIndexOf('/'), sourceLocation.lastIndexOf('\\\\'));\n return slashIndex >= 0 ? `${sourceLocation.slice(0, slashIndex + 1)}${assetPath}` : assetPath;\n }\n}\n\nconst USD_LOADER_DEFAULT_OPTIONS = {\n compose: true,\n loadReferences: true,\n maxReferenceDepth: 12,\n variantSelections: {}\n};\n\n/** Parses one ASCII or binary OpenUSD layer. */\nfunction parseUSDLayer(data: ArrayBuffer, url?: string): USDStage {\n const signature = TEXT_DECODER.decode(data.slice(0, 8));\n if (signature === CRATE_SIGNATURE) {\n throw new Error('Binary USDC crate layers are not implemented yet; use ASCII USDA layers.');\n }\n return parseUSDA(TEXT_DECODER.decode(data), url);\n}\n\n/** Recursively applies variants, references, overrides, and class filtering. */\nasync function composePrims(\n prims: USDPrim[],\n sourceUrl: string | undefined,\n inheritedVariants: Record<string, string>,\n environment: USDParseEnvironment,\n depth: number\n): Promise<USDPrim[]> {\n if (depth > (environment.options.usd?.maxReferenceDepth ?? 12)) {\n throw new Error('OpenUSD reference composition exceeded the configured depth limit.');\n }\n\n const composedPrims: USDPrim[] = [];\n for (const sourcePrim of prims) {\n if (sourcePrim.specifier === 'class') {\n continue;\n }\n\n const localSelections = getVariantSelections(sourcePrim.metadata['variants']);\n const selections = {\n ...localSelections,\n ...inheritedVariants,\n ...environment.options.usd?.variantSelections\n };\n const primSourceUrl = sourcePrim.sourceUrl || sourceUrl;\n let composedPrim = clonePrim(sourcePrim);\n\n for (const [variantSetName, variantSet] of Object.entries(composedPrim.variants)) {\n const selection = selections[variantSetName] || Object.keys(variantSet)[0];\n const variant = variantSet[selection];\n if (variant) {\n composedPrim = mergePrim(composedPrim, {\n ...composedPrim,\n attributes: variant.attributes,\n metadata: variant.metadata,\n children: variant.children,\n variants: {}\n });\n }\n }\n\n const references = getPrimReferences(composedPrim);\n if (environment.options.usd?.loadReferences !== false && references.length > 0) {\n for (const reference of references) {\n if (!primSourceUrl) {\n throw new Error('OpenUSD references require a source URL or options.core.baseUrl.');\n }\n const referencedUrl = resolveAssetPath(reference.assetPath, primSourceUrl);\n const stage = await loadReferencedStage(referencedUrl, environment);\n const referencedPrims = selectReferencedPrims(stage, reference.primPath);\n const resolvedPrims = await composePrims(\n referencedPrims,\n referencedUrl,\n selections,\n environment,\n depth + 1\n );\n for (const referencedPrim of resolvedPrims) {\n composedPrim = mergePrim(rebasePrim(referencedPrim, composedPrim.path), composedPrim);\n }\n }\n }\n\n composedPrim.children = await composePrims(\n composedPrim.children,\n primSourceUrl,\n selections,\n environment,\n depth\n );\n composedPrims.push(composedPrim);\n }\n\n return composedPrims;\n}\n\n/** Loads and parses one referenced layer, with per-parse caching. */\nasync function loadReferencedStage(\n url: string,\n environment: USDParseEnvironment\n): Promise<USDStage> {\n let pendingStage = environment.cache.get(url);\n if (!pendingStage) {\n pendingStage = (async () => {\n const archiveContent = environment.archiveFiles.get(url);\n let content: ArrayBuffer | Promise<ArrayBuffer> | undefined = archiveContent;\n if (!content) {\n let response: Response;\n try {\n response = await environment.fetch(url);\n } catch (error) {\n throw new Error(`Unable to fetch USD layer \"${url}\": ${String(error)}`);\n }\n content = response.arrayBuffer();\n }\n const stage = parseUSDLayer(await content, url);\n environment.layers.add(url);\n return stage;\n })();\n environment.cache.set(url, pendingStage);\n }\n return pendingStage;\n}\n\n/** Selects the referenced prim or default prim from a stage. */\nfunction selectReferencedPrims(stage: USDStage, primPath?: string): USDPrim[] {\n const targetPath = primPath || stage.metadata['defaultPrim'];\n if (typeof targetPath !== 'string') {\n return stage.rootPrims;\n }\n\n const normalizedPath = targetPath.startsWith('/') ? targetPath : `/${targetPath}`;\n const target = findPrim(stage.rootPrims, normalizedPath);\n return target ? [target] : [];\n}\n\n/** Finds a prim recursively by absolute path. */\nfunction findPrim(prims: USDPrim[], path: string): USDPrim | undefined {\n for (const prim of prims) {\n if (prim.path === path) {\n return prim;\n }\n const child = findPrim(prim.children, path);\n if (child) {\n return child;\n }\n }\n return undefined;\n}\n\n/** Collects reference and payload asset paths from a prim. */\nfunction getPrimReferences(prim: USDPrim): USDAssetPath[] {\n const references: USDAssetPath[] = [];\n for (const value of [\n prim.metadata['references'],\n prim.metadata['payload'],\n prim.metadata['payloads']\n ]) {\n if (Array.isArray(value)) {\n references.push(...value.filter(isAssetPath));\n } else if (isAssetPath(value)) {\n references.push(value);\n }\n }\n return references;\n}\n\n/** Converts authored variant metadata into a selection map. */\nfunction getVariantSelections(value: USDValue | undefined): Record<string, string> {\n if (!value || typeof value !== 'object' || Array.isArray(value) || isAssetPath(value)) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(value).filter((entry): entry is [string, string] => typeof entry[1] === 'string')\n );\n}\n\n/** Returns whether a parsed value is an external asset path. */\nfunction isAssetPath(value: USDValue | undefined): value is USDAssetPath {\n return Boolean(\n value && typeof value === 'object' && !Array.isArray(value) && 'assetPath' in value\n );\n}\n\n/** Deep-clones a prim hierarchy while preserving scalar values. */\nfunction clonePrim(prim: USDPrim): USDPrim {\n return {\n ...prim,\n attributes: {...prim.attributes},\n metadata: {...prim.metadata},\n variants: {...prim.variants},\n children: prim.children.map(clonePrim)\n };\n}\n\n/** Rebases a prim hierarchy at a new composed path. */\nfunction rebasePrim(prim: USDPrim, path: string): USDPrim {\n const rebased = clonePrim(prim);\n rebased.path = path;\n rebased.children = rebased.children.map(child => rebasePrim(child, `${path}/${child.name}`));\n return rebased;\n}\n\n/** Merges a stronger local prim opinion over a referenced prim. */\nfunction mergePrim(reference: USDPrim, override: USDPrim): USDPrim {\n const children = reference.children.map(clonePrim);\n for (const overridingChild of override.children) {\n const matchingIndex = children.findIndex(child => child.name === overridingChild.name);\n if (matchingIndex >= 0) {\n children[matchingIndex] = mergePrim(children[matchingIndex], overridingChild);\n } else {\n children.push(clonePrim(overridingChild));\n }\n }\n\n return {\n ...reference,\n ...override,\n sourceUrl:\n getPrimReferences(override).length > 0\n ? override.sourceUrl\n : reference.sourceUrl || override.sourceUrl,\n type: override.type || reference.type,\n attributes: {...reference.attributes, ...override.attributes},\n metadata: {...reference.metadata, ...override.metadata},\n variants: {...reference.variants, ...override.variants},\n children\n };\n}\n\n/** Returns whether a buffer starts with a ZIP local-file signature. */\nfunction isZIPArchive(arrayBuffer: ArrayBuffer): boolean {\n return (\n arrayBuffer.byteLength >= 4 && new DataView(arrayBuffer).getUint32(0, true) === ZIP_SIGNATURE\n );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport {parseUSDC} from './parse-usdc';\n// loaders.gl\n\nimport type {LoaderContext} from '@loaders.gl/core/loader-utils';\nimport {parseUSDA} from './parse-usda';\nimport {parseUSDZArchive} from './parse-usdz';\nimport type {\n USDAssetPath,\n USDEmbeddedAsset,\n USDLoaderOptions,\n USDPrim,\n USDStage,\n USDValue,\n USDVariant\n} from './usd-types';\n\ntype USDParseEnvironment = {\n /** Fetch implementation used for external layers. */\n fetch: (url: string) => Promise<Response>;\n /** Pending and resolved external layers keyed by URL. */\n cache: Map<string, Promise<USDStage>>;\n /** Files extracted from the active USDZ archive. */\n archiveFiles: Map<string, ArrayBuffer>;\n /** Layer URLs participating in the composed stage. */\n layers: Set<string>;\n /** Effective loader options. */\n options: USDLoaderOptions;\n};\n\nconst TEXT_DECODER = new TextDecoder();\nconst CRATE_SIGNATURE = 'PXR-USDC';\nconst ZIP_SIGNATURE = 0x04034b50;\n\n/** Parses and optionally composes an OpenUSD stage. */\nexport async function parseUSD(\n data: ArrayBuffer,\n options: USDLoaderOptions = {},\n context?: LoaderContext\n): Promise<USDStage> {\n const url = getSourceLocation(options.core?.baseUrl, context?.url);\n const environment: USDParseEnvironment = {\n fetch: async resourceUrl => {\n const response = await (context?.fetch || fetch)(resourceUrl);\n if (!(response instanceof Response)) {\n throw new Error(`OpenUSD reference \"${resourceUrl}\" did not return an HTTP response.`);\n }\n if (!response.ok) {\n throw new Error(`Unable to load OpenUSD reference \"${resourceUrl}\": ${response.status}.`);\n }\n return response;\n },\n cache: new Map(),\n archiveFiles: new Map(),\n layers: new Set(),\n options: {\n ...options,\n usd: {...USD_LOADER_DEFAULT_OPTIONS, ...options.usd}\n }\n };\n\n let stage: USDStage;\n if (isZIPArchive(data)) {\n const archive = parseUSDZArchive(data);\n const rootFilename = archive.keys().next().value;\n if (!rootFilename || !/\\.(?:usd[ac]?)$/i.test(rootFilename)) {\n throw new Error('USDZ archive has no supported USD root layer.');\n }\n\n const archiveBase = 'https://usd.archive/';\n const assets: Record<string, USDEmbeddedAsset> = Object.create(null);\n for (const [filename, content] of archive) {\n const assetUrl = new URL(filename, archiveBase);\n if (\n filename.startsWith('/') ||\n /^[a-z][a-z\\d+.-]*:/i.test(filename) ||\n filename.includes('\\\\') ||\n /[\\u0000-\\u001f\\u007f]/.test(filename) ||\n filename.trim() !== filename ||\n filename.split('/').some(segment => {\n const normalizedSegment = segment.replace(/%2e/gi, '.');\n return normalizedSegment === '.' || normalizedSegment === '..';\n }) ||\n assetUrl.origin !== new URL(archiveBase).origin ||\n assetUrl.search ||\n assetUrl.hash ||\n assets[assetUrl.href]\n ) {\n throw new Error(`USDZ entry \"${filename}\" has an ambiguous package URL.`);\n }\n environment.archiveFiles.set(assetUrl.href, content);\n assets[assetUrl.href] = createEmbeddedAsset(filename, content);\n }\n const rootUrl = new URL(rootFilename, archiveBase).href;\n stage = parseUSDLayer(archive.get(rootFilename)!, rootUrl);\n stage.format = 'usdz';\n stage.assets = assets;\n } else {\n stage = parseUSDLayer(data, url);\n }\n\n if (stage.url) {\n setAttributeSourceUrls(stage, stage.url);\n environment.layers.add(stage.url);\n }\n if (environment.options.usd?.compose !== false) {\n stage.rootPrims = await composePrims(stage.rootPrims, stage.url, {}, environment, 0);\n }\n stage.layers = Array.from(environment.layers);\n if (url) {\n stage.url = url;\n }\n return stage;\n}\n\n/** Retains encoded file data and a conservative filename-based image MIME hint. */\nfunction createEmbeddedAsset(path: string, data: ArrayBuffer): USDEmbeddedAsset {\n const extension = path.slice(path.lastIndexOf('.') + 1).toLowerCase();\n const mimeType =\n extension === 'png' ? 'image/png' : /^(?:jpe?g)$/.test(extension) ? 'image/jpeg' : undefined;\n return mimeType ? {path, data, mimeType} : {path, data};\n}\n\n/** Selects a source location suitable for resolving referenced layers. */\nfunction getSourceLocation(\n configuredLocation: string | undefined,\n contextLocation: string | undefined\n): string | undefined {\n const configuredUrl = getAbsoluteUrl(configuredLocation);\n if (configuredUrl) {\n return configuredUrl;\n }\n const contextUrl = getAbsoluteUrl(contextLocation);\n return contextUrl || configuredLocation || contextLocation;\n}\n\n/** Returns an absolute URL when the candidate contains one. */\nfunction getAbsoluteUrl(candidate: string | undefined): string | undefined {\n try {\n return candidate ? new URL(candidate).href : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Resolves an asset path against either a URL or a filesystem path. */\nfunction resolveAssetPath(assetPath: string, sourceLocation: string): string {\n try {\n return new URL(assetPath, sourceLocation).href;\n } catch {\n const slashIndex = Math.max(sourceLocation.lastIndexOf('/'), sourceLocation.lastIndexOf('\\\\'));\n return slashIndex >= 0 ? `${sourceLocation.slice(0, slashIndex + 1)}${assetPath}` : assetPath;\n }\n}\n\nconst USD_LOADER_DEFAULT_OPTIONS = {\n compose: true,\n loadReferences: true,\n maxReferenceDepth: 12,\n variantSelections: {}\n};\n\n/** Parses one ASCII or binary OpenUSD layer. */\nfunction parseUSDLayer(data: ArrayBuffer, url?: string): USDStage {\n const signature = TEXT_DECODER.decode(data.slice(0, 8));\n if (signature === CRATE_SIGNATURE) {\n return parseUSDC(data, url);\n }\n return parseUSDA(TEXT_DECODER.decode(data), url);\n}\n\n/** Retains each attribute's authored layer before composition merges prims from different files. */\nfunction setAttributeSourceUrls(stage: USDStage, sourceUrl: string): void {\n const pendingContents: (USDPrim | USDVariant)[] = [...stage.rootPrims];\n while (pendingContents.length) {\n const contents = pendingContents.pop()!;\n for (const attribute of Object.values(contents.attributes)) {\n attribute.sourceUrl = sourceUrl;\n }\n for (const child of contents.children) {\n pendingContents.push(child);\n }\n if ('variants' in contents) {\n for (const variants of Object.values(contents.variants)) {\n for (const variant of Object.values(variants)) {\n pendingContents.push(variant);\n }\n }\n }\n }\n}\n\n/** Recursively applies variants, references, overrides, and class filtering. */\nasync function composePrims(\n prims: USDPrim[],\n sourceUrl: string | undefined,\n inheritedVariants: Record<string, string>,\n environment: USDParseEnvironment,\n depth: number\n): Promise<USDPrim[]> {\n if (depth > (environment.options.usd?.maxReferenceDepth ?? 12)) {\n throw new Error('OpenUSD reference composition exceeded the configured depth limit.');\n }\n\n const composedPrims: USDPrim[] = [];\n for (const sourcePrim of prims) {\n if (sourcePrim.specifier === 'class') {\n continue;\n }\n\n const localSelections = getVariantSelections(sourcePrim.metadata['variants']);\n const selections = {\n ...localSelections,\n ...inheritedVariants,\n ...environment.options.usd?.variantSelections\n };\n const primSourceUrl = sourcePrim.sourceUrl || sourceUrl;\n let composedPrim = clonePrim(sourcePrim);\n\n for (const [variantSetName, variantSet] of Object.entries(composedPrim.variants)) {\n const selection = selections[variantSetName] || Object.keys(variantSet)[0];\n const variant = variantSet[selection];\n if (variant) {\n composedPrim = mergePrim(composedPrim, {\n ...composedPrim,\n attributes: variant.attributes,\n metadata: variant.metadata,\n children: variant.children,\n variants: {}\n });\n }\n }\n\n const references = getPrimReferences(composedPrim);\n if (environment.options.usd?.loadReferences !== false && references.length > 0) {\n for (const reference of references) {\n if (!primSourceUrl) {\n throw new Error('OpenUSD references require a source URL or options.core.baseUrl.');\n }\n const referencedUrl = resolveAssetPath(reference.assetPath, primSourceUrl);\n const stage = await loadReferencedStage(referencedUrl, environment);\n const referencedPrims = selectReferencedPrims(stage, reference.primPath);\n const resolvedPrims = await composePrims(\n referencedPrims,\n referencedUrl,\n selections,\n environment,\n depth + 1\n );\n for (const referencedPrim of resolvedPrims) {\n composedPrim = mergePrim(rebasePrim(referencedPrim, composedPrim.path), composedPrim);\n }\n }\n }\n\n composedPrim.children = await composePrims(\n composedPrim.children,\n primSourceUrl,\n selections,\n environment,\n depth\n );\n composedPrims.push(composedPrim);\n }\n\n return composedPrims;\n}\n\n/** Loads and parses one referenced layer, with per-parse caching. */\nasync function loadReferencedStage(\n url: string,\n environment: USDParseEnvironment\n): Promise<USDStage> {\n let pendingStage = environment.cache.get(url);\n if (!pendingStage) {\n pendingStage = (async () => {\n const archiveContent = environment.archiveFiles.get(url);\n let content: ArrayBuffer | Promise<ArrayBuffer> | undefined = archiveContent;\n if (!content) {\n let response: Response;\n try {\n response = await environment.fetch(url);\n } catch (error) {\n throw new Error(`Unable to fetch USD layer \"${url}\": ${String(error)}`);\n }\n content = response.arrayBuffer();\n }\n const stage = parseUSDLayer(await content, url);\n setAttributeSourceUrls(stage, url);\n environment.layers.add(url);\n return stage;\n })();\n environment.cache.set(url, pendingStage);\n }\n return pendingStage;\n}\n\n/** Selects the referenced prim or default prim from a stage. */\nfunction selectReferencedPrims(stage: USDStage, primPath?: string): USDPrim[] {\n const targetPath = primPath || stage.metadata['defaultPrim'];\n if (typeof targetPath !== 'string') {\n return stage.rootPrims;\n }\n\n const normalizedPath = targetPath.startsWith('/') ? targetPath : `/${targetPath}`;\n const target = findPrim(stage.rootPrims, normalizedPath);\n return target ? [target] : [];\n}\n\n/** Finds a prim recursively by absolute path. */\nfunction findPrim(prims: USDPrim[], path: string): USDPrim | undefined {\n for (const prim of prims) {\n if (prim.path === path) {\n return prim;\n }\n const child = findPrim(prim.children, path);\n if (child) {\n return child;\n }\n }\n return undefined;\n}\n\n/** Collects reference and payload asset paths from a prim. */\nfunction getPrimReferences(prim: USDPrim): USDAssetPath[] {\n const references: USDAssetPath[] = [];\n for (const value of [\n prim.metadata['references'],\n prim.metadata['payload'],\n prim.metadata['payloads']\n ]) {\n if (Array.isArray(value)) {\n references.push(...value.filter(isAssetPath));\n } else if (isAssetPath(value)) {\n references.push(value);\n }\n }\n return references;\n}\n\n/** Converts authored variant metadata into a selection map. */\nfunction getVariantSelections(value: USDValue | undefined): Record<string, string> {\n if (!value || typeof value !== 'object' || Array.isArray(value) || isAssetPath(value)) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(value).filter((entry): entry is [string, string] => typeof entry[1] === 'string')\n );\n}\n\n/** Returns whether a parsed value is an external asset path. */\nfunction isAssetPath(value: USDValue | undefined): value is USDAssetPath {\n return Boolean(\n value && typeof value === 'object' && !Array.isArray(value) && 'assetPath' in value\n );\n}\n\n/** Deep-clones a prim hierarchy while preserving scalar values. */\nfunction clonePrim(prim: USDPrim): USDPrim {\n return {\n ...prim,\n attributes: {...prim.attributes},\n metadata: {...prim.metadata},\n variants: {...prim.variants},\n children: prim.children.map(clonePrim)\n };\n}\n\n/** Rebases a prim hierarchy at a new composed path. */\nfunction rebasePrim(prim: USDPrim, path: string): USDPrim {\n const rebased = clonePrim(prim);\n rebased.path = path;\n rebased.children = rebased.children.map(child => rebasePrim(child, `${path}/${child.name}`));\n return rebased;\n}\n\n/** Merges a stronger local prim opinion over a referenced prim. */\nfunction mergePrim(reference: USDPrim, override: USDPrim): USDPrim {\n const children = reference.children.map(clonePrim);\n for (const overridingChild of override.children) {\n const matchingIndex = children.findIndex(child => child.name === overridingChild.name);\n if (matchingIndex >= 0) {\n children[matchingIndex] = mergePrim(children[matchingIndex], overridingChild);\n } else {\n children.push(clonePrim(overridingChild));\n }\n }\n\n return {\n ...reference,\n ...override,\n sourceUrl:\n getPrimReferences(override).length > 0\n ? override.sourceUrl\n : reference.sourceUrl || override.sourceUrl,\n type: override.type || reference.type,\n attributes: {...reference.attributes, ...override.attributes},\n metadata: {...reference.metadata, ...override.metadata},\n variants: {...reference.variants, ...override.variants},\n children\n };\n}\n\n/** Returns whether a buffer starts with a ZIP local-file signature. */\nfunction isZIPArchive(arrayBuffer: ArrayBuffer): boolean {\n return (\n arrayBuffer.byteLength >= 4 && new DataView(arrayBuffer).getUint32(0, true) === ZIP_SIGNATURE\n );\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-usd.d.ts","sourceRoot":"","sources":["../../../src/usd/lib/parse-usd.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAAe,gBAAgB,EAAW,QAAQ,EAAW,uBAAoB;AAmB7F,uDAAuD;AACvD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,gBAAqB,EAC9B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,QAAQ,CAAC,CAoDnB"}
1
+ {"version":3,"file":"parse-usd.d.ts","sourceRoot":"","sources":["../../../src/usd/lib/parse-usd.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,+BAA+B,CAAC;AAGjE,OAAO,KAAK,EAGV,gBAAgB,EAEhB,QAAQ,EAGT,uBAAoB;AAmBrB,uDAAuD;AACvD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,WAAW,EACjB,OAAO,GAAE,gBAAqB,EAC9B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,QAAQ,CAAC,CA0EnB"}
@@ -1,6 +1,6 @@
1
- // loaders.gl
2
1
  // SPDX-License-Identifier: MIT
3
2
  // Copyright (c) vis.gl contributors
3
+ import { parseUSDC } from "./parse-usdc.js";
4
4
  import { parseUSDA } from "./parse-usda.js";
5
5
  import { parseUSDZArchive } from "./parse-usdz.js";
6
6
  const TEXT_DECODER = new TextDecoder();
@@ -31,22 +31,42 @@ export async function parseUSD(data, options = {}, context) {
31
31
  let stage;
32
32
  if (isZIPArchive(data)) {
33
33
  const archive = parseUSDZArchive(data);
34
- const rootFilename = Array.from(archive.keys()).find(filename => /\.usda?$/i.test(filename));
35
- if (!rootFilename) {
36
- throw new Error('USDZ archives with binary USDC root layers are not implemented yet.');
34
+ const rootFilename = archive.keys().next().value;
35
+ if (!rootFilename || !/\.(?:usd[ac]?)$/i.test(rootFilename)) {
36
+ throw new Error('USDZ archive has no supported USD root layer.');
37
37
  }
38
38
  const archiveBase = 'https://usd.archive/';
39
+ const assets = Object.create(null);
39
40
  for (const [filename, content] of archive) {
40
- environment.archiveFiles.set(new URL(filename, archiveBase).href, content);
41
+ const assetUrl = new URL(filename, archiveBase);
42
+ if (filename.startsWith('/') ||
43
+ /^[a-z][a-z\d+.-]*:/i.test(filename) ||
44
+ filename.includes('\\') ||
45
+ /[\u0000-\u001f\u007f]/.test(filename) ||
46
+ filename.trim() !== filename ||
47
+ filename.split('/').some(segment => {
48
+ const normalizedSegment = segment.replace(/%2e/gi, '.');
49
+ return normalizedSegment === '.' || normalizedSegment === '..';
50
+ }) ||
51
+ assetUrl.origin !== new URL(archiveBase).origin ||
52
+ assetUrl.search ||
53
+ assetUrl.hash ||
54
+ assets[assetUrl.href]) {
55
+ throw new Error(`USDZ entry "${filename}" has an ambiguous package URL.`);
56
+ }
57
+ environment.archiveFiles.set(assetUrl.href, content);
58
+ assets[assetUrl.href] = createEmbeddedAsset(filename, content);
41
59
  }
42
60
  const rootUrl = new URL(rootFilename, archiveBase).href;
43
61
  stage = parseUSDLayer(archive.get(rootFilename), rootUrl);
44
62
  stage.format = 'usdz';
63
+ stage.assets = assets;
45
64
  }
46
65
  else {
47
66
  stage = parseUSDLayer(data, url);
48
67
  }
49
68
  if (stage.url) {
69
+ setAttributeSourceUrls(stage, stage.url);
50
70
  environment.layers.add(stage.url);
51
71
  }
52
72
  if (environment.options.usd?.compose !== false) {
@@ -58,6 +78,12 @@ export async function parseUSD(data, options = {}, context) {
58
78
  }
59
79
  return stage;
60
80
  }
81
+ /** Retains encoded file data and a conservative filename-based image MIME hint. */
82
+ function createEmbeddedAsset(path, data) {
83
+ const extension = path.slice(path.lastIndexOf('.') + 1).toLowerCase();
84
+ const mimeType = extension === 'png' ? 'image/png' : /^(?:jpe?g)$/.test(extension) ? 'image/jpeg' : undefined;
85
+ return mimeType ? { path, data, mimeType } : { path, data };
86
+ }
61
87
  /** Selects a source location suitable for resolving referenced layers. */
62
88
  function getSourceLocation(configuredLocation, contextLocation) {
63
89
  const configuredUrl = getAbsoluteUrl(configuredLocation);
@@ -96,10 +122,30 @@ const USD_LOADER_DEFAULT_OPTIONS = {
96
122
  function parseUSDLayer(data, url) {
97
123
  const signature = TEXT_DECODER.decode(data.slice(0, 8));
98
124
  if (signature === CRATE_SIGNATURE) {
99
- throw new Error('Binary USDC crate layers are not implemented yet; use ASCII USDA layers.');
125
+ return parseUSDC(data, url);
100
126
  }
101
127
  return parseUSDA(TEXT_DECODER.decode(data), url);
102
128
  }
129
+ /** Retains each attribute's authored layer before composition merges prims from different files. */
130
+ function setAttributeSourceUrls(stage, sourceUrl) {
131
+ const pendingContents = [...stage.rootPrims];
132
+ while (pendingContents.length) {
133
+ const contents = pendingContents.pop();
134
+ for (const attribute of Object.values(contents.attributes)) {
135
+ attribute.sourceUrl = sourceUrl;
136
+ }
137
+ for (const child of contents.children) {
138
+ pendingContents.push(child);
139
+ }
140
+ if ('variants' in contents) {
141
+ for (const variants of Object.values(contents.variants)) {
142
+ for (const variant of Object.values(variants)) {
143
+ pendingContents.push(variant);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
103
149
  /** Recursively applies variants, references, overrides, and class filtering. */
104
150
  async function composePrims(prims, sourceUrl, inheritedVariants, environment, depth) {
105
151
  if (depth > (environment.options.usd?.maxReferenceDepth ?? 12)) {
@@ -169,6 +215,7 @@ async function loadReferencedStage(url, environment) {
169
215
  content = response.arrayBuffer();
170
216
  }
171
217
  const stage = parseUSDLayer(await content, url);
218
+ setAttributeSourceUrls(stage, url);
172
219
  environment.layers.add(url);
173
220
  return stage;
174
221
  })();
@@ -1 +1 @@
1
- {"version":3,"file":"parse-usd.js","sourceRoot":"","sources":["../../../src/usd/lib/parse-usd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-usd.js","sourceRoot":"","sources":["../../../src/usd/lib/parse-usd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
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/usd/lib/parse-usdc.ts
21
+ var parse_usdc_exports = {};
22
+ __export(parse_usdc_exports, {
23
+ parseUSDC: () => parseUSDC
24
+ });
25
+ module.exports = __toCommonJS(parse_usdc_exports);
26
+ var import_usdc_parser = require("../libs/usdc-parser.js");
27
+ function parseUSDC(data, url) {
28
+ if (data.byteLength < 88 || data.byteLength > 64 * 1024 * 1024)
29
+ throw new Error("USDC: invalid input size");
30
+ const bytes = new Uint8Array(data);
31
+ if (bytes[8] !== 0 || bytes[9] !== 8 || bytes[10] !== 0)
32
+ throw new Error("USDC: initial decoder requires crate version 0.8.0");
33
+ const reader = new DataView(data);
34
+ const table = reader.getBigUint64(16, true);
35
+ if (table > BigInt(data.byteLength - 8)) throw new Error("USDC: invalid section table");
36
+ const offset = Number(table), count = reader.getBigUint64(offset, true);
37
+ if (count > 16n || offset + 8 + Number(count) * 32 > data.byteLength)
38
+ throw new Error("USDC: invalid section table length");
39
+ const sectionNames = /* @__PURE__ */ new Set();
40
+ for (let index = 0; index < Number(count); index++) {
41
+ const entry = offset + 8 + index * 32;
42
+ const nameBytes = bytes.subarray(entry, entry + 16);
43
+ const terminator = nameBytes.indexOf(0);
44
+ const name = new TextDecoder().decode(
45
+ nameBytes.subarray(0, terminator < 0 ? nameBytes.length : terminator)
46
+ );
47
+ if (sectionNames.has(name)) throw new Error("USDC: duplicate section");
48
+ sectionNames.add(name);
49
+ const start = reader.getBigUint64(entry + 16, true), size = reader.getBigUint64(entry + 24, true);
50
+ if (start < 88n || start + size > BigInt(data.byteLength))
51
+ throw new Error("USDC: section out of bounds");
52
+ }
53
+ for (const name of ["TOKENS", "STRINGS", "FIELDS", "FIELDSETS", "PATHS", "SPECS"])
54
+ if (!sectionNames.has(name)) throw new Error("USDC: missing required section");
55
+ const { specsByPath } = new import_usdc_parser.USDCParser().parseData(data);
56
+ const prims = /* @__PURE__ */ new Map();
57
+ for (const [path, specification] of Object.entries(specsByPath)) {
58
+ if (specification.specType === 7 && path === "/") continue;
59
+ if (specification.specType === 1 || specification.specType === 8) continue;
60
+ if (specification.specType !== 6 || !/^\/(?:[A-Za-z_][\w:]*\/)*[A-Za-z_][\w:]*$/.test(path))
61
+ throw new Error("USDC: unsupported prim specification");
62
+ const fields = specification.fields;
63
+ const specifier = fields.specifier ?? 0;
64
+ if (specifier !== 0 && specifier !== 1 && specifier !== 2)
65
+ throw new Error("USDC: invalid prim specifier");
66
+ const metadata = convertFields(
67
+ fields,
68
+ /* @__PURE__ */ new Set(["specifier", "typeName", "primChildren", "properties"])
69
+ );
70
+ prims.set(path, {
71
+ name: path.slice(path.lastIndexOf("/") + 1),
72
+ path,
73
+ sourceUrl: url,
74
+ type: String(fields.typeName || ""),
75
+ specifier: ["def", "over", "class"][specifier],
76
+ attributes: /* @__PURE__ */ Object.create(null),
77
+ metadata,
78
+ variants: /* @__PURE__ */ Object.create(null),
79
+ children: []
80
+ });
81
+ }
82
+ const roots = [];
83
+ for (const prim of prims.values()) {
84
+ const parentPath = prim.path.slice(0, prim.path.lastIndexOf("/"));
85
+ if (!parentPath) roots.push(prim);
86
+ else {
87
+ const parent = prims.get(parentPath);
88
+ if (!parent) throw new Error("USDC: missing parent prim");
89
+ parent.children.push(prim);
90
+ }
91
+ }
92
+ orderPrims(roots, specsByPath["/"]?.fields.primChildren);
93
+ for (const prim of prims.values())
94
+ orderPrims(prim.children, specsByPath[prim.path]?.fields.primChildren);
95
+ for (const [path, specification] of Object.entries(specsByPath)) {
96
+ if (specification.specType !== 1 && specification.specType !== 8) continue;
97
+ const separator = path.indexOf(".");
98
+ const prim = prims.get(path.slice(0, separator));
99
+ if (separator < 0 || !prim) throw new Error("USDC: property has no owning prim");
100
+ const name = path.slice(separator + 1), fields = specification.fields;
101
+ const type = specification.specType === 8 ? "rel" : String(fields.typeName || "");
102
+ const value = convertAttributeValue(
103
+ specification.specType === 8 ? fields.targetPaths : fields.default,
104
+ type
105
+ );
106
+ const metadata = convertFields(
107
+ fields,
108
+ /* @__PURE__ */ new Set(["typeName", "default", "targetPaths", "timeSamples"])
109
+ );
110
+ if (fields.timeSamples !== void 0)
111
+ metadata.timeSamples = convertTimeSamples(fields.timeSamples, type);
112
+ prim.attributes[name] = {
113
+ name,
114
+ type,
115
+ value,
116
+ metadata
117
+ };
118
+ }
119
+ return {
120
+ format: "usdc",
121
+ url,
122
+ metadata: convertFields(specsByPath["/"]?.fields || {}, /* @__PURE__ */ new Set(["primChildren"])),
123
+ rootPrims: roots,
124
+ layers: []
125
+ };
126
+ }
127
+ function convertFields(fields, excluded) {
128
+ const result = /* @__PURE__ */ Object.create(null);
129
+ for (const [name, value] of Object.entries(fields))
130
+ if (!excluded.has(name)) result[name] = convertValue(value);
131
+ return result;
132
+ }
133
+ function convertValue(value) {
134
+ if (value === void 0 || value === null) return null;
135
+ if (typeof value === "number" || typeof value === "string" || typeof value === "boolean")
136
+ return value;
137
+ if (Array.isArray(value)) return value.map(convertValue);
138
+ if (ArrayBuffer.isView(value) && !(value instanceof DataView))
139
+ return Array.from(value);
140
+ if (typeof value === "object") return convertFields(value, /* @__PURE__ */ new Set());
141
+ throw new Error("USDC: unsupported decoded value");
142
+ }
143
+ function convertAttributeValue(raw, type) {
144
+ const value = convertValue(raw);
145
+ if (type === "asset" && typeof value === "string") return { assetPath: value };
146
+ if (type === "rel" && Array.isArray(value))
147
+ return value.map((path) => typeof path === "string" ? { path } : path);
148
+ const tuple = /^(?:(?:point|normal|vector|color|texCoord)([234])[fdh]|(?:float|double|half|int)([234]))\[\]$/.exec(
149
+ type
150
+ );
151
+ if (tuple && Array.isArray(value)) {
152
+ const components = Number(tuple[1] || tuple[2]);
153
+ if (value.length % components) throw new Error("USDC: incomplete vector tuple");
154
+ const tuples = [];
155
+ for (let offset = 0; offset < value.length; offset += components)
156
+ tuples.push(value.slice(offset, offset + components));
157
+ return tuples;
158
+ }
159
+ return value;
160
+ }
161
+ function orderPrims(prims, names) {
162
+ if (names === void 0) return;
163
+ if (!Array.isArray(names)) throw new Error("USDC: invalid primChildren order");
164
+ const remaining = new Map(prims.map((prim) => [prim.name, prim]));
165
+ const ordered = [];
166
+ for (const name of names) {
167
+ const prim = typeof name === "string" ? remaining.get(name) : void 0;
168
+ if (!prim) throw new Error("USDC: invalid primChildren reference");
169
+ ordered.push(prim);
170
+ remaining.delete(name);
171
+ }
172
+ for (const prim of remaining.values()) ordered.push(prim);
173
+ for (let index = 0; index < ordered.length; index++) prims[index] = ordered[index];
174
+ }
175
+ function convertTimeSamples(raw, type) {
176
+ if (!raw || typeof raw !== "object") throw new Error("USDC: invalid time samples");
177
+ const samples = raw;
178
+ const times = convertValue(samples.times);
179
+ if (!Array.isArray(times) || !Array.isArray(samples.values) || times.length !== samples.values.length)
180
+ throw new Error("USDC: invalid time samples");
181
+ return { times, values: samples.values.map((value) => convertAttributeValue(value, type)) };
182
+ }
183
+ // Annotate the CommonJS export names for ESM import in node:
184
+ 0 && (module.exports = {
185
+ parseUSDC
186
+ });
187
+ //# sourceMappingURL=parse-usdc.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/usd/lib/parse-usdc.ts"],
4
+ "sourcesContent": ["// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport {USDCParser} from '../libs/usdc-parser.js';\nimport type {USDPrim, USDStage, USDValue} from './usd-types';\n\n/** Decodes the supported binary crate subset into the same stage model as USDA. */\nexport function parseUSDC(data: ArrayBuffer, url?: string): USDStage {\n if (data.byteLength < 88 || data.byteLength > 64 * 1024 * 1024)\n throw new Error('USDC: invalid input size');\n const bytes = new Uint8Array(data);\n if (bytes[8] !== 0 || bytes[9] !== 8 || bytes[10] !== 0)\n throw new Error('USDC: initial decoder requires crate version 0.8.0');\n const reader = new DataView(data);\n const table = reader.getBigUint64(16, true);\n if (table > BigInt(data.byteLength - 8)) throw new Error('USDC: invalid section table');\n const offset = Number(table),\n count = reader.getBigUint64(offset, true);\n if (count > 16n || offset + 8 + Number(count) * 32 > data.byteLength)\n throw new Error('USDC: invalid section table length');\n const sectionNames = new Set<string>();\n for (let index = 0; index < Number(count); index++) {\n const entry = offset + 8 + index * 32;\n const nameBytes = bytes.subarray(entry, entry + 16);\n const terminator = nameBytes.indexOf(0);\n const name = new TextDecoder().decode(\n nameBytes.subarray(0, terminator < 0 ? nameBytes.length : terminator)\n );\n if (sectionNames.has(name)) throw new Error('USDC: duplicate section');\n sectionNames.add(name);\n const start = reader.getBigUint64(entry + 16, true),\n size = reader.getBigUint64(entry + 24, true);\n if (start < 88n || start + size > BigInt(data.byteLength))\n throw new Error('USDC: section out of bounds');\n }\n for (const name of ['TOKENS', 'STRINGS', 'FIELDS', 'FIELDSETS', 'PATHS', 'SPECS'])\n if (!sectionNames.has(name)) throw new Error('USDC: missing required section');\n const {specsByPath} = new USDCParser().parseData(data);\n const prims = new Map<string, USDPrim>();\n for (const [path, specification] of Object.entries(specsByPath)) {\n if (specification.specType === 7 && path === '/') continue;\n if (specification.specType === 1 || specification.specType === 8) continue;\n if (specification.specType !== 6 || !/^\\/(?:[A-Za-z_][\\w:]*\\/)*[A-Za-z_][\\w:]*$/.test(path))\n throw new Error('USDC: unsupported prim specification');\n const fields = specification.fields;\n const specifier = fields.specifier ?? 0;\n if (specifier !== 0 && specifier !== 1 && specifier !== 2)\n throw new Error('USDC: invalid prim specifier');\n const metadata = convertFields(\n fields,\n new Set(['specifier', 'typeName', 'primChildren', 'properties'])\n );\n prims.set(path, {\n name: path.slice(path.lastIndexOf('/') + 1),\n path,\n sourceUrl: url,\n type: String(fields.typeName || ''),\n specifier: (['def', 'over', 'class'] as const)[specifier],\n attributes: Object.create(null),\n metadata,\n variants: Object.create(null),\n children: []\n });\n }\n const roots: USDPrim[] = [];\n for (const prim of prims.values()) {\n const parentPath = prim.path.slice(0, prim.path.lastIndexOf('/'));\n if (!parentPath) roots.push(prim);\n else {\n const parent = prims.get(parentPath);\n if (!parent) throw new Error('USDC: missing parent prim');\n parent.children.push(prim);\n }\n }\n orderPrims(roots, specsByPath['/']?.fields.primChildren);\n for (const prim of prims.values())\n orderPrims(prim.children, specsByPath[prim.path]?.fields.primChildren);\n for (const [path, specification] of Object.entries(specsByPath)) {\n if (specification.specType !== 1 && specification.specType !== 8) continue;\n const separator = path.indexOf('.');\n const prim = prims.get(path.slice(0, separator));\n if (separator < 0 || !prim) throw new Error('USDC: property has no owning prim');\n const name = path.slice(separator + 1),\n fields = specification.fields;\n const type = specification.specType === 8 ? 'rel' : String(fields.typeName || '');\n const value = convertAttributeValue(\n specification.specType === 8 ? fields.targetPaths : fields.default,\n type\n );\n const metadata = convertFields(\n fields,\n new Set(['typeName', 'default', 'targetPaths', 'timeSamples'])\n );\n if (fields.timeSamples !== undefined)\n metadata.timeSamples = convertTimeSamples(fields.timeSamples, type);\n prim.attributes[name] = {\n name,\n type,\n value,\n metadata\n };\n }\n return {\n format: 'usdc',\n url,\n metadata: convertFields(specsByPath['/']?.fields || {}, new Set(['primChildren'])),\n rootPrims: roots,\n layers: []\n };\n}\n\n/** Converts raw field dictionaries while retaining authored values and time samples. */\nfunction convertFields(\n fields: Record<string, unknown>,\n excluded: Set<string>\n): Record<string, USDValue> {\n const result: Record<string, USDValue> = Object.create(null);\n for (const [name, value] of Object.entries(fields))\n if (!excluded.has(name)) result[name] = convertValue(value);\n return result;\n}\n\n/** Converts decoded typed arrays to the existing renderer-independent USD value contract. */\nfunction convertValue(value: unknown): USDValue {\n if (value === undefined || value === null) return null;\n if (typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean')\n return value;\n if (Array.isArray(value)) return value.map(convertValue);\n if (ArrayBuffer.isView(value) && !(value instanceof DataView))\n return Array.from(value as unknown as ArrayLike<number>);\n if (typeof value === 'object') return convertFields(value as Record<string, unknown>, new Set());\n throw new Error('USDC: unsupported decoded value');\n}\n\n/** Preserves USDA-compatible asset/path values and vector-array tuple boundaries. */\nfunction convertAttributeValue(raw: unknown, type: string): USDValue {\n const value = convertValue(raw);\n if (type === 'asset' && typeof value === 'string') return {assetPath: value};\n if (type === 'rel' && Array.isArray(value))\n return value.map(path => (typeof path === 'string' ? {path} : path));\n const tuple =\n /^(?:(?:point|normal|vector|color|texCoord)([234])[fdh]|(?:float|double|half|int)([234]))\\[\\]$/.exec(\n type\n );\n if (tuple && Array.isArray(value)) {\n const components = Number(tuple[1] || tuple[2]);\n if (value.length % components) throw new Error('USDC: incomplete vector tuple');\n const tuples: USDValue[] = [];\n for (let offset = 0; offset < value.length; offset += components)\n tuples.push(value.slice(offset, offset + components));\n return tuples;\n }\n return value;\n}\n\n/** Applies authored child-name order while retaining any other decoded specifications. */\nfunction orderPrims(prims: USDPrim[], names: unknown): void {\n if (names === undefined) return;\n if (!Array.isArray(names)) throw new Error('USDC: invalid primChildren order');\n const remaining = new Map(prims.map(prim => [prim.name, prim]));\n const ordered: USDPrim[] = [];\n for (const name of names) {\n const prim = typeof name === 'string' ? remaining.get(name) : undefined;\n if (!prim) throw new Error('USDC: invalid primChildren reference');\n ordered.push(prim);\n remaining.delete(name as string);\n }\n for (const prim of remaining.values()) ordered.push(prim);\n for (let index = 0; index < ordered.length; index++) prims[index] = ordered[index];\n}\n\n/** Converts every authored sample through the same type-aware path as an attribute default. */\nfunction convertTimeSamples(raw: unknown, type: string): USDValue {\n if (!raw || typeof raw !== 'object') throw new Error('USDC: invalid time samples');\n const samples = raw as {\n /** Authored sample coordinates. */\n times?: unknown;\n /** Authored sample values before type-aware conversion. */\n values?: unknown;\n };\n const times = convertValue(samples.times);\n if (\n !Array.isArray(times) ||\n !Array.isArray(samples.values) ||\n times.length !== samples.values.length\n )\n throw new Error('USDC: invalid time samples');\n return {times, values: samples.values.map(value => convertAttributeValue(value, type))};\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { USDStage } from "./usd-types.js";
2
+ /** Decodes the supported binary crate subset into the same stage model as USDA. */
3
+ export declare function parseUSDC(data: ArrayBuffer, url?: string): USDStage;
4
+ //# sourceMappingURL=parse-usdc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-usdc.d.ts","sourceRoot":"","sources":["../../../src/usd/lib/parse-usdc.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,QAAQ,EAAW,uBAAoB;AAE7D,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAsGnE"}