@toolpath/viewer 2.3.0 → 2.3.3

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,5 +1,5 @@
1
1
  // src/engine/engine-part.tsx
2
- import { useEffect as useEffect8, useMemo as useMemo8 } from "react";
2
+ import { useEffect as useEffect8 } from "react";
3
3
 
4
4
  // src/part-mesh.tsx
5
5
  import { useThree as useThree8 } from "@react-three/fiber";
@@ -4183,6 +4183,8 @@ function createEngineGeometryCache(loadGeometry = async (part) => {
4183
4183
  return geometry;
4184
4184
  }, maximumEntries = 8) {
4185
4185
  const resources = /* @__PURE__ */ new Map();
4186
+ const requests = /* @__PURE__ */ new WeakMap();
4187
+ let failures = /* @__PURE__ */ new WeakMap();
4186
4188
  let accessSequence = 0;
4187
4189
  const touch = (resource) => {
4188
4190
  resource.lastAccess = ++accessSequence;
@@ -4202,11 +4204,31 @@ function createEngineGeometryCache(loadGeometry = async (part) => {
4202
4204
  oldest[1].geometry?.dispose();
4203
4205
  }
4204
4206
  };
4207
+ const rememberFailure = (part, requestKey, resource) => {
4208
+ const attempts = failures;
4209
+ void resource.promise.then(() => {
4210
+ if (resource.status === "rejected" && requests.get(resource) === requestKey) {
4211
+ attempts.set(part, resource);
4212
+ }
4213
+ });
4214
+ };
4205
4215
  return {
4206
4216
  get(part) {
4207
4217
  const key = engineGeometryResourceKey(part.mesh);
4208
4218
  const existing = resources.get(key);
4219
+ if (existing?.status === "fulfilled") {
4220
+ failures.delete(part);
4221
+ touch(existing);
4222
+ return existing;
4223
+ }
4224
+ const requestKey = JSON.stringify([part.mesh.glbUrl, part.mesh.stlUrl]);
4225
+ const failed = failures.get(part);
4226
+ if (failed && requests.get(failed) === requestKey) {
4227
+ touch(failed);
4228
+ return failed;
4229
+ }
4209
4230
  if (existing) {
4231
+ rememberFailure(part, requestKey, existing);
4210
4232
  touch(existing);
4211
4233
  return existing;
4212
4234
  }
@@ -4216,6 +4238,7 @@ function createEngineGeometryCache(loadGeometry = async (part) => {
4216
4238
  references: 0,
4217
4239
  lastAccess: ++accessSequence
4218
4240
  };
4241
+ requests.set(resource, requestKey);
4219
4242
  resource.promise = loadGeometry(part).then(
4220
4243
  (geometry) => {
4221
4244
  resource.status = "fulfilled";
@@ -4228,6 +4251,7 @@ function createEngineGeometryCache(loadGeometry = async (part) => {
4228
4251
  }
4229
4252
  );
4230
4253
  resources.set(key, resource);
4254
+ rememberFailure(part, requestKey, resource);
4231
4255
  return resource;
4232
4256
  },
4233
4257
  retain(resource) {
@@ -4242,6 +4266,7 @@ function createEngineGeometryCache(loadGeometry = async (part) => {
4242
4266
  clear() {
4243
4267
  for (const resource of resources.values()) resource.geometry?.dispose();
4244
4268
  resources.clear();
4269
+ failures = /* @__PURE__ */ new WeakMap();
4245
4270
  }
4246
4271
  };
4247
4272
  }
@@ -4594,8 +4619,21 @@ function compareVersions(a, b) {
4594
4619
 
4595
4620
  // src/engine/engine-part.tsx
4596
4621
  import { jsx as jsx7 } from "react/jsx-runtime";
4622
+ var models = /* @__PURE__ */ new WeakMap();
4623
+ var modelForReport = (report) => {
4624
+ if (typeof report !== "object" || report === null) {
4625
+ return normalizePartReport(report);
4626
+ }
4627
+ const existing = models.get(report);
4628
+ if (existing) {
4629
+ return existing;
4630
+ }
4631
+ const model = normalizePartReport(report);
4632
+ models.set(report, model);
4633
+ return model;
4634
+ };
4597
4635
  var EnginePart = ({ report, ...props }) => {
4598
- const model = useMemo8(() => normalizePartReport(report), [report]);
4636
+ const model = modelForReport(report);
4599
4637
  const resource = useGeometryResource(model);
4600
4638
  useEffect8(() => {
4601
4639
  engineGeometryCache.retain(resource);
@@ -12,7 +12,7 @@ import {
12
12
  parsePartGeometry,
13
13
  partMeshAssets,
14
14
  smoothRegionNormals
15
- } from "../chunk-N54FHMTG.js";
15
+ } from "../chunk-M2B3CQPQ.js";
16
16
  export {
17
17
  EnginePart,
18
18
  MIN_KERNEL_VERSION,