atom.io 0.36.0 → 0.36.2
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.
- package/dist/internal/index.d.ts +93 -73
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +233 -248
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +5 -6
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/introspection/index.js +2 -3
- package/dist/introspection/index.js.map +1 -1
- package/dist/main/index.d.ts +29 -37
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +8 -9
- package/dist/main/index.js.map +1 -1
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.d.ts.map +1 -1
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +7 -8
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +3 -4
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +4 -4
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +2 -2
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/transceivers/set-rtx/index.d.ts +9 -2
- package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
- package/dist/transceivers/set-rtx/index.js +3 -0
- package/dist/transceivers/set-rtx/index.js.map +1 -1
- package/package.json +3 -3
- package/src/internal/atom/create-regular-atom.ts +5 -5
- package/src/internal/atom/has-role.ts +12 -0
- package/src/internal/atom/index.ts +1 -0
- package/src/internal/caching.ts +60 -41
- package/src/internal/families/find-in-store.ts +1 -1
- package/src/internal/families/get-family-of-token.ts +1 -1
- package/src/internal/families/init-family-member.ts +1 -1
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/read-or-compute-value.ts +26 -21
- package/src/internal/index.ts +8 -8
- package/src/internal/join/create-join.ts +3 -2
- package/src/internal/join/join-internal.ts +7 -4
- package/src/internal/mutable/create-mutable-atom-family.ts +6 -5
- package/src/internal/mutable/create-mutable-atom.ts +1 -1
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-json-token.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/get-update-token.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +27 -31
- package/src/internal/mutable/tracker.ts +29 -23
- package/src/internal/mutable/transceiver.ts +11 -10
- package/src/internal/selector/create-readonly-held-selector.ts +2 -2
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -2
- package/src/internal/selector/create-writable-held-selector.ts +3 -4
- package/src/internal/selector/create-writable-pure-selector.ts +3 -3
- package/src/internal/set-state/evict-downstream.ts +17 -15
- package/src/internal/set-state/index.ts +1 -0
- package/src/internal/set-state/reset-in-store.ts +6 -50
- package/src/internal/set-state/set-atom.ts +17 -24
- package/src/internal/set-state/set-into-store.ts +29 -13
- package/src/internal/store/counterfeit.ts +1 -1
- package/src/internal/store/deposit.ts +7 -8
- package/src/internal/store/store.ts +6 -6
- package/src/internal/store/withdraw.ts +8 -8
- package/src/internal/subscribe/subscribe-in-store.ts +8 -8
- package/src/internal/subscribe/subscribe-to-timeline.ts +2 -2
- package/src/internal/subscribe/subscribe-to-transaction.ts +2 -2
- package/src/internal/timeline/create-timeline.ts +3 -3
- package/src/internal/transaction/act-upon-store.ts +2 -2
- package/src/internal/transaction/apply-transaction.ts +2 -2
- package/src/internal/transaction/build-transaction.ts +2 -2
- package/src/internal/transaction/create-transaction.ts +3 -3
- package/src/internal/transaction/index.ts +2 -2
- package/src/internal/transaction/is-root-store.ts +4 -2
- package/src/internal/utility-types.ts +1 -1
- package/src/introspection/attach-introspection-states.ts +3 -3
- package/src/introspection/attach-transaction-index.ts +4 -4
- package/src/introspection/attach-transaction-logs.ts +4 -4
- package/src/introspection/auditor.ts +3 -3
- package/src/main/atom.ts +4 -4
- package/src/main/dispose-state.ts +4 -3
- package/src/main/find-state.ts +1 -1
- package/src/main/get-state.ts +6 -5
- package/src/main/reset-state.ts +3 -3
- package/src/main/set-state.ts +3 -3
- package/src/main/subscribe.ts +3 -3
- package/src/main/tokens.ts +9 -18
- package/src/main/transaction.ts +13 -15
- package/src/react/use-json.ts +5 -5
- package/src/react-devtools/TransactionIndex.tsx +3 -3
- package/src/react-devtools/Updates.tsx +2 -2
- package/src/realtime-client/continuity/register-and-attempt-confirmed-update.ts +2 -2
- package/src/realtime-client/pull-mutable-atom-family-member.ts +8 -13
- package/src/realtime-client/pull-mutable-atom.ts +5 -8
- package/src/realtime-client/push-state.ts +6 -5
- package/src/realtime-client/server-action.ts +5 -4
- package/src/realtime-react/use-pull-mutable-atom.ts +1 -1
- package/src/realtime-react/use-pull-mutable-family-member.ts +1 -1
- package/src/realtime-react/use-server-action.ts +2 -2
- package/src/realtime-server/realtime-mutable-family-provider.ts +1 -1
- package/src/realtime-server/realtime-mutable-provider.ts +1 -1
- package/src/transceivers/set-rtx/set-rtx.ts +14 -1
- package/src/internal/set-state/copy-mutable-if-needed.ts +0 -29
package/dist/internal/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Join as Join$1, arbitrary as arbitrary$1, subscribeToState as subscribeToState$1, subscribeToTimeline as subscribeToTimeline$1, subscribeToTransaction as subscribeToTransaction$1 } from "atom.io/internal";
|
|
2
1
|
import { parseJson, stringifyJson } from "atom.io/json";
|
|
3
2
|
import { Anarchy, AtomIOLogger } from "atom.io";
|
|
4
3
|
import { SetRTX } from "atom.io/transceivers/set-rtx";
|
|
@@ -383,21 +382,6 @@ const recallState = (store, state) => {
|
|
|
383
382
|
return target.valueMap.get(state.key);
|
|
384
383
|
};
|
|
385
384
|
|
|
386
|
-
//#endregion
|
|
387
|
-
//#region src/internal/subscribe/subscribe-in-store.ts
|
|
388
|
-
function subscribeInStore(store, token, handleUpdate, key = arbitrary$1()) {
|
|
389
|
-
switch (token.type) {
|
|
390
|
-
case `atom`:
|
|
391
|
-
case `mutable_atom`:
|
|
392
|
-
case `readonly_pure_selector`:
|
|
393
|
-
case `readonly_held_selector`:
|
|
394
|
-
case `writable_pure_selector`:
|
|
395
|
-
case `writable_held_selector`: return subscribeToState$1(store, token, key, handleUpdate);
|
|
396
|
-
case `transaction`: return subscribeToTransaction$1(store, token, key, handleUpdate);
|
|
397
|
-
case `timeline`: return subscribeToTimeline$1(store, token, key, handleUpdate);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
|
|
401
385
|
//#endregion
|
|
402
386
|
//#region src/internal/future.ts
|
|
403
387
|
/**
|
|
@@ -454,21 +438,6 @@ var Future = class extends Promise {
|
|
|
454
438
|
}
|
|
455
439
|
};
|
|
456
440
|
|
|
457
|
-
//#endregion
|
|
458
|
-
//#region src/internal/set-state/copy-mutable-if-needed.ts
|
|
459
|
-
function copyMutableIfNeeded(target, atom, origin) {
|
|
460
|
-
const originValue = origin.valueMap.get(atom.key);
|
|
461
|
-
const targetValue = target.valueMap.get(atom.key);
|
|
462
|
-
if (originValue !== targetValue) return targetValue;
|
|
463
|
-
if (originValue === void 0) return new atom.class();
|
|
464
|
-
origin.logger.info(`📃`, `atom`, atom.key, `copying`);
|
|
465
|
-
const jsonValue = originValue.toJSON();
|
|
466
|
-
const copiedValue = atom.class.fromJSON(jsonValue);
|
|
467
|
-
target.valueMap.set(atom.key, copiedValue);
|
|
468
|
-
new Tracker(atom, origin);
|
|
469
|
-
return copiedValue;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
441
|
//#endregion
|
|
473
442
|
//#region src/internal/transaction/is-root-store.ts
|
|
474
443
|
function isRootStore(store) {
|
|
@@ -517,32 +486,35 @@ const markDone = (store, key) => {
|
|
|
517
486
|
|
|
518
487
|
//#endregion
|
|
519
488
|
//#region src/internal/set-state/evict-downstream.ts
|
|
520
|
-
function
|
|
489
|
+
function evictDownstreamFromAtom(store, atom) {
|
|
521
490
|
const target = newest(store);
|
|
522
|
-
const
|
|
523
|
-
target.
|
|
491
|
+
const { key, type } = atom;
|
|
492
|
+
const downstreamKeys = target.selectorAtoms.getRelatedKeys(key);
|
|
493
|
+
target.logger.info(`🧹`, type, key, downstreamKeys ? `evicting ${downstreamKeys.size} states downstream:` : `no downstream states`, downstreamKeys ?? `to evict`);
|
|
524
494
|
if (downstreamKeys) {
|
|
525
|
-
if (target.operation.open) target.logger.info(`🧹`,
|
|
526
|
-
for (const
|
|
527
|
-
if (isDone(target,
|
|
528
|
-
evictCachedValue(target,
|
|
529
|
-
markDone(target,
|
|
495
|
+
if (target.operation.open) target.logger.info(`🧹`, type, key, `[ ${[...target.operation.done].join(`, `)} ] already done`);
|
|
496
|
+
for (const downstreamKey of downstreamKeys) {
|
|
497
|
+
if (isDone(target, downstreamKey)) continue;
|
|
498
|
+
evictCachedValue(target, downstreamKey);
|
|
499
|
+
markDone(target, downstreamKey);
|
|
530
500
|
}
|
|
531
501
|
}
|
|
532
502
|
}
|
|
533
|
-
function
|
|
503
|
+
function evictDownstreamFromSelector(store, selectorKey) {
|
|
534
504
|
const target = newest(store);
|
|
535
|
-
const relationEntries = target.selectorGraph.getRelationEntries({ upstreamSelectorKey:
|
|
505
|
+
const relationEntries = target.selectorGraph.getRelationEntries({ upstreamSelectorKey: selectorKey }).filter(([_, { source }]) => source === selectorKey);
|
|
536
506
|
for (const [downstreamSelectorKey] of relationEntries) {
|
|
537
507
|
if (isDone(target, downstreamSelectorKey)) continue;
|
|
538
508
|
evictCachedValue(target, downstreamSelectorKey);
|
|
539
509
|
markDone(target, downstreamSelectorKey);
|
|
510
|
+
evictDownstreamFromSelector(store, downstreamSelectorKey);
|
|
540
511
|
}
|
|
541
512
|
}
|
|
542
513
|
|
|
543
514
|
//#endregion
|
|
544
515
|
//#region src/internal/caching.ts
|
|
545
|
-
function
|
|
516
|
+
function writeToCache(target, state, value) {
|
|
517
|
+
const { key, subject, type } = state;
|
|
546
518
|
const currentValue = target.valueMap.get(key);
|
|
547
519
|
if (currentValue instanceof Future && !currentValue.done) {
|
|
548
520
|
const future = currentValue;
|
|
@@ -559,20 +531,21 @@ function cacheValue(target, key, value, subject) {
|
|
|
559
531
|
future.then(function handleResolvedFuture(resolved) {
|
|
560
532
|
const current = target.valueMap.get(key);
|
|
561
533
|
if (current === future) {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
534
|
+
openOperation(target, state);
|
|
535
|
+
writeToCache(target, state, resolved);
|
|
536
|
+
switch (type) {
|
|
537
|
+
case `atom`:
|
|
538
|
+
case `mutable_atom`:
|
|
539
|
+
evictDownstreamFromAtom(target, state);
|
|
540
|
+
break;
|
|
541
|
+
case `readonly_held_selector`:
|
|
542
|
+
case `readonly_pure_selector`:
|
|
543
|
+
case `writable_held_selector`:
|
|
544
|
+
case `writable_pure_selector`:
|
|
545
|
+
evictDownstreamFromSelector(target, key);
|
|
546
|
+
break;
|
|
575
547
|
}
|
|
548
|
+
closeOperation(target);
|
|
576
549
|
subject.next({
|
|
577
550
|
newValue: resolved,
|
|
578
551
|
oldValue: future
|
|
@@ -586,17 +559,31 @@ function cacheValue(target, key, value, subject) {
|
|
|
586
559
|
target.valueMap.set(key, value);
|
|
587
560
|
return value;
|
|
588
561
|
}
|
|
589
|
-
|
|
562
|
+
/**
|
|
563
|
+
* @param target - the newest layer of the store
|
|
564
|
+
* @param state - the state to read from cache
|
|
565
|
+
* @param mut - whether the value is intended to be mutable
|
|
566
|
+
* @returns the state's current value
|
|
567
|
+
*/
|
|
568
|
+
function readFromCache(target, state, mut) {
|
|
590
569
|
target.logger.info(`📖`, state.type, state.key, `reading cached value`);
|
|
591
570
|
let value = target.valueMap.get(state.key);
|
|
592
|
-
|
|
571
|
+
const mayNeedToBeCopied = mut === `mut` && state.type === `mutable_atom` && isChildStore(target);
|
|
572
|
+
if (mayNeedToBeCopied) {
|
|
573
|
+
const mutableAtom$1 = state;
|
|
593
574
|
const { parent } = target;
|
|
594
|
-
|
|
575
|
+
if (target.valueMap.hasOwn(mutableAtom$1.key)) return value;
|
|
576
|
+
const parentValue = parent.valueMap.get(mutableAtom$1.key);
|
|
577
|
+
target.logger.info(`📃`, `atom`, mutableAtom$1.key, `copying`);
|
|
578
|
+
const jsonValue = parentValue.toJSON();
|
|
579
|
+
const copiedValue = mutableAtom$1.class.fromJSON(jsonValue);
|
|
580
|
+
target.valueMap.set(mutableAtom$1.key, copiedValue);
|
|
581
|
+
new Tracker(mutableAtom$1, parent);
|
|
595
582
|
value = copiedValue;
|
|
596
583
|
}
|
|
597
584
|
return value;
|
|
598
|
-
}
|
|
599
|
-
|
|
585
|
+
}
|
|
586
|
+
function evictCachedValue(target, key) {
|
|
600
587
|
const currentValue = target.valueMap.get(key);
|
|
601
588
|
if (currentValue instanceof Future) {
|
|
602
589
|
const selector = target.writableSelectors.get(key) ?? target.readonlySelectors.get(key);
|
|
@@ -606,57 +593,49 @@ const evictCachedValue = (target, key) => {
|
|
|
606
593
|
if (target.operation.open) target.operation.prev.set(key, currentValue);
|
|
607
594
|
target.valueMap.delete(key);
|
|
608
595
|
target.logger.info(`🗑`, `state`, key, `evicted`);
|
|
609
|
-
}
|
|
596
|
+
}
|
|
610
597
|
|
|
611
598
|
//#endregion
|
|
612
599
|
//#region src/internal/get-state/read-or-compute-value.ts
|
|
613
|
-
|
|
614
|
-
if (target.valueMap.has(state.key)) return
|
|
600
|
+
function readOrComputeValue(target, state, mut) {
|
|
601
|
+
if (target.valueMap.has(state.key)) return readFromCache(target, state, mut);
|
|
602
|
+
const { key } = state;
|
|
615
603
|
switch (state.type) {
|
|
616
604
|
case `readonly_held_selector`:
|
|
617
605
|
case `readonly_pure_selector`:
|
|
618
606
|
case `writable_held_selector`:
|
|
619
607
|
case `writable_pure_selector`:
|
|
620
|
-
target.logger.info(`🧮`, state.type,
|
|
608
|
+
target.logger.info(`🧮`, state.type, key, `computing value`);
|
|
621
609
|
return state.get();
|
|
622
610
|
case `atom`: {
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
target.logger.info(`💁`, `atom`, state.key, `could not find cached value; using default`, defaultValue);
|
|
611
|
+
let def;
|
|
612
|
+
if (state.default instanceof Function) def = state.default();
|
|
613
|
+
else def = state.default;
|
|
614
|
+
const cachedValue = writeToCache(target, state, def);
|
|
615
|
+
target.logger.info(`💁`, `atom`, state.key, `could not find cached value; using default`, def);
|
|
629
616
|
return cachedValue;
|
|
630
617
|
}
|
|
631
618
|
case `mutable_atom`: {
|
|
632
|
-
const
|
|
633
|
-
const
|
|
634
|
-
const cachedValue = cacheValue(target, state.key, instance, state.subject);
|
|
619
|
+
const instance = new state.class();
|
|
620
|
+
const cachedValue = writeToCache(target, state, instance);
|
|
635
621
|
target.logger.info(`💁`, `mutable_atom`, state.key, `could not find cached value; using default`, instance);
|
|
636
622
|
return cachedValue;
|
|
637
623
|
}
|
|
638
624
|
}
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
//#endregion
|
|
642
|
-
//#region src/internal/subscribe/subscribe-to-root-atoms.ts
|
|
643
|
-
const subscribeToRootDependency = (target, selector, atom) => {
|
|
644
|
-
return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
|
|
645
|
-
target.logger.info(`📢`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
|
|
646
|
-
const oldValue = recallState(target, selector);
|
|
647
|
-
const newValue = readOrComputeValue(target, selector);
|
|
648
|
-
target.logger.info(`✨`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
|
|
649
|
-
selector.subject.next({
|
|
650
|
-
newValue,
|
|
651
|
-
oldValue
|
|
652
|
-
});
|
|
653
|
-
});
|
|
654
|
-
};
|
|
625
|
+
}
|
|
655
626
|
|
|
656
627
|
//#endregion
|
|
657
628
|
//#region src/internal/set-state/become.ts
|
|
658
629
|
const become = (nextVersionOfThing) => (originalThing) => nextVersionOfThing instanceof Function ? nextVersionOfThing(originalThing) : nextVersionOfThing;
|
|
659
630
|
|
|
631
|
+
//#endregion
|
|
632
|
+
//#region src/internal/atom/has-role.ts
|
|
633
|
+
const INTERNAL_ROLES = [`tracker:signal`];
|
|
634
|
+
function hasRole(atom, role) {
|
|
635
|
+
if (`internalRoles` in atom === false) return false;
|
|
636
|
+
return atom.internalRoles.includes(role);
|
|
637
|
+
}
|
|
638
|
+
|
|
660
639
|
//#endregion
|
|
661
640
|
//#region src/internal/set-state/emit-update.ts
|
|
662
641
|
const emitUpdate = (store, state, update) => {
|
|
@@ -676,18 +655,12 @@ const emitUpdate = (store, state, update) => {
|
|
|
676
655
|
//#endregion
|
|
677
656
|
//#region src/internal/set-state/set-atom.ts
|
|
678
657
|
const setAtom = (target, atom, next) => {
|
|
679
|
-
const oldValue = readOrComputeValue(target, atom);
|
|
680
|
-
let newValue = oldValue;
|
|
681
|
-
if (atom.type === `mutable_atom` && isChildStore(target)) {
|
|
682
|
-
const { parent } = target;
|
|
683
|
-
const copiedValue = copyMutableIfNeeded(target, atom, parent);
|
|
684
|
-
newValue = copiedValue;
|
|
685
|
-
}
|
|
686
|
-
newValue = become(next)(newValue);
|
|
658
|
+
const oldValue = readOrComputeValue(target, atom, `mut`);
|
|
659
|
+
let newValue = become(next)(oldValue);
|
|
687
660
|
target.logger.info(`📝`, `atom`, atom.key, `set to`, newValue);
|
|
688
|
-
newValue =
|
|
661
|
+
newValue = writeToCache(target, atom, newValue);
|
|
689
662
|
markDone(target, atom.key);
|
|
690
|
-
|
|
663
|
+
evictDownstreamFromAtom(target, atom);
|
|
691
664
|
const update = {
|
|
692
665
|
oldValue,
|
|
693
666
|
newValue
|
|
@@ -707,17 +680,12 @@ const setAtom = (target, atom, next) => {
|
|
|
707
680
|
if (atom.family) atomUpdate.family = atom.family;
|
|
708
681
|
target.transactionMeta.update.updates.push(atomUpdate);
|
|
709
682
|
target.logger.info(`📁`, `atom`, key, `stowed (`, update.oldValue, `->`, update.newValue, `)`);
|
|
710
|
-
} else if (atom
|
|
711
|
-
const
|
|
712
|
-
const
|
|
713
|
-
|
|
714
|
-
if (mutableAtom$1.type === `mutable_atom` && isChildStore(target)) {
|
|
715
|
-
const { parent } = target;
|
|
716
|
-
const copiedValue = copyMutableIfNeeded(target, mutableAtom$1, parent);
|
|
717
|
-
transceiver = copiedValue;
|
|
718
|
-
}
|
|
683
|
+
} else if (hasRole(atom, `tracker:signal`)) {
|
|
684
|
+
const key = atom.key.slice(1);
|
|
685
|
+
const mutable = target.atoms.get(key);
|
|
686
|
+
const transceiver = readOrComputeValue(target, mutable, `mut`);
|
|
719
687
|
const accepted = transceiver.do(update.newValue) === null;
|
|
720
|
-
if (accepted)
|
|
688
|
+
if (accepted === true) evictDownstreamFromAtom(target, mutable);
|
|
721
689
|
}
|
|
722
690
|
};
|
|
723
691
|
|
|
@@ -760,44 +728,6 @@ function getFamilyOfToken(store, token) {
|
|
|
760
728
|
}
|
|
761
729
|
}
|
|
762
730
|
|
|
763
|
-
//#endregion
|
|
764
|
-
//#region src/internal/set-state/reset-in-store.ts
|
|
765
|
-
function resetInStore(store, ...params) {
|
|
766
|
-
let token;
|
|
767
|
-
let family;
|
|
768
|
-
let key;
|
|
769
|
-
if (params.length === 1) {
|
|
770
|
-
token = params[0];
|
|
771
|
-
family = getFamilyOfToken(store, token) ?? null;
|
|
772
|
-
if (family) {
|
|
773
|
-
key = token.family ? parseJson(token.family.subKey) : null;
|
|
774
|
-
token = findInStore(store, family, key);
|
|
775
|
-
}
|
|
776
|
-
} else {
|
|
777
|
-
family = params[0];
|
|
778
|
-
key = params[1];
|
|
779
|
-
token = findInStore(store, family, key);
|
|
780
|
-
}
|
|
781
|
-
if (`counterfeit` in token && `family` in token) {
|
|
782
|
-
const subKey = token.family.subKey;
|
|
783
|
-
const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
|
|
784
|
-
store.logger.error(`❌`, token.type, token.key, `could not be reset because it was not found in the store "${store.config.name}".`, disposal ? `This state was previously disposed:\n${disposal.trace}` : `No previous disposal trace was found.`);
|
|
785
|
-
return;
|
|
786
|
-
}
|
|
787
|
-
const rejectionTime = openOperation(store, token);
|
|
788
|
-
if (rejectionTime) {
|
|
789
|
-
const unsubscribe = store.on.operationClose.subscribe(`waiting to reset "${token.key}" at T-${rejectionTime}`, () => {
|
|
790
|
-
unsubscribe();
|
|
791
|
-
store.logger.info(`🟢`, token.type, token.key, `resuming deferred resetState from T-${rejectionTime}`);
|
|
792
|
-
resetInStore(store, token);
|
|
793
|
-
});
|
|
794
|
-
return;
|
|
795
|
-
}
|
|
796
|
-
const state = withdraw(store, token);
|
|
797
|
-
resetAtomOrSelector(store, state);
|
|
798
|
-
closeOperation(store);
|
|
799
|
-
}
|
|
800
|
-
|
|
801
731
|
//#endregion
|
|
802
732
|
//#region src/internal/set-state/set-atom-or-selector.ts
|
|
803
733
|
const setAtomOrSelector = (store, state, value) => {
|
|
@@ -823,9 +753,9 @@ function setIntoStore(store, ...params) {
|
|
|
823
753
|
if (params.length === 2) {
|
|
824
754
|
token = params[0];
|
|
825
755
|
value = params[1];
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
key =
|
|
756
|
+
if (token.family) {
|
|
757
|
+
family = getFamilyOfToken(store, token);
|
|
758
|
+
key = parseJson(token.family.subKey);
|
|
829
759
|
token = findInStore(store, family, key);
|
|
830
760
|
}
|
|
831
761
|
} else {
|
|
@@ -834,26 +764,45 @@ function setIntoStore(store, ...params) {
|
|
|
834
764
|
value = params[2];
|
|
835
765
|
token = findInStore(store, family, key);
|
|
836
766
|
}
|
|
767
|
+
const action = value === RESET_STATE ? `reset` : `set`;
|
|
837
768
|
if (`counterfeit` in token && `family` in token) {
|
|
838
769
|
const subKey = token.family.subKey;
|
|
839
770
|
const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
|
|
840
|
-
store.logger.error(`❌`, token.type, token.key, `could not be
|
|
771
|
+
store.logger.error(`❌`, token.type, token.key, `could not be`, action, `because it was not found in the store "${store.config.name}".`, disposal ? `This state was previously disposed:\n${disposal.trace}` : `No previous disposal trace was found.`);
|
|
841
772
|
return;
|
|
842
773
|
}
|
|
843
774
|
const rejectionTime = openOperation(store, token);
|
|
844
775
|
if (rejectionTime) {
|
|
845
|
-
const unsubscribe = store.on.operationClose.subscribe(`waiting to
|
|
776
|
+
const unsubscribe = store.on.operationClose.subscribe(`waiting to ${action} "${token.key}" at T-${rejectionTime}`, function waitUntilOperationCloseToSetState() {
|
|
846
777
|
unsubscribe();
|
|
847
|
-
store.logger.info(`🟢`, token.type, token.key, `resuming deferred
|
|
778
|
+
store.logger.info(`🟢`, token.type, token.key, `resuming deferred`, action, `from T-${rejectionTime}`);
|
|
848
779
|
setIntoStore(store, token, value);
|
|
849
780
|
});
|
|
850
781
|
return;
|
|
851
782
|
}
|
|
852
783
|
const state = withdraw(store, token);
|
|
853
|
-
|
|
784
|
+
if (value === RESET_STATE) resetAtomOrSelector(store, state);
|
|
785
|
+
else setAtomOrSelector(store, state, value);
|
|
854
786
|
closeOperation(store);
|
|
855
787
|
}
|
|
856
788
|
|
|
789
|
+
//#endregion
|
|
790
|
+
//#region src/internal/set-state/reset-in-store.ts
|
|
791
|
+
const RESET_STATE = Symbol(`RESET`);
|
|
792
|
+
function resetInStore(store, ...params) {
|
|
793
|
+
let token;
|
|
794
|
+
let family;
|
|
795
|
+
let key;
|
|
796
|
+
if (params.length === 1) {
|
|
797
|
+
token = params[0];
|
|
798
|
+
setIntoStore(store, token, RESET_STATE);
|
|
799
|
+
} else {
|
|
800
|
+
family = params[0];
|
|
801
|
+
key = params[1];
|
|
802
|
+
setIntoStore(store, family, key, RESET_STATE);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
|
|
857
806
|
//#endregion
|
|
858
807
|
//#region src/internal/keys.ts
|
|
859
808
|
const isAtomKey = (store, key) => newest(store).atoms.has(key);
|
|
@@ -967,7 +916,7 @@ const createReadonlyHeldSelector = (store, options, family) => {
|
|
|
967
916
|
find,
|
|
968
917
|
json
|
|
969
918
|
}, constant);
|
|
970
|
-
|
|
919
|
+
writeToCache(newest(store), readonlySelector, constant);
|
|
971
920
|
covered.clear();
|
|
972
921
|
return constant;
|
|
973
922
|
};
|
|
@@ -1008,7 +957,7 @@ const createReadonlyPureSelector = (store, options, family) => {
|
|
|
1008
957
|
find,
|
|
1009
958
|
json
|
|
1010
959
|
});
|
|
1011
|
-
const cached =
|
|
960
|
+
const cached = writeToCache(innerTarget, readonlySelector, value);
|
|
1012
961
|
store.logger.info(`✨`, type, key, `=`, cached);
|
|
1013
962
|
covered.clear();
|
|
1014
963
|
return cached;
|
|
@@ -1586,7 +1535,7 @@ const createWritableHeldSelector = (store, options, family) => {
|
|
|
1586
1535
|
for (const [downstreamSelectorKey, { source }] of upstreamStates) if (source !== key) innerTarget.selectorGraph.delete(downstreamSelectorKey, key);
|
|
1587
1536
|
innerTarget.selectorAtoms.delete(key);
|
|
1588
1537
|
getFn(getterToolkit, constant);
|
|
1589
|
-
|
|
1538
|
+
writeToCache(innerTarget, mySelector, constant);
|
|
1590
1539
|
store.logger.info(`✨`, type, key, `=`, constant);
|
|
1591
1540
|
covered.clear();
|
|
1592
1541
|
return constant;
|
|
@@ -1596,7 +1545,7 @@ const createWritableHeldSelector = (store, options, family) => {
|
|
|
1596
1545
|
const oldValue = getSelf(options.get, innerTarget);
|
|
1597
1546
|
const newValue = become(next)(oldValue);
|
|
1598
1547
|
store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
|
|
1599
|
-
|
|
1548
|
+
writeToCache(innerTarget, mySelector, newValue);
|
|
1600
1549
|
markDone(innerTarget, key);
|
|
1601
1550
|
if (isRootStore(innerTarget)) subject.next({
|
|
1602
1551
|
newValue,
|
|
@@ -1642,7 +1591,7 @@ const createWritablePureSelector = (store, options, family) => {
|
|
|
1642
1591
|
for (const [downstreamSelectorKey, { source }] of upstreamStates) if (source !== key) innerTarget.selectorGraph.delete(downstreamSelectorKey, key);
|
|
1643
1592
|
innerTarget.selectorAtoms.delete(key);
|
|
1644
1593
|
const value = getFn(getterToolkit);
|
|
1645
|
-
const cached =
|
|
1594
|
+
const cached = writeToCache(innerTarget, mySelector, value);
|
|
1646
1595
|
store.logger.info(`✨`, type, key, `=`, cached);
|
|
1647
1596
|
covered.clear();
|
|
1648
1597
|
return value;
|
|
@@ -1652,7 +1601,7 @@ const createWritablePureSelector = (store, options, family) => {
|
|
|
1652
1601
|
const oldValue = getSelf(options.get, innerTarget);
|
|
1653
1602
|
const newValue = become(next)(oldValue);
|
|
1654
1603
|
store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
|
|
1655
|
-
|
|
1604
|
+
writeToCache(innerTarget, mySelector, newValue);
|
|
1656
1605
|
markDone(innerTarget, options.key);
|
|
1657
1606
|
if (isRootStore(innerTarget)) subject.next({
|
|
1658
1607
|
newValue,
|
|
@@ -2159,6 +2108,21 @@ function getFromStore(store, ...params) {
|
|
|
2159
2108
|
return readOrComputeValue(store, withdraw(store, token));
|
|
2160
2109
|
}
|
|
2161
2110
|
|
|
2111
|
+
//#endregion
|
|
2112
|
+
//#region src/internal/subscribe/subscribe-to-root-atoms.ts
|
|
2113
|
+
const subscribeToRootDependency = (target, selector, atom) => {
|
|
2114
|
+
return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
|
|
2115
|
+
target.logger.info(`📢`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
|
|
2116
|
+
const oldValue = recallState(target, selector);
|
|
2117
|
+
const newValue = readOrComputeValue(target, selector);
|
|
2118
|
+
target.logger.info(`✨`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
|
|
2119
|
+
selector.subject.next({
|
|
2120
|
+
newValue,
|
|
2121
|
+
oldValue
|
|
2122
|
+
});
|
|
2123
|
+
});
|
|
2124
|
+
};
|
|
2125
|
+
|
|
2162
2126
|
//#endregion
|
|
2163
2127
|
//#region src/internal/subscribe/subscribe-to-state.ts
|
|
2164
2128
|
function subscribeToState(store, token, key, handleUpdate) {
|
|
@@ -2201,6 +2165,46 @@ function subscribeToState(store, token, key, handleUpdate) {
|
|
|
2201
2165
|
return unsubscribe;
|
|
2202
2166
|
}
|
|
2203
2167
|
|
|
2168
|
+
//#endregion
|
|
2169
|
+
//#region src/internal/store/withdraw.ts
|
|
2170
|
+
function withdraw(store, token) {
|
|
2171
|
+
let withdrawn;
|
|
2172
|
+
let target = store;
|
|
2173
|
+
while (target !== null) {
|
|
2174
|
+
switch (token.type) {
|
|
2175
|
+
case `atom`:
|
|
2176
|
+
case `mutable_atom`:
|
|
2177
|
+
withdrawn = target.atoms.get(token.key);
|
|
2178
|
+
break;
|
|
2179
|
+
case `writable_pure_selector`:
|
|
2180
|
+
case `writable_held_selector`:
|
|
2181
|
+
withdrawn = target.writableSelectors.get(token.key);
|
|
2182
|
+
break;
|
|
2183
|
+
case `readonly_pure_selector`:
|
|
2184
|
+
case `readonly_held_selector`:
|
|
2185
|
+
withdrawn = target.readonlySelectors.get(token.key);
|
|
2186
|
+
break;
|
|
2187
|
+
case `atom_family`:
|
|
2188
|
+
case `mutable_atom_family`:
|
|
2189
|
+
case `writable_pure_selector_family`:
|
|
2190
|
+
case `readonly_pure_selector_family`:
|
|
2191
|
+
case `writable_held_selector_family`:
|
|
2192
|
+
case `readonly_held_selector_family`:
|
|
2193
|
+
withdrawn = target.families.get(token.key);
|
|
2194
|
+
break;
|
|
2195
|
+
case `timeline`:
|
|
2196
|
+
withdrawn = target.timelines.get(token.key);
|
|
2197
|
+
break;
|
|
2198
|
+
case `transaction`:
|
|
2199
|
+
withdrawn = target.transactions.get(token.key);
|
|
2200
|
+
break;
|
|
2201
|
+
}
|
|
2202
|
+
if (withdrawn) return withdrawn;
|
|
2203
|
+
target = target.child;
|
|
2204
|
+
}
|
|
2205
|
+
throw new NotFoundError(token, store);
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2204
2208
|
//#endregion
|
|
2205
2209
|
//#region src/internal/subscribe/subscribe-to-timeline.ts
|
|
2206
2210
|
const subscribeToTimeline = (store, token, key, handleUpdate) => {
|
|
@@ -2225,6 +2229,21 @@ const subscribeToTransaction = (store, token, key, handleUpdate) => {
|
|
|
2225
2229
|
};
|
|
2226
2230
|
};
|
|
2227
2231
|
|
|
2232
|
+
//#endregion
|
|
2233
|
+
//#region src/internal/subscribe/subscribe-in-store.ts
|
|
2234
|
+
function subscribeInStore(store, token, handleUpdate, key = arbitrary()) {
|
|
2235
|
+
switch (token.type) {
|
|
2236
|
+
case `atom`:
|
|
2237
|
+
case `mutable_atom`:
|
|
2238
|
+
case `readonly_pure_selector`:
|
|
2239
|
+
case `readonly_held_selector`:
|
|
2240
|
+
case `writable_pure_selector`:
|
|
2241
|
+
case `writable_held_selector`: return subscribeToState(store, token, key, handleUpdate);
|
|
2242
|
+
case `transaction`: return subscribeToTransaction(store, token, key, handleUpdate);
|
|
2243
|
+
case `timeline`: return subscribeToTimeline(store, token, key, handleUpdate);
|
|
2244
|
+
}
|
|
2245
|
+
}
|
|
2246
|
+
|
|
2228
2247
|
//#endregion
|
|
2229
2248
|
//#region src/internal/mutable/tracker.ts
|
|
2230
2249
|
/**
|
|
@@ -2233,30 +2252,33 @@ const subscribeToTransaction = (store, token, key, handleUpdate) => {
|
|
|
2233
2252
|
* the tracker will update its own state to reflect the change.
|
|
2234
2253
|
*/
|
|
2235
2254
|
var Tracker = class {
|
|
2236
|
-
|
|
2237
|
-
const
|
|
2238
|
-
store.atoms.delete(
|
|
2239
|
-
store.valueMap.delete(
|
|
2255
|
+
initializeSignalAtom(mutableState, store) {
|
|
2256
|
+
const latestSignalStateKey = `*${mutableState.key}`;
|
|
2257
|
+
store.atoms.delete(latestSignalStateKey);
|
|
2258
|
+
store.valueMap.delete(latestSignalStateKey);
|
|
2240
2259
|
const familyMetaData = mutableState.family ? {
|
|
2241
2260
|
key: `*${mutableState.family.key}`,
|
|
2242
2261
|
subKey: mutableState.family.subKey
|
|
2243
2262
|
} : void 0;
|
|
2244
|
-
const
|
|
2245
|
-
key:
|
|
2263
|
+
const latestSignalState = createRegularAtom(store, {
|
|
2264
|
+
key: latestSignalStateKey,
|
|
2246
2265
|
default: null
|
|
2247
|
-
}, familyMetaData);
|
|
2248
|
-
if (store.parent?.valueMap.has(
|
|
2249
|
-
const parentValue = store.parent.valueMap.get(
|
|
2250
|
-
store.valueMap.set(
|
|
2266
|
+
}, familyMetaData, [`tracker:signal`]);
|
|
2267
|
+
if (store.parent?.valueMap.has(latestSignalStateKey)) {
|
|
2268
|
+
const parentValue = store.parent.valueMap.get(latestSignalStateKey);
|
|
2269
|
+
store.valueMap.set(latestSignalStateKey, parentValue);
|
|
2251
2270
|
}
|
|
2252
|
-
return
|
|
2271
|
+
return latestSignalState;
|
|
2253
2272
|
}
|
|
2254
2273
|
unsubscribeFromInnerValue;
|
|
2255
2274
|
unsubscribeFromState;
|
|
2256
|
-
captureSignalsFromCore(mutableState,
|
|
2257
|
-
const
|
|
2275
|
+
captureSignalsFromCore(mutableState, latestSignalState, target) {
|
|
2276
|
+
const stateKey = mutableState.key;
|
|
2277
|
+
const storeName = target.config.name;
|
|
2278
|
+
const storeStatus = isChildStore(target) ? target.transactionMeta.update.key : `main`;
|
|
2279
|
+
const subscriptionKey = `tracker:${storeName}:${storeStatus}:${stateKey}`;
|
|
2258
2280
|
const trackerCapturesOutboundSignal = (update) => {
|
|
2259
|
-
setIntoStore(target,
|
|
2281
|
+
setIntoStore(target, latestSignalState, update);
|
|
2260
2282
|
};
|
|
2261
2283
|
const originalInnerValue = getFromStore(target, mutableState);
|
|
2262
2284
|
this.unsubscribeFromInnerValue = originalInnerValue.subscribe(subscriptionKey, trackerCapturesOutboundSignal);
|
|
@@ -2267,10 +2289,10 @@ var Tracker = class {
|
|
|
2267
2289
|
}
|
|
2268
2290
|
}.bind(this));
|
|
2269
2291
|
}
|
|
2270
|
-
supplySignalsToCore(mutableState,
|
|
2292
|
+
supplySignalsToCore(mutableState, latestSignalState, target) {
|
|
2271
2293
|
const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
|
|
2272
|
-
subscribeToState(target,
|
|
2273
|
-
const timelineId = target.timelineTopics.getRelatedKey(
|
|
2294
|
+
subscribeToState(target, latestSignalState, subscriptionKey, function trackerCapturesInboundSignal({ newValue, oldValue }) {
|
|
2295
|
+
const timelineId = target.timelineTopics.getRelatedKey(latestSignalState.key);
|
|
2274
2296
|
if (timelineId && target.timelines.get(timelineId)?.timeTraveling) {
|
|
2275
2297
|
const unsubscribe = subscribeToTimeline(target, {
|
|
2276
2298
|
key: timelineId,
|
|
@@ -2289,7 +2311,10 @@ var Tracker = class {
|
|
|
2289
2311
|
const updateNumber = mutable.getUpdateNumber(newValue);
|
|
2290
2312
|
const eventOffset = updateNumber - mutable.cacheUpdateNumber;
|
|
2291
2313
|
if (newValue && eventOffset === 1) setIntoStore(target, mutableState, (transceiver) => (transceiver.do(newValue), transceiver));
|
|
2292
|
-
else
|
|
2314
|
+
else {
|
|
2315
|
+
const expected = mutable.cacheUpdateNumber + 1;
|
|
2316
|
+
target.logger.info(`❌`, `mutable_atom`, mutableState.key, `could not be updated. Expected update number`, expected, `but got`, updateNumber);
|
|
2317
|
+
}
|
|
2293
2318
|
});
|
|
2294
2319
|
}
|
|
2295
2320
|
mutableAtomToken;
|
|
@@ -2297,7 +2322,7 @@ var Tracker = class {
|
|
|
2297
2322
|
[Symbol.dispose];
|
|
2298
2323
|
constructor(mutableAtomToken, store) {
|
|
2299
2324
|
const target = newest(store);
|
|
2300
|
-
const latestSignalToken = this.
|
|
2325
|
+
const latestSignalToken = this.initializeSignalAtom(mutableAtomToken, target);
|
|
2301
2326
|
this.mutableAtomToken = mutableAtomToken;
|
|
2302
2327
|
this.latestSignalToken = latestSignalToken;
|
|
2303
2328
|
this.captureSignalsFromCore(mutableAtomToken, latestSignalToken, target);
|
|
@@ -2372,16 +2397,16 @@ function createMutableAtom(store, options, family) {
|
|
|
2372
2397
|
//#region src/internal/mutable/tracker-family.ts
|
|
2373
2398
|
var FamilyTracker = class {
|
|
2374
2399
|
trackers = /* @__PURE__ */ new Map();
|
|
2375
|
-
|
|
2400
|
+
latestSignalAtoms;
|
|
2376
2401
|
mutableAtoms;
|
|
2377
2402
|
constructor(mutableAtoms, store) {
|
|
2378
|
-
const
|
|
2403
|
+
const latestSignalAtoms = createRegularAtomFamily(store, {
|
|
2379
2404
|
key: `*${mutableAtoms.key}`,
|
|
2380
2405
|
default: null
|
|
2381
2406
|
}, [`mutable`, `updates`]);
|
|
2382
|
-
this.
|
|
2407
|
+
this.latestSignalAtoms = withdraw(store, latestSignalAtoms);
|
|
2383
2408
|
this.mutableAtoms = mutableAtoms;
|
|
2384
|
-
|
|
2409
|
+
const trackerFamilyWatchesForCreationAndDisposalEvents = (event) => {
|
|
2385
2410
|
const { type, token } = event;
|
|
2386
2411
|
if (token.family) {
|
|
2387
2412
|
const key = parseJson(token.family.subKey);
|
|
@@ -2389,18 +2414,17 @@ var FamilyTracker = class {
|
|
|
2389
2414
|
case `state_creation`:
|
|
2390
2415
|
this.trackers.set(key, new Tracker(token, store));
|
|
2391
2416
|
break;
|
|
2392
|
-
case `state_disposal`:
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
this.trackers.delete(key);
|
|
2398
|
-
}
|
|
2417
|
+
case `state_disposal`: {
|
|
2418
|
+
const tracker = this.trackers.get(key);
|
|
2419
|
+
if (tracker) {
|
|
2420
|
+
tracker[Symbol.dispose]();
|
|
2421
|
+
this.trackers.delete(key);
|
|
2399
2422
|
}
|
|
2400
|
-
|
|
2423
|
+
}
|
|
2401
2424
|
}
|
|
2402
2425
|
}
|
|
2403
|
-
}
|
|
2426
|
+
};
|
|
2427
|
+
this.mutableAtoms.subject.subscribe(`store=${store.config.name}::tracker-atom-family`, trackerFamilyWatchesForCreationAndDisposalEvents);
|
|
2404
2428
|
}
|
|
2405
2429
|
};
|
|
2406
2430
|
|
|
@@ -2641,49 +2665,9 @@ const clearStore = (store) => {
|
|
|
2641
2665
|
store.config = config;
|
|
2642
2666
|
};
|
|
2643
2667
|
|
|
2644
|
-
//#endregion
|
|
2645
|
-
//#region src/internal/store/withdraw.ts
|
|
2646
|
-
function withdraw(store, token) {
|
|
2647
|
-
let withdrawn;
|
|
2648
|
-
let target = store;
|
|
2649
|
-
while (target !== null) {
|
|
2650
|
-
switch (token.type) {
|
|
2651
|
-
case `atom`:
|
|
2652
|
-
case `mutable_atom`:
|
|
2653
|
-
withdrawn = target.atoms.get(token.key);
|
|
2654
|
-
break;
|
|
2655
|
-
case `writable_pure_selector`:
|
|
2656
|
-
case `writable_held_selector`:
|
|
2657
|
-
withdrawn = target.writableSelectors.get(token.key);
|
|
2658
|
-
break;
|
|
2659
|
-
case `readonly_pure_selector`:
|
|
2660
|
-
case `readonly_held_selector`:
|
|
2661
|
-
withdrawn = target.readonlySelectors.get(token.key);
|
|
2662
|
-
break;
|
|
2663
|
-
case `atom_family`:
|
|
2664
|
-
case `mutable_atom_family`:
|
|
2665
|
-
case `writable_pure_selector_family`:
|
|
2666
|
-
case `readonly_pure_selector_family`:
|
|
2667
|
-
case `writable_held_selector_family`:
|
|
2668
|
-
case `readonly_held_selector_family`:
|
|
2669
|
-
withdrawn = target.families.get(token.key);
|
|
2670
|
-
break;
|
|
2671
|
-
case `timeline`:
|
|
2672
|
-
withdrawn = target.timelines.get(token.key);
|
|
2673
|
-
break;
|
|
2674
|
-
case `transaction`:
|
|
2675
|
-
withdrawn = target.transactions.get(token.key);
|
|
2676
|
-
break;
|
|
2677
|
-
}
|
|
2678
|
-
if (withdrawn) return withdrawn;
|
|
2679
|
-
target = target.child;
|
|
2680
|
-
}
|
|
2681
|
-
throw new NotFoundError(token, store);
|
|
2682
|
-
}
|
|
2683
|
-
|
|
2684
2668
|
//#endregion
|
|
2685
2669
|
//#region src/internal/atom/create-regular-atom.ts
|
|
2686
|
-
function createRegularAtom(store, options, family) {
|
|
2670
|
+
function createRegularAtom(store, options, family, internalRoles) {
|
|
2687
2671
|
const type = `atom`;
|
|
2688
2672
|
const { key } = options;
|
|
2689
2673
|
store.logger.info(`🔨`, `atom`, key, `creating in store "${store.config.name}"`);
|
|
@@ -2704,6 +2688,7 @@ function createRegularAtom(store, options, family) {
|
|
|
2704
2688
|
subject
|
|
2705
2689
|
};
|
|
2706
2690
|
if (family) newAtom.family = family;
|
|
2691
|
+
if (internalRoles) newAtom.internalRoles = internalRoles;
|
|
2707
2692
|
target.atoms.set(key, newAtom);
|
|
2708
2693
|
const token = deposit(newAtom);
|
|
2709
2694
|
if (options.effects) {
|
|
@@ -2800,20 +2785,6 @@ function installIntoStore(tokens, target, source) {
|
|
|
2800
2785
|
}
|
|
2801
2786
|
}
|
|
2802
2787
|
|
|
2803
|
-
//#endregion
|
|
2804
|
-
//#region src/internal/join/create-join.ts
|
|
2805
|
-
function createJoin(store, options, defaultContent) {
|
|
2806
|
-
store.joins.set(options.key, new Join$1(options, defaultContent, store));
|
|
2807
|
-
const token = {
|
|
2808
|
-
key: options.key,
|
|
2809
|
-
type: `join`,
|
|
2810
|
-
a: options.between[0],
|
|
2811
|
-
b: options.between[1],
|
|
2812
|
-
cardinality: options.cardinality
|
|
2813
|
-
};
|
|
2814
|
-
return token;
|
|
2815
|
-
}
|
|
2816
|
-
|
|
2817
2788
|
//#endregion
|
|
2818
2789
|
//#region src/internal/join/join-internal.ts
|
|
2819
2790
|
var Join = class {
|
|
@@ -3117,6 +3088,20 @@ var Join = class {
|
|
|
3117
3088
|
}
|
|
3118
3089
|
};
|
|
3119
3090
|
|
|
3091
|
+
//#endregion
|
|
3092
|
+
//#region src/internal/join/create-join.ts
|
|
3093
|
+
function createJoin(store, options, defaultContent) {
|
|
3094
|
+
store.joins.set(options.key, new Join(options, defaultContent, store));
|
|
3095
|
+
const token = {
|
|
3096
|
+
key: options.key,
|
|
3097
|
+
type: `join`,
|
|
3098
|
+
a: options.between[0],
|
|
3099
|
+
b: options.between[1],
|
|
3100
|
+
cardinality: options.cardinality
|
|
3101
|
+
};
|
|
3102
|
+
return token;
|
|
3103
|
+
}
|
|
3104
|
+
|
|
3120
3105
|
//#endregion
|
|
3121
3106
|
//#region src/internal/join/get-join.ts
|
|
3122
3107
|
function getJoin(token, store) {
|
|
@@ -3547,5 +3532,5 @@ const timeTravel = (store, action, token) => {
|
|
|
3547
3532
|
};
|
|
3548
3533
|
|
|
3549
3534
|
//#endregion
|
|
3550
|
-
export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Join, Junction, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction,
|
|
3535
|
+
export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, INTERNAL_ROLES, Join, Junction, LazyMap, NotFoundError, RESET_STATE, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, allocateIntoStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, capitalize, claimWithinStore, clearStore, closeOperation, counterfeit, createJoin, createMutableAtom, createMutableAtomFamily, createReadonlyHeldSelector, createReadonlyPureSelector, createReadonlyPureSelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneSelector, createTimeline, createTransaction, createWritableHeldSelector, createWritablePureSelector, createWritablePureSelectorFamily, deallocateFromStore, deposit, disposeAtom, disposeFromStore, disposeSelector, editRelationsInStore, evictCachedValue, evictDownstreamFromAtom, evictDownstreamFromSelector, findInStore, findRelationsInStore, fuseWithinStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getInternalRelationsFromStore, getJoin, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, hasRole, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, installIntoStore, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isReservedIntrospectionKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeRootMoleculeInStore, markDone, newest, openOperation, prettyPrintTokenType, readFromCache, readOrComputeValue, recallState, registerSelector, resetAtomOrSelector, resetInStore, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootDependency, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceRootSelectorAtoms, updateSelectorAtoms, withdraw, writeToCache };
|
|
3551
3536
|
//# sourceMappingURL=index.js.map
|