valdres 1.0.0-beta.1 → 1.0.0-beta.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.
Files changed (2) hide show
  1. package/dist/index.js +94 -80
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -417,96 +417,110 @@ var evaluateSelector = (selector, data, initializedAtomsSet, circularDependencyS
417
417
  throw new SelectorCircularDependencyError;
418
418
  }
419
419
  circularDependencySet.add(selector);
420
- const prev = data.abortControllers.get(selector);
421
- let options;
422
- if (prev === false) {
423
- let cached = syncOptionsCache.get(data);
424
- if (!cached) {
425
- cached = { signal: neverAbortedSignal, storeId: data.id };
426
- syncOptionsCache.set(data, cached);
427
- }
428
- options = cached;
429
- } else {
430
- if (prev)
431
- prev.abort();
432
- const abortController = new AbortController;
433
- data.abortControllers.set(selector, abortController);
434
- options = { signal: abortController.signal, storeId: data.id };
435
- }
436
- let allDepsThisEval;
437
- let result;
438
420
  try {
439
- result = selector.get((state) => {
440
- if (evaluationComplete) {
441
- if (!evalCtx.revoked && allDepsThisEval) {
442
- allDepsThisEval.add(state);
443
- }
444
- if (evalCtx.revoked) {
445
- return getState(state, data, new Set);
446
- }
447
- return lateGet(state, selector, data);
448
- }
449
- const value = getState(state, data, initializedAtomsSet, circularDependencySet);
450
- updatedDepsArray.push(state);
451
- if (!depsChanged && (!currentDependencies || !currentDependencies.has(state))) {
452
- depsChanged = true;
421
+ const prev = data.abortControllers.get(selector);
422
+ let options;
423
+ if (prev === false) {
424
+ let cached = syncOptionsCache.get(data);
425
+ if (!cached) {
426
+ cached = { signal: neverAbortedSignal, storeId: data.id };
427
+ syncOptionsCache.set(data, cached);
453
428
  }
454
- if (isPromiseLike(value))
455
- throw new SuspendAndWaitForResolveError(value);
456
- return value;
457
- }, options);
458
- } catch (error) {
459
- if (error instanceof NeedsInitError) {
460
- circularDependencySet.delete(selector);
461
- throw error;
462
- }
463
- if (error instanceof SuspendAndWaitForResolveError) {
464
- result = error;
465
- } else if (error instanceof SelectorEvaluationError) {
466
- throw error;
429
+ options = cached;
467
430
  } else {
468
- throw new SelectorEvaluationError(error);
431
+ if (prev)
432
+ prev.abort();
433
+ let controller;
434
+ const myEvalCtx = evalCtx;
435
+ options = {
436
+ storeId: data.id,
437
+ get signal() {
438
+ if (!controller) {
439
+ controller = new AbortController;
440
+ if (myEvalCtx.revoked) {
441
+ controller.abort();
442
+ } else {
443
+ data.abortControllers.set(selector, controller);
444
+ }
445
+ }
446
+ return controller.signal;
447
+ }
448
+ };
469
449
  }
470
- }
471
- evaluationComplete = true;
472
- const isAsyncResult = result instanceof SuspendAndWaitForResolveError || isPromiseLike(result);
473
- if (!isAsyncResult && !depsChanged && currentDependencies && currentDependencies.size !== updatedDepsArray.length) {
474
- depsChanged = true;
475
- }
476
- if (depsChanged || !currentDependencies) {
477
- const updatedDependencies = new Set(updatedDepsArray);
478
- if (isAsyncResult && currentDependencies) {
479
- for (const dep of currentDependencies) {
480
- updatedDependencies.add(dep);
450
+ let allDepsThisEval;
451
+ let result;
452
+ try {
453
+ result = selector.get((state) => {
454
+ if (evaluationComplete) {
455
+ if (!evalCtx.revoked && allDepsThisEval) {
456
+ allDepsThisEval.add(state);
457
+ }
458
+ if (evalCtx.revoked) {
459
+ return getState(state, data, new Set);
460
+ }
461
+ return lateGet(state, selector, data);
462
+ }
463
+ const value = getState(state, data, initializedAtomsSet, circularDependencySet);
464
+ updatedDepsArray.push(state);
465
+ if (!depsChanged && (!currentDependencies || !currentDependencies.has(state))) {
466
+ depsChanged = true;
467
+ }
468
+ if (isPromiseLike(value))
469
+ throw new SuspendAndWaitForResolveError(value);
470
+ return value;
471
+ }, options);
472
+ } catch (error) {
473
+ if (error instanceof NeedsInitError)
474
+ throw error;
475
+ if (error instanceof SuspendAndWaitForResolveError) {
476
+ result = error;
477
+ } else if (error instanceof SelectorEvaluationError) {
478
+ throw error;
479
+ } else {
480
+ throw new SelectorEvaluationError(error);
481
481
  }
482
482
  }
483
- const prev2 = currentDependencies ?? new Set;
484
- for (const state of updatedDependencies) {
485
- if (!prev2.has(state)) {
486
- const set = getOrInitDependentsSet(state, data);
487
- set.add(selector);
488
- if (addedDepsOut)
489
- addedDepsOut.add(state);
490
- }
483
+ evaluationComplete = true;
484
+ const isAsyncResult = result instanceof SuspendAndWaitForResolveError || isPromiseLike(result);
485
+ if (!isAsyncResult && !depsChanged && currentDependencies && currentDependencies.size !== updatedDepsArray.length) {
486
+ depsChanged = true;
491
487
  }
492
- if (!isAsyncResult) {
493
- for (const state of prev2) {
494
- if (!updatedDependencies.has(state)) {
488
+ if (depsChanged || !currentDependencies) {
489
+ const updatedDependencies = new Set(updatedDepsArray);
490
+ if (isAsyncResult && currentDependencies) {
491
+ for (const dep of currentDependencies) {
492
+ updatedDependencies.add(dep);
493
+ }
494
+ }
495
+ const prev2 = currentDependencies ?? new Set;
496
+ for (const state of updatedDependencies) {
497
+ if (!prev2.has(state)) {
495
498
  const set = getOrInitDependentsSet(state, data);
496
- set.delete(selector);
497
- if (removedDepsOut)
498
- removedDepsOut.add(state);
499
+ set.add(selector);
500
+ if (addedDepsOut)
501
+ addedDepsOut.add(state);
499
502
  }
500
503
  }
504
+ if (!isAsyncResult) {
505
+ for (const state of prev2) {
506
+ if (!updatedDependencies.has(state)) {
507
+ const set = getOrInitDependentsSet(state, data);
508
+ set.delete(selector);
509
+ if (removedDepsOut)
510
+ removedDepsOut.add(state);
511
+ }
512
+ }
513
+ }
514
+ data.stateDependencies.set(selector, updatedDependencies);
501
515
  }
502
- data.stateDependencies.set(selector, updatedDependencies);
503
- }
504
- if (isPromiseLike(result)) {
505
- allDepsThisEval = new Set(updatedDepsArray);
506
- pendingAsyncDeps.set(result, allDepsThisEval);
516
+ if (isPromiseLike(result)) {
517
+ allDepsThisEval = new Set(updatedDepsArray);
518
+ pendingAsyncDeps.set(result, allDepsThisEval);
519
+ }
520
+ return result;
521
+ } finally {
522
+ circularDependencySet.delete(selector);
507
523
  }
508
- circularDependencySet.delete(selector);
509
- return result;
510
524
  };
511
525
  var handleSelectorResult = (value, selector, data) => {
512
526
  if (value instanceof SuspendAndWaitForResolveError) {
@@ -2402,9 +2416,9 @@ var isFamilySelector = (state) => isFamilyState(state) && isSelector(state);
2402
2416
 
2403
2417
  // src/index.ts
2404
2418
  if (globalThis.__valdres__) {
2405
- throw new Error(`Error! An instance of valdres is already loaded. Loaded: ${globalThis.__valdres__}. Attempted to load: ${"1.0.0-beta.1"}`);
2419
+ throw new Error(`Error! An instance of valdres is already loaded. Loaded: ${globalThis.__valdres__}. Attempted to load: ${"1.0.0-beta.3"}`);
2406
2420
  } else {
2407
- globalThis.__valdres__ = "1.0.0-beta.1";
2421
+ globalThis.__valdres__ = "1.0.0-beta.3";
2408
2422
  }
2409
2423
  export {
2410
2424
  store,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valdres",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.3",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Eigil Sagafos"