ldr 0.14.0 → 0.16.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.
@@ -1,4 +1,4 @@
1
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/spec.ts
1
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/spec.ts
2
2
  var norm = (s) => s.trim().toLowerCase().replace(/\\/g, "/").replace(/\/+/g, "/");
3
3
  function parseColor(tok) {
4
4
  if (/^0x/i.test(tok))
@@ -690,7 +690,7 @@ function fileStepViews(f) {
690
690
  viewMemo.set(f, out);
691
691
  return out;
692
692
  }
693
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/model.ts
693
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/model.ts
694
694
  var CALLOUT_END = 999999;
695
695
  var stepKey = (steps) => steps.map((x) => String(x).padStart(6, "0")).join(".") + "~";
696
696
  function flatten(doc, opts = {}) {
@@ -1039,7 +1039,7 @@ function parseLDConfig(text) {
1039
1039
  }
1040
1040
  return out;
1041
1041
  }
1042
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/instructions.ts
1042
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/instructions.ts
1043
1043
  var MIN_VIS = 0.5;
1044
1044
  var REORIENT = 0.35;
1045
1045
  var deg = Math.PI / 180;
@@ -1407,10 +1407,10 @@ function planStepViews(insts, parts, stepOf, nSteps, o = {}) {
1407
1407
  }
1408
1408
  };
1409
1409
  }
1410
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/render.ts
1410
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/render.ts
1411
1411
  import * as THREE from "three";
1412
1412
 
1413
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/pack-io.ts
1413
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/pack-io.ts
1414
1414
  import { decompress } from "fzstd";
1415
1415
  async function decompressPack(data) {
1416
1416
  const u = data instanceof Uint8Array ? data : new Uint8Array(data);
@@ -1429,7 +1429,7 @@ function decodePack(buf) {
1429
1429
  return { header, arr, bytes: buf.byteLength, buffer: buf };
1430
1430
  }
1431
1431
 
1432
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/cull.ts
1432
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/cull.ts
1433
1433
  var upright = (m, o = 0) => Math.abs(m[o + 7] - 1) < 0.001 && Math.abs(m[o + 4]) < 0.001 && Math.abs(m[o + 10]) < 0.001;
1434
1434
  var prepCache = new WeakMap;
1435
1435
  function prepPart(H, part) {
@@ -1746,7 +1746,7 @@ function precomputeCull(instances, H, useTex = true) {
1746
1746
  return cullCore(s.all, H, s.nSteps > 1 ? s.stepOf : undefined);
1747
1747
  }
1748
1748
 
1749
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/render.ts
1749
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/render.ts
1750
1750
  async function loadPack(url) {
1751
1751
  const res = await fetch(url);
1752
1752
  if (!res.ok)
@@ -2329,7 +2329,7 @@ class LdrLodRoot extends THREE.LOD {
2329
2329
  }
2330
2330
  }
2331
2331
  }
2332
- function buildStudMeshes(insts, H, cull, arr, LOD, color, matOf, steps, colorIndex) {
2332
+ function* buildStudMeshesGen(insts, H, cull, arr, LOD, color, matOf, steps, colorIndex) {
2333
2333
  const bKind = [], bMat = [];
2334
2334
  const bAll = [];
2335
2335
  const studBucket = new Uint16Array(cull.nStuds);
@@ -2384,6 +2384,8 @@ function buildStudMeshes(insts, H, cull, arr, LOD, color, matOf, steps, colorInd
2384
2384
  const instNeg = det12(a) < 0 ? 1 : 0;
2385
2385
  const B = pp.studM;
2386
2386
  for (let si = 0;si < pp.nStuds; si++, j++) {
2387
+ if ((j & 32767) === 0 && j)
2388
+ yield;
2387
2389
  const o = si * 12, b0 = B[o], b1 = B[o + 1], b2 = B[o + 2];
2388
2390
  const neg = (instNeg ^ ps.neg[si]) === 1;
2389
2391
  const km = ps.kid[si] * 2 + (neg ? 1 : 0);
@@ -2446,23 +2448,39 @@ function buildStudMeshes(insts, H, cull, arr, LOD, color, matOf, steps, colorInd
2446
2448
  colCache.set(c, x = color(c));
2447
2449
  return x;
2448
2450
  };
2449
- forEachStud(insts, H, (j, owner, w, _kind, col, si) => {
2450
- const sm = sMesh[studCl[j]];
2451
- if (!sm)
2452
- return;
2453
- const im = sm.im;
2454
- const slot = studSlot[j];
2455
- if (sm.slots) {
2456
- const t = sm.slots;
2457
- t.own[slot] = steps[owner];
2458
- t.hide[slot] = cull.studHideStep[j];
2459
- t.inst[slot] = owner;
2460
- t.stud[slot] = si;
2461
- t.col[slot] = colorIndex(col);
2462
- }
2463
- writeM4(im.instanceMatrix.array, slot * 16, w);
2464
- colorOf(col).toArray(im.instanceColor.array, slot * 3);
2465
- });
2451
+ yield;
2452
+ {
2453
+ const w = new Float64Array(12);
2454
+ let j = 0;
2455
+ for (let idx = 0;idx < insts.length; idx++) {
2456
+ const it = insts[idx];
2457
+ const pp = prepPart(H, it.part);
2458
+ if (!pp || !pp.nStuds)
2459
+ continue;
2460
+ for (let si = 0;si < pp.nStuds; si++, j++) {
2461
+ if ((j & 32767) === 0 && j)
2462
+ yield;
2463
+ mul12To(it.m, pp.studM, si * 12, w);
2464
+ const sm = sMesh[studCl[j]];
2465
+ if (!sm)
2466
+ continue;
2467
+ const im = sm.im;
2468
+ const slot = studSlot[j];
2469
+ const sc = pp.color[si];
2470
+ const col = sc === "16" ? it.color : sc;
2471
+ if (sm.slots) {
2472
+ const t = sm.slots;
2473
+ t.own[slot] = steps[idx];
2474
+ t.hide[slot] = cull.studHideStep[j];
2475
+ t.inst[slot] = idx;
2476
+ t.stud[slot] = si;
2477
+ t.col[slot] = colorIndex(col);
2478
+ }
2479
+ writeM4(im.instanceMatrix.array, slot * 16, w);
2480
+ colorOf(col).toArray(im.instanceColor.array, slot * 3);
2481
+ }
2482
+ }
2483
+ }
2466
2484
  return sMesh;
2467
2485
  }
2468
2486
  function undersideGroups(ids, insts) {
@@ -2492,7 +2510,7 @@ function undersideGroups(ids, insts) {
2492
2510
  out.push({ ids: rest, ax: null });
2493
2511
  return out;
2494
2512
  }
2495
- function buildLdrScene(insts, pack, P, color, mark) {
2513
+ function* buildLdrSceneGen(insts, pack, P, color, mark) {
2496
2514
  const { header: H, arr } = pack;
2497
2515
  const LOD = P.lod !== false;
2498
2516
  const EDGES = !!P.edges;
@@ -2501,6 +2519,7 @@ function buildLdrScene(insts, pack, P, color, mark) {
2501
2519
  root.px = P.lodPx ?? 0.5;
2502
2520
  root.edgePpl = (P.lodEdgePx ?? 0.5) / 20;
2503
2521
  root.edgeMinPx = P.lodEdgeMinPx ?? 0.15;
2522
+ yield root;
2504
2523
  const trackVp = (r) => {
2505
2524
  const rt = r.getRenderTarget();
2506
2525
  const h = rt ? rt.height : r.getContext().drawingBufferHeight;
@@ -2569,9 +2588,11 @@ function buildLdrScene(insts, pack, P, color, mark) {
2569
2588
  }
2570
2589
  b.ids.push(i);
2571
2590
  });
2591
+ yield root;
2572
2592
  const steps = P.steps;
2573
2593
  let cull = P.cull ?? cullCore(insts, H, steps);
2574
2594
  mark("culling");
2595
+ yield root;
2575
2596
  const stepBatches = [];
2576
2597
  const stepBatched = [];
2577
2598
  const instM = steps ? new Float64Array(insts.length * 12) : null;
@@ -2714,6 +2735,7 @@ function buildLdrScene(insts, pack, P, color, mark) {
2714
2735
  };
2715
2736
  const coldByMat = new Map;
2716
2737
  for (const [, bucket] of byPart) {
2738
+ yield root;
2717
2739
  const part = bucket.part;
2718
2740
  const p = H.parts[part];
2719
2741
  const idsAll = bucket.ids;
@@ -2815,9 +2837,11 @@ function buildLdrScene(insts, pack, P, color, mark) {
2815
2837
  list.push({ part, p, mat, ids: idsAll });
2816
2838
  }
2817
2839
  }
2840
+ yield root;
2818
2841
  const tmpM = new THREE.Matrix4;
2819
2842
  const tmpC = new THREE.Color;
2820
2843
  for (const [mat, items] of coldByMat) {
2844
+ yield root;
2821
2845
  const entries = [];
2822
2846
  for (const it of items)
2823
2847
  for (const id of it.ids)
@@ -3060,13 +3084,24 @@ function buildLdrScene(insts, pack, P, color, mark) {
3060
3084
  }
3061
3085
  }
3062
3086
  }
3063
- const sMesh = buildStudMeshes(insts, H, cull, arr, LOD, color, (c, mirror) => materialFor(c, mirror, false), steps, steps && colorIndex);
3087
+ yield root;
3088
+ const _studGen = buildStudMeshesGen(insts, H, cull, arr, LOD, color, (c, mirror) => materialFor(c, mirror, false), steps, steps && colorIndex);
3089
+ let _studR = _studGen.next();
3090
+ while (!_studR.done) {
3091
+ yield root;
3092
+ _studR = _studGen.next();
3093
+ }
3094
+ const sMesh = _studR.value;
3064
3095
  const sKind = sMesh.map((x) => x?.kind ?? "");
3065
3096
  const sVis = sMesh.map((x) => x?.vis ?? 0);
3066
3097
  const STUD_ERR = 12;
3067
- sMesh.forEach((sm, ci) => {
3098
+ let _coopS = 0;
3099
+ for (let ci = 0;ci < sMesh.length; ci++) {
3100
+ const sm = sMesh[ci];
3068
3101
  if (!sm)
3069
- return;
3102
+ continue;
3103
+ if ((++_coopS & 3) === 0)
3104
+ yield root;
3070
3105
  const im = sm.im;
3071
3106
  const kind = sKind[ci];
3072
3107
  const k = H.studKinds[kind];
@@ -3095,7 +3130,8 @@ function buildLdrScene(insts, pack, P, color, mark) {
3095
3130
  toggles.push({ mesh: countTo(() => objs), all: trim ? vis : all, visible: vis, flag: "studs" });
3096
3131
  if (sm.slots)
3097
3132
  stepBatches.push({ im, objs, flag: "studs", ...sm.slots });
3098
- });
3133
+ }
3134
+ yield root;
3099
3135
  stats.uncertParts = Object.values(H.parts).filter((x) => x.uncert).length;
3100
3136
  stats.uncertBatches = nUncert;
3101
3137
  let condOn = true, edgesOn = true;
@@ -3261,6 +3297,55 @@ function buildLdrScene(insts, pack, P, color, mark) {
3261
3297
  byPart.clear();
3262
3298
  return { root, stats, setCull, setSide, setEdges, setCond, setLod, setStep, box, texturesReady, trimmed };
3263
3299
  }
3300
+ function buildLdrScene(insts, pack, P, color, mark) {
3301
+ const g = buildLdrSceneGen(insts, pack, P, color, mark);
3302
+ let r = g.next();
3303
+ while (!r.done)
3304
+ r = g.next();
3305
+ return r.value;
3306
+ }
3307
+ function yieldToMain() {
3308
+ const s = globalThis.scheduler;
3309
+ if (s && typeof s.yield === "function")
3310
+ return s.yield();
3311
+ return new Promise((res) => {
3312
+ const c = new MessageChannel;
3313
+ c.port1.onmessage = () => res();
3314
+ c.port2.postMessage(null);
3315
+ });
3316
+ }
3317
+ async function buildLdrSceneAsync(insts, pack, P, color, mark, opts = {}) {
3318
+ const sliceMs = opts.sliceMs ?? 8;
3319
+ const postPaint = opts.postPaintSliceMs ?? Math.max(sliceMs, 24);
3320
+ let painting = typeof opts.onSlice === "function";
3321
+ let effective = painting ? sliceMs : postPaint;
3322
+ const g = buildLdrSceneGen(insts, pack, P, color, mark);
3323
+ let r = g.next();
3324
+ let sliceStart = performance.now();
3325
+ let longestSliceMs = 0;
3326
+ let yields = 0;
3327
+ while (!r.done) {
3328
+ const now = performance.now();
3329
+ if (now - sliceStart >= effective) {
3330
+ longestSliceMs = Math.max(longestSliceMs, now - sliceStart);
3331
+ yields++;
3332
+ if (painting && opts.onSlice) {
3333
+ const cont = await opts.onSlice(r.value);
3334
+ if (cont === false) {
3335
+ painting = false;
3336
+ effective = postPaint;
3337
+ }
3338
+ }
3339
+ await yieldToMain();
3340
+ sliceStart = performance.now();
3341
+ }
3342
+ r = g.next();
3343
+ }
3344
+ longestSliceMs = Math.max(longestSliceMs, performance.now() - sliceStart);
3345
+ const value = r.value;
3346
+ value.stats = { ...value.stats, longestSliceMs: +longestSliceMs.toFixed(2), buildYields: yields };
3347
+ return value;
3348
+ }
3264
3349
  async function warmPackGeometry(pack, stop = () => false, sliceMs = 8) {
3265
3350
  const { header: H, arr } = pack;
3266
3351
  const list = [];
@@ -3283,7 +3368,7 @@ async function warmPackGeometry(pack, stop = () => false, sliceMs = 8) {
3283
3368
  await new Promise((r) => setTimeout(r, 0));
3284
3369
  }
3285
3370
  }
3286
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/scene.ts
3371
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/scene.ts
3287
3372
  import * as THREE2 from "three";
3288
3373
  function colorFn(src, pack, fallback) {
3289
3374
  const table = new Map;
@@ -3343,6 +3428,12 @@ function toPlastic(old) {
3343
3428
  return m;
3344
3429
  }
3345
3430
  function createLdrObject(instances, pack, options = {}) {
3431
+ return createLdrObjectInner(instances, pack, options, false);
3432
+ }
3433
+ async function createLdrObjectAsync(instances, pack, options = {}) {
3434
+ return createLdrObjectInner(instances, pack, options, true);
3435
+ }
3436
+ function createLdrObjectInner(instances, pack, options, progressive) {
3346
3437
  const o = { edges: true, conditionalLines: true, cullStuds: true, cullUndersides: true, side: "front", material: "plastic", ...options };
3347
3438
  const color = colorFn(o.colors, pack, new THREE2.Color(o.fallbackColor ?? 10528169));
3348
3439
  const useTex = o.textures !== false;
@@ -3384,9 +3475,9 @@ function createLdrObject(instances, pack, options = {}) {
3384
3475
  };
3385
3476
  const multiStep = uniq.length > 1;
3386
3477
  const drawnAt = (step, mask) => all.filter((i, k) => (step == null || stepOf[k] <= step) && (!mask || mask[k]) && pack.header.parts[i.part]).length;
3387
- const build = () => {
3388
- const t0 = performance.now();
3389
- cur = buildLdrScene(all, pack, { cullStuds: cs, cullUnder: cu, edges: o.edges, side, cond: o.conditionalLines, condStuds: o.conditionalStudLines !== false, tex: o.textures !== false, lod: o.lod !== false, lodPx: o.lodPx, lodEdgePx: o.lodEdgePx, lodEdgeMinPx: o.lodEdgeMinPx, lodUnder: o.lodUnder, steps: multiStep ? stepOf : undefined, cull: o.precomputedCull }, color, () => {});
3478
+ const sceneOpts = () => ({ cullStuds: cs, cullUnder: cu, edges: o.edges, side, cond: o.conditionalLines, condStuds: o.conditionalStudLines !== false, tex: o.textures !== false, lod: o.lod !== false, lodPx: o.lodPx, lodEdgePx: o.lodEdgePx, lodEdgeMinPx: o.lodEdgeMinPx, lodUnder: o.lodUnder, steps: multiStep ? stepOf : undefined, cull: o.precomputedCull });
3479
+ const applyBuilt = (built, t0) => {
3480
+ cur = built;
3390
3481
  pairs.clear();
3391
3482
  if (o.material === "plastic")
3392
3483
  cur.root.traverse((x) => {
@@ -3405,8 +3496,9 @@ function createLdrObject(instances, pack, options = {}) {
3405
3496
  cur.setCond(false);
3406
3497
  if (!lodOn)
3407
3498
  cur.setLod(false);
3408
- object.add(cur.root);
3409
- Object.assign(stats, { drawn: drawnAt(null), studsTotal: cur.stats.studsTotal, studsHidden: cur.stats.studsHidden, undersTotal: cur.stats.undersTotal, undersHidden: cur.stats.undersHidden, condBatches: cur.stats.condBatches ?? 0, texBatches: cur.stats.texBatches ?? 0, textures: cur.stats.textures ?? 0, clusters: cur.stats.clusters ?? 0, buildMs: performance.now() - t0 });
3499
+ if (cur.root.parent !== object)
3500
+ object.add(cur.root);
3501
+ Object.assign(stats, { drawn: drawnAt(null), studsTotal: cur.stats.studsTotal, studsHidden: cur.stats.studsHidden, undersTotal: cur.stats.undersTotal, undersHidden: cur.stats.undersHidden, condBatches: cur.stats.condBatches ?? 0, texBatches: cur.stats.texBatches ?? 0, textures: cur.stats.textures ?? 0, clusters: cur.stats.clusters ?? 0, longestSliceMs: cur.stats.longestSliceMs, buildYields: cur.stats.buildYields, buildMs: performance.now() - t0 });
3410
3502
  api.texturesReady = cur.texturesReady;
3411
3503
  };
3412
3504
  const setStep = (step, mask = null) => {
@@ -3416,63 +3508,87 @@ function createLdrObject(instances, pack, options = {}) {
3416
3508
  Object.assign(stats, cur.setStep(step, mask), { drawn: drawnAt(step, mask), buildMs: performance.now() - t0 });
3417
3509
  };
3418
3510
  const api = { texturesReady: Promise.resolve() };
3419
- build();
3420
- if (o.step != null)
3421
- setStep(o.step);
3422
- return Object.assign(api, {
3423
- object,
3424
- stats,
3425
- stepCount: uniq.length,
3426
- stepViews,
3427
- setStep,
3428
- setEdges: (v) => {
3429
- edges = v;
3430
- cur.setEdges(v);
3431
- },
3432
- setConditionalLines: (v) => {
3433
- cond = v;
3434
- cur.setCond(v);
3435
- },
3436
- setCulling: (a, b) => {
3437
- cs = a;
3438
- cu = b;
3439
- if (!a && cur.trimmed.studs || !b && cur.trimmed.under) {
3440
- disposeCur();
3441
- build();
3442
- } else
3443
- cur.setCull(a, b);
3444
- },
3445
- setLod: (v) => {
3446
- lodOn = v;
3447
- cur.setLod(v);
3448
- },
3449
- setSide: (s) => {
3450
- side = s;
3451
- cur.setSide(s === "front");
3452
- for (const [p, old] of pairs) {
3453
- p.side = old.side;
3454
- p.needsUpdate = true;
3455
- }
3456
- },
3457
- getBox: (target = new THREE2.Box3) => {
3458
- object.updateMatrixWorld(true);
3459
- target.makeEmpty();
3460
- object.traverse((x) => {
3461
- if (x.isInstancedMesh && x.count && !x.userData.ldrLod) {
3462
- x.computeBoundingBox();
3463
- const b = x.boundingBox.clone().applyMatrix4(x.matrixWorld);
3464
- target.union(b);
3511
+ const finish = () => {
3512
+ if (o.step != null)
3513
+ setStep(o.step);
3514
+ return Object.assign(api, {
3515
+ object,
3516
+ stats,
3517
+ stepCount: uniq.length,
3518
+ stepViews,
3519
+ setStep,
3520
+ setEdges: (v) => {
3521
+ edges = v;
3522
+ cur.setEdges(v);
3523
+ },
3524
+ setConditionalLines: (v) => {
3525
+ cond = v;
3526
+ cur.setCond(v);
3527
+ },
3528
+ setCulling: (a, b) => {
3529
+ cs = a;
3530
+ cu = b;
3531
+ if (!a && cur.trimmed.studs || !b && cur.trimmed.under) {
3532
+ disposeCur();
3533
+ const t0 = performance.now();
3534
+ applyBuilt(buildLdrScene(all, pack, sceneOpts(), color, () => {}), t0);
3535
+ } else
3536
+ cur.setCull(a, b);
3537
+ },
3538
+ setLod: (v) => {
3539
+ lodOn = v;
3540
+ cur.setLod(v);
3541
+ },
3542
+ setSide: (s) => {
3543
+ side = s;
3544
+ cur.setSide(s === "front");
3545
+ for (const [p, old] of pairs) {
3546
+ p.side = old.side;
3547
+ p.needsUpdate = true;
3465
3548
  }
3466
- });
3467
- return target;
3468
- },
3469
- dispose: disposeCur
3470
- });
3549
+ },
3550
+ getBox: (target = new THREE2.Box3) => {
3551
+ object.updateMatrixWorld(true);
3552
+ target.makeEmpty();
3553
+ object.traverse((x) => {
3554
+ if (x.isInstancedMesh && x.count && !x.userData.ldrLod) {
3555
+ x.computeBoundingBox();
3556
+ const b = x.boundingBox.clone().applyMatrix4(x.matrixWorld);
3557
+ target.union(b);
3558
+ }
3559
+ });
3560
+ return target;
3561
+ },
3562
+ dispose: disposeCur
3563
+ });
3564
+ };
3565
+ if (!progressive) {
3566
+ const t0 = performance.now();
3567
+ applyBuilt(buildLdrScene(all, pack, sceneOpts(), color, () => {}), t0);
3568
+ return finish();
3569
+ }
3570
+ return (async () => {
3571
+ const t0 = performance.now();
3572
+ const so = sceneOpts();
3573
+ if (!so.cull)
3574
+ so.cull = cullCore(all, pack.header, so.steps);
3575
+ const built = await buildLdrSceneAsync(all, pack, so, color, () => {}, {
3576
+ sliceMs: o.sliceMs,
3577
+ postPaintSliceMs: o.postPaintSliceMs,
3578
+ onSlice: o.onSlice ? async (root) => {
3579
+ if (root.parent !== object)
3580
+ object.add(root);
3581
+ return await o.onSlice();
3582
+ } : undefined
3583
+ });
3584
+ applyBuilt(built, t0);
3585
+ return finish();
3586
+ })();
3471
3587
  }
3472
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/parts-cdn.ts
3588
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/parts-cdn.ts
3473
3589
  import { decompress as decompress2 } from "fzstd";
3474
3590
 
3475
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/embedded.ts
3591
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/embedded.ts
3476
3592
  function splitFiles(text, fallback) {
3477
3593
  const files = new Map;
3478
3594
  let cur = null, saw = false;
@@ -3544,7 +3660,7 @@ function embeddedKeys(text, names, fallback = "main.ldr") {
3544
3660
  return out;
3545
3661
  }
3546
3662
 
3547
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/parts-cdn.ts
3663
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/parts-cdn.ts
3548
3664
  var DEFAULT_PARTS_CDN = "https://ldr-demo.vercel.app/cdn/v1/";
3549
3665
  var indexCache = new Map;
3550
3666
  var shardCache = new Map;
@@ -3704,10 +3820,10 @@ async function prepareModel(source, o = {}) {
3704
3820
  return { insts, pack, missing, requests, bytes, cull, timings: { fetchModel: t1 - t0, parse: t2 - t1, parts: t3 - t2, ...cull ? { cull: performance.now() - t3 } : {} } };
3705
3821
  }
3706
3822
 
3707
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/load-worker.gen.ts
3823
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/load-worker.gen.ts
3708
3824
  var load_worker_gen_default = 'var ht=ArrayBuffer,W=Uint8Array,ge=Uint16Array,gt=Int16Array;var be=Int32Array,Ce=function(e,t,n){if(W.prototype.slice)return W.prototype.slice.call(e,t,n);if(t==null||t<0)t=0;if(n==null||n>e.length)n=e.length;var r=new W(n-t);return r.set(e.subarray(t,n)),r},ce=function(e,t,n,r){if(W.prototype.fill)return W.prototype.fill.call(e,t,n,r);if(n==null||n<0)n=0;if(r==null||r>e.length)r=e.length;for(;n<r;++n)e[n]=t;return e},bt=function(e,t,n,r){if(W.prototype.copyWithin)return W.prototype.copyWithin.call(e,t,n,r);if(n==null||n<0)n=0;if(r==null||r>e.length)r=e.length;while(n<r)e[t++]=e[n++]};var dt=["invalid zstd data","window size too large (>2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],K=function(e,t,n){var r=Error(t||dt[e]);if(r.code=e,Error.captureStackTrace)Error.captureStackTrace(r,K);if(!n)throw r;return r},Be=function(e,t,n){var r=0,s=0;for(;r<n;++r)s|=e[t++]<<(r<<3);return s},xt=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},yt=function(e,t){var n=e[0]|e[1]<<8|e[2]<<16;if(n==3126568&&e[3]==253){var r=e[4],s=r>>5&1,o=r>>2&1,i=r&3,l=r>>6;if(r&8)K(0);var a=6-s,c=i==3?4:i,p=Be(e,a,c);a+=c;var m=l?1<<l:s,h=Be(e,a,m)+(l==1&&256),d=h;if(!s){var C=1<<10+(e[5]>>3);d=C+(C>>3)*(e[5]&7)}if(d>2145386496)K(1);var u=new W((t==1?h||d:t?0:d)+12);return u[0]=1,u[4]=4,u[8]=8,{b:a+m,y:0,l:0,d:p,w:t&&t!=1?t:u.subarray(12),e:d,o:new be(u.buffer,0,3),u:h,c:o,m:Math.min(131072,d)}}else if((n>>4|e[3]<<20)==25481893)return xt(e,4)+8;K(0)},re=function(e){var t=0;for(;1<<t<=e;++t);return t-1},ue=function(e,t,n){var r=(t<<3)+4,s=(e[t]&15)+5;if(s>n)K(3);var o=1<<s,i=o,l=-1,a=-1,c=-1,p=o,m=new ht(512+(o<<2)),h=new gt(m,0,256),d=new ge(m,0,256),C=new ge(m,512,o),u=512+(o<<1),b=new W(m,u,o),S=new W(m,u+o);while(l<255&&i>0){var g=re(i+1),f=r>>3,A=(1<<g+1)-1,z=(e[f]|e[f+1]<<8|e[f+2]<<16)>>(r&7)&A,x=(1<<g)-1,M=A-i-1,L=z&x;if(L<M)r+=g,z=L;else if(r+=g+1,z>x)z-=M;if(h[++l]=--z,z==-1)i+=z,b[--p]=l;else i-=z;if(!z)do{var D=r>>3;a=(e[D]|e[D+1]<<8)>>(r&7)&3,r+=2,l+=a}while(a==3)}if(l>255||i)K(0);var E=0,U=(o>>1)+(o>>3)+3,X=o-1;for(var H=0;H<=l;++H){var v=h[H];if(v<1){d[H]=-v;continue}for(c=0;c<v;++c){b[E]=H;do E=E+U&X;while(E>=p)}}if(E)K(0);for(c=0;c<o;++c){var w=d[b[c]]++,P=S[c]=s-re(w);C[c]=(w<<P)-o}return[r+7>>3,{b:s,s:b,n:S,t:C}]},wt=function(e,t){var n=0,r=-1,s=new W(292),o=e[t],i=s.subarray(0,256),l=s.subarray(256,268),a=new ge(s.buffer,268);if(o<128){var c=ue(e,t+1,6),p=c[0],m=c[1];t+=o;var h=p<<3,d=e[t];if(!d)K(0);var C=0,u=0,b=m.b,S=b,g=(++t<<3)-8+re(d);for(;;){if(g-=b,g<h)break;var f=g>>3;if(C+=(e[f]|e[f+1]<<8)>>(g&7)&(1<<b)-1,i[++r]=m.s[C],g-=S,g<h)break;f=g>>3,u+=(e[f]|e[f+1]<<8)>>(g&7)&(1<<S)-1,i[++r]=m.s[u],b=m.n[C],C=m.t[C],S=m.n[u],u=m.t[u]}if(++r>255)K(0)}else{r=o-127;for(;n<r;n+=2){var A=e[++t];i[n]=A>>4,i[n+1]=A&15}++t}var z=0;for(n=0;n<r;++n){var x=i[n];if(x>11)K(0);z+=x&&1<<x-1}var M=re(z)+1,L=1<<M,D=L-z;if(D&D-1)K(0);i[r++]=re(D)+1;for(n=0;n<r;++n){var x=i[n];++l[i[n]=x&&M+1-x]}var E=new W(L<<1),U=E.subarray(0,L),X=E.subarray(L);a[M]=0;for(n=M;n>0;--n){var H=a[n];ce(X,n,H,a[n-1]=H+l[n]*(1<<M-n))}if(a[0]!=L)K(0);for(n=0;n<r;++n){var v=i[n];if(v){var w=a[v];ce(U,n,w,a[v]=w+(1<<M-v))}}return[t,{n:X,b:M,s:U}]},At=ue(new W([81,16,99,140,49,198,24,99,12,33,196,24,99,102,102,134,70,146,4]),0,6)[1],vt=ue(new W([33,20,196,24,99,140,33,132,16,66,8,33,132,16,66,8,33,68,68,68,68,68,68,68,68,36,9]),0,6)[1],Mt=ue(new W([32,132,16,66,102,70,68,68,68,68,36,73,2]),0,5)[1],$e=function(e,t){var n=e.length,r=new be(n);for(var s=0;s<n;++s)r[s]=t,t+=1<<e[s];return r},Ee=new W(new be([0,0,0,0,16843009,50528770,134678020,202050057,269422093]).buffer,0,36),Ct=$e(Ee,0),Se=new W(new be([0,0,0,0,0,0,0,0,16843009,50528770,117769220,185207048,252579084,16]).buffer,0,53),Et=$e(Se,3),le=function(e,t,n){var r=e.length,s=t.length,o=e[r-1],i=(1<<n.b)-1,l=-n.b;if(!o)K(0);var a=0,c=n.b,p=(r<<3)-8+re(o)-c,m=-1;for(;p>l&&m<s;){var h=p>>3,d=(e[h]|e[h+1]<<8|e[h+2]<<16)>>(p&7);a=(a<<c|d)&i,t[++m]=n.s[a],p-=c=n.n[a]}if(p!=l||m+1!=s)K(0)},St=function(e,t,n){var r=6,s=t.length,o=s+3>>2,i=o<<1,l=o+i;le(e.subarray(r,r+=e[0]|e[1]<<8),t.subarray(0,o),n),le(e.subarray(r,r+=e[2]|e[3]<<8),t.subarray(o,i),n),le(e.subarray(r,r+=e[4]|e[5]<<8),t.subarray(i,l),n),le(e.subarray(r),t.subarray(l),n)},Lt=function(e,t,n){var r,s=t.b,o=e[s],i=o>>1&3;t.l=o&1;var l=o>>3|e[s+1]<<5|e[s+2]<<13,a=(s+=3)+l;if(i==1){if(s>=e.length)return;if(t.b=s+1,n)return ce(n,e[s],t.y,t.y+=l),n;return ce(new W(l),e[s])}if(a>e.length)return;if(i==0){if(t.b=a,n)return n.set(e.subarray(s,a),t.y),t.y+=l,n;return Ce(e,s,a)}if(i==2){var c=e[s],p=c&3,m=c>>2&3,h=c>>4,d=0,C=0;if(p<2)if(m&1)h|=e[++s]<<4|(m&2&&e[++s]<<12);else h=c>>3;else if(C=m,m<2)h|=(e[++s]&63)<<4,d=e[s]>>6|e[++s]<<2;else if(m==2)h|=e[++s]<<4|(e[++s]&3)<<12,d=e[s]>>2|e[++s]<<6;else h|=e[++s]<<4|(e[++s]&63)<<12,d=e[s]>>6|e[++s]<<2|e[++s]<<10;++s;var u=n?n.subarray(t.y,t.y+t.m):new W(t.m),b=u.length-h;if(p==0)u.set(e.subarray(s,s+=h),b);else if(p==1)ce(u,e[s++],b);else{var S=t.h;if(p==2){var g=wt(e,s);d+=s-(s=g[0]),t.h=S=g[1]}else if(!S)K(0);(C?St:le)(e.subarray(s,s+=d),u.subarray(b),S)}var f=e[s++];if(f){if(f==255)f=(e[s++]|e[s++]<<8)+32512;else if(f>127)f=f-128<<8|e[s++];var A=e[s++];if(A&3)K(0);var z=[vt,Mt,At];for(var x=2;x>-1;--x){var M=A>>(x<<1)+2&3;if(M==1){var L=new W([0,0,e[s++]]);z[x]={s:L.subarray(2,3),n:L.subarray(0,1),t:new ge(L.buffer,0,1),b:0}}else if(M==2)r=ue(e,s,9-(x&1)),s=r[0],z[x]=r[1];else if(M==3){if(!t.t)K(0);z[x]=t.t[x]}}var D=t.t=z,E=D[0],U=D[1],X=D[2],H=e[a-1];if(!H)K(0);var v=(a<<3)-8+re(H)-X.b,w=v>>3,P=0,V=(e[w]|e[w+1]<<8)>>(v&7)&(1<<X.b)-1;w=(v-=U.b)>>3;var I=(e[w]|e[w+1]<<8)>>(v&7)&(1<<U.b)-1;w=(v-=E.b)>>3;var B=(e[w]|e[w+1]<<8)>>(v&7)&(1<<E.b)-1;for(++f;--f;){var T=X.s[V],y=X.n[V],N=E.s[B],R=E.n[B],k=U.s[I],O=U.n[I];w=(v-=k)>>3;var j=1<<k,F=j+((e[w]|e[w+1]<<8|e[w+2]<<16|e[w+3]<<24)>>>(v&7)&j-1);w=(v-=Se[N])>>3;var G=Et[N]+((e[w]|e[w+1]<<8|e[w+2]<<16)>>(v&7)&(1<<Se[N])-1);w=(v-=Ee[T])>>3;var _=Ct[T]+((e[w]|e[w+1]<<8|e[w+2]<<16)>>(v&7)&(1<<Ee[T])-1);if(w=(v-=y)>>3,V=X.t[V]+((e[w]|e[w+1]<<8)>>(v&7)&(1<<y)-1),w=(v-=R)>>3,B=E.t[B]+((e[w]|e[w+1]<<8)>>(v&7)&(1<<R)-1),w=(v-=O)>>3,I=U.t[I]+((e[w]|e[w+1]<<8)>>(v&7)&(1<<O)-1),F>3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=F-=3;else{var Z=F-(_!=0);if(Z){if(F=Z==3?t.o[0]-1:t.o[Z],Z>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=F}else F=t.o[0]}for(var x=0;x<_;++x)u[P+x]=u[b+x];P+=_,b+=_;var q=P-F;if(q<0){var J=-q,ee=t.e+q;if(J>G)J=G;for(var x=0;x<J;++x)u[P+x]=t.w[ee+x];P+=J,G-=J,q=0}for(var x=0;x<G;++x)u[P+x]=u[q+x];P+=G}if(P!=b)while(b<u.length)u[P++]=u[b++];else P=u.length;if(n)t.y+=P;else u=Ce(u,0,P)}else if(n){if(t.y+=h,b)for(var x=0;x<h;++x)u[x]=u[b+x]}else if(b)u=Ce(u,b);return t.b=a,u}K(2)},Tt=function(e,t){if(e.length==1)return e[0];var n=new W(t);for(var r=0,s=0;r<e.length;++r){var o=e[r];n.set(o,s),s+=o.length}return n};function je(e,t){var n=[],r=+!t,s=0,o=0;for(;e.length;){var i=yt(e,r||t);if(typeof i=="object"){if(r){if(t=null,i.w.length==i.u)n.push(t=i.w),o+=i.u}else n.push(t),i.e=0;for(;!i.l;){var l=Lt(e,i,t);if(!l)K(5);if(t)i.e=i.y;else n.push(l),o+=l.length,bt(i.w,0,l.length),i.w.set(l,i.w.length-l.length)}s=i.b+i.c*4}else s=i;e=e.subarray(s)}return Tt(n,o)}function de(e){let t=new DataView(e).getUint32(0,!0),n=JSON.parse(new TextDecoder().decode(new Uint8Array(e,4,t))),r=4+t;return{header:n,arr:(o)=>o&&(o[2]==="f32"?new Float32Array(e,r+o[0],o[1]):o[2]==="u16"?new Uint16Array(e,r+o[0],o[1]):o[2]==="u8"?new Uint8Array(e,r+o[0],o[1]):new Uint32Array(e,r+o[0],o[1])),bytes:e.byteLength,buffer:e}}var Y=(e)=>e.trim().toLowerCase().replace(/\\\\/g,"/").replace(/\\/+/g,"/");function Le(e){if(/^0x/i.test(e))return parseInt(e,16);return+e}var Ve=/^~?\\s*moved\\s+to\\s+(.+)$/i,Pt=new Set(["FILE","NOFILE","!DATA","!:","STEP","BFC","ROTSTEP","BUFEXCHG","!TEXMAP"]),Ye=new Set(["part","subpart","primitive","8_primitive","48_primitive","shortcut","helper"]),It=new Set(["model","submodel","configuration"]),Ft=/^(?:!?LDRAW_ORG|Unofficial|Official\\s+LCAD)\\s+(\\S+)/i;function He(e){let t=Ft.exec(e);if(!t)return;let n=t[1].toLowerCase().replace(/^unofficial_/,"");return Ye.has(n)||It.has(n)?n:void 0}function Rt(e){let t=[],n=0;while(n<e.length){while(e[n]===" "||e[n]==="\\t")n++;if(n>=e.length)break;if(e[n]===\'"\'){let r="";n++;while(n<e.length&&e[n]!==\'"\'){if(e[n]==="\\\\"&&n+1<e.length)n++;r+=e[n++]}n++,t.push(r)}else{let r=n;while(r<e.length&&e[r]!==" "&&e[r]!=="\\t")r++;t.push(e.slice(n,r)),n=r}}return t}function kt(e,t=!1){let n=/^\\s*(\\S+)\\s+(.*)$/.exec(e);if(!n)return null;let r=n[1].toUpperCase(),s=r==="PLANAR"?9:r==="CYLINDRICAL"?10:r==="SPHERICAL"?11:0;if(!s)return null;let o=n[2].trim().split(/\\s+/);if(o.length<s+1)return null;let i=o.slice(0,s).map(Number);if(!i.every(Number.isFinite))return null;let l=n[2].trim();for(let m=0;m<s;m++)l=l.replace(/^\\S+\\s*/,"");let a=Rt(l);if(!a.length)return null;let c={method:r,p1:i.slice(0,3),p2:i.slice(3,6),p3:i.slice(6,9),texture:a[0]};if(s>=10)c.a=i[9];if(s===11)c.b=i[10];let p=a.findIndex((m,h)=>h>0&&m.toUpperCase()==="GLOSSMAP");if(p>0&&a[p+1])c.glossmap=a[p+1];if(t)c.next=!0;return c}var Dt=(e)=>{let t=e.replace(/[^A-Za-z0-9+/]/g,""),n=t+"=".repeat((4-t.length%4)%4),r=atob(n),s=new Uint8Array(r.length);for(let o=0;o<r.length;o++)s[o]=r.charCodeAt(o);return s};function Ut(e){let t=e.length,n=1,r=(c)=>c===32||c===9,s=()=>{while(n<t&&r(e.charCodeAt(n)))n++;let c=n;while(n<t&&!r(e.charCodeAt(n)))n++;return c<n?e.slice(c,n):null},o=s();if(o===null)return null;let i=Array(12);for(let c=0;c<12;c++){let p=s();if(p===null)return null;i[c]=+p}while(n<t&&r(e.charCodeAt(n)))n++;if(n>=t)return null;let l=e.slice(n),a=/[ \\t]{2,}|\\t/.test(l)?l.split(/\\s+/).join(" "):l;return{t:1,color:Le(o),m:i,file:Y(a)}}function Ge(e){let t=+e[0];if(!(t>=1&&t<=5)||e.length<2)return null;let n=Le(e[1]),r=e.slice(2).map(Number);if(t===1)return{t:1,color:n,m:r.slice(0,12),file:Y(e.slice(14).join(" "))};if(t===2)return{t:2,color:n,p:r.slice(0,6)};if(t===3)return{t:3,color:n,p:r.slice(0,9)};if(t===4)return{t:4,color:n,p:r.slice(0,12)};return{t:5,color:n,p:r.slice(0,12)}}function Je(e,t="main.ldr",n={}){let r=!!n.geometryText,s=new Map,o=null,i="",l,a=null,c=[],p=null,m=()=>{if(!a)return;let g=Dt(a.chunks.join("")),f=g[0]===137&&g[1]===80&&g[2]===78&&g[3]===71;(l??=new Map).set(Y(a.name),{name:a.name,bytes:g,...f?{mime:"image/png"}:{}}),a=null},h=!0,d=(g)=>{if(m(),o={name:Y(g),cmds:[]},s.set(o.name,o),!i)i=o.name;c=[],p=null,h=!0},C=!1,u=!1,b=()=>{if(u)return;u=!0,s.clear(),o=null,i=""},S=(g,f)=>{if(p){g.tex=p,p=null;return}let A=c[c.length-1];if(!A)return;if(A.fallback){if(!f)g.fallback=!0}else g.tex=A.map};for(let g of e.split(`\n`)){let f=g.trim();if(!f)continue;if(r&&f.charCodeAt(0)>=50&&f.charCodeAt(0)<=53&&(f.charCodeAt(1)===32||f.charCodeAt(1)===9)){if(a||C)continue;if(!o)d(t);let M=f.slice(2).trimStart(),L=M.search(/\\s/),D={t:f.charCodeAt(0)-48,color:Le(L<0?M:M.slice(0,L)),p:[],src:f};S(D,!1),o.cmds.push(D),h=!1;continue}if(f.charCodeAt(0)===48&&(f.charCodeAt(1)===32||f.charCodeAt(1)===9)){let M=2;while(f.charCodeAt(M)===32||f.charCodeAt(M)===9)M++;let L=M;while(L<f.length&&f.charCodeAt(L)!==32&&f.charCodeAt(L)!==9)L++;let D=f.slice(M,L);if(!Pt.has(D)){if(C||a)continue;if(!o)d(t);let E=f.slice(M),U={t:0,text:E};if(D.charCodeAt(0)===33)U.meta=D;if(p=null,h&&!o.org){let H=He(E);if(H)o.org=H}let X=E.match(Ve);if(X&&!o.movedTo){let H=X[1].trim().replace(/\\\\/g,"/");if(!/\\.(dat|ldr|mpd)$/i.test(H))H+=".dat";o.movedTo=Y(H)}o.cmds.push(U);continue}}if(f.charCodeAt(0)===49&&(f.charCodeAt(1)===32||f.charCodeAt(1)===9)&&!a&&!C){let M=Ut(f);if(M){if(!o)d(t);S(M,!1),o.cmds.push(M),h=!1;continue}}let A=f.split(/\\s+/);if(+A[0]===0){let M=f.slice(1).trim();if(A[1]==="FILE"){b(),C=!1,d(M.slice(5));continue}if(A[1]==="NOFILE"){m(),o=null,C=!0;continue}if(A[1]==="!DATA"){b(),m(),o=null,C=!1,a={name:M.slice(5).trim(),chunks:[]};continue}if(C)continue;if(a){if(A[1]==="!:")a.chunks.push(A.slice(2).join(""));continue}if(!o)d(t);let L={t:0,text:M};if(A[1]==="STEP")L.step=!0,c=[],p=null;else if(A[1]==="BFC")L.bfc=A.slice(2).join(" ");else if(A[1]==="ROTSTEP")if(L.meta="ROTSTEP",L.step=!0,c=[],p=null,(A[2]??"").toUpperCase()==="END")L.rotstep={x:0,y:0,z:0,mode:"END"};else{let E=(A[5]??"REL").toUpperCase();L.rotstep={x:+A[2]||0,y:+A[3]||0,z:+A[4]||0,mode:["REL","ABS","ADD"].includes(E)?E:"REL"}}else if(A[1]==="BUFEXCHG"){L.meta="BUFEXCHG";let E=(A[2]??"").toUpperCase();L.bufexchg={op:E==="RETRIEVE"?"RETRIEVE":"STORE",buf:A[3]??"A"}}else if(A[1]?.startsWith("!"))L.meta=A[1];if(h&&!o.org){let E=He(M);if(E)o.org=E}if(A[1]==="!TEXMAP"){let E=(A[2]??"").toUpperCase();if(p=null,E==="START"||E==="NEXT"){let U=kt(M.replace(/^!TEXMAP\\s+\\S+/i,""),E==="NEXT");if(L.texmap={op:E,...U?{map:U}:{}},U)if((o.texmaps??=[]).push(U),E==="START")c.push({map:U,fallback:!1});else p=U}else if(E==="FALLBACK"){L.texmap={op:E};let U=c[c.length-1];if(U)U.fallback=!0}else if(E==="END")L.texmap={op:E},c.pop()}else if(A[1]==="!:"){p=null;let E=Ge(A.slice(2));if(E)S(E,!0),L.geom=E}else p=null;let D=M.match(Ve);if(D&&!o.movedTo){let E=D[1].trim().replace(/\\\\/g,"/");if(!/\\.(dat|ldr|mpd)$/i.test(E))E+=".dat";o.movedTo=Y(E)}o.cmds.push(L);continue}if(a||C)continue;if(!o)d(t);let x=Ge(A);if(!x)continue;S(x,!1),o.cmds.push(x),h=!1}return m(),l?{main:i,files:s,data:l}:{main:i,files:s}}var tn=Math.PI/180;function qe(e,t){let n=(r)=>[t[3]*r[0]+t[4]*r[1]+t[5]*r[2]+t[0],t[6]*r[0]+t[7]*r[1]+t[8]*r[2]+t[1],t[9]*r[0]+t[10]*r[1]+t[11]*r[2]+t[2]];return{...e,p1:n(e.p1),p2:n(e.p2),p3:n(e.p3)}}function Qe(e,t){let[n,r,s,o,i,l,a,c,p,m,h,d]=e,[C,u,b,S,g,f,A,z,x,M,L,D]=t;return[o*C+i*u+l*b+n,a*C+c*u+p*b+r,m*C+h*u+d*b+s,o*S+i*A+l*M,o*g+i*z+l*L,o*f+i*x+l*D,a*S+c*A+p*M,a*g+c*z+p*L,a*f+c*x+p*D,m*S+h*A+d*M,m*g+h*z+d*L,m*f+h*x+d*D]}var Te=[0,0,0,1,0,0,0,1,0,0,0,1];var _e=new WeakMap,zt=/^(s|8|48)\\//;function Pe(e,t){let n=e.files.get(Y(t));if(!n)return"part";let r=_e.get(n);if(r)return r;if(n.org)r=Ye.has(n.org)?"part":"model";else if(n.name===e.main)r="model";else r=n.cmds.some((s)=>s.t>=2||s.t===0&&!!s.geom||s.t===1&&zt.test(s.file))?"part":"model";return _e.set(n,r),r}var We=new WeakMap;function et(e){let t=We.get(e);if(t)return t;t=[];let n=0;for(let r of e.cmds){if(r.t===0&&r.step){n++;continue}if((r.t>=2||r.t===0&&r.geom&&r.geom.t>=2)&&t[t.length-1]!==n)t.push(n)}return We.set(e,t),t}var Ke=(e)=>e>16777215?"0x"+e.toString(16).toUpperCase():String(e),Ot=(e)=>e.t===0?"0 "+e.text:e.t===1?`1 ${Ke(e.color)} ${e.m.join(" ")} ${e.file}`:e.src?e.src:`${e.t} ${Ke(e.color)} ${e.p.join(" ")}`,Ie=(e,t)=>`${Y(e)}#${t}`;function Nt(e,t){let n=[],r=0,s=(o)=>!!o&&o.t===0&&o.texmap?.op==="NEXT";for(let o of e.cmds){if(o.t===0){if(o.step){r++;continue}if(o.bfc!==void 0){n.push(o);continue}if(r!==t)continue;if(o.texmap)n.push(o);else if(o.geom){if(o.geom.t>=2)n.push(o);else if(s(n[n.length-1]))n.pop()}continue}if(r!==t)continue;if(o.t===1){if(s(n[n.length-1]))n.pop();continue}n.push(o)}return{name:Ie(e.name,t),cmds:n}}function tt(e,t){return[`0 ldr: own geometry of ${e.name}, step ${t}`,...Nt(e,t).cmds.map(Ot)].join(`\n`)+`\n`}function Bt(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function nt(e){let[t,n,r,s,o,i,l,a,c,p,m,h]=e,d=a*h-c*m,C=-(l*h-c*p),u=l*m-a*p,b=s*d+o*C+i*u;if(!Number.isFinite(b)||Math.abs(b)<0.000000000001)return null;let S=1/b,g=[d*S,-(o*h-i*m)*S,(o*c-i*a)*S,C*S,(s*h-i*p)*S,-(s*c-i*l)*S,u*S,-(s*m-o*p)*S,(s*a-o*l)*S];return[-(g[0]*t+g[1]*n+g[2]*r),-(g[3]*t+g[4]*n+g[5]*r),-(g[6]*t+g[7]*n+g[8]*r),...g]}var $t=(e)=>String(+e.toFixed(6)||0),Xe=(e)=>\'"\'+e.replace(/\\\\/g,"\\\\\\\\").replace(/"/g,"\\\\\\"")+\'"\';function rt(e,t){let n=[...t.p1,...t.p2,...t.p3,...t.method!=="PLANAR"?[t.a??360]:[],...t.method==="SPHERICAL"?[t.b??180]:[]].map($t).join(" "),r=`0 ldr: ${e} with a model-level !TEXMAP\n0 BFC CERTIFY CCW\n0 !TEXMAP START ${t.method} ${n} ${Xe(t.texture)}${t.glossmap?" GLOSSMAP "+Xe(t.glossmap):""}\n1 16 0 0 0 1 0 0 0 1 0 0 0 1 ${Y(e)}\n0 !TEXMAP END\n`;return{name:`${Y(e)}#tex-${Bt(r)}`,source:r}}var jt=(e,t)=>{let n=[,,,,,,,,,];for(let r=0;r<3;r++)for(let s=0;s<3;s++)n[r*3+s]=e[r*3]*t[s]+e[r*3+1]*t[3+s]+e[r*3+2]*t[6+s];return n};function Vt(e,t,n){let r=Math.PI/180,s=Math.sin(e*r),o=Math.cos(e*r),i=Math.sin(t*r),l=Math.cos(t*r),a=Math.sin(n*r),c=Math.cos(n*r);return[l*c,-l*a,i,o*a+s*i*c,o*c-s*i*a,-s*l,s*a-o*i*c,s*c+o*i*a,o*l]}var Ze=new WeakMap;function st(e){let t=Ze.get(e);if(t)return t;let n=[],r=null;for(let s of e.cmds){if(s.t!==0||!s.step)continue;let o=s.rotstep;if(o)if(o.mode==="END")r=null;else{let i=Vt(o.x,o.y,o.z);r=o.mode==="ABS"?{abs:!0,m:i,rotstep:o}:o.mode==="ADD"&&r?{abs:r.abs,m:jt(r.m,i),rotstep:o}:{abs:!1,m:i,rotstep:o}}n.push(r)}return n.push(r),Ze.set(e,n),n}var ot=999999,it=(e)=>e.map((t)=>String(t).padStart(6,"0")).join(".")+"~";function Ht(e,t={}){let n=[],r=t.maxDepth??64,s=t.looseGeometry!==!1,o=!!t.textures,i=!!t.callouts,l=new Map,a=0,c=(m,h)=>{let d=m.name+"#"+h,C=l.get(d);if(!C){let u;C=Object.assign(()=>u??=tt(m,h),{file:m,step:h}),l.set(d,C)}return C},p=(m,h,d,C,u,b,S,g,f=null,A=[],z=[])=>{let x=m.files.get(h);if(!x||S>r)return;let M=0,L=S>0?++a:0,D=i&&L?[...A,L]:A,E=i&&L?[...z,d]:z,U=i&&!f?new Map:null,X=-1,H=0,v=(T,y,N,R,k,O)=>{if(X!==M)X=M,H=0;let j=U?.get(M+"|"+y);if(j)return j.n++,p(T,T===m?y:T.main,N,R,u+"/"+y,[...k,ot],S+1,O,[...k,ot],D,E);let F=[...k,H++],G=n.length;p(T,T===m?y:T.main,N,R,u+"/"+y,F,S+1,O,f,D,E),U?.set(M+"|"+y,{n:1,from:G,to:n.length})},w=st(x),P=s?et(x):[],V=0,I=(T,y,N,R,k,O,j)=>{if(f)R=f;let F={part:T,color:y,m:N,step:R[0],steps:R,localStep:k,path:u};if(L){if(F.sub=L,i)F.subPath=D,F.subMats=E}if(O)F.embedded=!0;if(j){let _=rt(T,j);F.texPart=_.name,F.texSource=_.source}let G=w[k];if(G)F.view=G;return n.push(F),F},B=(T)=>{while(V<P.length&&P[V]<=T){let y=P[V++];I(Ie(x.name,y),C,d,[...b,y],y,!1,null).source=c(x,y)}};for(let T of x.cmds){if(T.t===0&&T.step){M++;continue}let y=T;if(y.t>=2||y.t===0&&y.geom&&y.geom.t>=2){B(M);continue}if(y.t===0)if(o&&y.geom?.t===1)y=y.geom;else continue;if(y.t!==1)continue;if(o&&y.fallback)continue;let N=y.color===16?C:y.color,R=Qe(d,y.m),k=[...b,M],O=o?y.tex??g:null,j=O?nt(y.m):null,F=O&&j?qe(O,j):null;if(m.files.has(y.file)){if(Pe(m,y.file)==="model"){v(m,y.file,R,N,k,F);continue}I(y.file,N,R,k,M,!0,F);continue}let G=t.resolveModel?.(y.file);if(G){v(G,y.file,R,N,k,F);continue}I(y.file,N,R,k,M,!1,F)}if(B(1/0),U){for(let T of U.values())if(T.n>1)for(let y=T.from;y<T.to;y++)n[y].mult??=T.n}};if(Pe(e,e.main)==="part"){if(e.files.get(e.main))n.push({part:e.main,color:16,m:[...Te],step:0,steps:[0],localStep:0,path:e.main,embedded:!0});return n}return p(e,e.main,Te,16,e.main,[],0,null),n}function at(e,t="main.ldr",n){return Ht(Je(e,t,{geometryText:!0}),n)}function Gt(e,t){let n=new Map,r=null,s=!1;for(let o of e.split(/\\r?\\n/)){let i=/^\\s*0\\s+FILE\\s+(.+)$/i.exec(o);if(i){if(!s)n.clear();s=!0,r=[],n.set(Y(i[1]),r);continue}if(/^\\s*0\\s+(NOFILE|!DATA)(\\s|$)/i.test(o)){if(!s)n.clear();s=!0,r=null;continue}if(!r){if(s)continue;r=[],n.set(Y(t),r)}let l=o.trim().replace(/\\s+/g," ");if(l)r.push(l)}return n}var _t=(e)=>{if(!e.startsWith("1 "))return null;let t=e.split(" ");return t.length>=15?Y(t.slice(14).join(" ")):null};function Wt(e){let t=2166136261,n=1523705862;for(let r=0;r<e.length;r++){let s=e.charCodeAt(r);t=Math.imul(t^s,16777619),n=Math.imul(n^s,16777629)^n>>>15}return(t>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")}function lt(e,t,n="main.ldr"){let r=Gt(e,n),s=new Map;for(let o of t){let i=Y(o);if(!r.has(i)||s.has(i))continue;let l=new Set([i]),a=[i];while(a.length)for(let p of r.get(a.pop())){let m=_t(p);if(m&&r.has(m)&&!l.has(m))l.add(m),a.push(m)}let c=[i,...[...l].filter((p)=>p!==i).sort()].map((p)=>"0 FILE "+(p===i?"":p)+`\n`+r.get(p).join(`\n`)).join(`\n`);s.set(i,`emb/${Wt(c)}.dat`)}return s}var ct=(e,t=0)=>Math.abs(e[t+7]-1)<0.001&&Math.abs(e[t+4])<0.001&&Math.abs(e[t+10])<0.001,ut=new WeakMap;function Fe(e,t){let n=ut.get(e);if(!n)ut.set(e,n=new Map);let r=n.get(t);if(r!==void 0)return r;let s=e.parts[t];if(!s)return n.set(t,null),null;let o=s.studs.length,i=new Float64Array(o*12),l=[],a=[];s.studs.forEach((h,d)=>{l.push(h[0]),a.push(h[1]);for(let C=0;C<12;C++)i[d*12+C]=h[2+C]});let c=null,p=0,m=0;if(s.mask){p=s.mask[0],m=s.mask[1];let h=s.mask[2];c=new Uint8Array(h.length);for(let d=0;d<h.length;d++)c[d]=h.charCodeAt(d)===49?1:0}return n.set(t,r={nStuds:o,studM:i,kind:l,color:a,mask:c,nx:p,nz:m}),r}var ie=1073741824;class Re{a;b;c;vals;used;mask;size=0;constructor(e=1024){let t=1024;while(t<e*2)t*=2;this.a=new Int32Array(t),this.b=new Int32Array(t),this.c=new Int32Array(t),this.vals=new Int32Array(t),this.used=new Uint8Array(t),this.mask=t-1}slot(e,t,n){let r=Math.imul(e,2654435761)^Math.imul(t,2246822507)^Math.imul(n,3266489909);return r^=r>>>15,r=Math.imul(r,739982445),r^=r>>>12,r&this.mask}get(e,t,n){let r=this.slot(e,t,n),s=this.used,o=this.a,i=this.b,l=this.c;for(;;){if(!s[r])return-1;if(o[r]===e&&i[r]===t&&l[r]===n)return this.vals[r];r=r+1&this.mask}}put(e,t,n,r){if((this.size+1)*2>this.used.length)this.grow();let s=this.slot(e,t,n),o=this.used,i=this.a,l=this.b,a=this.c;for(;;){if(!o[s])return o[s]=1,i[s]=e,l[s]=t,a[s]=n,this.vals[s]=r,this.size++,-1;if(i[s]===e&&l[s]===t&&a[s]===n){let c=this.vals[s];return this.vals[s]=r,c}s=s+1&this.mask}}grow(){let{a:e,b:t,c:n,vals:r,used:s}=this,o=s.length*2;this.a=new Int32Array(o),this.b=new Int32Array(o),this.c=new Int32Array(o),this.vals=new Int32Array(o),this.used=new Uint8Array(o),this.mask=o-1,this.size=0;for(let i=0;i<s.length;i++)if(s[i])this.put(e[i],t[i],n[i],r[i])}}var xe=(e,t,n)=>e>-ie&&e<ie&&t>-ie&&t<ie&&n>-ie&&n<ie,fe=2147483647;function Kt(e,t,n){let s=[],o=[],i=[],l=[],a=[],c=[],p=[],m=[],h=new Re(e.length*2),d=[],C=[];for(let v=0;v<e.length;v++){let w=e[v],P=w.m,V=t.parts[w.part];if(!V||!V.mask||!ct(P))continue;let I=V.bbox,B=1/0,T=-1/0,y=1/0,N=-1/0;for(let O=0;O<2;O++)for(let j=0;j<2;j++){let F=O?I[3]:I[0],G=j?I[5]:I[2],_=P[0]+P[3]*F+P[5]*G,Z=P[2]+P[9]*F+P[11]*G;if(_<B)B=_;if(_>T)T=_;if(Z<y)y=Z;if(Z>N)N=Z}let R=a.length;s.push(B),o.push(T),i.push(y),l.push(N),a.push(v),c.push(Fe(t,w.part)),p.push(I[0]),m.push(I[2]);let k=Math.round((P[1]+I[4])*2);for(let O=Math.floor(B/40);O<=Math.floor(T/40);O++)for(let j=Math.floor(y/40);j<=Math.floor(N/40);j++){if(!xe(k,O,j))continue;let F=C.length;C.push(R),d.push(h.put(k,O,j,F))}}let u=[0,5,-5,5,-5],b=[0,5,5,-5,-5],S=NaN,g=NaN,f=NaN,A=-1,z=(v,w,P,V)=>{let I=Math.round(w*2),B=Math.floor(v/40),T=Math.floor(P/40);if(!xe(I,B,T))return fe;let y=fe;if(I!==S||B!==g||T!==f)S=I,g=B,f=T,A=h.get(I,B,T);for(let N=A;N>=0;N=d[N]){let R=C[N];if(a[R]===V||!(v-6>=s[R]-0.5&&v+6<=o[R]+0.5&&P-6>=i[R]-0.5&&P+6<=l[R]+0.5))continue;let k=e[a[R]].m,O=c[R],j=p[R],F=m[R],G=v-k[0],_=w-k[1],Z=P-k[2],q=k[3]*G+k[6]*_+k[9]*Z,J=k[5]*G+k[8]*_+k[11]*Z,{nx:ee,nz:se,mask:ae}=O,oe=!0;for(let Q=0;Q<5;Q++){let te=Math.floor((q+u[Q]-j)/20),ne=Math.floor((J+b[Q]-F)/20);if(te<0||ne<0||te>=ee||ne>=se||ae[te*se+ne]!==1){oe=!1;break}}if(oe){if(!n)return 0;let Q=n[a[R]];if(Q<y)y=Q}}return y},x=0;for(let v of e){let w=Fe(t,v.part);if(w)x+=w.nStuds}let M=new Uint8Array(x),L=new Uint8Array(x),D=new Re(x),E=0,U=n?new Int32Array(x).fill(fe):void 0;for(let v=0,w=0;v<e.length;v++){let P=e[v],V=Fe(t,P.part);if(!V)continue;let I=P.m,B=V.studM,T=I[0],y=I[1],N=I[2],R=I[3],k=I[4],O=I[5],j=I[6],F=I[7],G=I[8],_=I[9],Z=I[10],q=I[11];for(let J=0;J<V.nStuds;J++,w++){let ee=J*12,se=B[ee+4],ae=B[ee+7],oe=B[ee+10];if(!(Math.abs(j*se+F*ae+G*oe-1)<0.001&&Math.abs(R*se+k*ae+O*oe)<0.001&&Math.abs(_*se+Z*ae+q*oe)<0.001))continue;L[w]=1;let Q=B[ee],te=B[ee+1],ne=B[ee+2],ke=T+R*Q+k*te+O*ne,De=y+j*Q+F*te+G*ne,Ue=N+_*Q+Z*te+q*ne,ze=z(ke,De,Ue,v);if(ze!==fe){if(M[w]=1,E++,U)U[w]=ze}let pe=Math.round(ke),me=Math.round(De),he=Math.round(Ue);if(!xe(pe,me,he))continue;if(!n){D.put(pe,me,he,1);continue}let Oe=n[v],Ne=D.get(pe,me,he);if(Ne<0||Oe<Ne)D.put(pe,me,he,Oe)}}let X=new Uint8Array(e.length),H=n?new Int32Array(e.length).fill(fe):void 0;for(let v=0;v<e.length;v++){let w=e[v],P=t.parts[w.part];if(!P||!P.under||!ct(w.m))continue;let V=P.bbox,I=Math.round((V[3]-V[0])/20),B=Math.round((V[5]-V[2])/20);if(!I||!B||I*B>4096)continue;let T=w.m,y=!0,N=0;for(let R=0;R<I&&y;R++)for(let k=0;k<B;k++){let O=V[0]+10+20*R,j=V[2]+10+20*k,F=T[0]+T[3]*O+T[5]*j,G=T[2]+T[9]*O+T[11]*j,_=Math.round(F),Z=Math.round(T[1]+V[4]),q=Math.round(G),J=xe(_,Z,q)?D.get(_,Z,q):-1;if(J<0){y=!1;break}if(J>N)N=J}if(y){if(X[v]=1,H)H[v]=N}}return{nStuds:x,studHidden:M,studUp:L,underHidden:X,studsHidden:E,studHideStep:U,underHideStep:H}}function Xt(e,t,n){let r=(a)=>n&&a.texPart&&t.parts[a.texPart]?a.texPart:a.part,s=e.map((a)=>({part:r(a),color:String(a.color),m:a.m,steps:a.steps})),o=s.map((a)=>it(a.steps)),i=[...new Set(o)].sort(),l=new Map(i.map((a,c)=>[a,c]));return{all:s,stepOf:o.map((a)=>l.get(a)),nSteps:i.length}}function ye(e,t,n=!0){let r=Xt(e,t,n);return Kt(r.all,t,r.nSteps>1?r.stepOf:void 0)}var Me="https://ldr-demo.vercel.app/cdn/v1/",Ae=new Map,we=new Map;function pt(e=Me,t=fetch){let n=Ae.get(e);if(!n)n=t(e+"parts.json").then((r)=>{if(!r.ok)throw Error(`ldr: parts CDN index ${r.status} (${e}parts.json)`);return r.json()}),n.catch(()=>Ae.delete(e)),Ae.set(e,n);return n}var Zt=(e)=>Array.isArray(e)&&e.length===3&&typeof e[0]==="number"&&typeof e[1]==="number"&&(e[2]==="f32"||e[2]==="u16"||e[2]==="u8"||e[2]==="u32"),ve=(e,t)=>Zt(e)?[e[0]+t,e[1],e[2]]:Array.isArray(e)?e.map((n)=>ve(n,t)):e&&typeof e==="object"?Object.fromEntries(Object.entries(e).map(([n,r])=>[n,ve(r,t)])):e;function Yt(e,t={}){let n=[],r=0,s={},o={};for(let h of e){let d=h.buffer;if(!d)throw Error("ldr: mergePacks needs packs from decodePack/loadPack");let C=new DataView(d).getUint32(0,!0),u=new Uint8Array(d,4+C),b=r;n.push(u),r+=u.byteLength;let S=(4-r%4)%4;if(S)n.push(new Uint8Array(S)),r+=S;for(let[g,f]of Object.entries(h.header.parts??{}))if(!(g in s))s[g]=ve(f,b);for(let[g,f]of Object.entries(h.header.studKinds??{}))if(!(g in o))o[g]=ve(f,b)}let i=e[0]?.header??{version:1,weld:!0},l=new TextEncoder().encode(JSON.stringify({...i,parts:s,studKinds:o,...t})),a=(4-(4+l.length)%4)%4,c=4+l.length+a,p=new Uint8Array(c+r);new DataView(p.buffer).setUint32(0,l.length+a,!0),p.set(l,4),p.fill(32,4+l.length,c);let m=c;for(let h of n)p.set(h,m),m+=h.byteLength;return de(p.buffer)}async function Jt(e,t={}){e=[...e];try{return await ft(e,t)}catch(n){let r=t.cdn??Me,s=t.fetch??fetch;Ae.delete(r);let o=(i,l)=>s(i,{...l,cache:"reload"});try{return await ft(e,{...t,fetch:o})}catch{throw n}}}async function ft(e,t){let n=t.cdn??Me,r=t.fetch??fetch,s=t.gap??16384,o=await pt(n,r),i=[...new Set([...e].map(Y))],l=[],a=[];for(let u of i){if(we.has(n+u))continue;let b=o.parts[u];if(b)a.push({name:u,off:b[0],len:b[1],file:b[2]??0});else l.push(u)}a.sort((u,b)=>u.file-b.file||u.off-b.off);let c=[];for(let u of a){let b=c[c.length-1];if(b&&b.file===u.file&&u.off-b.end<=s)b.end=Math.max(b.end,u.off+u.len),b.items.push(u);else c.push({file:u.file,start:u.off,end:u.off+u.len,items:[u]})}let p=0,m=0,h=async()=>{while(m<c.length){let u=c[m++],b=await r(new URL(o.archives[u.file],n).href,{headers:{Range:`bytes=${u.start}-${u.end-1}`}});if(!b.ok)throw Error(`ldr: parts CDN ${b.status}`);let S=new Uint8Array(await b.arrayBuffer());if(b.status===200)S=S.subarray(u.start,u.end);p+=S.byteLength;for(let g of u.items){let f=je(S.subarray(g.off-u.start,g.off-u.start+g.len)),A=f.buffer.slice(f.byteOffset,f.byteOffset+f.byteLength);we.set(n+g.name,de(A))}}};await Promise.all(Array.from({length:Math.min(t.concurrency??24,c.length)},h));let d=i.filter((u)=>we.has(n+u)).map((u)=>we.get(n+u));return{pack:d.length?Yt(d,{colors:o.colors}):de(qt(o.colors)),missing:l,requests:c.length,bytes:p}}function qt(e){let t=new TextEncoder().encode(JSON.stringify({version:1,weld:!0,parts:{},studKinds:{},colors:e})),n=(4-(4+t.length)%4)%4,r=new Uint8Array(4+t.length+n).fill(32);return new DataView(r.buffer).setUint32(0,t.length+n,!0),r.set(t,4),r.buffer}async function mt(e,t={}){let n=performance.now(),r=t.fetch??fetch,s=pt(t.cdn??Me,r);s.catch(()=>{});let o=t.text?e:await r(e).then((f)=>{if(!f.ok)throw Error(`ldr: ${f.status} fetching ${e}`);return f.text()}),i=performance.now(),l=t.name??(t.text?"main.ldr":decodeURIComponent(e.split(/[?#]/)[0].split("/").pop()||"main.ldr")),a=at(o,l,{looseGeometry:!1,callouts:t.callouts}),c=performance.now();t.onParsed?.(a),await s;let p=lt(o,new Set(a.filter((f)=>f.embedded).map((f)=>f.part)),l),{pack:m,missing:h,requests:d,bytes:C}=await Jt([...a.filter((f)=>!f.embedded).map((f)=>f.part),...p.values()],t),u=new Map([...p].map(([f,A])=>[A,f])),b=h.map((f)=>u.get(f)??f);for(let[f,A]of p){let z=m.header.parts[A];if(z)m.header.parts[f]=z}let S=performance.now(),g=t.cull?ye(a,m.header,t.textures!==!1):void 0;return{insts:a,pack:m,missing:b,requests:d,bytes:C,cull:g,timings:{fetchModel:i-n,parse:c-i,parts:S-c,...g?{cull:performance.now()-S}:{}}}}self.onmessage=async(e)=>{let{id:t,source:n,opts:r}=e.data;try{let s=await mt(n,{...r,cull:!1,onParsed:(p)=>self.postMessage({id:t,insts:p})}),o=s.pack.buffer;if(self.postMessage({id:t,buffer:o,missing:s.missing,requests:s.requests,bytes:s.bytes,timings:s.timings},[o]),!r.cull)return;let i=performance.now(),l=ye(s.insts,s.pack.header,r.textures!==!1),a=performance.now()-i,c=[];for(let p of[l.studHidden,l.studUp,l.underHidden,l.studHideStep,l.underHideStep])if(p)c.push(p.buffer);self.postMessage({id:t,cull:l,ms:a},c)}catch(s){self.postMessage({id:t,phase:"error",error:String(s?.message??s)})}};\n';
3709
3825
 
3710
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/cdn.ts
3826
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/cdn.ts
3711
3827
  var worker;
3712
3828
  var seq = 0;
3713
3829
  var pending = new Map;
@@ -3802,7 +3918,7 @@ async function loadModel(source, o = {}) {
3802
3918
  } else
3803
3919
  prep = await prepareModel(source, o);
3804
3920
  const t3 = performance.now();
3805
- const obj = createLdrObject(prep.insts, prep.pack, prep.cull ? { ...o, precomputedCull: prep.cull } : o);
3921
+ const obj = await createLdrObjectAsync(prep.insts, prep.pack, prep.cull ? { ...o, precomputedCull: prep.cull } : o);
3806
3922
  for (const m of prep.missing)
3807
3923
  if (!obj.stats.missing.includes(m))
3808
3924
  obj.stats.missing.push(m);
@@ -3816,7 +3932,7 @@ async function loadModel(source, o = {}) {
3816
3932
  timings: { ...prep.timings, parts: t3 - t0 - prep.timings.fetchModel - prep.timings.parse, build: t4 - t3, total: t4 - t0 }
3817
3933
  });
3818
3934
  }
3819
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/library.ts
3935
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/library.ts
3820
3936
  import { existsSync, readFileSync } from "fs";
3821
3937
  import { join } from "path";
3822
3938
  var xf = (m, x, y, z) => [m[3] * x + m[4] * y + m[5] * z + m[0], m[6] * x + m[7] * y + m[8] * z + m[1], m[9] * x + m[10] * y + m[11] * z + m[2]];
@@ -4067,11 +4183,11 @@ class Library {
4067
4183
  return insts;
4068
4184
  }
4069
4185
  }
4070
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/build-pack.ts
4186
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/build-pack.ts
4071
4187
  import fs3 from "node:fs";
4072
4188
  import path3 from "node:path";
4073
4189
 
4074
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/resolver.ts
4190
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/resolver.ts
4075
4191
  import fs from "node:fs";
4076
4192
  import path from "node:path";
4077
4193
  var TOP_STUD_RE = /^(stud|studa|stud2|stud2a|stud6|stud6a|stud10|stud15|stud2s|stud2s2|stud-logo\d*|stud2-logo\d*)\.dat$/i;
@@ -4343,11 +4459,11 @@ function collectDeps(lib, refs) {
4343
4459
  return out;
4344
4460
  }
4345
4461
 
4346
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/compile.ts
4462
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/compile.ts
4347
4463
  import fs2 from "node:fs";
4348
4464
  import path2 from "node:path";
4349
4465
 
4350
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/lod.ts
4466
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/lod.ts
4351
4467
  import { MeshoptSimplifier, MeshoptEncoder } from "meshoptimizer";
4352
4468
  await Promise.all([MeshoptSimplifier.ready, MeshoptEncoder.ready]);
4353
4469
  function reorderMesh(P, N, C, I) {
@@ -4539,7 +4655,7 @@ function lodChain(P, C, I) {
4539
4655
  return out;
4540
4656
  }
4541
4657
 
4542
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/compile.ts
4658
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/compile.ts
4543
4659
  function loadColors(root) {
4544
4660
  const map = new Map;
4545
4661
  for (const l of fs2.readFileSync(path2.join(root, "LDConfig.ldr"), "latin1").split(/\r?\n/)) {
@@ -5122,7 +5238,7 @@ function encodePack(parts, studKinds, weld, extra, options = {}) {
5122
5238
  return Buffer.concat([head, ...chunks.map((c) => new Uint8Array(c.buffer, c.byteOffset, c.byteLength))]);
5123
5239
  }
5124
5240
 
5125
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/build-pack.ts
5241
+ // ../../../../../../../tmp/ldr-build-8f2mWh/src/node/build-pack.ts
5126
5242
  function buildPack(o) {
5127
5243
  const lib = new Library2(o.ldrawRoot);
5128
5244
  const refs = new Map;
@@ -5199,6 +5315,7 @@ export {
5199
5315
  REORIENT,
5200
5316
  Library2 as ResolverLibrary,
5201
5317
  buildLdrScene,
5318
+ buildLdrSceneAsync,
5202
5319
  buildPack,
5203
5320
  collectDeps,
5204
5321
  colorToken,
@@ -5210,6 +5327,7 @@ export {
5210
5327
  createInstancedConditionalEdges,
5211
5328
  createInstancedEdges,
5212
5329
  createLdrObject,
5330
+ createLdrObjectAsync,
5213
5331
  cullCore,
5214
5332
  decodePack,
5215
5333
  decompressPack,