three-usd-robot 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/version.ts","../src/parser/ast.ts","../src/parser/reader.ts","../src/parser/tokenize.ts","../src/parser/valueParser.ts","../src/parser/parseUsda.ts","../src/usd/names.ts","../src/usd/Attribute.ts","../src/usd/Layer.ts","../src/usd/Prim.ts","../src/usd/Stage.ts","../src/usd/AssetResolver.ts","../src/usd/composition.ts","../src/usd/usdz.ts","../src/usd/crate/lz4.ts","../src/usd/crate/integerCompression.ts","../src/usd/crate/valueTypes.ts","../src/usd/crate/CrateReader.ts","../src/usd/crate/toUsdaFile.ts","../src/kinematics/transforms.ts","../src/usd/xformOps.ts","../src/schemas/usdGeom.ts","../src/schemas/usdPhysics.ts","../src/robot/buildKinematicTree.ts","../src/robot/normalize.ts","../src/robot/RobotExtractor.ts"],"names":["SPECIFIERS","defaultPrim","asNumber","WORLD","leaf"],"mappings":"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","file":"chunk-XCP5GZPY.js","sourcesContent":["/** Package identity. Kept in one place so every entry point can re-export it. */\nexport const PACKAGE_NAME = \"three-usd-robot\";\n\n/** Library version. Replaced by the release tooling at publish time. */\nexport const VERSION = \"0.0.0\";\n","/**\n * AST and value types for the USDA (ASCII USD) format.\n *\n * The parser (`parseUsda`) produces a {@link UsdaFile}. The USD-conformant\n * runtime layer (`usd/Stage.ts` etc.) wraps this AST to expose a pxr-USD-style\n * API (`GetPrimAtPath`, `GetAttribute`, `Get`, `GetTargets`, ...).\n */\n\n// ---------------------------------------------------------------------------\n// Value types\n// ---------------------------------------------------------------------------\n\n/** Fixed-length numeric tuples, mirroring `GfVec2/3/4`. */\nexport type Vec2 = [number, number];\nexport type Vec3 = [number, number, number];\nexport type Vec4 = [number, number, number, number];\n\n/**\n * A quaternion, mirroring `GfQuatf/d/h`.\n *\n * USDA authors quats as `(w, x, y, z)` — real part first. We keep the real and\n * imaginary parts explicit so downstream code never has to guess the component\n * order (Three.js, by contrast, uses `(x, y, z, w)`).\n */\nexport class Quat {\n constructor(\n readonly real: number,\n readonly imaginary: Vec3,\n ) {}\n\n /** Components in Three.js order `[x, y, z, w]`. */\n toXYZW(): Vec4 {\n return [this.imaginary[0], this.imaginary[1], this.imaginary[2], this.real];\n }\n\n static identity(): Quat {\n return new Quat(1, [0, 0, 0]);\n }\n}\n\n/**\n * A square matrix (`GfMatrix3d`/`GfMatrix4d`), stored flat in **row-major**\n * order exactly as authored in USD (USD matrices are row-major).\n */\nexport class UsdMatrix {\n constructor(\n readonly values: number[],\n readonly dim: 3 | 4,\n ) {}\n\n static identity4(): UsdMatrix {\n // biome-ignore format: keep matrix layout readable\n return new UsdMatrix([\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ], 4);\n }\n}\n\n/** An asset reference (`SdfAssetPath`), e.g. `@./meshes/link0.usd@`. */\nexport class AssetPath {\n constructor(readonly path: string) {}\n}\n\n/**\n * A namespace path into a stage (`SdfPath`), e.g. `/World/robot/link0` or a\n * property path `/World/robot.xformOp:translate`. Stored as the authored\n * string; relationship/connection resolution happens in the runtime layer.\n */\nexport type SdfPath = string;\n\n/** A reference / payload composition arc as authored (resolved in M8). */\nexport type CompositionArc = {\n assetPath?: AssetPath;\n primPath?: SdfPath;\n};\n\n/** Any value an attribute or metadatum can hold. */\nexport type UsdValue =\n | number\n | boolean\n | string\n | null\n | Vec2\n | Vec3\n | Vec4\n | Quat\n | UsdMatrix\n | AssetPath\n | SdfPath\n | CompositionArc\n | UsdValue[]\n | UsdDictionary;\n\n/** A nested metadata dictionary (`customData`, `assetInfo`, ...). */\nexport type UsdDictionary = { [key: string]: UsdValue };\n\n// ---------------------------------------------------------------------------\n// AST nodes\n// ---------------------------------------------------------------------------\n\nexport type Specifier = \"def\" | \"over\" | \"class\";\n\nexport type Variability = \"varying\" | \"uniform\";\n\n/** List-editing qualifier on relationships and list-op metadata. */\nexport type ListOp = \"explicit\" | \"prepend\" | \"append\" | \"add\" | \"delete\" | \"reorder\";\n\nexport type MetadataMap = { [key: string]: UsdValue };\n\n/** A parsed `.usda` layer. */\nexport type UsdaFile = {\n /** Version from the `#usda X.Y` magic line. */\n version: string;\n /** Layer-level metadata (`defaultPrim`, `upAxis`, `metersPerUnit`, ...). */\n metadata: MetadataMap;\n /** Root prims, in authored order. */\n prims: PrimSpec[];\n};\n\nexport type PrimSpec = {\n specifier: Specifier;\n /** Schema type, e.g. `Xform`, `Mesh`, `PhysicsRevoluteJoint`. Empty if typeless. */\n typeName: string;\n name: string;\n metadata: MetadataMap;\n properties: PropertySpec[];\n children: PrimSpec[];\n /** 1-based source line of the prim declaration (for diagnostics). */\n line: number;\n};\n\nexport type PropertySpec = AttributeSpec | RelationshipSpec;\n\nexport type AttributeSpec = {\n kind: \"attribute\";\n name: string;\n /** USD type name without the `[]` suffix, e.g. `float3`, `token`, `quatf`. */\n typeName: string;\n isArray: boolean;\n variability: Variability;\n custom: boolean;\n /** Default (time-independent) value, if authored. */\n value?: UsdValue;\n /** Time samples keyed by time code, if authored as `{ t: v, ... }`. */\n timeSamples?: Map<number, UsdValue>;\n /** Connection target paths (`attr.connect = <path>`), if authored. */\n connections?: SdfPath[];\n metadata: MetadataMap;\n line: number;\n};\n\nexport type RelationshipSpec = {\n kind: \"relationship\";\n name: string;\n custom: boolean;\n listOp: ListOp;\n /** Target paths; empty when authored as `None`. */\n targets: SdfPath[];\n metadata: MetadataMap;\n line: number;\n};\n","import type { Token, TokenType } from \"./tokenize.js\";\n\nexport class ParseError extends Error {\n constructor(\n message: string,\n readonly line: number,\n readonly col: number,\n ) {\n super(`USDA parse error (line ${line}:${col}): ${message}`);\n this.name = \"ParseError\";\n }\n}\n\n/** Cursor over a token stream with lookahead and typed consumption helpers. */\nexport class TokenReader {\n private pos = 0;\n\n constructor(private readonly tokens: Token[]) {}\n\n peek(ahead = 0): Token {\n return this.tokens[Math.min(this.pos + ahead, this.tokens.length - 1)]!;\n }\n\n next(): Token {\n const t = this.tokens[this.pos]!;\n if (this.pos < this.tokens.length - 1) this.pos++;\n return t;\n }\n\n atEnd(): boolean {\n return this.peek().type === \"eof\";\n }\n\n is(type: TokenType, ahead = 0): boolean {\n return this.peek(ahead).type === type;\n }\n\n /** True when the lookahead token is an identifier with the given text. */\n isIdent(value: string, ahead = 0): boolean {\n const t = this.peek(ahead);\n return t.type === \"ident\" && t.value === value;\n }\n\n expect(type: TokenType): Token {\n const t = this.peek();\n if (t.type !== type) {\n throw new ParseError(\n `expected ${type} but found ${t.type} ${JSON.stringify(t.value)}`,\n t.line,\n t.col,\n );\n }\n return this.next();\n }\n\n /** Consume an identifier token (any value) and return its text. */\n expectIdent(): string {\n return this.expect(\"ident\").value;\n }\n\n /** Consume the given token type if present; return whether it was consumed. */\n accept(type: TokenType): boolean {\n if (this.is(type)) {\n this.next();\n return true;\n }\n return false;\n }\n\n /** Consume an identifier with the exact text if present. */\n acceptIdent(value: string): boolean {\n if (this.isIdent(value)) {\n this.next();\n return true;\n }\n return false;\n }\n\n error(message: string): ParseError {\n const t = this.peek();\n return new ParseError(message, t.line, t.col);\n }\n}\n","/**\n * Tokenizer for the USDA (ASCII USD) format.\n *\n * Produces a flat token stream consumed by `parseUsda`. Comments (`#...`) are\n * stripped. Paths (`<...>`) and asset paths (`@...@` / `@@@...@@@`) are scanned\n * as whole tokens because their interior characters are otherwise significant.\n */\n\nexport type TokenType =\n | \"lbrace\" // {\n | \"rbrace\" // }\n | \"lparen\" // (\n | \"rparen\" // )\n | \"lbracket\" // [\n | \"rbracket\" // ]\n | \"equals\" // =\n | \"comma\" // ,\n | \"colon\" // : (only as a standalone separator, e.g. timeSamples key)\n | \"dot\" // . (e.g. attr.connect)\n | \"number\"\n | \"string\"\n | \"ident\"\n | \"path\" // <...>\n | \"asset\" // @...@\n | \"eof\";\n\nexport type Token = {\n type: TokenType;\n /** Raw lexeme / decoded value. For `number` this is the original text. */\n value: string;\n /** Decoded numeric value for `number` tokens. */\n num?: number;\n /** 1-based line number where the token starts. */\n line: number;\n col: number;\n};\n\nexport class TokenizeError extends Error {\n constructor(\n message: string,\n readonly line: number,\n readonly col: number,\n ) {\n super(`USDA tokenize error (line ${line}:${col}): ${message}`);\n this.name = \"TokenizeError\";\n }\n}\n\nconst IDENT_START = /[A-Za-z_]/;\nconst IDENT_CONT = /[A-Za-z0-9_:]/;\n// Matches a numeric literal incl. scientific notation; sign handled by caller.\nconst NUMBER_RE = /^[-+]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][-+]?\\d+)?/;\nconst INF_NAN_RE = /^[-+]?(?:inf|nan)\\b/i;\n\nexport function tokenize(src: string): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n let line = 1;\n let lineStart = 0;\n const n = src.length;\n\n const col = () => i - lineStart + 1;\n const push = (type: TokenType, value: string, startCol: number, num?: number) => {\n tokens.push(\n num === undefined\n ? { type, value, line, col: startCol }\n : { type, value, num, line, col: startCol },\n );\n };\n\n while (i < n) {\n const c = src[i]!;\n\n // Newlines\n if (c === \"\\n\") {\n i++;\n line++;\n lineStart = i;\n continue;\n }\n // Whitespace (incl. CR, tabs)\n if (c === \" \" || c === \"\\t\" || c === \"\\r\" || c === \"\\f\" || c === \"\\v\") {\n i++;\n continue;\n }\n // Line comment\n if (c === \"#\") {\n while (i < n && src[i] !== \"\\n\") i++;\n continue;\n }\n\n const startCol = col();\n\n // Single-char punctuation\n const punct = PUNCT[c];\n if (punct) {\n push(punct, c, startCol);\n i++;\n continue;\n }\n\n // Triple-quoted string \"\"\" ... \"\"\"\n if (c === '\"' && src[i + 1] === '\"' && src[i + 2] === '\"') {\n const { value, advanced } = readTripleString(src, i, line, startCol);\n push(\"string\", value, startCol);\n i = advanced;\n continue;\n }\n // Regular string\n if (c === '\"' || c === \"'\") {\n const { value, advanced } = readString(src, i, c, line, startCol);\n push(\"string\", value, startCol);\n i = advanced;\n continue;\n }\n\n // Asset path: @@@ ... @@@ (allows interior @) or @ ... @\n if (c === \"@\") {\n const triple = src[i + 1] === \"@\" && src[i + 2] === \"@\";\n const { value, advanced } = readAsset(src, i, triple, line, startCol);\n push(\"asset\", value, startCol);\n i = advanced;\n continue;\n }\n\n // Namespace path: < ... >\n if (c === \"<\") {\n const { value, advanced } = readPath(src, i, line, startCol);\n push(\"path\", value, startCol);\n i = advanced;\n continue;\n }\n\n // inf / nan / -inf etc. as numbers\n const infMatch = INF_NAN_RE.exec(src.slice(i));\n if (infMatch) {\n const text = infMatch[0];\n const lower = text.toLowerCase();\n const num = lower.includes(\"nan\")\n ? Number.NaN\n : lower.startsWith(\"-\")\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY;\n push(\"number\", text, startCol, num);\n i += text.length;\n continue;\n }\n\n // Numbers (also handles leading sign). A bare `-`/`+` not followed by a\n // digit/dot falls through to ident handling (there are no such USDA tokens,\n // so this becomes an error below).\n if (\n /[0-9]/.test(c) ||\n ((c === \"-\" || c === \"+\" || c === \".\") && /[0-9.]/.test(src[i + 1] ?? \"\"))\n ) {\n const m = NUMBER_RE.exec(src.slice(i));\n if (m) {\n const text = m[0];\n push(\"number\", text, startCol, Number(text));\n i += text.length;\n continue;\n }\n }\n\n // Dot (e.g. attr.connect) — only reached when not part of a number.\n if (c === \".\") {\n push(\"dot\", \".\", startCol);\n i++;\n continue;\n }\n\n // Identifiers / keywords (incl. namespaced names with ':')\n if (IDENT_START.test(c)) {\n const start = i;\n i++;\n while (i < n && IDENT_CONT.test(src[i]!)) i++;\n push(\"ident\", src.slice(start, i), startCol);\n continue;\n }\n\n throw new TokenizeError(`unexpected character ${JSON.stringify(c)}`, line, startCol);\n }\n\n tokens.push({ type: \"eof\", value: \"\", line, col: col() });\n return tokens;\n}\n\nconst PUNCT: Record<string, TokenType | undefined> = {\n \"{\": \"lbrace\",\n \"}\": \"rbrace\",\n \"(\": \"lparen\",\n \")\": \"rparen\",\n \"[\": \"lbracket\",\n \"]\": \"rbracket\",\n \"=\": \"equals\",\n \",\": \"comma\",\n \":\": \"colon\",\n};\n\nfunction readString(\n src: string,\n start: number,\n quote: string,\n line: number,\n startCol: number,\n): { value: string; advanced: number } {\n let i = start + 1;\n let out = \"\";\n while (i < src.length) {\n const ch = src[i]!;\n if (ch === \"\\\\\") {\n const next = src[i + 1];\n out += ESCAPES[next ?? \"\"] ?? next ?? \"\";\n i += 2;\n continue;\n }\n if (ch === quote) {\n return { value: out, advanced: i + 1 };\n }\n if (ch === \"\\n\") break;\n out += ch;\n i++;\n }\n throw new TokenizeError(\"unterminated string literal\", line, startCol);\n}\n\nfunction readTripleString(\n src: string,\n start: number,\n line: number,\n startCol: number,\n): { value: string; advanced: number } {\n let i = start + 3;\n let out = \"\";\n while (i < src.length) {\n if (src[i] === '\"' && src[i + 1] === '\"' && src[i + 2] === '\"') {\n return { value: out, advanced: i + 3 };\n }\n out += src[i];\n i++;\n }\n throw new TokenizeError(\"unterminated triple-quoted string\", line, startCol);\n}\n\nfunction readAsset(\n src: string,\n start: number,\n triple: boolean,\n line: number,\n startCol: number,\n): { value: string; advanced: number } {\n const delimLen = triple ? 3 : 1;\n let i = start + delimLen;\n let out = \"\";\n while (i < src.length) {\n if (triple) {\n if (src[i] === \"@\" && src[i + 1] === \"@\" && src[i + 2] === \"@\") {\n return { value: out, advanced: i + 3 };\n }\n } else if (src[i] === \"@\") {\n return { value: out, advanced: i + 1 };\n }\n if (src[i] === \"\\n\") break;\n out += src[i];\n i++;\n }\n throw new TokenizeError(\"unterminated asset path\", line, startCol);\n}\n\nfunction readPath(\n src: string,\n start: number,\n line: number,\n startCol: number,\n): { value: string; advanced: number } {\n let i = start + 1;\n let out = \"\";\n while (i < src.length) {\n if (src[i] === \">\") {\n return { value: out, advanced: i + 1 };\n }\n if (src[i] === \"\\n\") break;\n out += src[i];\n i++;\n }\n throw new TokenizeError(\"unterminated path <...>\", line, startCol);\n}\n\nconst ESCAPES: Record<string, string> = {\n n: \"\\n\",\n t: \"\\t\",\n r: \"\\r\",\n '\"': '\"',\n \"'\": \"'\",\n \"\\\\\": \"\\\\\",\n};\n","/**\n * Parses USDA value literals from a token stream and coerces them into the\n * typed {@link UsdValue} model (tuples → `Vec*`, `(w,x,y,z)` → {@link Quat},\n * nested tuples → {@link UsdMatrix}, etc.).\n */\n\nimport {\n AssetPath,\n Quat,\n type SdfPath,\n UsdMatrix,\n type UsdValue,\n type Vec2,\n type Vec3,\n type Vec4,\n} from \"./ast.js\";\nimport type { TokenReader } from \"./reader.js\";\n\n/** Untyped literal as parsed from tokens, before type-name coercion. */\nexport type RawValue =\n | { t: \"scalar\"; v: number | boolean | string | null }\n | { t: \"asset\"; v: AssetPath }\n | { t: \"path\"; v: SdfPath }\n | { t: \"tuple\"; items: RawValue[] }\n | { t: \"array\"; items: RawValue[] };\n\n/** Parse one literal (scalar, tuple `( )`, array `[ ]`, asset, or path). */\nexport function parseLiteral(r: TokenReader): RawValue {\n const t = r.peek();\n switch (t.type) {\n case \"number\":\n r.next();\n return { t: \"scalar\", v: t.num ?? Number(t.value) };\n case \"string\":\n r.next();\n return { t: \"scalar\", v: t.value };\n case \"asset\":\n r.next();\n return { t: \"asset\", v: new AssetPath(t.value) };\n case \"path\":\n r.next();\n return { t: \"path\", v: t.value };\n case \"ident\": {\n r.next();\n if (t.value === \"true\") return { t: \"scalar\", v: true };\n if (t.value === \"false\") return { t: \"scalar\", v: false };\n if (t.value === \"None\" || t.value === \"none\") return { t: \"scalar\", v: null };\n // Bare identifier value (rare; e.g. a token authored unquoted).\n return { t: \"scalar\", v: t.value };\n }\n case \"lparen\":\n return parseGroup(r, \"lparen\", \"rparen\", \"tuple\");\n case \"lbracket\":\n return parseGroup(r, \"lbracket\", \"rbracket\", \"array\");\n default:\n throw r.error(`unexpected token ${t.type} ${JSON.stringify(t.value)} while parsing a value`);\n }\n}\n\nfunction parseGroup(\n r: TokenReader,\n open: \"lparen\" | \"lbracket\",\n close: \"rparen\" | \"rbracket\",\n kind: \"tuple\" | \"array\",\n): RawValue {\n r.expect(open);\n const items: RawValue[] = [];\n while (!r.is(close) && !r.atEnd()) {\n items.push(parseLiteral(r));\n if (!r.accept(\"comma\")) break;\n }\n r.expect(close);\n return { t: kind, items };\n}\n\n/** Parse a literal and coerce it to the declared USD type. */\nexport function parseTypedValue(r: TokenReader, typeName: string, isArray: boolean): UsdValue {\n return coerceValue(typeName, isArray, parseLiteral(r));\n}\n\n/** Coerce a raw literal into a {@link UsdValue} for the given declared type. */\nexport function coerceValue(typeName: string, isArray: boolean, raw: RawValue): UsdValue {\n if (raw.t === \"scalar\" && raw.v === null) return null; // `None`\n\n if (isArray) {\n if (raw.t !== \"array\") {\n throw new TypeError(`expected an array literal for ${typeName}[] but got ${raw.t}`);\n }\n return raw.items.map((item) => coerceScalar(typeName, item));\n }\n return coerceScalar(typeName, raw);\n}\n\nfunction coerceScalar(typeName: string, raw: RawValue): UsdValue {\n // Quaternions: (real, i, j, k)\n if (QUAT_TYPES.has(typeName)) {\n const nums = expectNumberTuple(raw, 4, typeName);\n return new Quat(nums[0]!, [nums[1]!, nums[2]!, nums[3]!]);\n }\n // Matrices: tuple of row tuples → flat row-major.\n if (typeName === \"matrix4d\" || typeName === \"matrix4f\" || typeName === \"frame4d\") {\n return flattenMatrix(raw, 4, typeName);\n }\n if (typeName === \"matrix3d\" || typeName === \"matrix3f\") {\n return flattenMatrix(raw, 3, typeName);\n }\n // Fixed-width numeric vectors.\n const dim = VEC_DIM[typeName];\n if (dim !== undefined) {\n const nums = expectNumberTuple(raw, dim, typeName);\n return nums as Vec2 | Vec3 | Vec4;\n }\n // Asset paths.\n if (typeName === \"asset\") {\n if (raw.t === \"asset\") return raw.v;\n if (raw.t === \"scalar\" && typeof raw.v === \"string\") return new AssetPath(raw.v);\n throw new TypeError(`expected an asset path for ${typeName}`);\n }\n // Path-valued (rare as attribute, used for connections/relationship targets).\n if (raw.t === \"path\") return raw.v;\n\n // Scalars: bool / ints / floats / string / token.\n if (raw.t !== \"scalar\") {\n // A tuple/array reached a scalar slot — surface the raw numbers so callers\n // can still inspect it rather than silently dropping data.\n if (raw.t === \"tuple\") return raw.items.map((it) => coerceScalar(typeName, it));\n throw new TypeError(`expected a scalar for ${typeName} but got ${raw.t}`);\n }\n const v = raw.v;\n if (typeName === \"bool\") {\n if (typeof v === \"boolean\") return v;\n if (v === 1 || v === 0) return v === 1;\n }\n return v;\n}\n\nfunction expectNumberTuple(raw: RawValue, dim: number, typeName: string): number[] {\n if (raw.t !== \"tuple\") {\n throw new TypeError(`expected a ${dim}-tuple for ${typeName} but got ${raw.t}`);\n }\n if (raw.items.length !== dim) {\n throw new TypeError(`expected ${dim} components for ${typeName} but got ${raw.items.length}`);\n }\n return raw.items.map((it) => {\n if (it.t !== \"scalar\" || typeof it.v !== \"number\") {\n throw new TypeError(`expected a number component for ${typeName}`);\n }\n return it.v;\n });\n}\n\nfunction flattenMatrix(raw: RawValue, dim: 3 | 4, typeName: string): UsdMatrix {\n if (raw.t !== \"tuple\" || raw.items.length !== dim) {\n throw new TypeError(`expected ${dim} rows for ${typeName}`);\n }\n const values: number[] = [];\n for (const row of raw.items) {\n values.push(...expectNumberTuple(row, dim, typeName));\n }\n return new UsdMatrix(values, dim);\n}\n\n/** Coerce a raw literal without a declared type (used for metadata values). */\nexport function rawToUsdValue(raw: RawValue): UsdValue {\n switch (raw.t) {\n case \"scalar\":\n return raw.v;\n case \"asset\":\n return raw.v;\n case \"path\":\n return raw.v;\n case \"tuple\":\n case \"array\":\n return raw.items.map(rawToUsdValue);\n }\n}\n\nconst QUAT_TYPES = new Set([\"quatf\", \"quatd\", \"quath\"]);\n\nconst VEC_DIM: Record<string, 2 | 3 | 4> = {\n float2: 2,\n double2: 2,\n half2: 2,\n int2: 2,\n texCoord2f: 2,\n texCoord2d: 2,\n texCoord2h: 2,\n float3: 3,\n double3: 3,\n half3: 3,\n int3: 3,\n point3f: 3,\n point3d: 3,\n point3h: 3,\n normal3f: 3,\n normal3d: 3,\n normal3h: 3,\n vector3f: 3,\n vector3d: 3,\n vector3h: 3,\n color3f: 3,\n color3d: 3,\n color3h: 3,\n texCoord3f: 3,\n float4: 4,\n double4: 4,\n half4: 4,\n int4: 4,\n color4f: 4,\n color4d: 4,\n color4h: 4,\n};\n","/**\n * Recursive-descent parser for the USDA (ASCII USD) format.\n *\n * Scope (M1): prims (`def`/`over`/`class`), nested prims, attributes\n * (`uniform`/`custom`/array/connections/time samples), relationships (with\n * list-op qualifiers), and layer/prim/property metadata blocks. References,\n * payloads and variant sets are tolerated as metadata but not resolved (M8/M10).\n */\n\nimport type {\n AttributeSpec,\n CompositionArc,\n ListOp,\n MetadataMap,\n PrimSpec,\n PropertySpec,\n RelationshipSpec,\n SdfPath,\n Specifier,\n UsdDictionary,\n UsdValue,\n UsdaFile,\n Variability,\n} from \"./ast.js\";\nimport { AssetPath } from \"./ast.js\";\nimport { TokenReader } from \"./reader.js\";\nimport { tokenize } from \"./tokenize.js\";\nimport { parseLiteral, parseTypedValue, rawToUsdValue } from \"./valueParser.js\";\n\nconst SPECIFIERS = new Set([\"def\", \"over\", \"class\"]);\nconst LIST_OPS = new Set<ListOp>([\"prepend\", \"append\", \"add\", \"delete\", \"reorder\"]);\nconst MAGIC_RE = /^\\s*#usda\\s+(\\S+)/;\n\nexport function parseUsda(text: string): UsdaFile {\n const magic = MAGIC_RE.exec(text);\n const version = magic?.[1] ?? \"1.0\";\n\n const r = new TokenReader(tokenize(text));\n\n // Optional layer metadata block immediately after the magic line.\n const metadata = r.is(\"lparen\") ? parseMetadataBlock(r) : {};\n\n const prims: PrimSpec[] = [];\n while (!r.atEnd()) {\n prims.push(parsePrim(r));\n }\n return { version, metadata, prims };\n}\n\n// ---------------------------------------------------------------------------\n// Prims\n// ---------------------------------------------------------------------------\n\nfunction parsePrim(r: TokenReader): PrimSpec {\n const head = r.peek();\n const specifier = r.expectIdent();\n if (!SPECIFIERS.has(specifier)) {\n throw r.error(\n `expected a prim specifier (def/over/class) but found ${JSON.stringify(specifier)}`,\n );\n }\n\n // Optional schema type name, then the (quoted) prim name.\n let typeName = \"\";\n if (r.is(\"ident\")) typeName = r.expectIdent();\n const name = r.expect(\"string\").value;\n\n const metadata = r.is(\"lparen\") ? parseMetadataBlock(r) : {};\n\n const properties: PropertySpec[] = [];\n const children: PrimSpec[] = [];\n r.expect(\"lbrace\");\n while (!r.is(\"rbrace\") && !r.atEnd()) {\n if (r.is(\"ident\") && SPECIFIERS.has(r.peek().value)) {\n children.push(parsePrim(r));\n } else {\n properties.push(parseProperty(r));\n }\n }\n r.expect(\"rbrace\");\n\n return {\n specifier: specifier as Specifier,\n typeName,\n name,\n metadata,\n properties,\n children,\n line: head.line,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Properties (attributes & relationships)\n// ---------------------------------------------------------------------------\n\nfunction parseProperty(r: TokenReader): PropertySpec {\n const line = r.peek().line;\n let custom = false;\n let variability: Variability = \"varying\";\n let listOp: ListOp = \"explicit\";\n\n // Leading qualifiers, in any order.\n for (;;) {\n if (r.acceptIdent(\"custom\")) {\n custom = true;\n } else if (r.acceptIdent(\"uniform\")) {\n variability = \"uniform\";\n } else if (r.acceptIdent(\"varying\")) {\n variability = \"varying\";\n } else if (r.is(\"ident\") && LIST_OPS.has(r.peek().value as ListOp)) {\n listOp = r.expectIdent() as ListOp;\n } else {\n break;\n }\n }\n\n if (r.isIdent(\"rel\")) {\n r.next();\n return parseRelationship(r, custom, listOp, line);\n }\n return parseAttribute(r, custom, variability, line);\n}\n\nfunction parseAttribute(\n r: TokenReader,\n custom: boolean,\n variability: Variability,\n line: number,\n): AttributeSpec {\n const typeName = r.expectIdent();\n let isArray = false;\n if (r.accept(\"lbracket\")) {\n r.expect(\"rbracket\");\n isArray = true;\n }\n const name = r.expectIdent();\n\n const attr: AttributeSpec = {\n kind: \"attribute\",\n name,\n typeName,\n isArray,\n variability,\n custom,\n metadata: {},\n line,\n };\n\n // `.connect` / `.timeSamples` suffix, or a default value.\n if (r.accept(\"dot\")) {\n const suffix = r.expectIdent();\n r.expect(\"equals\");\n if (suffix === \"connect\") {\n attr.connections = parseTargetList(r);\n } else if (suffix === \"timeSamples\") {\n attr.timeSamples = parseTimeSamples(r, typeName, isArray);\n } else {\n throw r.error(`unsupported attribute qualifier .${suffix}`);\n }\n } else if (r.accept(\"equals\")) {\n if (r.is(\"lbrace\")) {\n attr.timeSamples = parseTimeSamples(r, typeName, isArray);\n } else {\n attr.value = parseTypedValue(r, typeName, isArray);\n }\n }\n\n if (r.is(\"lparen\")) attr.metadata = parseMetadataBlock(r);\n return attr;\n}\n\nfunction parseRelationship(\n r: TokenReader,\n custom: boolean,\n listOp: ListOp,\n line: number,\n): RelationshipSpec {\n const name = r.expectIdent();\n let targets: SdfPath[] = [];\n if (r.accept(\"equals\")) {\n targets = parseTargetList(r);\n }\n const metadata = r.is(\"lparen\") ? parseMetadataBlock(r) : {};\n return { kind: \"relationship\", name, custom, listOp, targets, metadata, line };\n}\n\n/** Parse `None`, a single `<path>`, or a `[<path>, ...]` list of targets. */\nfunction parseTargetList(r: TokenReader): SdfPath[] {\n if (r.acceptIdent(\"None\") || r.acceptIdent(\"none\")) return [];\n if (r.is(\"path\")) return [r.next().value];\n if (r.accept(\"lbracket\")) {\n const targets: SdfPath[] = [];\n while (!r.is(\"rbracket\") && !r.atEnd()) {\n targets.push(r.expect(\"path\").value);\n if (!r.accept(\"comma\")) break;\n }\n r.expect(\"rbracket\");\n return targets;\n }\n throw r.error(\"expected a relationship/connection target path\");\n}\n\nfunction parseTimeSamples(\n r: TokenReader,\n typeName: string,\n isArray: boolean,\n): Map<number, UsdValue> {\n r.expect(\"lbrace\");\n const samples = new Map<number, UsdValue>();\n while (!r.is(\"rbrace\") && !r.atEnd()) {\n const time = r.expect(\"number\").num ?? Number(r.peek().value);\n r.expect(\"colon\");\n samples.set(time, parseTypedValue(r, typeName, isArray));\n if (!r.accept(\"comma\")) break;\n }\n r.expect(\"rbrace\");\n return samples;\n}\n\n// ---------------------------------------------------------------------------\n// Metadata\n// ---------------------------------------------------------------------------\n\nfunction parseMetadataBlock(r: TokenReader): MetadataMap {\n r.expect(\"lparen\");\n const meta: MetadataMap = {};\n while (!r.is(\"rparen\") && !r.atEnd()) {\n // A bare string is the prim/layer documentation.\n if (r.is(\"string\") && !r.is(\"equals\", 1)) {\n meta.doc = r.next().value;\n continue;\n }\n\n // Optional list-op qualifier before the key.\n if (r.is(\"ident\") && LIST_OPS.has(r.peek().value as ListOp)) r.next();\n\n const key = r.expectIdent();\n r.expect(\"equals\");\n meta[key] = parseMetadataValue(r);\n }\n r.expect(\"rparen\");\n return meta;\n}\n\nfunction parseMetadataValue(r: TokenReader): UsdValue {\n if (r.is(\"lbrace\")) return parseDictionary(r);\n if (r.is(\"lbracket\")) return parseMetadataList(r);\n\n const raw = parseLiteral(r);\n // Composition arc: `@asset@</PrimPath>` (single reference/payload form).\n if (raw.t === \"asset\" && r.is(\"path\")) {\n const arc: CompositionArc = { assetPath: raw.v, primPath: r.next().value };\n return arc;\n }\n if (raw.t === \"asset\") {\n return raw.v; // bare asset path\n }\n return rawToUsdValue(raw);\n}\n\n/**\n * Parse a bracketed metadata list. Elements may be composition arcs\n * (`@asset@` optionally followed by `</PrimPath>`), bare assets, or plain\n * scalars (e.g. `apiSchemas = [\"A\", \"B\"]`).\n */\nfunction parseMetadataList(r: TokenReader): UsdValue {\n r.expect(\"lbracket\");\n const items: UsdValue[] = [];\n while (!r.is(\"rbracket\") && !r.atEnd()) {\n if (r.is(\"asset\")) {\n const assetPath = new AssetPath(r.next().value);\n if (r.is(\"path\")) {\n const arc: CompositionArc = { assetPath, primPath: r.next().value };\n items.push(arc);\n } else {\n items.push(assetPath);\n }\n } else {\n items.push(rawToUsdValue(parseLiteral(r)));\n }\n if (!r.accept(\"comma\")) break;\n }\n r.expect(\"rbracket\");\n return items;\n}\n\nfunction parseDictionary(r: TokenReader): UsdDictionary {\n r.expect(\"lbrace\");\n const dict: UsdDictionary = {};\n while (!r.is(\"rbrace\") && !r.atEnd()) {\n // Entry: `TYPE[opt][] KEY = VALUE`. Skip the type token and optional `[]`.\n r.expectIdent();\n if (r.accept(\"lbracket\")) r.expect(\"rbracket\");\n const key = r.is(\"string\") ? r.next().value : r.expectIdent();\n r.expect(\"equals\");\n dict[key] = parseMetadataValue(r);\n }\n r.expect(\"rbrace\");\n return dict;\n}\n","/** Split a (possibly namespaced) property name into namespace and base name. */\nexport function splitName(name: string): { namespace: string; baseName: string } {\n const idx = name.lastIndexOf(\":\");\n if (idx === -1) return { namespace: \"\", baseName: name };\n return { namespace: name.slice(0, idx), baseName: name.slice(idx + 1) };\n}\n","import type {\n AttributeSpec,\n RelationshipSpec,\n SdfPath,\n UsdValue,\n Variability,\n} from \"../parser/ast.js\";\nimport type { Prim } from \"./Prim.js\";\nimport { splitName } from \"./names.js\";\n\n/**\n * A typed attribute on a prim (`UsdAttribute`-like).\n *\n * Mirrors the pxr USD API: `GetAttribute` always returns an `Attribute` object;\n * call {@link Attribute.IsValid} to check whether the attribute is actually\n * authored on the prim.\n */\nexport class Attribute {\n constructor(\n private readonly _prim: Prim,\n private readonly _name: string,\n private readonly _spec: AttributeSpec | null,\n ) {}\n\n IsValid(): boolean {\n return this._spec !== null;\n }\n\n GetPrim(): Prim {\n return this._prim;\n }\n\n GetName(): string {\n return this._name;\n }\n\n GetBaseName(): string {\n return splitName(this._name).baseName;\n }\n\n GetNamespace(): string {\n return splitName(this._name).namespace;\n }\n\n /** Scalar type name (without the `[]` suffix); pair with {@link IsArray}. */\n GetTypeName(): string {\n return this._spec?.typeName ?? \"\";\n }\n\n IsArray(): boolean {\n return this._spec?.isArray ?? false;\n }\n\n GetVariability(): Variability {\n return this._spec?.variability ?? \"varying\";\n }\n\n IsCustom(): boolean {\n return this._spec?.custom ?? false;\n }\n\n /** True if a default value or any time sample is authored. */\n HasValue(): boolean {\n return this.HasAuthoredValue();\n }\n\n HasAuthoredValue(): boolean {\n if (!this._spec) return false;\n return this._spec.value !== undefined || (this._spec.timeSamples?.size ?? 0) > 0;\n }\n\n /**\n * Resolve the attribute value. With no `time`, returns the default value (or\n * the earliest time sample if only samples are authored). With a `time`,\n * returns the exact sample if present, else the default, else the earliest\n * sample. Returns `undefined` when nothing is authored.\n */\n Get(time?: number): UsdValue | undefined {\n const spec = this._spec;\n if (!spec) return undefined;\n if (time !== undefined && spec.timeSamples?.has(time)) {\n return spec.timeSamples.get(time);\n }\n if (spec.value !== undefined) return spec.value;\n if (spec.timeSamples && spec.timeSamples.size > 0) {\n const firstKey = [...spec.timeSamples.keys()].sort((a, b) => a - b)[0]!;\n return spec.timeSamples.get(firstKey);\n }\n return undefined;\n }\n\n GetTimeSamples(): Map<number, UsdValue> {\n return this._spec?.timeSamples ?? new Map();\n }\n\n GetConnections(): SdfPath[] {\n return this._spec?.connections ?? [];\n }\n}\n\n/** A relationship on a prim (`UsdRelationship`-like). */\nexport class Relationship {\n constructor(\n private readonly _prim: Prim,\n private readonly _name: string,\n private readonly _spec: RelationshipSpec | null,\n ) {}\n\n IsValid(): boolean {\n return this._spec !== null;\n }\n\n GetPrim(): Prim {\n return this._prim;\n }\n\n GetName(): string {\n return this._name;\n }\n\n GetBaseName(): string {\n return splitName(this._name).baseName;\n }\n\n GetNamespace(): string {\n return splitName(this._name).namespace;\n }\n\n IsCustom(): boolean {\n return this._spec?.custom ?? false;\n }\n\n GetTargets(): SdfPath[] {\n return this._spec?.targets ?? [];\n }\n}\n","import type { MetadataMap, PrimSpec, UsdValue, UsdaFile } from \"../parser/ast.js\";\n\n/** A parsed USDA layer (`SdfLayer`-like, read-only). */\nexport class Layer {\n constructor(private readonly _file: UsdaFile) {}\n\n GetVersion(): string {\n return this._file.version;\n }\n\n GetPseudoRootMetadata(): MetadataMap {\n return this._file.metadata;\n }\n\n GetMetadata(key: string): UsdValue | undefined {\n return this._file.metadata[key];\n }\n\n GetDefaultPrimName(): string | undefined {\n const v = this._file.metadata.defaultPrim;\n return typeof v === \"string\" ? v : undefined;\n }\n\n GetRootPrimSpecs(): PrimSpec[] {\n return this._file.prims;\n }\n}\n","import type {\n AttributeSpec,\n MetadataMap,\n PrimSpec,\n RelationshipSpec,\n Specifier,\n UsdValue,\n} from \"../parser/ast.js\";\nimport { Attribute, Relationship } from \"./Attribute.js\";\nimport type { Stage } from \"./Stage.js\";\n\n/**\n * A composed prim on a {@link Stage} (`UsdPrim`-like).\n *\n * The pseudo-root (path `/`) is represented by a Prim with a `null` spec; its\n * children are the stage's root prims.\n */\nexport class Prim {\n private readonly _children: Prim[] = [];\n private _attributes?: Map<string, AttributeSpec>;\n private _relationships?: Map<string, RelationshipSpec>;\n\n constructor(\n private readonly _stage: Stage,\n private readonly _spec: PrimSpec | null,\n private readonly _path: string,\n private readonly _parent: Prim | null,\n ) {}\n\n /** @internal Used by {@link Stage} while building the prim tree. */\n _addChild(child: Prim): void {\n this._children.push(child);\n }\n\n GetStage(): Stage {\n return this._stage;\n }\n\n IsValid(): boolean {\n return true;\n }\n\n IsPseudoRoot(): boolean {\n return this._spec === null;\n }\n\n GetName(): string {\n return this._spec?.name ?? \"\";\n }\n\n GetPath(): string {\n return this._path;\n }\n\n GetTypeName(): string {\n return this._spec?.typeName ?? \"\";\n }\n\n GetSpecifier(): Specifier | null {\n return this._spec?.specifier ?? null;\n }\n\n GetParent(): Prim | null {\n return this._parent;\n }\n\n GetChildren(): Prim[] {\n return this._children;\n }\n\n GetChild(name: string): Prim | null {\n return this._children.find((c) => c.GetName() === name) ?? null;\n }\n\n // -- Attributes ----------------------------------------------------------\n\n private attrMap(): Map<string, AttributeSpec> {\n if (!this._attributes) {\n this._attributes = new Map();\n for (const p of this._spec?.properties ?? []) {\n if (p.kind === \"attribute\") this._attributes.set(p.name, p);\n }\n }\n return this._attributes;\n }\n\n /** Always returns an Attribute; check {@link Attribute.IsValid}. */\n GetAttribute(name: string): Attribute {\n return new Attribute(this, name, this.attrMap().get(name) ?? null);\n }\n\n HasAttribute(name: string): boolean {\n return this.attrMap().has(name);\n }\n\n GetAttributes(): Attribute[] {\n return [...this.attrMap().values()].map((spec) => new Attribute(this, spec.name, spec));\n }\n\n // -- Relationships -------------------------------------------------------\n\n private relMap(): Map<string, RelationshipSpec> {\n if (!this._relationships) {\n this._relationships = new Map();\n for (const p of this._spec?.properties ?? []) {\n if (p.kind === \"relationship\") this._relationships.set(p.name, p);\n }\n }\n return this._relationships;\n }\n\n /** Always returns a Relationship; check {@link Relationship.IsValid}. */\n GetRelationship(name: string): Relationship {\n return new Relationship(this, name, this.relMap().get(name) ?? null);\n }\n\n HasRelationship(name: string): boolean {\n return this.relMap().has(name);\n }\n\n GetRelationships(): Relationship[] {\n return [...this.relMap().values()].map((spec) => new Relationship(this, spec.name, spec));\n }\n\n // -- Metadata / schemas --------------------------------------------------\n\n GetMetadata(key: string): UsdValue | undefined {\n return this._spec?.metadata[key];\n }\n\n GetAllMetadata(): MetadataMap {\n return this._spec?.metadata ?? {};\n }\n\n /** Applied API schema names from `apiSchemas` (e.g. `PhysicsArticulationRootAPI`). */\n GetAppliedSchemas(): string[] {\n const raw = this._spec?.metadata.apiSchemas;\n if (!Array.isArray(raw)) return [];\n const out: string[] = [];\n for (const v of raw) {\n if (typeof v === \"string\") out.push(v);\n }\n return out;\n }\n\n /**\n * Whether the given API schema is applied. Matches the bare schema name as\n * well as multi-apply instances (e.g. `HasAPI(\"PhysicsDriveAPI\")` is true for\n * an applied `PhysicsDriveAPI:angular`).\n */\n HasAPI(schemaName: string): boolean {\n return this.GetAppliedSchemas().some((s) => s === schemaName || s.startsWith(`${schemaName}:`));\n }\n}\n","import type { PrimSpec, UsdValue, UsdaFile } from \"../parser/ast.js\";\nimport { parseUsda } from \"../parser/parseUsda.js\";\nimport { Layer } from \"./Layer.js\";\nimport { Prim } from \"./Prim.js\";\n\n/** OpenUSD's fallback stage linear unit when `metersPerUnit` is unauthored. */\nexport const DEFAULT_METERS_PER_UNIT = 0.01;\n\nexport type UpAxis = \"Y\" | \"Z\";\n\n/**\n * A composed USD stage (`UsdStage`-like) backed by a single in-memory USDA\n * layer. Multi-layer composition (sublayers / references / payloads) arrives in\n * M8; for now a stage wraps exactly one parsed layer.\n */\nexport class Stage {\n private readonly _layer: Layer;\n private readonly _byPath = new Map<string, Prim>();\n private readonly _pseudoRoot: Prim;\n\n private constructor(file: UsdaFile) {\n this._layer = new Layer(file);\n this._pseudoRoot = new Prim(this, null, \"/\", null);\n this._byPath.set(\"/\", this._pseudoRoot);\n for (const spec of file.prims) this.buildPrim(spec, this._pseudoRoot);\n }\n\n /** Parse and open a stage from USDA source text. */\n static OpenFromString(usda: string): Stage {\n return new Stage(parseUsda(usda));\n }\n\n /** Open a stage from an already-parsed layer. */\n static OpenFromFile(file: UsdaFile): Stage {\n return new Stage(file);\n }\n\n private buildPrim(spec: PrimSpec, parent: Prim): void {\n const path = parent.IsPseudoRoot() ? `/${spec.name}` : `${parent.GetPath()}/${spec.name}`;\n const prim = new Prim(this, spec, path, parent);\n this._byPath.set(path, prim);\n parent._addChild(prim);\n for (const child of spec.children) this.buildPrim(child, prim);\n }\n\n GetRootLayer(): Layer {\n return this._layer;\n }\n\n GetPseudoRoot(): Prim {\n return this._pseudoRoot;\n }\n\n /** Returns the prim at the absolute path, or `null` if none exists. */\n GetPrimAtPath(path: string): Prim | null {\n return this._byPath.get(path) ?? null;\n }\n\n /** The stage's default prim (from layer `defaultPrim` metadata), if any. */\n GetDefaultPrim(): Prim | null {\n const name = this._layer.GetDefaultPrimName();\n return name ? this.GetPrimAtPath(`/${name}`) : null;\n }\n\n /** Depth-first traversal of all prims (excludes the pseudo-root). */\n Traverse(): Prim[] {\n const out: Prim[] = [];\n const visit = (prim: Prim) => {\n for (const child of prim.GetChildren()) {\n out.push(child);\n visit(child);\n }\n };\n visit(this._pseudoRoot);\n return out;\n }\n\n GetMetadata(key: string): UsdValue | undefined {\n return this._layer.GetMetadata(key);\n }\n\n /** Stage up axis (`upAxis` metadata); defaults to `\"Y\"` per OpenUSD. */\n GetUpAxis(): UpAxis {\n return this._layer.GetMetadata(\"upAxis\") === \"Z\" ? \"Z\" : \"Y\";\n }\n\n /** Stage linear unit (`metersPerUnit` metadata); defaults to {@link DEFAULT_METERS_PER_UNIT}. */\n GetMetersPerUnit(): number {\n const v = this._layer.GetMetadata(\"metersPerUnit\");\n return typeof v === \"number\" ? v : DEFAULT_METERS_PER_UNIT;\n }\n}\n","/**\n * Resolves USD asset paths (from references / payloads / sublayers) to URLs and\n * fetches their text. Composition (`composition.ts`) is I/O-agnostic and goes\n * through an {@link AssetResolver}, so the same engine works in the browser, in\n * Node, or against an in-memory file map in tests.\n */\n\nexport interface AssetResolver {\n /** Resolve an authored asset path against the layer's base URL to an absolute key. */\n resolve(assetPath: string, baseUrl: string): string;\n /** Fetch the text of a resolved asset; rejects if it cannot be read. */\n fetchText(url: string): Promise<string>;\n /** Fetch the raw bytes of a resolved asset (for binary USDC / USDZ). Optional. */\n fetchBytes?(url: string): Promise<Uint8Array>;\n}\n\n/** URL-based resolver using the global `fetch` (browser / Node 18+). */\nexport class DefaultAssetResolver implements AssetResolver {\n resolve(assetPath: string, baseUrl: string): string {\n try {\n return new URL(assetPath, baseUrl || undefined).href;\n } catch {\n return joinPosix(baseUrl, assetPath);\n }\n }\n\n async fetchText(url: string): Promise<string> {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n return res.text();\n }\n\n async fetchBytes(url: string): Promise<Uint8Array> {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n return new Uint8Array(await res.arrayBuffer());\n }\n}\n\n/** Resolver over an in-memory `{ path: contents }` map, with posix-style joins. */\nexport function createMemoryResolver(files: Record<string, string>): AssetResolver {\n return {\n resolve(assetPath, baseUrl) {\n return joinPosix(baseUrl, assetPath);\n },\n fetchText(url) {\n const text = files[url];\n if (text === undefined) return Promise.reject(new Error(`asset not found: ${url}`));\n return Promise.resolve(text);\n },\n };\n}\n\n/** Resolve `rel` against `baseUrl` using posix semantics, normalizing `.`/`..`. */\nexport function joinPosix(baseUrl: string, rel: string): string {\n if (rel.startsWith(\"/\")) return normalizePosix(rel);\n const dir = baseUrl.slice(0, baseUrl.lastIndexOf(\"/\") + 1);\n return normalizePosix(dir + rel);\n}\n\nfunction normalizePosix(path: string): string {\n const isAbsolute = path.startsWith(\"/\");\n const out: string[] = [];\n for (const part of path.split(\"/\")) {\n if (part === \"\" || part === \".\") continue;\n if (part === \"..\") out.pop();\n else out.push(part);\n }\n return (isAbsolute ? \"/\" : \"\") + out.join(\"/\");\n}\n","/**\n * Minimal USD composition: flattens references, payloads and sublayers into a\n * single {@link UsdaFile} so the rest of the pipeline keeps working on one layer.\n *\n * Scope (M8): the arcs robots actually use. References and payloads pull a prim\n * subtree from another asset (weaker than local opinions); sublayers overlay a\n * weaker layer stack. Inherits / variants / specializes are out of scope (M10).\n * This is not a full LIVRPS implementation — it is a pragmatic flattener.\n */\n\nimport {\n AssetPath,\n type AttributeSpec,\n type CompositionArc,\n type MetadataMap,\n type PrimSpec,\n type PropertySpec,\n type UsdValue,\n type UsdaFile,\n} from \"../parser/ast.js\";\nimport { parseUsda } from \"../parser/parseUsda.js\";\nimport type { AssetResolver } from \"./AssetResolver.js\";\n\nexport type ComposeOptions = {\n onWarn?: (message: string) => void;\n /** Guard against pathological recursion (default 64). */\n maxDepth?: number;\n};\n\n/** Composition-arc metadata keys that pull external prim content. */\nconst ARC_KEYS = [\"references\", \"payload\", \"payloads\"] as const;\n\n/**\n * Parse and fully compose a layer: resolve its sublayers and every prim's\n * references/payloads (recursively), returning a flattened layer. Unresolvable\n * arcs are reported via `onWarn` and skipped.\n */\nexport async function composeLayer(\n text: string,\n baseUrl: string,\n resolver: AssetResolver,\n options: ComposeOptions = {},\n stack: ReadonlySet<string> = new Set(),\n): Promise<UsdaFile> {\n const warn = options.onWarn ?? (() => {});\n const file = parseUsda(text);\n\n // Sublayers (weaker than this layer). Listed strongest-first; fold weakest-up.\n let weak: PrimSpec[] = [];\n const subLayers = toArcs(file.metadata.subLayers);\n for (let i = subLayers.length - 1; i >= 0; i--) {\n const sub = await loadComposedFile(subLayers[i]!, baseUrl, resolver, options, stack, warn);\n if (sub) weak = mergePrimLists(weak, sub.prims);\n }\n\n // Resolve each root prim's arcs.\n const resolved: PrimSpec[] = [];\n for (const prim of file.prims) {\n resolved.push(await resolvePrimArcs(prim, baseUrl, resolver, options, stack, warn));\n }\n\n const prims = weak.length > 0 ? mergePrimLists(weak, resolved) : resolved;\n return { version: file.version, metadata: stripKeys(file.metadata, [\"subLayers\"]), prims };\n}\n\nasync function resolvePrimArcs(\n spec: PrimSpec,\n baseUrl: string,\n resolver: AssetResolver,\n options: ComposeOptions,\n stack: ReadonlySet<string>,\n warn: (m: string) => void,\n): Promise<PrimSpec> {\n // Resolve local children first (they belong to this layer's base URL).\n const children: PrimSpec[] = [];\n for (const child of spec.children) {\n children.push(await resolvePrimArcs(child, baseUrl, resolver, options, stack, warn));\n }\n const local: PrimSpec = { ...spec, children, metadata: stripKeys(spec.metadata, ARC_KEYS) };\n\n const arcs = ARC_KEYS.flatMap((k) => toArcs(spec.metadata[k]));\n if (arcs.length === 0) return local;\n\n // Compose referenced prims (strongest-first), all weaker than local opinions.\n let base: PrimSpec | null = null;\n for (const arc of arcs) {\n const target = await loadReferencedPrim(arc, baseUrl, resolver, options, stack, warn);\n if (!target) continue;\n base = base ? mergePrim(target, base) : target;\n }\n return base ? mergePrim(base, local) : local;\n}\n\nasync function loadReferencedPrim(\n arc: CompositionArc,\n baseUrl: string,\n resolver: AssetResolver,\n options: ComposeOptions,\n stack: ReadonlySet<string>,\n warn: (m: string) => void,\n): Promise<PrimSpec | null> {\n if (!arc.assetPath) {\n warn(`internal references (no asset path) are not supported yet: <${arc.primPath ?? \"?\"}>`);\n return null;\n }\n const composed = await loadComposedFile(arc, baseUrl, resolver, options, stack, warn);\n if (!composed) return null;\n\n const target = arc.primPath\n ? findPrimByPath(composed, arc.primPath)\n : defaultPrim(composed, warn);\n if (!target) {\n warn(`reference target ${arc.primPath ?? \"(defaultPrim)\"} not found in ${arc.assetPath.path}`);\n return null;\n }\n return target;\n}\n\n/** Resolve, fetch and fully compose the file an arc points at (with cycle/depth guards). */\nasync function loadComposedFile(\n arc: CompositionArc,\n baseUrl: string,\n resolver: AssetResolver,\n options: ComposeOptions,\n stack: ReadonlySet<string>,\n warn: (m: string) => void,\n): Promise<UsdaFile | null> {\n if (!arc.assetPath) return null;\n const url = resolver.resolve(arc.assetPath.path, baseUrl);\n\n if (stack.has(url)) {\n warn(`composition cycle detected at ${url}; skipping`);\n return null;\n }\n if (stack.size >= (options.maxDepth ?? 64)) {\n warn(`composition exceeded max depth at ${url}; skipping`);\n return null;\n }\n\n let text: string;\n try {\n text = await resolver.fetchText(url);\n } catch (err) {\n warn(`cannot resolve \"${arc.assetPath.path}\" -> ${url}: ${(err as Error).message}`);\n return null;\n }\n return composeLayer(text, url, resolver, options, new Set([...stack, url]));\n}\n\n// --- merge (weaker `base` under stronger `over`) ---------------------------\n\nfunction mergePrim(base: PrimSpec, over: PrimSpec): PrimSpec {\n return {\n // `over` (def) wins; a pure `over` opinion keeps the base's specifier.\n specifier: over.specifier === \"over\" ? base.specifier : over.specifier,\n typeName: over.typeName || base.typeName,\n name: over.name,\n metadata: mergeMetadata(base.metadata, over.metadata),\n properties: mergeProperties(base.properties, over.properties),\n children: mergePrimLists(base.children, over.children),\n line: over.line,\n };\n}\n\nfunction mergePrimLists(base: PrimSpec[], over: PrimSpec[]): PrimSpec[] {\n const byName = new Map<string, PrimSpec>();\n for (const p of base) byName.set(p.name, p);\n for (const p of over) {\n const existing = byName.get(p.name);\n byName.set(p.name, existing ? mergePrim(existing, p) : p);\n }\n return [...byName.values()];\n}\n\nfunction mergeProperties(base: PropertySpec[], over: PropertySpec[]): PropertySpec[] {\n const byName = new Map<string, PropertySpec>();\n for (const p of base) byName.set(p.name, p);\n for (const p of over) {\n const existing = byName.get(p.name);\n byName.set(p.name, existing ? mergeProperty(existing, p) : p);\n }\n return [...byName.values()];\n}\n\nfunction mergeProperty(base: PropertySpec, over: PropertySpec): PropertySpec {\n if (base.kind !== over.kind) return over; // kind change: stronger wins outright\n if (base.kind === \"attribute\" && over.kind === \"attribute\") {\n const merged: AttributeSpec = {\n ...over,\n typeName: over.typeName || base.typeName,\n metadata: mergeMetadata(base.metadata, over.metadata),\n };\n const value = over.value !== undefined ? over.value : base.value;\n if (value !== undefined) merged.value = value;\n const timeSamples = over.timeSamples ?? base.timeSamples;\n if (timeSamples) merged.timeSamples = timeSamples;\n const connections = over.connections ?? base.connections;\n if (connections) merged.connections = connections;\n return merged;\n }\n if (base.kind === \"relationship\" && over.kind === \"relationship\") {\n return {\n ...over,\n targets: over.targets.length > 0 ? over.targets : base.targets,\n metadata: mergeMetadata(base.metadata, over.metadata),\n };\n }\n return over;\n}\n\nfunction mergeMetadata(base: MetadataMap, over: MetadataMap): MetadataMap {\n const merged: MetadataMap = { ...base, ...over };\n // apiSchemas accumulate (union, base order first).\n const a = base.apiSchemas;\n const b = over.apiSchemas;\n if (Array.isArray(a) || Array.isArray(b)) {\n const seen = new Set<UsdValue>();\n const union: UsdValue[] = [];\n for (const v of [...(Array.isArray(a) ? a : []), ...(Array.isArray(b) ? b : [])]) {\n if (!seen.has(v)) {\n seen.add(v);\n union.push(v);\n }\n }\n merged.apiSchemas = union;\n }\n return merged;\n}\n\n// --- lookups & helpers -----------------------------------------------------\n\nfunction findPrimByPath(file: UsdaFile, path: string): PrimSpec | null {\n const segments = path.split(\"/\").filter(Boolean);\n let level = file.prims;\n let found: PrimSpec | null = null;\n for (const seg of segments) {\n found = level.find((p) => p.name === seg) ?? null;\n if (!found) return null;\n level = found.children;\n }\n return found;\n}\n\nfunction defaultPrim(file: UsdaFile, warn: (m: string) => void): PrimSpec | null {\n const name = file.metadata.defaultPrim;\n if (typeof name === \"string\") {\n return file.prims.find((p) => p.name === name) ?? null;\n }\n const first = file.prims[0];\n if (first) warn(`referenced layer has no defaultPrim; using first root prim \"${first.name}\"`);\n return first ?? null;\n}\n\n/** Normalize references/payloads/sublayers metadata into a list of arcs. */\nfunction toArcs(value: UsdValue | undefined): CompositionArc[] {\n if (value === undefined) return [];\n const list = Array.isArray(value) ? value : [value];\n const arcs: CompositionArc[] = [];\n for (const v of list) {\n if (v instanceof AssetPath) arcs.push({ assetPath: v });\n else if (v && typeof v === \"object\" && \"assetPath\" in v) arcs.push(v as CompositionArc);\n }\n return arcs;\n}\n\nfunction stripKeys(meta: MetadataMap, keys: readonly string[]): MetadataMap {\n const out: MetadataMap = {};\n for (const [k, v] of Object.entries(meta)) {\n if (!keys.includes(k)) out[k] = v;\n }\n return out;\n}\n","/**\n * USDZ (zipped USD package) support.\n *\n * A `.usdz` is an uncompressed zip whose entries are USD layers + textures.\n * {@link openUsdz} unzips it (via `fflate`) and returns the root layer entry\n * plus an {@link AssetResolver} that serves the package's other entries, so\n * references inside the package resolve through the normal composition path.\n * USDC (binary crate) entries are not decodable yet (M10).\n */\n\nimport { unzipSync } from \"fflate\";\nimport { type AssetResolver, joinPosix } from \"./AssetResolver.js\";\n\nconst USD_ENTRY = /\\.(usda|usdc|usd)$/i;\n\nexport type UsdzPackage = {\n /** Archive path of the root layer to open. */\n rootEntry: string;\n /** Resolver over the package's entries. */\n resolver: AssetResolver;\n};\n\n/** Unzip a `.usdz` package and build a resolver over its entries. */\nexport function openUsdz(bytes: Uint8Array): UsdzPackage {\n const entries = unzipSync(bytes);\n const names = Object.keys(entries);\n const rootEntry = names.find((n) => USD_ENTRY.test(n)) ?? names[0];\n if (!rootEntry) throw new Error(\"usdz package contains no entries\");\n\n const decoder = new TextDecoder();\n const resolver: AssetResolver = {\n resolve(assetPath, baseUrl) {\n return joinPosix(baseUrl, assetPath);\n },\n fetchText(url) {\n const data = entries[url] ?? entries[url.replace(/^\\/+/, \"\")];\n if (!data) return Promise.reject(new Error(`not found in usdz: ${url}`));\n if (/\\.usdc$/i.test(url)) {\n return Promise.reject(\n new Error(`USDC (binary crate) entries are not supported yet (M10): ${url}`),\n );\n }\n return Promise.resolve(decoder.decode(data));\n },\n };\n\n return { rootEntry, resolver };\n}\n","/**\n * LZ4 block decompression and the OpenUSD `TfFastCompression` wrapper used by\n * the USDC (crate) format. Pure TypeScript — no LZ4 dependency.\n */\n\n/** OpenUSD's per-chunk limit; buffers above it are split (`TfFastCompression`). */\nconst MAX_CHUNK_INPUT = 0x7e000000;\n\n/**\n * Decompress a raw LZ4 block from `src` into `dst`. `dst` must be sized to the\n * known decompressed length. Returns the number of bytes written.\n */\nexport function lz4DecompressBlock(src: Uint8Array, dst: Uint8Array): number {\n let s = 0;\n let d = 0;\n const n = src.length;\n\n while (s < n) {\n const token = src[s++]!;\n\n // Literals.\n let literals = token >> 4;\n if (literals === 0xf) {\n let add: number;\n do {\n add = src[s++]!;\n literals += add;\n } while (add === 0xff);\n }\n for (let i = 0; i < literals; i++) dst[d++] = src[s++]!;\n\n if (s >= n) break; // last sequence: literals only\n\n // Match.\n const offset = src[s++]! | (src[s++]! << 8);\n let matchLen = token & 0xf;\n if (matchLen === 0xf) {\n let add: number;\n do {\n add = src[s++]!;\n matchLen += add;\n } while (add === 0xff);\n }\n matchLen += 4;\n\n let m = d - offset;\n for (let i = 0; i < matchLen; i++) dst[d++] = dst[m++]!;\n }\n return d;\n}\n\n/**\n * Decompress a buffer produced by OpenUSD's `TfFastCompression`, given the known\n * decompressed size.\n *\n * Layout: 1 byte = number of *whole* `MAX_CHUNK_INPUT`-sized chunks (almost\n * always 0), each prefixed by an `int32` compressed size, then a final partial\n * chunk (the remainder) as a plain LZ4 block with no size prefix.\n */\nexport function fastDecompress(src: Uint8Array, decompressedSize: number): Uint8Array {\n const out = new Uint8Array(decompressedSize);\n const view = new DataView(src.buffer, src.byteOffset, src.byteLength);\n\n const numWholeChunks = src[0]!;\n let s = 1;\n let d = 0;\n for (let c = 0; c < numWholeChunks; c++) {\n const chunkCompressedSize = view.getInt32(s, true);\n s += 4;\n lz4DecompressBlock(\n src.subarray(s, s + chunkCompressedSize),\n out.subarray(d, d + MAX_CHUNK_INPUT),\n );\n s += chunkCompressedSize;\n d += MAX_CHUNK_INPUT;\n }\n if (d < decompressedSize) {\n lz4DecompressBlock(src.subarray(s), out.subarray(d));\n }\n return out;\n}\n","/**\n * OpenUSD `Usd_IntegerCompression` decoder (32-bit).\n *\n * The encoded buffer (itself wrapped by {@link fastDecompress}) is:\n * [commonDelta : int32] [codes : 2 bits/int] [variable-width deltas]\n * Values are **delta-encoded**: each entry's stored value is a signed delta from\n * the previous integrated value (`out[i] = prev += delta`), and the 2-bit code\n * selects the delta source — 0 = the common delta, 1/2/3 = a 1/2/4-byte signed\n * delta. Integration keeps \"unsigned\" arrays (path/field/spec indexes)\n * non-negative even though the deltas are signed.\n */\n\nimport { fastDecompress } from \"./lz4.js\";\n\n/** Decode `numInts` 32-bit integers from a `TfFastCompression`-wrapped buffer. */\nexport function decodeIntegers32(compressed: Uint8Array, numInts: number): number[] {\n if (numInts === 0) return [];\n\n const codeBytes = Math.ceil(numInts / 4);\n const worstCase = 4 + codeBytes + numInts * 4;\n const encoded = fastDecompress(compressed, worstCase);\n const view = new DataView(encoded.buffer, encoded.byteOffset, encoded.byteLength);\n\n const commonDelta = view.getInt32(0, true);\n const codesStart = 4;\n let p = codesStart + codeBytes;\n\n const out = new Array<number>(numInts);\n let prev = 0;\n for (let i = 0; i < numInts; i++) {\n const code = (encoded[codesStart + (i >> 2)]! >> ((i & 3) * 2)) & 0x3;\n let delta: number;\n if (code === 0) {\n delta = commonDelta;\n } else if (code === 1) {\n delta = view.getInt8(p);\n p += 1;\n } else if (code === 2) {\n delta = view.getInt16(p, true);\n p += 2;\n } else {\n delta = view.getInt32(p, true);\n p += 4;\n }\n prev += delta;\n out[i] = prev;\n }\n return out;\n}\n","/** OpenUSD crate `TypeEnum` values (`crateDataTypes.h` order). */\nexport const CrateType = {\n Invalid: 0,\n Bool: 1,\n UChar: 2,\n Int: 3,\n UInt: 4,\n Int64: 5,\n UInt64: 6,\n Half: 7,\n Float: 8,\n Double: 9,\n String: 10,\n Token: 11,\n AssetPath: 12,\n Matrix2d: 13,\n Matrix3d: 14,\n Matrix4d: 15,\n Quatd: 16,\n Quatf: 17,\n Quath: 18,\n Vec2d: 19,\n Vec2f: 20,\n Vec2h: 21,\n Vec2i: 22,\n Vec3d: 23,\n Vec3f: 24,\n Vec3h: 25,\n Vec3i: 26,\n Vec4d: 27,\n Vec4f: 28,\n Vec4h: 29,\n Vec4i: 30,\n Dictionary: 31,\n TokenListOp: 32,\n StringListOp: 33,\n PathListOp: 34,\n ReferenceListOp: 35,\n IntListOp: 36,\n Int64ListOp: 37,\n UIntListOp: 38,\n UInt64ListOp: 39,\n PathVector: 40,\n TokenVector: 41,\n Specifier: 42,\n Permission: 43,\n Variability: 44,\n VariantSelectionMap: 45,\n TimeSamples: 46,\n Payload: 47,\n DoubleVector: 48,\n LayerOffsetVector: 49,\n StringVector: 50,\n ValueBlock: 51,\n Value: 52,\n UnregisteredValue: 53,\n UnregisteredValueListOp: 54,\n PayloadListOp: 55,\n TimeCode: 56,\n} as const;\n\n/** `_ListOpHeader` bit flags. */\nexport const ListOpBits = {\n IsExplicit: 1 << 0,\n HasExplicit: 1 << 1,\n HasAdded: 1 << 2,\n HasDeleted: 1 << 3,\n HasOrdered: 1 << 4,\n HasPrepended: 1 << 5,\n HasAppended: 1 << 6,\n} as const;\n\n/** Decompose a packed `ValueRep` uint64. */\nexport function decodeRepBits(rep: bigint): {\n isArray: boolean;\n isInlined: boolean;\n isCompressed: boolean;\n type: number;\n payload: bigint;\n} {\n return {\n isArray: (rep & (1n << 63n)) !== 0n,\n isInlined: (rep & (1n << 62n)) !== 0n,\n isCompressed: (rep & (1n << 61n)) !== 0n,\n type: Number((rep >> 48n) & 0xffn),\n payload: rep & ((1n << 48n) - 1n),\n };\n}\n\n/** Half-precision float → number. */\nexport function halfToFloat(h: number): number {\n const sign = (h & 0x8000) >> 15;\n const exp = (h & 0x7c00) >> 10;\n const frac = h & 0x03ff;\n let value: number;\n if (exp === 0) value = frac / 1024;\n else if (exp === 0x1f) value = frac ? Number.NaN : Number.POSITIVE_INFINITY;\n else return (sign ? -1 : 1) * 2 ** (exp - 15) * (1 + frac / 1024);\n return (sign ? -1 : 1) * (exp === 0 ? 2 ** -14 * value : value);\n}\n","/**\n * Reader for the OpenUSD binary \"crate\" format (`.usdc` / binary `.usd`).\n *\n * Built incrementally (M10): bootstrap header + table of contents + the TOKENS\n * section first; STRINGS/FIELDS/FIELDSETS/PATHS/SPECS and value reps follow.\n * References pxr `Usd/crateFile.cpp`. This is a from-scratch TS reader — not a\n * binding to OpenUSD.\n */\n\nimport { AssetPath, Quat, UsdMatrix, type UsdValue, type Vec3 } from \"../../parser/ast.js\";\nimport { decodeIntegers32 } from \"./integerCompression.js\";\nimport { fastDecompress } from \"./lz4.js\";\nimport { CrateType, ListOpBits, decodeRepBits, halfToFloat } from \"./valueTypes.js\";\n\nconst MAGIC = \"PXR-USDC\";\n\n/** Scratch view for reinterpreting inlined float/double bits. */\nconst scratch = new DataView(new ArrayBuffer(8));\n\n/** Sentinel separating entries in the FIELDSETS array (max uint32 → -1 signed). */\nconst FIELDSET_END = -1;\n\nexport type CrateSection = {\n name: string;\n start: number;\n size: number;\n};\n\nexport type CrateField = {\n /** Field name (token index). */\n nameIndex: number;\n /** Packed `ValueRep` (decoded in M10c). */\n rep: bigint;\n};\n\nexport type CrateSpec = {\n pathIndex: number;\n fieldSetIndex: number;\n specType: number;\n};\n\nexport class CrateReader {\n readonly version: readonly [number, number, number];\n readonly view: DataView;\n private readonly bytes: Uint8Array;\n private readonly sections = new Map<string, CrateSection>();\n\n private _tokens?: string[];\n private _strings?: number[];\n private _fields?: CrateField[];\n private _fieldSets?: number[];\n private _paths?: string[];\n private _specs?: CrateSpec[];\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\n const magic = asciiAt(bytes, 0, 8);\n if (magic !== MAGIC) {\n throw new Error(`not a USDC crate file (magic ${JSON.stringify(magic)})`);\n }\n this.version = [bytes[8] ?? 0, bytes[9] ?? 0, bytes[10] ?? 0];\n\n const tocOffset = this.u64(16);\n this.readToc(tocOffset);\n }\n\n /** True if `bytes` begins with the crate magic. */\n static isCrate(bytes: Uint8Array): boolean {\n return asciiAt(bytes, 0, 8) === MAGIC;\n }\n\n getSection(name: string): CrateSection | undefined {\n return this.sections.get(name);\n }\n\n /** Read a little-endian uint64 as a JS number (safe for crate-sized files). */\n u64(offset: number): number {\n return Number(this.view.getBigUint64(offset, true));\n }\n\n i64(offset: number): bigint {\n return this.view.getBigInt64(offset, true);\n }\n\n private readToc(offset: number): void {\n const count = this.u64(offset);\n let p = offset + 8;\n for (let i = 0; i < count; i++) {\n const name = asciiAt(this.bytes, p, 16).replace(/\\0+$/, \"\");\n const start = this.u64(p + 16);\n const size = this.u64(p + 24);\n this.sections.set(name, { name, start, size });\n p += 32;\n }\n }\n\n // --- TOKENS -------------------------------------------------------------\n\n getTokens(): string[] {\n if (!this._tokens) this._tokens = this.readTokens();\n return this._tokens;\n }\n\n getToken(index: number): string {\n return this.getTokens()[index] ?? \"\";\n }\n\n private readTokens(): string[] {\n const section = this.sections.get(\"TOKENS\");\n if (!section) return [];\n let p = section.start;\n const numTokens = this.u64(p);\n p += 8;\n const uncompressedSize = this.u64(p);\n p += 8;\n const compressedSize = this.u64(p);\n p += 8;\n\n const compressed = this.bytes.subarray(p, p + compressedSize);\n const buffer = fastDecompress(compressed, uncompressedSize);\n\n // Null-separated UTF-8 strings.\n const tokens: string[] = [];\n const decoder = new TextDecoder();\n let start = 0;\n for (let i = 0; i < buffer.length && tokens.length < numTokens; i++) {\n if (buffer[i] === 0) {\n tokens.push(decoder.decode(buffer.subarray(start, i)));\n start = i + 1;\n }\n }\n return tokens;\n }\n\n // --- STRINGS ------------------------------------------------------------\n\n /** String values are token indices. */\n getStrings(): number[] {\n if (!this._strings) this._strings = this.readStrings();\n return this._strings;\n }\n\n private readStrings(): number[] {\n const section = this.sections.get(\"STRINGS\");\n if (!section) return [];\n const count = this.u64(section.start);\n const out = new Array<number>(count);\n let p = section.start + 8;\n for (let i = 0; i < count; i++) {\n out[i] = this.view.getUint32(p, true);\n p += 4;\n }\n return out;\n }\n\n /** Read a `TfFastCompression`-wrapped, delta+integer-compressed array of `count` ints. */\n private readCompressedInts(p: number, count: number): { values: number[]; next: number } {\n const compressedSize = this.u64(p);\n const dataStart = p + 8;\n const buf = this.bytes.subarray(dataStart, dataStart + compressedSize);\n return { values: decodeIntegers32(buf, count), next: dataStart + compressedSize };\n }\n\n // --- FIELDS -------------------------------------------------------------\n\n getFields(): CrateField[] {\n if (!this._fields) this._fields = this.readFields();\n return this._fields;\n }\n\n private readFields(): CrateField[] {\n const section = this.sections.get(\"FIELDS\");\n if (!section) return [];\n let p = section.start;\n const numFields = this.u64(p);\n p += 8;\n\n const names = this.readCompressedInts(p, numFields);\n p = names.next;\n\n // Reps: a TfFastCompression-wrapped contiguous array of uint64.\n const repsCompressedSize = this.u64(p);\n p += 8;\n const repsBuf = this.bytes.subarray(p, p + repsCompressedSize);\n const repBytes = fastDecompress(repsBuf, numFields * 8);\n const repView = new DataView(repBytes.buffer, repBytes.byteOffset, repBytes.byteLength);\n\n const fields = new Array<CrateField>(numFields);\n for (let i = 0; i < numFields; i++) {\n fields[i] = { nameIndex: names.values[i]!, rep: repView.getBigUint64(i * 8, true) };\n }\n return fields;\n }\n\n // --- FIELDSETS ----------------------------------------------------------\n\n getFieldSets(): number[] {\n if (!this._fieldSets) this._fieldSets = this.readFieldSets();\n return this._fieldSets;\n }\n\n private readFieldSets(): number[] {\n const section = this.sections.get(\"FIELDSETS\");\n if (!section) return [];\n const numFieldSets = this.u64(section.start);\n return this.readCompressedInts(section.start + 8, numFieldSets).values;\n }\n\n /** The field indices of the field set starting at `index` (until the sentinel). */\n getFieldSet(index: number): number[] {\n const all = this.getFieldSets();\n const out: number[] = [];\n for (let i = index; i < all.length && all[i] !== FIELDSET_END; i++) {\n out.push(all[i]!);\n }\n return out;\n }\n\n // --- PATHS --------------------------------------------------------------\n\n getPaths(): string[] {\n if (!this._paths) this._paths = this.readPaths();\n return this._paths;\n }\n\n private readPaths(): string[] {\n const section = this.sections.get(\"PATHS\");\n if (!section) return [];\n let p = section.start;\n const numPaths = this.u64(p);\n p += 8;\n // pxr writes the count again before the compressed arrays.\n const numEncoded = this.u64(p);\n p += 8;\n\n const pathIndexes = this.readCompressedInts(p, numEncoded);\n p = pathIndexes.next;\n const elementTokenIndexes = this.readCompressedInts(p, numEncoded);\n p = elementTokenIndexes.next;\n const jumps = this.readCompressedInts(p, numEncoded);\n\n const paths = new Array<string>(numPaths).fill(\"\");\n this.buildPaths(pathIndexes.values, elementTokenIndexes.values, jumps.values, 0, \"\", paths);\n return paths;\n }\n\n /** Reconstruct path strings from the compressed path tree (pxr `_BuildDecompressedPathsImpl`). */\n private buildPaths(\n pathIndexes: number[],\n elementTokenIndexes: number[],\n jumps: number[],\n startIndex: number,\n parentPath: string,\n paths: string[],\n ): void {\n let curIndex = startIndex;\n let parent = parentPath;\n let hasChild = false;\n let hasSibling = false;\n do {\n const thisIndex = curIndex++;\n const pathIdx = pathIndexes[thisIndex]!;\n if (parent === \"\") {\n paths[pathIdx] = \"/\";\n parent = \"/\";\n } else {\n let tokenIndex = elementTokenIndexes[thisIndex]!;\n const isProperty = tokenIndex < 0;\n if (tokenIndex < 0) tokenIndex = -tokenIndex;\n const elem = this.getToken(tokenIndex);\n paths[pathIdx] = appendElement(parent, elem, isProperty);\n }\n\n const jump = jumps[thisIndex]!;\n hasChild = jump > 0 || jump === -1;\n hasSibling = jump >= 0;\n\n if (hasChild) {\n if (hasSibling) {\n this.buildPaths(pathIndexes, elementTokenIndexes, jumps, thisIndex + jump, parent, paths);\n }\n parent = paths[pathIdx]!;\n }\n } while (hasChild || hasSibling);\n }\n\n // --- SPECS --------------------------------------------------------------\n\n getSpecs(): CrateSpec[] {\n if (!this._specs) this._specs = this.readSpecs();\n return this._specs;\n }\n\n private readSpecs(): CrateSpec[] {\n const section = this.sections.get(\"SPECS\");\n if (!section) return [];\n let p = section.start;\n const numSpecs = this.u64(p);\n p += 8;\n\n const pathIndexes = this.readCompressedInts(p, numSpecs);\n p = pathIndexes.next;\n const fieldSetIndexes = this.readCompressedInts(p, numSpecs);\n p = fieldSetIndexes.next;\n const specTypes = this.readCompressedInts(p, numSpecs);\n\n const specs = new Array<CrateSpec>(numSpecs);\n for (let i = 0; i < numSpecs; i++) {\n specs[i] = {\n pathIndex: pathIndexes.values[i]!,\n fieldSetIndex: fieldSetIndexes.values[i]!,\n specType: specTypes.values[i]!,\n };\n }\n return specs;\n }\n\n // --- Values -------------------------------------------------------------\n\n /** Decode a `ValueRep` into a {@link UsdValue} (or `undefined` if unsupported). */\n getValue(rep: bigint): UsdValue | undefined {\n const b = decodeRepBits(rep);\n if (b.isArray) return this.readArray(b.type, Number(b.payload), b.isCompressed);\n if (b.isInlined) return this.readInlined(b.type, b.payload);\n return this.readScalar(b.type, Number(b.payload));\n }\n\n private readInlined(type: number, payload: bigint): UsdValue | undefined {\n const low = Number(payload & 0xffffffffn);\n switch (type) {\n case CrateType.Bool:\n return payload !== 0n;\n case CrateType.UChar:\n return low & 0xff;\n case CrateType.Int:\n case CrateType.Int64:\n return low | 0;\n case CrateType.UInt:\n case CrateType.UInt64:\n return low >>> 0;\n case CrateType.Half:\n return halfToFloat(low & 0xffff);\n case CrateType.Float:\n case CrateType.Double:\n // Inlined floats and doubles both store float32 bits in the low word.\n scratch.setUint32(0, low >>> 0, true);\n return scratch.getFloat32(0, true);\n case CrateType.Token:\n return this.getToken(low);\n case CrateType.String:\n return this.getToken(this.getStrings()[low] ?? 0);\n case CrateType.AssetPath:\n return new AssetPath(this.getToken(low));\n case CrateType.Specifier:\n case CrateType.Permission:\n case CrateType.Variability:\n return low;\n default:\n return undefined;\n }\n }\n\n private readScalar(type: number, off: number): UsdValue | undefined {\n const v = this.view;\n switch (type) {\n case CrateType.Float:\n return v.getFloat32(off, true);\n case CrateType.Double:\n return v.getFloat64(off, true);\n case CrateType.Half:\n return halfToFloat(v.getUint16(off, true));\n case CrateType.Int:\n return v.getInt32(off, true);\n case CrateType.UInt:\n return v.getUint32(off, true);\n case CrateType.Token:\n return this.getToken(v.getUint32(off, true));\n case CrateType.String:\n return this.getToken(this.getStrings()[v.getUint32(off, true)] ?? 0);\n case CrateType.AssetPath:\n return new AssetPath(this.getToken(v.getUint32(off, true)));\n case CrateType.Vec2f:\n return this.readFloat32s(off, 2);\n case CrateType.Vec3f:\n return this.readFloat32s(off, 3);\n case CrateType.Vec4f:\n return this.readFloat32s(off, 4);\n case CrateType.Vec2d:\n return this.readFloat64s(off, 2);\n case CrateType.Vec3d:\n return this.readFloat64s(off, 3);\n case CrateType.Vec4d:\n return this.readFloat64s(off, 4);\n case CrateType.Quatf: {\n const q = this.readFloat32s(off, 4);\n return new Quat(q[3]!, [q[0]!, q[1]!, q[2]!]);\n }\n case CrateType.Quatd: {\n const q = this.readFloat64s(off, 4);\n return new Quat(q[3]!, [q[0]!, q[1]!, q[2]!]);\n }\n case CrateType.Matrix4d:\n return new UsdMatrix(this.readFloat64s(off, 16), 4);\n case CrateType.Matrix3d:\n return new UsdMatrix(this.readFloat64s(off, 9), 3);\n case CrateType.TokenListOp:\n case CrateType.IntListOp:\n return this.readListOp(off, \"token\");\n case CrateType.PathListOp:\n return this.readListOp(off, \"path\");\n case CrateType.TokenVector:\n return this.readIndexVector(off, \"token\").items;\n case CrateType.PathVector:\n return this.readIndexVector(off, \"path\").items;\n default:\n return undefined;\n }\n }\n\n private readArray(type: number, off: number, compressed: boolean): UsdValue | undefined {\n if (off === 0) return []; // inlined empty array\n const count = this.u64(off);\n let p = off + 8;\n\n if (compressed) {\n const compressedSize = this.u64(p);\n p += 8;\n return decodeIntegers32(this.bytes.subarray(p, p + compressedSize), count);\n }\n\n const v = this.view;\n switch (type) {\n case CrateType.Int:\n case CrateType.UInt: {\n const out = new Array<number>(count);\n for (let i = 0; i < count; i++) out[i] = v.getInt32(p + i * 4, true);\n return out;\n }\n case CrateType.Float: {\n const out = new Array<number>(count);\n for (let i = 0; i < count; i++) out[i] = v.getFloat32(p + i * 4, true);\n return out;\n }\n case CrateType.Token: {\n const out = new Array<string>(count);\n for (let i = 0; i < count; i++) out[i] = this.getToken(v.getUint32(p + i * 4, true));\n return out;\n }\n case CrateType.Vec3f:\n return this.readVec3fArray(p, count, false);\n case CrateType.Vec3d:\n return this.readVec3fArray(p, count, true);\n default:\n return undefined;\n }\n }\n\n private readFloat32s(off: number, n: number): number[] {\n const out = new Array<number>(n);\n for (let i = 0; i < n; i++) out[i] = this.view.getFloat32(off + i * 4, true);\n return out;\n }\n\n private readFloat64s(off: number, n: number): number[] {\n const out = new Array<number>(n);\n for (let i = 0; i < n; i++) out[i] = this.view.getFloat64(off + i * 8, true);\n return out;\n }\n\n private readVec3fArray(off: number, count: number, double: boolean): Vec3[] {\n const out = new Array<Vec3>(count);\n const stride = double ? 24 : 12;\n for (let i = 0; i < count; i++) {\n const o = off + i * stride;\n out[i] = double\n ? [\n this.view.getFloat64(o, true),\n this.view.getFloat64(o + 8, true),\n this.view.getFloat64(o + 16, true),\n ]\n : [\n this.view.getFloat32(o, true),\n this.view.getFloat32(o + 4, true),\n this.view.getFloat32(o + 8, true),\n ];\n }\n return out;\n }\n\n /** Read a `[u64 count][count × uint32|int32 index]` vector → resolved strings. */\n private readIndexVector(off: number, kind: \"token\" | \"path\"): { items: string[]; next: number } {\n const count = this.u64(off);\n let p = off + 8;\n const items = new Array<string>(count);\n for (let i = 0; i < count; i++) {\n const idx = this.view.getInt32(p, true);\n items[i] = kind === \"token\" ? this.getToken(idx) : (this.getPaths()[idx] ?? \"\");\n p += 4;\n }\n return { items, next: p };\n }\n\n /** Read an SdfListOp; returns the effective (explicit ∪ prepended ∪ added ∪ appended) items. */\n private readListOp(off: number, kind: \"token\" | \"path\"): string[] {\n const bits = this.bytes[off]!;\n let p = off + 1;\n const explicit: string[] = [];\n const prepended: string[] = [];\n const added: string[] = [];\n const appended: string[] = [];\n const read = (target: string[]) => {\n const r = this.readIndexVector(p, kind);\n target.push(...r.items);\n p = r.next;\n };\n if (bits & ListOpBits.HasExplicit) read(explicit);\n if (bits & ListOpBits.HasAdded) read(added);\n if (bits & ListOpBits.HasPrepended) read(prepended);\n if (bits & ListOpBits.HasAppended) read(appended);\n // (deleted / ordered are read for cursor correctness but ignored)\n if (bits & ListOpBits.HasDeleted) read([]);\n if (bits & ListOpBits.HasOrdered) read([]);\n return [...explicit, ...prepended, ...added, ...appended];\n }\n}\n\n/** Append a prim child (`/elem`) or property (`.elem`) to a path. */\nfunction appendElement(parent: string, elem: string, isProperty: boolean): string {\n if (isProperty) return `${parent}.${elem}`;\n if (elem.startsWith(\"{\")) return `${parent}${elem}`; // variant selection\n return parent === \"/\" ? `/${elem}` : `${parent}/${elem}`;\n}\n\nfunction asciiAt(bytes: Uint8Array, offset: number, length: number): string {\n let out = \"\";\n for (let i = 0; i < length; i++) {\n const c = bytes[offset + i];\n if (c === undefined) break;\n out += String.fromCharCode(c);\n }\n return out;\n}\n","/**\n * Bridges a parsed crate ({@link CrateReader}) into the in-memory {@link UsdaFile}\n * AST, so the rest of the pipeline (Stage / composition / extractor / runtime)\n * works on binary `.usd` exactly like ASCII `.usda`.\n */\n\nimport type {\n AttributeSpec,\n MetadataMap,\n PrimSpec,\n RelationshipSpec,\n Specifier,\n UsdValue,\n UsdaFile,\n} from \"../../parser/ast.js\";\nimport type { CrateReader } from \"./CrateReader.js\";\nimport { decodeRepBits } from \"./valueTypes.js\";\n\n// SdfSpecType values.\nconst SPEC_PRIM = 6;\nconst SPEC_PSEUDO_ROOT = 7;\nconst SPEC_ATTRIBUTE = 1;\nconst SPEC_RELATIONSHIP = 8;\n\nconst SPECIFIERS: Specifier[] = [\"def\", \"over\", \"class\"];\n\nexport function crateToUsdaFile(crate: CrateReader): UsdaFile {\n const paths = crate.getPaths();\n const specs = crate.getSpecs();\n const fields = crate.getFields();\n\n const fieldsOf = (fieldSetIndex: number): Map<string, bigint> => {\n const map = new Map<string, bigint>();\n for (const fi of crate.getFieldSet(fieldSetIndex)) {\n const f = fields[fi];\n if (f) map.set(crate.getToken(f.nameIndex), f.rep);\n }\n return map;\n };\n\n const primByPath = new Map<string, PrimSpec>();\n const rootPrims: PrimSpec[] = [];\n let layerMetadata: MetadataMap = {};\n\n // Pass 1: create prim specs.\n for (const spec of specs) {\n const path = paths[spec.pathIndex] ?? \"\";\n if (spec.specType === SPEC_PSEUDO_ROOT) {\n layerMetadata = buildLayerMetadata(crate, fieldsOf(spec.fieldSetIndex));\n continue;\n }\n if (spec.specType !== SPEC_PRIM) continue;\n\n const fm = fieldsOf(spec.fieldSetIndex);\n primByPath.set(path, {\n specifier: SPECIFIERS[asNumber(crate, fm.get(\"specifier\")) ?? 0] ?? \"def\",\n typeName: asString(crate, fm.get(\"typeName\")) ?? \"\",\n name: leaf(path),\n metadata: buildPrimMetadata(crate, fm),\n properties: [],\n children: [],\n line: 0,\n });\n }\n\n // Pass 2: attributes & relationships.\n for (const spec of specs) {\n if (spec.specType !== SPEC_ATTRIBUTE && spec.specType !== SPEC_RELATIONSHIP) continue;\n const split = splitProperty(paths[spec.pathIndex] ?? \"\");\n if (!split) continue;\n const prim = primByPath.get(split.primPath);\n if (!prim) continue;\n\n const fm = fieldsOf(spec.fieldSetIndex);\n prim.properties.push(\n spec.specType === SPEC_ATTRIBUTE\n ? buildAttribute(crate, split.propName, fm)\n : buildRelationship(crate, split.propName, fm),\n );\n }\n\n // Pass 3: link prims into a tree.\n for (const [path, prim] of primByPath) {\n const parentPath = parentOf(path);\n if (parentPath === \"/\") rootPrims.push(prim);\n else primByPath.get(parentPath)?.children.push(prim);\n }\n\n return { version: crate.version.join(\".\"), metadata: layerMetadata, prims: rootPrims };\n}\n\nfunction buildAttribute(crate: CrateReader, name: string, fm: Map<string, bigint>): AttributeSpec {\n const defaultRep = fm.get(\"default\");\n const attr: AttributeSpec = {\n kind: \"attribute\",\n name,\n typeName: asString(crate, fm.get(\"typeName\")) ?? \"\",\n isArray: defaultRep !== undefined ? decodeRepBits(defaultRep).isArray : false,\n variability: asNumber(crate, fm.get(\"variability\")) === 1 ? \"uniform\" : \"varying\",\n custom: false,\n metadata: {},\n line: 0,\n };\n if (defaultRep !== undefined) {\n const value = crate.getValue(defaultRep);\n if (value !== undefined) attr.value = value;\n }\n return attr;\n}\n\nfunction buildRelationship(\n crate: CrateReader,\n name: string,\n fm: Map<string, bigint>,\n): RelationshipSpec {\n const targetsValue = fm.has(\"targetPaths\") ? crate.getValue(fm.get(\"targetPaths\")!) : undefined;\n const targets = Array.isArray(targetsValue)\n ? (targetsValue.filter((t) => typeof t === \"string\") as string[])\n : [];\n return {\n kind: \"relationship\",\n name,\n custom: false,\n listOp: \"explicit\",\n targets,\n metadata: {},\n line: 0,\n };\n}\n\nfunction buildPrimMetadata(crate: CrateReader, fm: Map<string, bigint>): MetadataMap {\n const meta: MetadataMap = {};\n const apiSchemas = fm.has(\"apiSchemas\") ? crate.getValue(fm.get(\"apiSchemas\")!) : undefined;\n if (Array.isArray(apiSchemas)) meta.apiSchemas = apiSchemas as UsdValue[];\n const kind = asString(crate, fm.get(\"kind\"));\n if (kind !== undefined) meta.kind = kind;\n return meta;\n}\n\nfunction buildLayerMetadata(crate: CrateReader, fm: Map<string, bigint>): MetadataMap {\n const meta: MetadataMap = {};\n const upAxis = asString(crate, fm.get(\"upAxis\"));\n if (upAxis !== undefined) meta.upAxis = upAxis;\n const defaultPrim = asString(crate, fm.get(\"defaultPrim\"));\n if (defaultPrim !== undefined) meta.defaultPrim = defaultPrim;\n const metersPerUnit = asNumber(crate, fm.get(\"metersPerUnit\"));\n if (metersPerUnit !== undefined) meta.metersPerUnit = metersPerUnit;\n return meta;\n}\n\nfunction asString(crate: CrateReader, rep: bigint | undefined): string | undefined {\n if (rep === undefined) return undefined;\n const v = crate.getValue(rep);\n return typeof v === \"string\" ? v : undefined;\n}\n\nfunction asNumber(crate: CrateReader, rep: bigint | undefined): number | undefined {\n if (rep === undefined) return undefined;\n const v = crate.getValue(rep);\n return typeof v === \"number\" ? v : undefined;\n}\n\n/** `/a/b.attr` → `{ primPath: \"/a/b\", propName: \"attr\" }`; `null` for non-property paths. */\nfunction splitProperty(path: string): { primPath: string; propName: string } | null {\n const slash = path.lastIndexOf(\"/\");\n const dot = path.indexOf(\".\", slash < 0 ? 0 : slash);\n if (dot === -1) return null;\n // Skip relationship-target / connection sub-paths (contain brackets).\n if (path.includes(\"[\")) return null;\n return { primPath: path.slice(0, dot), propName: path.slice(dot + 1) };\n}\n\nfunction parentOf(path: string): string {\n const i = path.lastIndexOf(\"/\");\n return i <= 0 ? \"/\" : path.slice(0, i);\n}\n\nfunction leaf(path: string): string {\n return path.slice(path.lastIndexOf(\"/\") + 1);\n}\n","/**\n * Minimal 4×4 matrix math, Three.js-independent.\n *\n * ## Convention\n *\n * A {@link Mat4} is a flat 16-element array in **column-major** order — the\n * exact layout of `THREE.Matrix4.elements`, so a `Mat4` can be handed to\n * `matrix4.fromArray(m)` with no transposition. Transforms use the\n * column-vector convention `v' = M · v`; the translation lives at indices\n * `[12, 13, 14]`.\n *\n * Conveniently, OpenUSD stores `GfMatrix4d` **row-major** with a row-vector\n * convention (`v' = v · M`). The two raw 16-number arrays for the *same*\n * transform are therefore bit-identical, which is why {@link fromUsdMatrix} is\n * a plain copy. See the module test for a worked example.\n */\n\nimport type { Quat, UsdMatrix, Vec3 } from \"../parser/ast.js\";\n\n/** Column-major 4×4 matrix (Three.js `elements` layout). */\nexport type Mat4 = number[];\n\nexport const DEG2RAD = Math.PI / 180;\nexport const RAD2DEG = 180 / Math.PI;\n\nexport function identity4(): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Matrix product `a · b` (column-major), matching `THREE.Matrix4.multiplyMatrices`. */\nexport function multiply(a: Mat4, b: Mat4): Mat4 {\n const a11 = a[0]!,\n a21 = a[1]!,\n a31 = a[2]!,\n a41 = a[3]!;\n const a12 = a[4]!,\n a22 = a[5]!,\n a32 = a[6]!,\n a42 = a[7]!;\n const a13 = a[8]!,\n a23 = a[9]!,\n a33 = a[10]!,\n a43 = a[11]!;\n const a14 = a[12]!,\n a24 = a[13]!,\n a34 = a[14]!,\n a44 = a[15]!;\n\n const b11 = b[0]!,\n b21 = b[1]!,\n b31 = b[2]!,\n b41 = b[3]!;\n const b12 = b[4]!,\n b22 = b[5]!,\n b32 = b[6]!,\n b42 = b[7]!;\n const b13 = b[8]!,\n b23 = b[9]!,\n b33 = b[10]!,\n b43 = b[11]!;\n const b14 = b[12]!,\n b24 = b[13]!,\n b34 = b[14]!,\n b44 = b[15]!;\n\n return [\n a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41,\n a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41,\n a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41,\n a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41,\n\n a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42,\n a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42,\n a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42,\n a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42,\n\n a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43,\n a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43,\n a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43,\n a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43,\n\n a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44,\n a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44,\n a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44,\n a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44,\n ];\n}\n\n/** Product of a list of matrices, left-to-right (`m[0] · m[1] · …`). */\nexport function multiplyAll(matrices: Mat4[]): Mat4 {\n let m = identity4();\n for (const next of matrices) m = multiply(m, next);\n return m;\n}\n\n/** Inverse (column-major), matching `THREE.Matrix4.invert`. Throws if singular. */\nexport function invert(m: Mat4): Mat4 {\n const n11 = m[0]!,\n n21 = m[1]!,\n n31 = m[2]!,\n n41 = m[3]!;\n const n12 = m[4]!,\n n22 = m[5]!,\n n32 = m[6]!,\n n42 = m[7]!;\n const n13 = m[8]!,\n n23 = m[9]!,\n n33 = m[10]!,\n n43 = m[11]!;\n const n14 = m[12]!,\n n24 = m[13]!,\n n34 = m[14]!,\n n44 = m[15]!;\n\n const t11 =\n n23 * n34 * n42 -\n n24 * n33 * n42 +\n n24 * n32 * n43 -\n n22 * n34 * n43 -\n n23 * n32 * n44 +\n n22 * n33 * n44;\n const t12 =\n n14 * n33 * n42 -\n n13 * n34 * n42 -\n n14 * n32 * n43 +\n n12 * n34 * n43 +\n n13 * n32 * n44 -\n n12 * n33 * n44;\n const t13 =\n n13 * n24 * n42 -\n n14 * n23 * n42 +\n n14 * n22 * n43 -\n n12 * n24 * n43 -\n n13 * n22 * n44 +\n n12 * n23 * n44;\n const t14 =\n n14 * n23 * n32 -\n n13 * n24 * n32 -\n n14 * n22 * n33 +\n n12 * n24 * n33 +\n n13 * n22 * n34 -\n n12 * n23 * n34;\n\n const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n if (det === 0) throw new Error(\"cannot invert a singular matrix\");\n const idet = 1 / det;\n\n return [\n t11 * idet,\n (n24 * n33 * n41 -\n n23 * n34 * n41 -\n n24 * n31 * n43 +\n n21 * n34 * n43 +\n n23 * n31 * n44 -\n n21 * n33 * n44) *\n idet,\n (n22 * n34 * n41 -\n n24 * n32 * n41 +\n n24 * n31 * n42 -\n n21 * n34 * n42 -\n n22 * n31 * n44 +\n n21 * n32 * n44) *\n idet,\n (n23 * n32 * n41 -\n n22 * n33 * n41 -\n n23 * n31 * n42 +\n n21 * n33 * n42 +\n n22 * n31 * n43 -\n n21 * n32 * n43) *\n idet,\n\n t12 * idet,\n (n13 * n34 * n41 -\n n14 * n33 * n41 +\n n14 * n31 * n43 -\n n11 * n34 * n43 -\n n13 * n31 * n44 +\n n11 * n33 * n44) *\n idet,\n (n14 * n32 * n41 -\n n12 * n34 * n41 -\n n14 * n31 * n42 +\n n11 * n34 * n42 +\n n12 * n31 * n44 -\n n11 * n32 * n44) *\n idet,\n (n12 * n33 * n41 -\n n13 * n32 * n41 +\n n13 * n31 * n42 -\n n11 * n33 * n42 -\n n12 * n31 * n43 +\n n11 * n32 * n43) *\n idet,\n\n t13 * idet,\n (n14 * n23 * n41 -\n n13 * n24 * n41 -\n n14 * n21 * n43 +\n n11 * n24 * n43 +\n n13 * n21 * n44 -\n n11 * n23 * n44) *\n idet,\n (n12 * n24 * n41 -\n n14 * n22 * n41 +\n n14 * n21 * n42 -\n n11 * n24 * n42 -\n n12 * n21 * n44 +\n n11 * n22 * n44) *\n idet,\n (n13 * n22 * n41 -\n n12 * n23 * n41 -\n n13 * n21 * n42 +\n n11 * n23 * n42 +\n n12 * n21 * n43 -\n n11 * n22 * n43) *\n idet,\n\n t14 * idet,\n (n13 * n24 * n31 -\n n14 * n23 * n31 +\n n14 * n21 * n33 -\n n11 * n24 * n33 -\n n13 * n21 * n34 +\n n11 * n23 * n34) *\n idet,\n (n14 * n22 * n31 -\n n12 * n24 * n31 -\n n14 * n21 * n32 +\n n11 * n24 * n32 +\n n12 * n21 * n34 -\n n11 * n22 * n34) *\n idet,\n (n12 * n23 * n31 -\n n13 * n22 * n31 +\n n13 * n21 * n32 -\n n11 * n23 * n32 -\n n12 * n21 * n33 +\n n11 * n22 * n33) *\n idet,\n ];\n}\n\nexport function makeTranslation([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n x, y, z, 1,\n ];\n}\n\nexport function makeScale([x, y, z]: Vec3): Mat4 {\n // biome-ignore format: matrix layout\n return [\n x, 0, 0, 0,\n 0, y, 0, 0,\n 0, 0, z, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationX(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n 1, 0, 0, 0,\n 0, c, s, 0,\n 0, -s, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationY(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, 0, -s, 0,\n 0, 1, 0, 0,\n s, 0, c, 0,\n 0, 0, 0, 1,\n ];\n}\n\nexport function makeRotationZ(rad: number): Mat4 {\n const c = Math.cos(rad);\n const s = Math.sin(rad);\n // biome-ignore format: matrix layout\n return [\n c, s, 0, 0,\n -s, c, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\n\n/** Rotation matrix from a (normalized) quaternion, matching `THREE.Matrix4.compose`. */\nexport function makeRotationFromQuat(q: Quat): Mat4 {\n let x = q.imaginary[0];\n let y = q.imaginary[1];\n let z = q.imaginary[2];\n let w = q.real;\n const len = Math.hypot(x, y, z, w);\n if (len > 0 && Math.abs(len - 1) > 1e-9) {\n x /= len;\n y /= len;\n z /= len;\n w /= len;\n }\n\n const x2 = x + x,\n y2 = y + y,\n z2 = z + z;\n const xx = x * x2,\n xy = x * y2,\n xz = x * z2;\n const yy = y * y2,\n yz = y * z2,\n zz = z * z2;\n const wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n // biome-ignore format: matrix layout\n return [\n 1 - (yy + zz), xy + wz, xz - wy, 0,\n xy - wz, 1 - (xx + zz), yz + wx, 0,\n xz + wy, yz - wx, 1 - (xx + yy), 0,\n 0, 0, 0, 1,\n ];\n}\n\n/**\n * Euler rotation matrix for the given axis order (e.g. `\"XYZ\"`), with per-axis\n * angles in **radians** indexed by axis (`angles[0]`=X, `[1]`=Y, `[2]`=Z).\n *\n * Follows OpenUSD's `rotate<ORDER>` semantics: the first listed axis is applied\n * first to the geometry, so `\"XYZ\"` yields `Rz · Ry · Rx` in column-vector form.\n */\nexport function makeEuler(angles: Vec3, order: string): Mat4 {\n const perAxis: Record<string, Mat4> = {\n X: makeRotationX(angles[0]),\n Y: makeRotationY(angles[1]),\n Z: makeRotationZ(angles[2]),\n };\n let m = identity4();\n for (let i = order.length - 1; i >= 0; i--) {\n const axis = perAxis[order[i]!];\n if (!axis)\n throw new Error(\n `invalid euler axis ${JSON.stringify(order[i])} in order ${JSON.stringify(order)}`,\n );\n m = multiply(m, axis);\n }\n return m;\n}\n\n/**\n * Copy a USD matrix into a {@link Mat4}. USD's row-major storage is identical to\n * Three.js column-major elements for the same transform (see module docs), so\n * this is a straight copy after a dimension check.\n */\nexport function fromUsdMatrix(m: UsdMatrix): Mat4 {\n if (m.dim !== 4 || m.values.length !== 16) {\n throw new Error(`expected a 4x4 matrix but got dim=${m.dim}, length=${m.values.length}`);\n }\n return [...m.values];\n}\n\n/** Extract the translation component `[x, y, z]` from a {@link Mat4}. */\nexport function getTranslation(m: Mat4): Vec3 {\n return [m[12]!, m[13]!, m[14]!];\n}\n","/**\n * Resolves a prim's `xformOpOrder` into a single local transform matrix.\n *\n * Supports `translate`, `scale`, `orient` (quat), `transform` (matrix4d),\n * single-axis `rotateX|Y|Z`, and the six `rotate<ORDER>` Euler ops, plus the\n * `!invert!` op prefix and the `!resetXformStack!` sentinel. Rotation op values\n * are in degrees and converted to radians here.\n */\n\nimport {\n DEG2RAD,\n type Mat4,\n fromUsdMatrix,\n identity4,\n invert,\n makeEuler,\n makeRotationFromQuat,\n makeRotationX,\n makeRotationY,\n makeRotationZ,\n makeScale,\n makeTranslation,\n multiply,\n} from \"../kinematics/transforms.js\";\nimport type { Quat, UsdMatrix, UsdValue, Vec3 } from \"../parser/ast.js\";\nimport type { Prim } from \"./Prim.js\";\n\nconst INVERT_PREFIX = \"!invert!\";\nconst RESET_STACK = \"!resetXformStack!\";\nconst ROTATE_ORDERS = new Set([\n \"rotateXYZ\",\n \"rotateXZY\",\n \"rotateYXZ\",\n \"rotateYZX\",\n \"rotateZXY\",\n \"rotateZYX\",\n]);\n\nexport type ResolvedXform = {\n /** Local-to-parent transform (column-major {@link Mat4}). */\n matrix: Mat4;\n /**\n * True if `xformOpOrder` began with `!resetXformStack!`, meaning this prim\n * does not inherit its parent's transform. Honored by FK in M5.\n */\n resetsXformStack: boolean;\n};\n\n/**\n * Compute a prim's local transform from its `xformOpOrder`. Returns identity\n * when the prim authors no `xformOpOrder`.\n */\nexport function computeLocalTransform(prim: Prim): ResolvedXform {\n const orderAttr = prim.GetAttribute(\"xformOpOrder\");\n const order = orderAttr.Get();\n if (!Array.isArray(order)) {\n return { matrix: identity4(), resetsXformStack: false };\n }\n\n let matrix = identity4();\n let resetsXformStack = false;\n\n for (const entry of order) {\n if (typeof entry !== \"string\") continue;\n if (entry === RESET_STACK) {\n resetsXformStack = true;\n continue;\n }\n\n let opName = entry;\n let doInvert = false;\n if (opName.startsWith(INVERT_PREFIX)) {\n doInvert = true;\n opName = opName.slice(INVERT_PREFIX.length);\n }\n\n const attr = prim.GetAttribute(opName);\n if (!attr.IsValid()) {\n throw new Error(`${prim.GetPath()}: xformOpOrder references missing op \"${opName}\"`);\n }\n\n // No resolvable value (e.g. time-sampled only — M10 reads defaults) → identity.\n const opValue = attr.Get();\n if (opValue === undefined) continue;\n\n let opMatrix = opMatrixFor(parseOpType(opName), opValue, `${prim.GetPath()}.${opName}`);\n if (doInvert) opMatrix = invert(opMatrix);\n // Post-multiply in list order: M = op0 · op1 · … so the LAST-listed op is\n // applied first to the geometry (innermost). For [translate, orient, scale]\n // this yields the usual scale-then-rotate-then-translate.\n matrix = multiply(matrix, opMatrix);\n }\n\n return { matrix, resetsXformStack };\n}\n\n/** Extract the op type token from an op attribute name (`xformOp:translate:pivot` → `translate`). */\nexport function parseOpType(opName: string): string {\n const body = opName.startsWith(\"xformOp:\") ? opName.slice(\"xformOp:\".length) : opName;\n return body.split(\":\")[0] ?? body;\n}\n\nfunction opMatrixFor(opType: string, value: UsdValue | undefined, where: string): Mat4 {\n switch (opType) {\n case \"translate\":\n return makeTranslation(asVec3(value, where));\n case \"scale\":\n return makeScale(asVec3(value, where));\n case \"orient\":\n return makeRotationFromQuat(asQuat(value, where));\n case \"transform\":\n return fromUsdMatrix(asMatrix(value, where));\n case \"rotateX\":\n return makeRotationX(asNumber(value, where) * DEG2RAD);\n case \"rotateY\":\n return makeRotationY(asNumber(value, where) * DEG2RAD);\n case \"rotateZ\":\n return makeRotationZ(asNumber(value, where) * DEG2RAD);\n default:\n if (ROTATE_ORDERS.has(opType)) {\n const [x, y, z] = asVec3(value, where);\n return makeEuler([x * DEG2RAD, y * DEG2RAD, z * DEG2RAD], opType.slice(\"rotate\".length));\n }\n throw new Error(`${where}: unsupported xformOp type \"${opType}\"`);\n }\n}\n\nfunction asVec3(v: UsdValue | undefined, where: string): Vec3 {\n if (Array.isArray(v) && v.length === 3 && v.every((n) => typeof n === \"number\")) {\n return v as Vec3;\n }\n throw new Error(`${where}: expected a 3-component value`);\n}\n\nfunction asNumber(v: UsdValue | undefined, where: string): number {\n if (typeof v === \"number\") return v;\n throw new Error(`${where}: expected a number`);\n}\n\nfunction asQuat(v: UsdValue | undefined, where: string): Quat {\n if (v && typeof v === \"object\" && \"real\" in v && \"imaginary\" in v) return v as Quat;\n throw new Error(`${where}: expected a quaternion`);\n}\n\nfunction asMatrix(v: UsdValue | undefined, where: string): UsdMatrix {\n if (v && typeof v === \"object\" && \"values\" in v && \"dim\" in v) return v as UsdMatrix;\n throw new Error(`${where}: expected a matrix`);\n}\n","/** UsdGeom schema helpers (type checks and geometry gathering). */\n\nimport type { Prim } from \"../usd/Prim.js\";\n\nexport function isXform(prim: Prim): boolean {\n return prim.GetTypeName() === \"Xform\";\n}\n\nexport function isScope(prim: Prim): boolean {\n return prim.GetTypeName() === \"Scope\";\n}\n\nexport function isMesh(prim: Prim): boolean {\n return prim.GetTypeName() === \"Mesh\";\n}\n\n/** `UsdGeomImageable.purpose` token; defaults to `\"default\"`. */\nexport function getPurpose(prim: Prim): string {\n const v = prim.GetAttribute(\"purpose\").Get();\n return typeof v === \"string\" ? v : \"default\";\n}\n\n/** Purposes that should not render as visual geometry (treated as collision/guide). */\nexport function isNonVisualPurpose(prim: Prim): boolean {\n const p = getPurpose(prim);\n return p === \"guide\" || p === \"proxy\";\n}\n\n/** Depth-first iterator over all descendant prims (excluding `prim` itself). */\nexport function* iterDescendants(prim: Prim): Generator<Prim> {\n for (const child of prim.GetChildren()) {\n yield child;\n yield* iterDescendants(child);\n }\n}\n\n/** Collect the prim paths of all Mesh descendants of a link prim. */\nexport function gatherMeshDescendants(prim: Prim): string[] {\n const paths: string[] = [];\n for (const d of iterDescendants(prim)) {\n if (isMesh(d)) paths.push(d.GetPath());\n }\n return paths;\n}\n","/**\n * UsdPhysics schema helpers for robot extraction.\n *\n * Reads the joint/body attributes that matter for kinematics. Values are\n * returned as authored (degrees for revolute limits, stage units for lengths);\n * SI normalization happens in `robot/normalize.ts`.\n */\n\nimport {\n type Mat4,\n makeRotationFromQuat,\n makeTranslation,\n multiply,\n} from \"../kinematics/transforms.js\";\nimport { Quat, type SdfPath, type Vec3 } from \"../parser/ast.js\";\nimport type { Axis, JointType } from \"../robot/RobotDescription.js\";\nimport type { Prim } from \"../usd/Prim.js\";\n\nconst JOINT_TYPE_BY_SCHEMA: Record<string, JointType> = {\n PhysicsFixedJoint: \"fixed\",\n PhysicsRevoluteJoint: \"revolute\",\n PhysicsPrismaticJoint: \"prismatic\",\n};\n\nexport const ARTICULATION_ROOT_API = \"PhysicsArticulationRootAPI\";\nexport const RIGID_BODY_API = \"PhysicsRigidBodyAPI\";\nexport const COLLISION_API = \"PhysicsCollisionAPI\";\n\n/** Base joint type from the prim's schema type, or `null` if not a joint. */\nexport function getJointType(prim: Prim): JointType | null {\n return JOINT_TYPE_BY_SCHEMA[prim.GetTypeName()] ?? null;\n}\n\n/** Resolve `physics:body0` / `physics:body1` target paths (first target each). */\nexport function getJointBodies(prim: Prim): { body0?: SdfPath; body1?: SdfPath } {\n const body0 = prim.GetRelationship(\"physics:body0\").GetTargets()[0];\n const body1 = prim.GetRelationship(\"physics:body1\").GetTargets()[0];\n return {\n ...(body0 !== undefined ? { body0 } : {}),\n ...(body1 !== undefined ? { body1 } : {}),\n };\n}\n\n/** Joint axis token (`physics:axis`); defaults to `\"X\"` per UsdPhysics. */\nexport function getJointAxis(prim: Prim): Axis {\n const v = prim.GetAttribute(\"physics:axis\").Get();\n return v === \"Y\" || v === \"Z\" ? v : \"X\";\n}\n\n/** Raw joint limits as authored (degrees for revolute; `undefined` if unauthored). */\nexport function getJointLimits(prim: Prim): { lower?: number; upper?: number } {\n const lower = readNumber(prim, \"physics:lowerLimit\");\n const upper = readNumber(prim, \"physics:upperLimit\");\n return {\n ...(lower !== undefined ? { lower } : {}),\n ...(upper !== undefined ? { upper } : {}),\n };\n}\n\n/**\n * The joint frame relative to body `index` (0 or 1), as a column-major matrix\n * `T(localPos) · R(localRot)`. Missing components default to identity.\n */\nexport function getJointLocalFrame(prim: Prim, index: 0 | 1): Mat4 {\n const pos = readVec3(prim, `physics:localPos${index}`, [0, 0, 0]);\n const rot = readQuat(prim, `physics:localRot${index}`, Quat.identity());\n return multiply(makeTranslation(pos), makeRotationFromQuat(rot));\n}\n\nexport function hasArticulationRootAPI(prim: Prim): boolean {\n return prim.HasAPI(ARTICULATION_ROOT_API);\n}\n\nexport function hasRigidBodyAPI(prim: Prim): boolean {\n return prim.HasAPI(RIGID_BODY_API);\n}\n\nexport function hasCollisionAPI(prim: Prim): boolean {\n return prim.HasAPI(COLLISION_API);\n}\n\n/** Drive instance name for a joint type (`angular` for revolute, `linear` otherwise). */\nexport function driveKindFor(type: JointType): \"angular\" | \"linear\" {\n return type === \"prismatic\" ? \"linear\" : \"angular\";\n}\n\n/** Read `UsdPhysicsDriveAPI` parameters for the given instance, as authored. */\nexport function getJointDrive(\n prim: Prim,\n kind: \"angular\" | \"linear\",\n): { targetPosition?: number; stiffness?: number; damping?: number; maxForce?: number } {\n const targetPosition = readNumber(prim, `drive:${kind}:physics:targetPosition`);\n const stiffness = readNumber(prim, `drive:${kind}:physics:stiffness`);\n const damping = readNumber(prim, `drive:${kind}:physics:damping`);\n const maxForce = readNumber(prim, `drive:${kind}:physics:maxForce`);\n return {\n ...(targetPosition !== undefined ? { targetPosition } : {}),\n ...(stiffness !== undefined ? { stiffness } : {}),\n ...(damping !== undefined ? { damping } : {}),\n ...(maxForce !== undefined ? { maxForce } : {}),\n };\n}\n\n/** Read `PhysicsJointStateAPI` position for the given instance, as authored. */\nexport function getJointStatePosition(prim: Prim, kind: \"angular\" | \"linear\"): number | undefined {\n return readNumber(prim, `state:${kind}:physics:position`);\n}\n\n// --- typed readers ---------------------------------------------------------\n\nfunction readNumber(prim: Prim, name: string): number | undefined {\n const v = prim.GetAttribute(name).Get();\n return typeof v === \"number\" ? v : undefined;\n}\n\nfunction readVec3(prim: Prim, name: string, def: Vec3): Vec3 {\n const v = prim.GetAttribute(name).Get();\n if (Array.isArray(v) && v.length === 3 && v.every((n) => typeof n === \"number\")) {\n return v as Vec3;\n }\n return def;\n}\n\nfunction readQuat(prim: Prim, name: string, def: Quat): Quat {\n const v = prim.GetAttribute(name).Get();\n return v instanceof Quat ? v : def;\n}\n","/**\n * Builds a kinematic spanning tree from a {@link RobotDescription}.\n *\n * USD physics joints form a directed graph (parent `body0` → child `body1`,\n * with an empty `body0` meaning \"fixed to world\"). Three.js needs a tree, so we\n * pick a root, breadth-first walk the real (link→link) edges, and drop any edge\n * that would revisit a link — those are recorded as {@link KinematicTree.loopJoints}\n * (closed chains / parallel mechanisms) rather than silently corrupting the tree.\n */\n\nimport type { RobotDescription } from \"./RobotDescription.js\";\n\n/** Sentinel parent for a world-fixed joint (`body0` empty). */\nconst WORLD = \"\";\n\nexport type TreeEdge = {\n /** Joint key connecting this node to the child. */\n joint: string;\n /** Child link key. */\n child: string;\n};\n\nexport type KinematicNode = {\n link: string;\n /** Parent link key, or `null` for the root. */\n parent: string | null;\n /** Joint key to the parent, or `null` for the root. */\n jointToParent: string | null;\n children: TreeEdge[];\n /** Distance from the root (root = 0). */\n depth: number;\n};\n\nexport type KinematicTree = {\n root: string;\n /** World-fixed joint attaching the root to the world frame, if any. */\n rootJoint: string | null;\n nodes: Record<string, KinematicNode>;\n /** Link keys in breadth-first order (parents before children). */\n order: string[];\n /** Joints dropped from the tree to break closed loops. */\n loopJoints: string[];\n /** Links not reachable from the root. */\n isolatedLinks: string[];\n warnings: string[];\n};\n\nexport type BuildTreeOptions = {\n onWarn?: (message: string) => void;\n};\n\nexport function buildKinematicTree(\n robot: RobotDescription,\n options: BuildTreeOptions = {},\n): KinematicTree {\n const warnings: string[] = [];\n const warn = (m: string) => {\n warnings.push(m);\n options.onWarn?.(m);\n };\n\n const links = new Set(Object.keys(robot.links));\n\n // Real (link→link) edges, world-fixed attachments, and in-degrees.\n const outgoing = new Map<string, TreeEdge[]>();\n const worldJointByChild = new Map<string, string>();\n const inRealDegree = new Map<string, number>();\n\n for (const [jointKey, joint] of Object.entries(robot.joints)) {\n if (!links.has(joint.child)) {\n warn(`joint \"${jointKey}\": child link \"${joint.child}\" is unknown; skipping edge`);\n continue;\n }\n if (joint.parent === WORLD) {\n if (worldJointByChild.has(joint.child)) {\n warn(`link \"${joint.child}\" is fixed to world by multiple joints; keeping \"${jointKey}\"`);\n }\n worldJointByChild.set(joint.child, jointKey);\n continue;\n }\n if (!links.has(joint.parent)) {\n warn(`joint \"${jointKey}\": parent link \"${joint.parent}\" is unknown; skipping edge`);\n continue;\n }\n const edges = outgoing.get(joint.parent) ?? [];\n edges.push({ joint: jointKey, child: joint.child });\n outgoing.set(joint.parent, edges);\n inRealDegree.set(joint.child, (inRealDegree.get(joint.child) ?? 0) + 1);\n }\n\n const root = chooseRoot(links, inRealDegree, worldJointByChild, robot, warn);\n\n // Breadth-first spanning tree.\n const nodes: Record<string, KinematicNode> = {};\n const order: string[] = [];\n const loopJoints: string[] = [];\n const visited = new Set<string>();\n\n if (root !== \"\") {\n nodes[root] = { link: root, parent: null, jointToParent: null, children: [], depth: 0 };\n visited.add(root);\n order.push(root);\n const queue = [root];\n\n while (queue.length > 0) {\n const cur = queue.shift()!;\n const edges = [...(outgoing.get(cur) ?? [])].sort((a, b) => a.joint.localeCompare(b.joint));\n for (const edge of edges) {\n if (visited.has(edge.child)) {\n loopJoints.push(edge.joint); // revisiting a link closes a loop\n continue;\n }\n visited.add(edge.child);\n nodes[edge.child] = {\n link: edge.child,\n parent: cur,\n jointToParent: edge.joint,\n children: [],\n depth: nodes[cur]!.depth + 1,\n };\n nodes[cur]!.children.push(edge);\n order.push(edge.child);\n queue.push(edge.child);\n }\n }\n }\n\n const isolatedLinks = [...links].filter((l) => !visited.has(l)).sort();\n if (isolatedLinks.length > 0) {\n warn(\n `${isolatedLinks.length} link(s) not reachable from root \"${root}\": ${isolatedLinks.join(\", \")}`,\n );\n }\n if (loopJoints.length > 0) {\n warn(`closed loop(s) detected; dropped joints from tree: ${loopJoints.sort().join(\", \")}`);\n }\n\n return {\n root,\n rootJoint: worldJointByChild.get(root) ?? null,\n nodes,\n order,\n loopJoints: loopJoints.sort(),\n isolatedLinks,\n warnings,\n };\n}\n\n/**\n * Pick the root link. Priority: a link flagged with `PhysicsArticulationRootAPI`,\n * then a world-fixed link, then any link with no real parent. Falls back to the\n * lexicographically-first link if every link has a parent (a full cycle).\n */\nfunction chooseRoot(\n links: Set<string>,\n inRealDegree: Map<string, number>,\n worldJointByChild: Map<string, string>,\n robot: RobotDescription,\n warn: (m: string) => void,\n): string {\n if (links.size === 0) return \"\";\n\n const candidates = [...links].filter((l) => (inRealDegree.get(l) ?? 0) === 0).sort();\n\n if (candidates.length === 0) {\n const fallback = [...links].sort()[0]!;\n warn(`no root candidate (every link has a parent — likely a full cycle); using \"${fallback}\"`);\n return fallback;\n }\n\n const articulation = (robot.articulationRoots ?? []).filter((a) => candidates.includes(a));\n const worldFixed = candidates.filter((c) => worldJointByChild.has(c));\n const chosen = articulation[0] ?? worldFixed[0] ?? candidates[0]!;\n\n if (candidates.length > 1) {\n warn(`multiple root candidates (${candidates.join(\", \")}); using \"${chosen}\"`);\n }\n return chosen;\n}\n","/** SI normalization for joint values. */\n\nimport { DEG2RAD } from \"../kinematics/transforms.js\";\nimport type { JointType } from \"./RobotDescription.js\";\n\nconst isFinite_ = (x: number | undefined): x is number => x !== undefined && Number.isFinite(x);\n\n/**\n * Normalize raw joint limits to SI: revolute/continuous degrees → radians;\n * prismatic kept in stage linear units (global metersPerUnit scaling is applied\n * at the root in M9). Non-finite or unauthored limits become `undefined`.\n */\nexport function normalizeJointLimits(\n type: JointType,\n rawLower: number | undefined,\n rawUpper: number | undefined,\n): { lower?: number; upper?: number } {\n const angular = type === \"revolute\" || type === \"continuous\";\n const conv = (x: number | undefined): number | undefined => {\n if (!isFinite_(x)) return undefined;\n return angular ? x * DEG2RAD : x;\n };\n const lower = conv(rawLower);\n const upper = conv(rawUpper);\n return {\n ...(lower !== undefined ? { lower } : {}),\n ...(upper !== undefined ? { upper } : {}),\n };\n}\n\n/** Convert an authored joint value to SI (angular degrees → radians). */\nexport function jointValueToSI(angular: boolean, raw: number): number {\n return angular ? raw * DEG2RAD : raw;\n}\n\n/**\n * A revolute joint with no finite limits is a continuous (unbounded) joint.\n * Returns the refined joint type.\n */\nexport function refineJointType(\n base: JointType,\n lower: number | undefined,\n upper: number | undefined,\n): JointType {\n if (base === \"revolute\" && lower === undefined && upper === undefined) return \"continuous\";\n return base;\n}\n","/**\n * Extracts a {@link RobotDescription} from a USD {@link Stage}.\n *\n * Collects links (rigid bodies / joint-referenced prims) and the\n * Fixed/Revolute/Prismatic joints connecting them, resolves `body0`/`body1` to\n * link keys, and normalizes limits to SI. The authoritative root link and\n * closed-loop detection come from {@link buildKinematicTree} (M4), whose result\n * is written back into `rootLink` / `loopJoints`.\n */\n\nimport { gatherMeshDescendants, isNonVisualPurpose } from \"../schemas/usdGeom.js\";\nimport {\n driveKindFor,\n getJointAxis,\n getJointBodies,\n getJointDrive,\n getJointLimits,\n getJointLocalFrame,\n getJointStatePosition,\n getJointType,\n hasArticulationRootAPI,\n hasCollisionAPI,\n hasRigidBodyAPI,\n} from \"../schemas/usdPhysics.js\";\nimport type { Prim } from \"../usd/Prim.js\";\nimport type { Stage } from \"../usd/Stage.js\";\nimport type {\n JointDescription,\n JointDriveDescription,\n LinkDescription,\n RobotDescription,\n} from \"./RobotDescription.js\";\nimport { buildKinematicTree } from \"./buildKinematicTree.js\";\nimport { jointValueToSI, normalizeJointLimits, refineJointType } from \"./normalize.js\";\n\nexport type ExtractOptions = {\n /** Override the robot name (defaults to the stage default prim or first root prim). */\n robotName?: string;\n /** Receives non-fatal diagnostics; also collected into `RobotDescription.warnings`. */\n onWarn?: (message: string) => void;\n};\n\n/** World sentinel for a joint parent (fixed to world, `body0` empty). */\nconst WORLD = \"\";\n\nexport function extractRobotDescription(\n stage: Stage,\n options: ExtractOptions = {},\n): RobotDescription {\n const warnings: string[] = [];\n const warn = (m: string) => {\n warnings.push(m);\n options.onWarn?.(m);\n };\n\n // 1. Find joint prims.\n const jointPrims = stage.Traverse().filter((p) => getJointType(p) !== null);\n\n // 2. Collect link prim paths: joint-referenced bodies + rigid bodies.\n const linkPaths = new Set<string>();\n for (const jp of jointPrims) {\n const { body0, body1 } = getJointBodies(jp);\n if (body0) linkPaths.add(body0);\n if (body1) linkPaths.add(body1);\n }\n for (const p of stage.Traverse()) {\n if (hasRigidBodyAPI(p)) linkPaths.add(p.GetPath());\n }\n\n // 3. Choose stable keys (leaf name when unique, else full path).\n const linkKeyByPath = buildKeyMap([...linkPaths]);\n\n // 4. Build link descriptions; note articulation-root links.\n const links: Record<string, LinkDescription> = {};\n const articulationRoots: string[] = [];\n for (const path of linkPaths) {\n const key = linkKeyByPath.get(path)!;\n const prim = stage.GetPrimAtPath(path);\n links[key] = buildLink(path, prim);\n if (prim && hasArticulationRootAPI(prim)) articulationRoots.push(key);\n }\n\n // 5. Build joint descriptions.\n const joints: Record<string, JointDescription> = {};\n const jointKeyByPath = buildKeyMap(jointPrims.map((p) => p.GetPath()));\n for (const jp of jointPrims) {\n const joint = buildJoint(jp, linkKeyByPath, warn);\n if (joint) joints[jointKeyByPath.get(jp.GetPath())!] = joint;\n }\n\n const name =\n options.robotName ??\n stage.GetDefaultPrim()?.GetName() ??\n stage.GetPseudoRoot().GetChildren()[0]?.GetName() ??\n \"robot\";\n\n const robot: RobotDescription = {\n name,\n rootLink: \"\",\n links,\n joints,\n upAxis: stage.GetUpAxis(),\n metersPerUnit: stage.GetMetersPerUnit(),\n ...(articulationRoots.length ? { articulationRoots } : {}),\n };\n\n // 6. Build the spanning tree to set the authoritative root + loop joints.\n const tree = buildKinematicTree(robot, { onWarn: warn });\n robot.rootLink = tree.root;\n if (tree.loopJoints.length) robot.loopJoints = tree.loopJoints;\n if (warnings.length) robot.warnings = warnings;\n\n return robot;\n}\n\nfunction buildLink(path: string, prim: Prim | null): LinkDescription {\n const name = leafName(path);\n if (!prim) return { name, primPath: path, visualPrims: [] };\n\n // Classify each mesh: collision (collision API, or guide/proxy purpose) vs visual.\n const visualPrims: string[] = [];\n const collisionPrims: string[] = [];\n for (const meshPath of gatherMeshDescendants(prim)) {\n const mp = prim.GetStage().GetPrimAtPath(meshPath);\n if (mp && (hasCollisionAPI(mp) || isNonVisualPurpose(mp))) collisionPrims.push(meshPath);\n else visualPrims.push(meshPath);\n }\n return {\n name,\n primPath: path,\n visualPrims,\n ...(collisionPrims.length ? { collisionPrims } : {}),\n };\n}\n\nfunction buildJoint(\n prim: Prim,\n linkKeyByPath: Map<string, string>,\n warn: (m: string) => void,\n): JointDescription | null {\n const base = getJointType(prim);\n if (!base) return null;\n\n const path = prim.GetPath();\n const { body0, body1 } = getJointBodies(prim);\n if (!body1) {\n warn(`${path}: joint has no physics:body1 target; skipping`);\n return null;\n }\n\n const parent = body0 ? (linkKeyByPath.get(body0) ?? body0) : WORLD;\n const child = linkKeyByPath.get(body1) ?? body1;\n\n const raw = getJointLimits(prim);\n const { lower, upper } = normalizeJointLimits(base, raw.lower, raw.upper);\n const type = refineJointType(base, lower, upper);\n\n const joint: JointDescription = {\n name: leafName(path),\n primPath: path,\n type,\n parent,\n child,\n axis: getJointAxis(prim),\n jointFrame0: getJointLocalFrame(prim, 0),\n jointFrame1: getJointLocalFrame(prim, 1),\n ...(lower !== undefined ? { lower } : {}),\n ...(upper !== undefined ? { upper } : {}),\n };\n\n // Initial pose + drive (read here; applied as initial pose in M9).\n const kind = driveKindFor(type);\n const angular = kind === \"angular\";\n const drive = getJointDrive(prim, kind);\n const statePos = getJointStatePosition(prim, kind);\n\n const initialValue =\n statePos !== undefined\n ? jointValueToSI(angular, statePos)\n : drive.targetPosition !== undefined\n ? jointValueToSI(angular, drive.targetPosition)\n : undefined;\n if (initialValue !== undefined) joint.initialValue = initialValue;\n\n const driveDesc: JointDriveDescription = {\n ...(drive.targetPosition !== undefined\n ? { targetPosition: jointValueToSI(angular, drive.targetPosition) }\n : {}),\n ...(drive.stiffness !== undefined ? { stiffness: drive.stiffness } : {}),\n ...(drive.damping !== undefined ? { damping: drive.damping } : {}),\n ...(drive.maxForce !== undefined ? { maxForce: drive.maxForce } : {}),\n };\n if (Object.keys(driveDesc).length > 0) joint.drive = driveDesc;\n\n return joint;\n}\n\n/** Map each path to a stable key: leaf name when unique, else the full path. */\nfunction buildKeyMap(paths: string[]): Map<string, string> {\n const leafCounts = new Map<string, number>();\n for (const p of paths) {\n const leaf = leafName(p);\n leafCounts.set(leaf, (leafCounts.get(leaf) ?? 0) + 1);\n }\n const map = new Map<string, string>();\n for (const p of paths) {\n const leaf = leafName(p);\n map.set(p, leafCounts.get(leaf) === 1 ? leaf : p);\n }\n return map;\n}\n\nfunction leafName(path: string): string {\n const parts = path.split(\"/\").filter(Boolean);\n return parts[parts.length - 1] ?? path;\n}\n"]}