@forgeax/engine-pack 0.1.28 → 0.1.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +17 -5
  2. package/dist/build.mjs +34 -51
  3. package/dist/build.mjs.map +1 -1
  4. package/dist/cli-asset.mjs +21 -12
  5. package/dist/cli-asset.mjs.map +1 -1
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/inventory/declaration.d.ts +1 -1
  8. package/dist/inventory/declaration.d.ts.map +1 -1
  9. package/dist/inventory/sync.d.ts.map +1 -1
  10. package/dist/native-cooker-registry.d.ts +1 -0
  11. package/dist/native-cooker-registry.d.ts.map +1 -1
  12. package/dist/native-cooker.mjs.map +1 -1
  13. package/dist/pack-authoring-node.mjs +21 -12
  14. package/dist/pack-authoring-node.mjs.map +1 -1
  15. package/dist/runtime.mjs.map +1 -1
  16. package/dist/scanner.mjs +21 -12
  17. package/dist/scanner.mjs.map +1 -1
  18. package/dist/schema-compiled.d.ts.map +1 -1
  19. package/dist/schema.mjs +40 -62
  20. package/dist/schema.mjs.map +1 -1
  21. package/dist/scriptable-pack-node.d.ts.map +1 -1
  22. package/dist/scriptable-pack-node.mjs +11 -3
  23. package/dist/scriptable-pack-node.mjs.map +1 -1
  24. package/dist/scriptable-pack-worker.mjs +5 -1
  25. package/dist/scriptable-pack-worker.mjs.map +1 -1
  26. package/package.json +2 -2
  27. package/src/__tests__/inventory-schema.test.ts +10 -10
  28. package/src/__tests__/pack-authoring.unit.test.ts +2 -4
  29. package/src/__tests__/pack.unit.test.ts +86 -124
  30. package/src/__tests__/scanner-instance-cycle.test.ts +92 -0
  31. package/src/__tests__/scanner-inventory.contract.test.ts +2 -2
  32. package/src/__tests__/scriptable-pack-diagnostic.integration.test.ts +45 -0
  33. package/src/inventory/binding.ts +3 -3
  34. package/src/inventory/declaration.ts +10 -48
  35. package/src/inventory/sync.ts +3 -2
  36. package/src/native-cooker-registry.ts +1 -0
  37. package/src/scanner.ts +28 -28
  38. package/src/schema-compiled.ts +40 -79
  39. package/src/scriptable-pack-node.ts +11 -3
  40. package/src/scriptable-pack-worker.ts +8 -1
  41. package/src/__tests__/scanner-mount-cycle.test.ts +0 -232
package/dist/scanner.mjs CHANGED
@@ -8543,9 +8543,17 @@ var WorkerScriptablePackExecutor = class {
8543
8543
  }
8544
8544
  };
8545
8545
  worker.on("message", onMessage);
8546
- worker.once("error", rejectLoad);
8546
+ const fail = (error) => {
8547
+ rejectLoad(error);
8548
+ const active = this.build;
8549
+ this.build = void 0;
8550
+ active?.reject(error);
8551
+ void this.dispose("failure");
8552
+ };
8553
+ worker.once("error", fail);
8547
8554
  worker.once("exit", (code) => {
8548
- if (code !== 0) rejectLoad(new Error(`ScriptablePack worker exited with code ${code}`));
8555
+ if (this.disposal !== void 0) return;
8556
+ fail(new Error(`ScriptablePack worker exited with code ${code}`));
8549
8557
  });
8550
8558
  });
8551
8559
  }
@@ -8781,16 +8789,17 @@ function makePackError(code, detail) {
8781
8789
  detail
8782
8790
  });
8783
8791
  }
8784
- function* extractMountSourceGuids(asset) {
8792
+ function* extractInstanceSourceGuids(asset) {
8785
8793
  if (asset.kind !== "scene") return;
8786
8794
  const payload = asset.payload;
8787
- if (!payload || !Array.isArray(payload.mounts)) return;
8788
- for (const rawMount of payload.mounts) {
8789
- const mount = rawMount;
8790
- const idx = mount.source;
8791
- if (typeof idx !== "number" || !Number.isInteger(idx)) continue;
8792
- if (idx < 0 || idx >= asset.refs.length) continue;
8793
- const resolved = asset.refs[idx];
8795
+ if (!payload || payload.entities === null || typeof payload.entities !== "object" || Array.isArray(payload.entities))
8796
+ return;
8797
+ for (const rawEntity of Object.values(payload.entities)) {
8798
+ if (rawEntity === null || typeof rawEntity !== "object" || Array.isArray(rawEntity)) continue;
8799
+ const instance = rawEntity.instance;
8800
+ if (instance === null || typeof instance !== "object" || Array.isArray(instance)) continue;
8801
+ const source = instance.source;
8802
+ const resolved = typeof source === "number" && Number.isInteger(source) ? asset.refs[source] : typeof source === "string" ? source : void 0;
8794
8803
  if (typeof resolved !== "string") continue;
8795
8804
  yield resolved.toLowerCase();
8796
8805
  }
@@ -8908,7 +8917,7 @@ async function scanValidated(roots, opts = {}, capture) {
8908
8917
  guidToPath.set(normalizedGuid, packPath);
8909
8918
  packRefs.set(normalizedGuid, [
8910
8919
  ...asset.refs.map((ref) => ref.toLowerCase()),
8911
- ...extractMountSourceGuids(asset)
8920
+ ...extractInstanceSourceGuids(asset)
8912
8921
  ]);
8913
8922
  }
8914
8923
  }
@@ -9012,7 +9021,7 @@ async function scanValidated(roots, opts = {}, capture) {
9012
9021
  guidToPath.set(normalizedGuid, packPath);
9013
9022
  packRefs.set(normalizedGuid, [
9014
9023
  ...asset.refs.map((ref) => ref.toLowerCase()),
9015
- ...extractMountSourceGuids(asset)
9024
+ ...extractInstanceSourceGuids(asset)
9016
9025
  ]);
9017
9026
  }
9018
9027
  capture?.declarations.set(packPath, {