@loaders.gl/scene 5.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/LICENSE +41 -0
  2. package/README.md +23 -0
  3. package/dist/dist.dev.js +831 -0
  4. package/dist/dist.min.js +14 -0
  5. package/dist/index.cjs +65 -0
  6. package/dist/index.cjs.map +7 -0
  7. package/dist/index.d.ts +3 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +5 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/parse-usd.d.ts +5 -0
  12. package/dist/lib/parse-usd.d.ts.map +1 -0
  13. package/dist/lib/parse-usd.js +276 -0
  14. package/dist/lib/parse-usd.js.map +1 -0
  15. package/dist/lib/parse-usda.d.ts +4 -0
  16. package/dist/lib/parse-usda.d.ts.map +1 -0
  17. package/dist/lib/parse-usda.js +395 -0
  18. package/dist/lib/parse-usda.js.map +1 -0
  19. package/dist/lib/parse-usdz.d.ts +3 -0
  20. package/dist/lib/parse-usdz.d.ts.map +1 -0
  21. package/dist/lib/parse-usdz.js +50 -0
  22. package/dist/lib/parse-usdz.js.map +1 -0
  23. package/dist/lib/usd-types.d.ts +86 -0
  24. package/dist/lib/usd-types.d.ts.map +1 -0
  25. package/dist/lib/usd-types.js +5 -0
  26. package/dist/lib/usd-types.js.map +1 -0
  27. package/dist/usd-loader-types.d.ts +50 -0
  28. package/dist/usd-loader-types.d.ts.map +1 -0
  29. package/dist/usd-loader-types.js +35 -0
  30. package/dist/usd-loader-types.js.map +1 -0
  31. package/dist/usd-loader.d.ts +30 -0
  32. package/dist/usd-loader.d.ts.map +1 -0
  33. package/dist/usd-loader.js +17 -0
  34. package/dist/usd-loader.js.map +1 -0
  35. package/package.json +55 -0
  36. package/src/index.ts +15 -0
  37. package/src/lib/parse-usd.ts +349 -0
  38. package/src/lib/parse-usda.ts +458 -0
  39. package/src/lib/parse-usdz.ts +59 -0
  40. package/src/lib/usd-types.ts +103 -0
  41. package/src/usd-loader-types.ts +40 -0
  42. package/src/usd-loader.ts +26 -0
@@ -0,0 +1,14 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if (typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if (typeof define === 'function' && define.amd) define([], factory);
5
+ else if (typeof exports === 'object') exports['loaders'] = factory();
6
+ else root['loaders'] = factory();})(globalThis, function () {
7
+ "use strict";var __exports__=(()=>{var q=Object.create;var y=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var k=(t,e)=>()=>(t&&(e=t(t=0)),e);var J=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),O=(t,e)=>{for(var s in e)y(t,s,{get:e[s],enumerable:!0})},w=(t,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of G(e))!K.call(t,r)&&r!==s&&y(t,r,{get:()=>e[r],enumerable:!(n=B(e,r))||n.enumerable});return t},S=(t,e,s)=>(w(t,e,"default"),s&&w(s,e,"default")),ee=(t,e,s)=>(s=t!=null?q(X(t)):{},w(e||!t||!t.__esModule?y(s,"default",{value:t,enumerable:!0}):s,t)),te=t=>w(y({},"__esModule",{value:!0}),t);var C=J((we,I)=>{I.exports=globalThis.loaders});function _(t,e){if(!t.trimStart().startsWith("#usda"))throw new Error("OpenUSD ASCII layers must begin with the #usda header.");return new E(t,e).parse()}var se,re,E,b,N=k(()=>{"use strict";se=/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/,re=new Set(["uniform","varying","custom","prepend","append","add","delete","reorder"]);E=class{tokenizer;url;constructor(e,s){this.tokenizer=new b(e),this.url=s}parse(){let e=this.tokenizer.match("(")?this.parseMetadata(")"):{},s=[];for(;!this.tokenizer.isAtEnd();)this.isPrimDeclaration()?s.push(this.parsePrim("")):this.tokenizer.read();return{format:"usda",url:this.url,metadata:e,rootPrims:s,layers:this.url?[this.url]:[]}}parsePrim(e){let n=this.tokenizer.read().value,r=this.tokenizer.read(),i=this.tokenizer.peek().kind==="string",a=i?r.value:"",c=i?this.tokenizer.read().value:r.value,f=`${e}/${c}`,h=this.tokenizer.match("(")?this.parseMetadata(")"):{};this.tokenizer.expect("{");let o=this.parsePrimContents(f);return{name:c,path:f,sourceUrl:this.url,type:a,specifier:n,attributes:o.attributes,metadata:{...h,...o.metadata},variants:o.variants,children:o.children}}parsePrimContents(e){let s={},n={},r=[],i={};for(;!this.tokenizer.isAtEnd()&&!this.tokenizer.match("}");)if(this.isPrimDeclaration())r.push(this.parsePrim(e));else if(this.tokenizer.peek().value==="variantSet")this.parseVariantSet(e,i);else{let a=this.parseAttribute();a&&(s[a.name]=a)}return{attributes:s,metadata:n,children:r,variants:i}}parseVariantSet(e,s){this.tokenizer.expect("variantSet");let n=this.tokenizer.read().value;this.tokenizer.expect("="),this.tokenizer.expect("{");let r={};for(;!this.tokenizer.isAtEnd()&&!this.tokenizer.match("}");){let i=this.tokenizer.read().value;this.tokenizer.expect("{");let a=this.parsePrimContents(e);r[i]={attributes:a.attributes,metadata:a.metadata,children:a.children}}s[n]=r}parseAttribute(){let e=this.tokenizer.read();if(e.kind==="end")return null;let s=[e];for(;!this.tokenizer.isAtEnd()&&this.tokenizer.peek().line===e.line;){let h=this.tokenizer.peek();if(h.value==="="){this.tokenizer.read();break}if(h.value==="{"||h.value==="}")return null;s.push(this.tokenizer.read())}if(!(this.tokenizer.previousValue==="="))return null;let r=s.filter(h=>!re.has(h.value));if(r.length===0)return null;let i=r[r.length-1].value,a=r.slice(0,-1).map(h=>h.value).join(""),c=this.parseValue(),f=this.tokenizer.match("(")?this.parseMetadata(")"):{};return{name:i,type:a,value:c,metadata:f}}parseMetadata(e){let s={};for(;!this.tokenizer.isAtEnd()&&!this.tokenizer.match(e);){if(this.tokenizer.match(","),this.tokenizer.peek().value===e){this.tokenizer.read();break}let n=this.tokenizer.read(),r=[n];for(;!this.tokenizer.isAtEnd()&&this.tokenizer.peek().line===n.line;){if(this.tokenizer.peek().value==="="||this.tokenizer.peek().value===":"){this.tokenizer.read();break}if(this.tokenizer.peek().value===e)break;r.push(this.tokenizer.read())}if(this.tokenizer.previousValue!=="="&&this.tokenizer.previousValue!==":")continue;let i=r[r.length-1].value;s[i]=this.parseValue(),this.tokenizer.match(",")}return s}parseValue(){let e=this.tokenizer.read();if(e.value==="[")return this.parseList("]");if(e.value==="(")return this.parseList(")");if(e.value==="{")return this.parseMetadata("}");if(e.kind==="asset"){let s={assetPath:e.value};return this.tokenizer.peek().kind==="path"&&this.tokenizer.peek().line===e.line&&(s.primPath=this.tokenizer.read().value),s}return e.kind==="path"?{path:e.value}:e.kind==="number"?Number(e.value):e.value==="true"?!0:e.value==="false"?!1:e.value==="None"||e.value==="null"?null:e.value}parseList(e){let s=[];for(;!this.tokenizer.isAtEnd()&&!this.tokenizer.match(e);)this.tokenizer.match(",")||(s.push(this.parseValue()),this.tokenizer.match(","));return s}isPrimDeclaration(){let e=this.tokenizer.peek().value;return e==="def"||e==="over"||e==="class"}},b=class{source;offset=0;line=1;bufferedToken=null;previousValue="";constructor(e){this.source=e}peek(){return this.bufferedToken||=this.readToken(),this.bufferedToken}read(){let e=this.peek();return this.bufferedToken=null,this.previousValue=e.value,e}match(e){return this.peek().value!==e?!1:(this.read(),!0)}expect(e){let s=this.read();if(s.value!==e)throw new Error(`Expected "${e}" at USDA line ${s.line}, received "${s.value}".`)}isAtEnd(){return this.peek().kind==="end"}readToken(){this.skipIgnoredText();let e=this.line,s=this.source[this.offset];if(s===void 0)return{value:"",line:e,kind:"end"};if("{}[](),=".includes(s))return this.offset++,{value:s,line:e,kind:"punctuation"};if(s==='"'||s==="'")return{value:this.readQuotedString(s),line:e,kind:"string"};if(s==="@")return{value:this.readDelimitedValue("@"),line:e,kind:"asset"};if(s==="<")return{value:this.readDelimitedValue(">"),line:e,kind:"path"};let n=this.source.slice(this.offset).match(se);if(n)return this.offset+=n[0].length,{value:n[0],line:e,kind:"number"};let r=this.offset;for(;this.offset<this.source.length;){let i=this.source[this.offset];if(/\s/.test(i)||"{}[](),=@<>".includes(i))break;this.offset++}return this.offset===r&&this.offset++,{value:this.source.slice(r,this.offset),line:e,kind:"word"}}skipIgnoredText(){for(;this.offset<this.source.length;){let e=this.source[this.offset];if(e===`
8
+ `)this.line++,this.offset++;else if(/\s/.test(e))this.offset++;else if(e==="#")for(;this.offset<this.source.length&&this.source[this.offset]!==`
9
+ `;)this.offset++;else if(e==="/"&&this.source[this.offset+1]==="*"){for(this.offset+=2;this.offset<this.source.length&&!this.source.startsWith("*/",this.offset);)this.source[this.offset]===`
10
+ `&&this.line++,this.offset++;this.offset+=2}else if(this.source.startsWith('"""',this.offset)){for(this.offset+=3;this.offset<this.source.length&&!this.source.startsWith('"""',this.offset);)this.source[this.offset]===`
11
+ `&&this.line++,this.offset++;this.offset+=3}else break}}readQuotedString(e){this.offset++;let s="";for(;this.offset<this.source.length;){let n=this.source[this.offset++];if(n===e)break;if(n==="\\"&&this.offset<this.source.length){let r=this.source[this.offset++];s+=r==="n"?`
12
+ `:r}else s+=n}return s}readDelimitedValue(e){this.offset++;let s=this.offset;for(;this.offset<this.source.length&&this.source[this.offset]!==e;)this.offset++;let n=this.source.slice(s,this.offset);return this.offset++,n}}});function V(t){let e=new DataView(t),s=ne(e),n=e.getUint16(s+10,!0),r=e.getUint32(s+16,!0),i=new Map,a=new TextDecoder;for(let c=0;c<n;c++){if(e.getUint32(r,!0)!==33639248)throw new Error("USDZ archive contains an invalid ZIP central-directory entry.");let f=e.getUint16(r+10,!0),h=e.getUint32(r+20,!0),o=e.getUint16(r+28,!0),p=e.getUint16(r+30,!0),m=e.getUint16(r+32,!0),u=e.getUint32(r+42,!0),d=a.decode(new Uint8Array(t,r+46,o));if(f!==0)throw new Error(`USDZ entry "${d}" is compressed; USDZ requires stored ZIP entries.`);if(e.getUint32(u,!0)!==67324752)throw new Error(`USDZ entry "${d}" has an invalid local ZIP header.`);let l=e.getUint16(u+26,!0),D=e.getUint16(u+28,!0),g=u+30+l+D;i.set(d,t.slice(g,g+h)),r+=46+o+p+m}return i}function ne(t){let e=Math.max(0,t.byteLength-65557);for(let s=t.byteLength-22;s>=e;s--)if(t.getUint32(s,!0)===101010256)return s;throw new Error("USDZ archive does not contain a ZIP end-of-central-directory record.")}var $=k(()=>{"use strict"});async function R(t,e={},s){let n=oe(e.core?.baseUrl,s?.url),r={fetch:async a=>{let c=await(s?.fetch||fetch)(a);if(!(c instanceof Response))throw new Error(`OpenUSD reference "${a}" did not return an HTTP response.`);if(!c.ok)throw new Error(`Unable to load OpenUSD reference "${a}": ${c.status}.`);return c},cache:new Map,archiveFiles:new Map,layers:new Set,options:{...e,usd:{...he,...e.usd}}},i;if(de(t)){let a=V(t),c=Array.from(a.keys()).find(o=>/\.usda?$/i.test(o));if(!c)throw new Error("USDZ archives with binary USDC root layers are not implemented yet.");let f="https://usd.archive/";for(let[o,p]of a)r.archiveFiles.set(new URL(o,f).href,p);let h=new URL(c,f).href;i=P(a.get(c),h),i.format="usdz"}else i=P(t,n);return i.url&&r.layers.add(i.url),r.options.usd?.compose!==!1&&(i.rootPrims=await A(i.rootPrims,i.url,{},r,0)),i.layers=Array.from(r.layers),n&&(i.url=n),i}function oe(t,e){let s=Z(t);return s||Z(e)||t||e}function Z(t){try{return t?new URL(t).href:void 0}catch{return}}function ce(t,e){try{return new URL(t,e).href}catch{let s=Math.max(e.lastIndexOf("/"),e.lastIndexOf("\\"));return s>=0?`${e.slice(0,s+1)}${t}`:t}}function P(t,e){if(M.decode(t.slice(0,8))===ie)throw new Error("Binary USDC crate layers are not implemented yet; use ASCII USDA layers.");return _(M.decode(t),e)}async function A(t,e,s,n,r){if(r>(n.options.usd?.maxReferenceDepth??12))throw new Error("OpenUSD reference composition exceeded the configured depth limit.");let i=[];for(let a of t){if(a.specifier==="class")continue;let f={...le(a.metadata.variants),...s,...n.options.usd?.variantSelections},h=a.sourceUrl||e,o=v(a);for(let[m,u]of Object.entries(o.variants)){let d=f[m]||Object.keys(u)[0],l=u[d];l&&(o=T(o,{...o,attributes:l.attributes,metadata:l.metadata,children:l.children,variants:{}}))}let p=W(o);if(n.options.usd?.loadReferences!==!1&&p.length>0)for(let m of p){if(!h)throw new Error("OpenUSD references require a source URL or options.core.baseUrl.");let u=ce(m.assetPath,h),d=await fe(u,n),l=ue(d,m.primPath),D=await A(l,u,f,n,r+1);for(let g of D)o=T(j(g,o.path),o)}o.children=await A(o.children,h,f,n,r),i.push(o)}return i}async function fe(t,e){let s=e.cache.get(t);return s||(s=(async()=>{let r=e.archiveFiles.get(t);if(!r){let a;try{a=await e.fetch(t)}catch(c){throw new Error(`Unable to fetch USD layer "${t}": ${String(c)}`)}r=a.arrayBuffer()}let i=P(await r,t);return e.layers.add(t),i})(),e.cache.set(t,s)),s}function ue(t,e){let s=e||t.metadata.defaultPrim;if(typeof s!="string")return t.rootPrims;let n=s.startsWith("/")?s:`/${s}`,r=F(t.rootPrims,n);return r?[r]:[]}function F(t,e){for(let s of t){if(s.path===e)return s;let n=F(s.children,e);if(n)return n}}function W(t){let e=[];for(let s of[t.metadata.references,t.metadata.payload,t.metadata.payloads])Array.isArray(s)?e.push(...s.filter(x)):x(s)&&e.push(s);return e}function le(t){return!t||typeof t!="object"||Array.isArray(t)||x(t)?{}:Object.fromEntries(Object.entries(t).filter(e=>typeof e[1]=="string"))}function x(t){return Boolean(t&&typeof t=="object"&&!Array.isArray(t)&&"assetPath"in t)}function v(t){return{...t,attributes:{...t.attributes},metadata:{...t.metadata},variants:{...t.variants},children:t.children.map(v)}}function j(t,e){let s=v(t);return s.path=e,s.children=s.children.map(n=>j(n,`${e}/${n.name}`)),s}function T(t,e){let s=t.children.map(v);for(let n of e.children){let r=s.findIndex(i=>i.name===n.name);r>=0?s[r]=T(s[r],n):s.push(v(n))}return{...t,...e,sourceUrl:W(e).length>0?e.sourceUrl:t.sourceUrl||e.sourceUrl,type:e.type||t.type,attributes:{...t.attributes,...e.attributes},metadata:{...t.metadata,...e.metadata},variants:{...t.variants,...e.variants},children:s}}function de(t){return t.byteLength>=4&&new DataView(t).getUint32(0,!0)===ae}var M,ie,ae,he,Y=k(()=>{"use strict";N();$();M=new TextDecoder,ie="PXR-USDC",ae=67324752;he={compose:!0,loadReferences:!0,maxReferenceDepth:12,variantSelections:{}}});var H={};O(H,{USDLoaderWithParser:()=>me});async function ke(t,e,s){return R(new TextEncoder().encode(t).buffer,e,s)}var Ae,pe,me,Q=k(()=>{"use strict";Y();L();({preload:Ae,...pe}=z),me={...pe,parse:R,parseText:ke}});async function Ue(){let{USDLoaderWithParser:t}=await Promise.resolve().then(()=>(Q(),H));return t}var ve,z,L=k(()=>{"use strict";ve="5.0.0-alpha.1";z={dataType:null,batchType:null,name:"Universal Scene Description",id:"usd",module:"scene",version:ve,extensions:["usd","usda","usdz"],mimeTypes:["model/vnd.usd","model/vnd.usda","model/vnd.usdz+zip"],text:!0,binary:!0,tests:["#usda","PK"],options:{usd:{compose:!0,loadReferences:!0,maxReferenceDepth:12,variantSelections:{}}},preload:Ue}});var U={};O(U,{USDLoader:()=>z});S(U,ee(C(),1));L();return te(U);})();
13
+ return __exports__;
14
+ });
package/dist/index.cjs ADDED
@@ -0,0 +1,65 @@
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
+ // dist/index.js
31
+ var dist_exports = {};
32
+ __export(dist_exports, {
33
+ USDLoader: () => USDLoader
34
+ });
35
+ module.exports = __toCommonJS(dist_exports);
36
+
37
+ // dist/usd-loader-types.js
38
+ var VERSION = true ? "5.0.0-alpha.1" : "latest";
39
+ async function preload() {
40
+ const { USDLoaderWithParser } = await import("@loaders.gl/scene/usd-loader");
41
+ return USDLoaderWithParser;
42
+ }
43
+ var USDLoader = {
44
+ dataType: null,
45
+ batchType: null,
46
+ name: "Universal Scene Description",
47
+ id: "usd",
48
+ module: "scene",
49
+ version: VERSION,
50
+ extensions: ["usd", "usda", "usdz"],
51
+ mimeTypes: ["model/vnd.usd", "model/vnd.usda", "model/vnd.usdz+zip"],
52
+ text: true,
53
+ binary: true,
54
+ tests: ["#usda", "PK"],
55
+ options: {
56
+ usd: {
57
+ compose: true,
58
+ loadReferences: true,
59
+ maxReferenceDepth: 12,
60
+ variantSelections: {}
61
+ }
62
+ },
63
+ preload
64
+ };
65
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/usd-loader-types.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", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nimport type {Loader} from '@loaders.gl/loader-utils';\nimport type {USDLoaderOptions, USDStage} from './lib/usd-types';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\n/** Loads the parser-bearing USD loader implementation. */\nasync function preload() {\n const {USDLoaderWithParser} = await import('@loaders.gl/scene/usd-loader');\n return USDLoaderWithParser;\n}\n\n/** Metadata-only loader for OpenUSD ASCII and uncompressed USDZ scenes. */\nexport const USDLoader = {\n dataType: null as unknown as USDStage,\n batchType: null as never,\n name: 'Universal Scene Description',\n id: 'usd',\n module: 'scene',\n version: VERSION,\n extensions: ['usd', 'usda', 'usdz'],\n mimeTypes: ['model/vnd.usd', 'model/vnd.usda', 'model/vnd.usdz+zip'],\n text: true,\n binary: true,\n tests: ['#usda', 'PK'],\n options: {\n usd: {\n compose: true,\n loadReferences: true,\n maxReferenceDepth: 12,\n variantSelections: {}\n }\n },\n preload\n} as const satisfies Loader<USDStage, never, USDLoaderOptions>;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACSA,IAAM,UAAU,OAAoC,kBAAe;AAGnE,eAAe,UAAO;AACpB,QAAM,EAAC,oBAAmB,IAAI,MAAM,OAAO,8BAA8B;AACzE,SAAO;AACT;AAGO,IAAM,YAAY;EACvB,UAAU;EACV,WAAW;EACX,MAAM;EACN,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,YAAY,CAAC,OAAO,QAAQ,MAAM;EAClC,WAAW,CAAC,iBAAiB,kBAAkB,oBAAoB;EACnE,MAAM;EACN,QAAQ;EACR,OAAO,CAAC,SAAS,IAAI;EACrB,SAAS;IACP,KAAK;MACH,SAAS;MACT,gBAAgB;MAChB,mBAAmB;MACnB,mBAAmB,CAAA;;;EAGvB;;",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ export { USDLoader } from "./usd-loader-types.js";
2
+ export type { USDAssetPath, USDAttribute, USDLoaderOptions, USDPrim, USDScenePath, USDStage, USDValue, USDVariant } from "./lib/usd-types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/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"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ export { USDLoader } from "./usd-loader-types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,SAAS,EAAC,8BAA2B"}
@@ -0,0 +1,5 @@
1
+ import type { LoaderContext } from '@loaders.gl/loader-utils';
2
+ import type { USDLoaderOptions, USDStage } from "./usd-types.js";
3
+ /** Parses and optionally composes an OpenUSD stage. */
4
+ export declare function parseUSD(data: ArrayBuffer, options?: USDLoaderOptions, context?: LoaderContext): Promise<USDStage>;
5
+ //# sourceMappingURL=parse-usd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-usd.d.ts","sourceRoot":"","sources":["../../src/lib/parse-usd.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAG5D,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"}
@@ -0,0 +1,276 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ import { parseUSDA } from "./parse-usda.js";
5
+ import { parseUSDZArchive } from "./parse-usdz.js";
6
+ const TEXT_DECODER = new TextDecoder();
7
+ const CRATE_SIGNATURE = 'PXR-USDC';
8
+ const ZIP_SIGNATURE = 0x04034b50;
9
+ /** Parses and optionally composes an OpenUSD stage. */
10
+ export async function parseUSD(data, options = {}, context) {
11
+ const url = getSourceLocation(options.core?.baseUrl, context?.url);
12
+ const environment = {
13
+ fetch: async (resourceUrl) => {
14
+ const response = await (context?.fetch || fetch)(resourceUrl);
15
+ if (!(response instanceof Response)) {
16
+ throw new Error(`OpenUSD reference "${resourceUrl}" did not return an HTTP response.`);
17
+ }
18
+ if (!response.ok) {
19
+ throw new Error(`Unable to load OpenUSD reference "${resourceUrl}": ${response.status}.`);
20
+ }
21
+ return response;
22
+ },
23
+ cache: new Map(),
24
+ archiveFiles: new Map(),
25
+ layers: new Set(),
26
+ options: {
27
+ ...options,
28
+ usd: { ...USD_LOADER_DEFAULT_OPTIONS, ...options.usd }
29
+ }
30
+ };
31
+ let stage;
32
+ if (isZIPArchive(data)) {
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.');
37
+ }
38
+ const archiveBase = 'https://usd.archive/';
39
+ for (const [filename, content] of archive) {
40
+ environment.archiveFiles.set(new URL(filename, archiveBase).href, content);
41
+ }
42
+ const rootUrl = new URL(rootFilename, archiveBase).href;
43
+ stage = parseUSDLayer(archive.get(rootFilename), rootUrl);
44
+ stage.format = 'usdz';
45
+ }
46
+ else {
47
+ stage = parseUSDLayer(data, url);
48
+ }
49
+ if (stage.url) {
50
+ environment.layers.add(stage.url);
51
+ }
52
+ if (environment.options.usd?.compose !== false) {
53
+ stage.rootPrims = await composePrims(stage.rootPrims, stage.url, {}, environment, 0);
54
+ }
55
+ stage.layers = Array.from(environment.layers);
56
+ if (url) {
57
+ stage.url = url;
58
+ }
59
+ return stage;
60
+ }
61
+ /** Selects a source location suitable for resolving referenced layers. */
62
+ function getSourceLocation(configuredLocation, contextLocation) {
63
+ const configuredUrl = getAbsoluteUrl(configuredLocation);
64
+ if (configuredUrl) {
65
+ return configuredUrl;
66
+ }
67
+ const contextUrl = getAbsoluteUrl(contextLocation);
68
+ return contextUrl || configuredLocation || contextLocation;
69
+ }
70
+ /** Returns an absolute URL when the candidate contains one. */
71
+ function getAbsoluteUrl(candidate) {
72
+ try {
73
+ return candidate ? new URL(candidate).href : undefined;
74
+ }
75
+ catch {
76
+ return undefined;
77
+ }
78
+ }
79
+ /** Resolves an asset path against either a URL or a filesystem path. */
80
+ function resolveAssetPath(assetPath, sourceLocation) {
81
+ try {
82
+ return new URL(assetPath, sourceLocation).href;
83
+ }
84
+ catch {
85
+ const slashIndex = Math.max(sourceLocation.lastIndexOf('/'), sourceLocation.lastIndexOf('\\'));
86
+ return slashIndex >= 0 ? `${sourceLocation.slice(0, slashIndex + 1)}${assetPath}` : assetPath;
87
+ }
88
+ }
89
+ const USD_LOADER_DEFAULT_OPTIONS = {
90
+ compose: true,
91
+ loadReferences: true,
92
+ maxReferenceDepth: 12,
93
+ variantSelections: {}
94
+ };
95
+ /** Parses one ASCII or binary OpenUSD layer. */
96
+ function parseUSDLayer(data, url) {
97
+ const signature = TEXT_DECODER.decode(data.slice(0, 8));
98
+ if (signature === CRATE_SIGNATURE) {
99
+ throw new Error('Binary USDC crate layers are not implemented yet; use ASCII USDA layers.');
100
+ }
101
+ return parseUSDA(TEXT_DECODER.decode(data), url);
102
+ }
103
+ /** Recursively applies variants, references, overrides, and class filtering. */
104
+ async function composePrims(prims, sourceUrl, inheritedVariants, environment, depth) {
105
+ if (depth > (environment.options.usd?.maxReferenceDepth ?? 12)) {
106
+ throw new Error('OpenUSD reference composition exceeded the configured depth limit.');
107
+ }
108
+ const composedPrims = [];
109
+ for (const sourcePrim of prims) {
110
+ if (sourcePrim.specifier === 'class') {
111
+ continue;
112
+ }
113
+ const localSelections = getVariantSelections(sourcePrim.metadata['variants']);
114
+ const selections = {
115
+ ...localSelections,
116
+ ...inheritedVariants,
117
+ ...environment.options.usd?.variantSelections
118
+ };
119
+ const primSourceUrl = sourcePrim.sourceUrl || sourceUrl;
120
+ let composedPrim = clonePrim(sourcePrim);
121
+ for (const [variantSetName, variantSet] of Object.entries(composedPrim.variants)) {
122
+ const selection = selections[variantSetName] || Object.keys(variantSet)[0];
123
+ const variant = variantSet[selection];
124
+ if (variant) {
125
+ composedPrim = mergePrim(composedPrim, {
126
+ ...composedPrim,
127
+ attributes: variant.attributes,
128
+ metadata: variant.metadata,
129
+ children: variant.children,
130
+ variants: {}
131
+ });
132
+ }
133
+ }
134
+ const references = getPrimReferences(composedPrim);
135
+ if (environment.options.usd?.loadReferences !== false && references.length > 0) {
136
+ for (const reference of references) {
137
+ if (!primSourceUrl) {
138
+ throw new Error('OpenUSD references require a source URL or options.core.baseUrl.');
139
+ }
140
+ const referencedUrl = resolveAssetPath(reference.assetPath, primSourceUrl);
141
+ const stage = await loadReferencedStage(referencedUrl, environment);
142
+ const referencedPrims = selectReferencedPrims(stage, reference.primPath);
143
+ const resolvedPrims = await composePrims(referencedPrims, referencedUrl, selections, environment, depth + 1);
144
+ for (const referencedPrim of resolvedPrims) {
145
+ composedPrim = mergePrim(rebasePrim(referencedPrim, composedPrim.path), composedPrim);
146
+ }
147
+ }
148
+ }
149
+ composedPrim.children = await composePrims(composedPrim.children, primSourceUrl, selections, environment, depth);
150
+ composedPrims.push(composedPrim);
151
+ }
152
+ return composedPrims;
153
+ }
154
+ /** Loads and parses one referenced layer, with per-parse caching. */
155
+ async function loadReferencedStage(url, environment) {
156
+ let pendingStage = environment.cache.get(url);
157
+ if (!pendingStage) {
158
+ pendingStage = (async () => {
159
+ const archiveContent = environment.archiveFiles.get(url);
160
+ let content = archiveContent;
161
+ if (!content) {
162
+ let response;
163
+ try {
164
+ response = await environment.fetch(url);
165
+ }
166
+ catch (error) {
167
+ throw new Error(`Unable to fetch USD layer "${url}": ${String(error)}`);
168
+ }
169
+ content = response.arrayBuffer();
170
+ }
171
+ const stage = parseUSDLayer(await content, url);
172
+ environment.layers.add(url);
173
+ return stage;
174
+ })();
175
+ environment.cache.set(url, pendingStage);
176
+ }
177
+ return pendingStage;
178
+ }
179
+ /** Selects the referenced prim or default prim from a stage. */
180
+ function selectReferencedPrims(stage, primPath) {
181
+ const targetPath = primPath || stage.metadata['defaultPrim'];
182
+ if (typeof targetPath !== 'string') {
183
+ return stage.rootPrims;
184
+ }
185
+ const normalizedPath = targetPath.startsWith('/') ? targetPath : `/${targetPath}`;
186
+ const target = findPrim(stage.rootPrims, normalizedPath);
187
+ return target ? [target] : [];
188
+ }
189
+ /** Finds a prim recursively by absolute path. */
190
+ function findPrim(prims, path) {
191
+ for (const prim of prims) {
192
+ if (prim.path === path) {
193
+ return prim;
194
+ }
195
+ const child = findPrim(prim.children, path);
196
+ if (child) {
197
+ return child;
198
+ }
199
+ }
200
+ return undefined;
201
+ }
202
+ /** Collects reference and payload asset paths from a prim. */
203
+ function getPrimReferences(prim) {
204
+ const references = [];
205
+ for (const value of [
206
+ prim.metadata['references'],
207
+ prim.metadata['payload'],
208
+ prim.metadata['payloads']
209
+ ]) {
210
+ if (Array.isArray(value)) {
211
+ references.push(...value.filter(isAssetPath));
212
+ }
213
+ else if (isAssetPath(value)) {
214
+ references.push(value);
215
+ }
216
+ }
217
+ return references;
218
+ }
219
+ /** Converts authored variant metadata into a selection map. */
220
+ function getVariantSelections(value) {
221
+ if (!value || typeof value !== 'object' || Array.isArray(value) || isAssetPath(value)) {
222
+ return {};
223
+ }
224
+ return Object.fromEntries(Object.entries(value).filter((entry) => typeof entry[1] === 'string'));
225
+ }
226
+ /** Returns whether a parsed value is an external asset path. */
227
+ function isAssetPath(value) {
228
+ return Boolean(value && typeof value === 'object' && !Array.isArray(value) && 'assetPath' in value);
229
+ }
230
+ /** Deep-clones a prim hierarchy while preserving scalar values. */
231
+ function clonePrim(prim) {
232
+ return {
233
+ ...prim,
234
+ attributes: { ...prim.attributes },
235
+ metadata: { ...prim.metadata },
236
+ variants: { ...prim.variants },
237
+ children: prim.children.map(clonePrim)
238
+ };
239
+ }
240
+ /** Rebases a prim hierarchy at a new composed path. */
241
+ function rebasePrim(prim, path) {
242
+ const rebased = clonePrim(prim);
243
+ rebased.path = path;
244
+ rebased.children = rebased.children.map(child => rebasePrim(child, `${path}/${child.name}`));
245
+ return rebased;
246
+ }
247
+ /** Merges a stronger local prim opinion over a referenced prim. */
248
+ function mergePrim(reference, override) {
249
+ const children = reference.children.map(clonePrim);
250
+ for (const overridingChild of override.children) {
251
+ const matchingIndex = children.findIndex(child => child.name === overridingChild.name);
252
+ if (matchingIndex >= 0) {
253
+ children[matchingIndex] = mergePrim(children[matchingIndex], overridingChild);
254
+ }
255
+ else {
256
+ children.push(clonePrim(overridingChild));
257
+ }
258
+ }
259
+ return {
260
+ ...reference,
261
+ ...override,
262
+ sourceUrl: getPrimReferences(override).length > 0
263
+ ? override.sourceUrl
264
+ : reference.sourceUrl || override.sourceUrl,
265
+ type: override.type || reference.type,
266
+ attributes: { ...reference.attributes, ...override.attributes },
267
+ metadata: { ...reference.metadata, ...override.metadata },
268
+ variants: { ...reference.variants, ...override.variants },
269
+ children
270
+ };
271
+ }
272
+ /** Returns whether a buffer starts with a ZIP local-file signature. */
273
+ function isZIPArchive(arrayBuffer) {
274
+ return (arrayBuffer.byteLength >= 4 && new DataView(arrayBuffer).getUint32(0, true) === ZIP_SIGNATURE);
275
+ }
276
+ //# sourceMappingURL=parse-usd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-usd.js","sourceRoot":"","sources":["../../src/lib/parse-usd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { USDStage } from "./usd-types.js";
2
+ /** Parses an OpenUSD ASCII layer. */
3
+ export declare function parseUSDA(source: string, url?: string): USDStage;
4
+ //# sourceMappingURL=parse-usda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-usda.d.ts","sourceRoot":"","sources":["../../src/lib/parse-usda.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAIV,QAAQ,EAGT,uBAAoB;AAyBrB,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAMhE"}