atom.io 0.36.1 → 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 +15 -11
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +149 -164
- package/dist/internal/index.js.map +1 -1
- package/dist/main/index.d.ts +2 -8
- package/dist/main/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/internal/caching.ts +23 -26
- package/src/internal/get-state/read-or-compute-value.ts +4 -8
- package/src/internal/join/create-join.ts +3 -2
- package/src/internal/selector/create-readonly-held-selector.ts +1 -1
- package/src/internal/selector/create-readonly-pure-selector.ts +1 -1
- package/src/internal/selector/create-writable-held-selector.ts +2 -3
- package/src/internal/selector/create-writable-pure-selector.ts +2 -2
- 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 +4 -4
- package/src/internal/set-state/set-into-store.ts +24 -9
- package/src/internal/subscribe/subscribe-in-store.ts +7 -7
- package/src/internal/subscribe/subscribe-to-timeline.ts +2 -2
- package/src/main/tokens.ts +3 -8
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
|
/**
|
|
@@ -502,32 +486,35 @@ const markDone = (store, key) => {
|
|
|
502
486
|
|
|
503
487
|
//#endregion
|
|
504
488
|
//#region src/internal/set-state/evict-downstream.ts
|
|
505
|
-
function
|
|
489
|
+
function evictDownstreamFromAtom(store, atom) {
|
|
506
490
|
const target = newest(store);
|
|
507
|
-
const
|
|
508
|
-
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`);
|
|
509
494
|
if (downstreamKeys) {
|
|
510
|
-
if (target.operation.open) target.logger.info(`🧹`,
|
|
511
|
-
for (const
|
|
512
|
-
if (isDone(target,
|
|
513
|
-
evictCachedValue(target,
|
|
514
|
-
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);
|
|
515
500
|
}
|
|
516
501
|
}
|
|
517
502
|
}
|
|
518
|
-
function
|
|
503
|
+
function evictDownstreamFromSelector(store, selectorKey) {
|
|
519
504
|
const target = newest(store);
|
|
520
|
-
const relationEntries = target.selectorGraph.getRelationEntries({ upstreamSelectorKey:
|
|
505
|
+
const relationEntries = target.selectorGraph.getRelationEntries({ upstreamSelectorKey: selectorKey }).filter(([_, { source }]) => source === selectorKey);
|
|
521
506
|
for (const [downstreamSelectorKey] of relationEntries) {
|
|
522
507
|
if (isDone(target, downstreamSelectorKey)) continue;
|
|
523
508
|
evictCachedValue(target, downstreamSelectorKey);
|
|
524
509
|
markDone(target, downstreamSelectorKey);
|
|
510
|
+
evictDownstreamFromSelector(store, downstreamSelectorKey);
|
|
525
511
|
}
|
|
526
512
|
}
|
|
527
513
|
|
|
528
514
|
//#endregion
|
|
529
515
|
//#region src/internal/caching.ts
|
|
530
|
-
function writeToCache(target,
|
|
516
|
+
function writeToCache(target, state, value) {
|
|
517
|
+
const { key, subject, type } = state;
|
|
531
518
|
const currentValue = target.valueMap.get(key);
|
|
532
519
|
if (currentValue instanceof Future && !currentValue.done) {
|
|
533
520
|
const future = currentValue;
|
|
@@ -544,20 +531,21 @@ function writeToCache(target, key, value, subject) {
|
|
|
544
531
|
future.then(function handleResolvedFuture(resolved) {
|
|
545
532
|
const current = target.valueMap.get(key);
|
|
546
533
|
if (current === future) {
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
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;
|
|
560
547
|
}
|
|
548
|
+
closeOperation(target);
|
|
561
549
|
subject.next({
|
|
562
550
|
newValue: resolved,
|
|
563
551
|
oldValue: future
|
|
@@ -611,45 +599,31 @@ function evictCachedValue(target, key) {
|
|
|
611
599
|
//#region src/internal/get-state/read-or-compute-value.ts
|
|
612
600
|
function readOrComputeValue(target, state, mut) {
|
|
613
601
|
if (target.valueMap.has(state.key)) return readFromCache(target, state, mut);
|
|
602
|
+
const { key } = state;
|
|
614
603
|
switch (state.type) {
|
|
615
604
|
case `readonly_held_selector`:
|
|
616
605
|
case `readonly_pure_selector`:
|
|
617
606
|
case `writable_held_selector`:
|
|
618
607
|
case `writable_pure_selector`:
|
|
619
|
-
target.logger.info(`🧮`, state.type,
|
|
608
|
+
target.logger.info(`🧮`, state.type, key, `computing value`);
|
|
620
609
|
return state.get();
|
|
621
610
|
case `atom`: {
|
|
622
611
|
let def;
|
|
623
612
|
if (state.default instanceof Function) def = state.default();
|
|
624
613
|
else def = state.default;
|
|
625
|
-
const cachedValue = writeToCache(target, state
|
|
614
|
+
const cachedValue = writeToCache(target, state, def);
|
|
626
615
|
target.logger.info(`💁`, `atom`, state.key, `could not find cached value; using default`, def);
|
|
627
616
|
return cachedValue;
|
|
628
617
|
}
|
|
629
618
|
case `mutable_atom`: {
|
|
630
619
|
const instance = new state.class();
|
|
631
|
-
const cachedValue = writeToCache(target, state
|
|
620
|
+
const cachedValue = writeToCache(target, state, instance);
|
|
632
621
|
target.logger.info(`💁`, `mutable_atom`, state.key, `could not find cached value; using default`, instance);
|
|
633
622
|
return cachedValue;
|
|
634
623
|
}
|
|
635
624
|
}
|
|
636
625
|
}
|
|
637
626
|
|
|
638
|
-
//#endregion
|
|
639
|
-
//#region src/internal/subscribe/subscribe-to-root-atoms.ts
|
|
640
|
-
const subscribeToRootDependency = (target, selector, atom) => {
|
|
641
|
-
return atom.subject.subscribe(`${selector.type}:${selector.key}`, (atomChange) => {
|
|
642
|
-
target.logger.info(`📢`, selector.type, selector.key, `root`, atom.key, `went`, atomChange.oldValue, `->`, atomChange.newValue);
|
|
643
|
-
const oldValue = recallState(target, selector);
|
|
644
|
-
const newValue = readOrComputeValue(target, selector);
|
|
645
|
-
target.logger.info(`✨`, selector.type, selector.key, `went`, oldValue, `->`, newValue);
|
|
646
|
-
selector.subject.next({
|
|
647
|
-
newValue,
|
|
648
|
-
oldValue
|
|
649
|
-
});
|
|
650
|
-
});
|
|
651
|
-
};
|
|
652
|
-
|
|
653
627
|
//#endregion
|
|
654
628
|
//#region src/internal/set-state/become.ts
|
|
655
629
|
const become = (nextVersionOfThing) => (originalThing) => nextVersionOfThing instanceof Function ? nextVersionOfThing(originalThing) : nextVersionOfThing;
|
|
@@ -684,9 +658,9 @@ const setAtom = (target, atom, next) => {
|
|
|
684
658
|
const oldValue = readOrComputeValue(target, atom, `mut`);
|
|
685
659
|
let newValue = become(next)(oldValue);
|
|
686
660
|
target.logger.info(`📝`, `atom`, atom.key, `set to`, newValue);
|
|
687
|
-
newValue = writeToCache(target, atom
|
|
661
|
+
newValue = writeToCache(target, atom, newValue);
|
|
688
662
|
markDone(target, atom.key);
|
|
689
|
-
|
|
663
|
+
evictDownstreamFromAtom(target, atom);
|
|
690
664
|
const update = {
|
|
691
665
|
oldValue,
|
|
692
666
|
newValue
|
|
@@ -711,7 +685,7 @@ const setAtom = (target, atom, next) => {
|
|
|
711
685
|
const mutable = target.atoms.get(key);
|
|
712
686
|
const transceiver = readOrComputeValue(target, mutable, `mut`);
|
|
713
687
|
const accepted = transceiver.do(update.newValue) === null;
|
|
714
|
-
if (accepted === true)
|
|
688
|
+
if (accepted === true) evictDownstreamFromAtom(target, mutable);
|
|
715
689
|
}
|
|
716
690
|
};
|
|
717
691
|
|
|
@@ -754,44 +728,6 @@ function getFamilyOfToken(store, token) {
|
|
|
754
728
|
}
|
|
755
729
|
}
|
|
756
730
|
|
|
757
|
-
//#endregion
|
|
758
|
-
//#region src/internal/set-state/reset-in-store.ts
|
|
759
|
-
function resetInStore(store, ...params) {
|
|
760
|
-
let token;
|
|
761
|
-
let family;
|
|
762
|
-
let key;
|
|
763
|
-
if (params.length === 1) {
|
|
764
|
-
token = params[0];
|
|
765
|
-
family = getFamilyOfToken(store, token) ?? null;
|
|
766
|
-
if (family) {
|
|
767
|
-
key = token.family ? parseJson(token.family.subKey) : null;
|
|
768
|
-
token = findInStore(store, family, key);
|
|
769
|
-
}
|
|
770
|
-
} else {
|
|
771
|
-
family = params[0];
|
|
772
|
-
key = params[1];
|
|
773
|
-
token = findInStore(store, family, key);
|
|
774
|
-
}
|
|
775
|
-
if (`counterfeit` in token && `family` in token) {
|
|
776
|
-
const subKey = token.family.subKey;
|
|
777
|
-
const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
|
|
778
|
-
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.`);
|
|
779
|
-
return;
|
|
780
|
-
}
|
|
781
|
-
const rejectionTime = openOperation(store, token);
|
|
782
|
-
if (rejectionTime) {
|
|
783
|
-
const unsubscribe = store.on.operationClose.subscribe(`waiting to reset "${token.key}" at T-${rejectionTime}`, () => {
|
|
784
|
-
unsubscribe();
|
|
785
|
-
store.logger.info(`🟢`, token.type, token.key, `resuming deferred resetState from T-${rejectionTime}`);
|
|
786
|
-
resetInStore(store, token);
|
|
787
|
-
});
|
|
788
|
-
return;
|
|
789
|
-
}
|
|
790
|
-
const state = withdraw(store, token);
|
|
791
|
-
resetAtomOrSelector(store, state);
|
|
792
|
-
closeOperation(store);
|
|
793
|
-
}
|
|
794
|
-
|
|
795
731
|
//#endregion
|
|
796
732
|
//#region src/internal/set-state/set-atom-or-selector.ts
|
|
797
733
|
const setAtomOrSelector = (store, state, value) => {
|
|
@@ -828,26 +764,45 @@ function setIntoStore(store, ...params) {
|
|
|
828
764
|
value = params[2];
|
|
829
765
|
token = findInStore(store, family, key);
|
|
830
766
|
}
|
|
767
|
+
const action = value === RESET_STATE ? `reset` : `set`;
|
|
831
768
|
if (`counterfeit` in token && `family` in token) {
|
|
832
769
|
const subKey = token.family.subKey;
|
|
833
770
|
const disposal = store.disposalTraces.buffer.find((item) => item?.key === subKey);
|
|
834
|
-
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.`);
|
|
835
772
|
return;
|
|
836
773
|
}
|
|
837
774
|
const rejectionTime = openOperation(store, token);
|
|
838
775
|
if (rejectionTime) {
|
|
839
|
-
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() {
|
|
840
777
|
unsubscribe();
|
|
841
|
-
store.logger.info(`🟢`, token.type, token.key, `resuming deferred
|
|
778
|
+
store.logger.info(`🟢`, token.type, token.key, `resuming deferred`, action, `from T-${rejectionTime}`);
|
|
842
779
|
setIntoStore(store, token, value);
|
|
843
780
|
});
|
|
844
781
|
return;
|
|
845
782
|
}
|
|
846
783
|
const state = withdraw(store, token);
|
|
847
|
-
|
|
784
|
+
if (value === RESET_STATE) resetAtomOrSelector(store, state);
|
|
785
|
+
else setAtomOrSelector(store, state, value);
|
|
848
786
|
closeOperation(store);
|
|
849
787
|
}
|
|
850
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
|
+
|
|
851
806
|
//#endregion
|
|
852
807
|
//#region src/internal/keys.ts
|
|
853
808
|
const isAtomKey = (store, key) => newest(store).atoms.has(key);
|
|
@@ -961,7 +916,7 @@ const createReadonlyHeldSelector = (store, options, family) => {
|
|
|
961
916
|
find,
|
|
962
917
|
json
|
|
963
918
|
}, constant);
|
|
964
|
-
writeToCache(newest(store),
|
|
919
|
+
writeToCache(newest(store), readonlySelector, constant);
|
|
965
920
|
covered.clear();
|
|
966
921
|
return constant;
|
|
967
922
|
};
|
|
@@ -1002,7 +957,7 @@ const createReadonlyPureSelector = (store, options, family) => {
|
|
|
1002
957
|
find,
|
|
1003
958
|
json
|
|
1004
959
|
});
|
|
1005
|
-
const cached = writeToCache(innerTarget,
|
|
960
|
+
const cached = writeToCache(innerTarget, readonlySelector, value);
|
|
1006
961
|
store.logger.info(`✨`, type, key, `=`, cached);
|
|
1007
962
|
covered.clear();
|
|
1008
963
|
return cached;
|
|
@@ -1580,7 +1535,7 @@ const createWritableHeldSelector = (store, options, family) => {
|
|
|
1580
1535
|
for (const [downstreamSelectorKey, { source }] of upstreamStates) if (source !== key) innerTarget.selectorGraph.delete(downstreamSelectorKey, key);
|
|
1581
1536
|
innerTarget.selectorAtoms.delete(key);
|
|
1582
1537
|
getFn(getterToolkit, constant);
|
|
1583
|
-
writeToCache(innerTarget,
|
|
1538
|
+
writeToCache(innerTarget, mySelector, constant);
|
|
1584
1539
|
store.logger.info(`✨`, type, key, `=`, constant);
|
|
1585
1540
|
covered.clear();
|
|
1586
1541
|
return constant;
|
|
@@ -1590,7 +1545,7 @@ const createWritableHeldSelector = (store, options, family) => {
|
|
|
1590
1545
|
const oldValue = getSelf(options.get, innerTarget);
|
|
1591
1546
|
const newValue = become(next)(oldValue);
|
|
1592
1547
|
store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
|
|
1593
|
-
writeToCache(innerTarget,
|
|
1548
|
+
writeToCache(innerTarget, mySelector, newValue);
|
|
1594
1549
|
markDone(innerTarget, key);
|
|
1595
1550
|
if (isRootStore(innerTarget)) subject.next({
|
|
1596
1551
|
newValue,
|
|
@@ -1636,7 +1591,7 @@ const createWritablePureSelector = (store, options, family) => {
|
|
|
1636
1591
|
for (const [downstreamSelectorKey, { source }] of upstreamStates) if (source !== key) innerTarget.selectorGraph.delete(downstreamSelectorKey, key);
|
|
1637
1592
|
innerTarget.selectorAtoms.delete(key);
|
|
1638
1593
|
const value = getFn(getterToolkit);
|
|
1639
|
-
const cached = writeToCache(innerTarget,
|
|
1594
|
+
const cached = writeToCache(innerTarget, mySelector, value);
|
|
1640
1595
|
store.logger.info(`✨`, type, key, `=`, cached);
|
|
1641
1596
|
covered.clear();
|
|
1642
1597
|
return value;
|
|
@@ -1646,7 +1601,7 @@ const createWritablePureSelector = (store, options, family) => {
|
|
|
1646
1601
|
const oldValue = getSelf(options.get, innerTarget);
|
|
1647
1602
|
const newValue = become(next)(oldValue);
|
|
1648
1603
|
store.logger.info(`📝`, type, key, `set (`, oldValue, `->`, newValue, `)`);
|
|
1649
|
-
writeToCache(innerTarget,
|
|
1604
|
+
writeToCache(innerTarget, mySelector, newValue);
|
|
1650
1605
|
markDone(innerTarget, options.key);
|
|
1651
1606
|
if (isRootStore(innerTarget)) subject.next({
|
|
1652
1607
|
newValue,
|
|
@@ -2153,6 +2108,21 @@ function getFromStore(store, ...params) {
|
|
|
2153
2108
|
return readOrComputeValue(store, withdraw(store, token));
|
|
2154
2109
|
}
|
|
2155
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
|
+
|
|
2156
2126
|
//#endregion
|
|
2157
2127
|
//#region src/internal/subscribe/subscribe-to-state.ts
|
|
2158
2128
|
function subscribeToState(store, token, key, handleUpdate) {
|
|
@@ -2195,6 +2165,46 @@ function subscribeToState(store, token, key, handleUpdate) {
|
|
|
2195
2165
|
return unsubscribe;
|
|
2196
2166
|
}
|
|
2197
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
|
+
|
|
2198
2208
|
//#endregion
|
|
2199
2209
|
//#region src/internal/subscribe/subscribe-to-timeline.ts
|
|
2200
2210
|
const subscribeToTimeline = (store, token, key, handleUpdate) => {
|
|
@@ -2219,6 +2229,21 @@ const subscribeToTransaction = (store, token, key, handleUpdate) => {
|
|
|
2219
2229
|
};
|
|
2220
2230
|
};
|
|
2221
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
|
+
|
|
2222
2247
|
//#endregion
|
|
2223
2248
|
//#region src/internal/mutable/tracker.ts
|
|
2224
2249
|
/**
|
|
@@ -2640,46 +2665,6 @@ const clearStore = (store) => {
|
|
|
2640
2665
|
store.config = config;
|
|
2641
2666
|
};
|
|
2642
2667
|
|
|
2643
|
-
//#endregion
|
|
2644
|
-
//#region src/internal/store/withdraw.ts
|
|
2645
|
-
function withdraw(store, token) {
|
|
2646
|
-
let withdrawn;
|
|
2647
|
-
let target = store;
|
|
2648
|
-
while (target !== null) {
|
|
2649
|
-
switch (token.type) {
|
|
2650
|
-
case `atom`:
|
|
2651
|
-
case `mutable_atom`:
|
|
2652
|
-
withdrawn = target.atoms.get(token.key);
|
|
2653
|
-
break;
|
|
2654
|
-
case `writable_pure_selector`:
|
|
2655
|
-
case `writable_held_selector`:
|
|
2656
|
-
withdrawn = target.writableSelectors.get(token.key);
|
|
2657
|
-
break;
|
|
2658
|
-
case `readonly_pure_selector`:
|
|
2659
|
-
case `readonly_held_selector`:
|
|
2660
|
-
withdrawn = target.readonlySelectors.get(token.key);
|
|
2661
|
-
break;
|
|
2662
|
-
case `atom_family`:
|
|
2663
|
-
case `mutable_atom_family`:
|
|
2664
|
-
case `writable_pure_selector_family`:
|
|
2665
|
-
case `readonly_pure_selector_family`:
|
|
2666
|
-
case `writable_held_selector_family`:
|
|
2667
|
-
case `readonly_held_selector_family`:
|
|
2668
|
-
withdrawn = target.families.get(token.key);
|
|
2669
|
-
break;
|
|
2670
|
-
case `timeline`:
|
|
2671
|
-
withdrawn = target.timelines.get(token.key);
|
|
2672
|
-
break;
|
|
2673
|
-
case `transaction`:
|
|
2674
|
-
withdrawn = target.transactions.get(token.key);
|
|
2675
|
-
break;
|
|
2676
|
-
}
|
|
2677
|
-
if (withdrawn) return withdrawn;
|
|
2678
|
-
target = target.child;
|
|
2679
|
-
}
|
|
2680
|
-
throw new NotFoundError(token, store);
|
|
2681
|
-
}
|
|
2682
|
-
|
|
2683
2668
|
//#endregion
|
|
2684
2669
|
//#region src/internal/atom/create-regular-atom.ts
|
|
2685
2670
|
function createRegularAtom(store, options, family, internalRoles) {
|
|
@@ -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, INTERNAL_ROLES, Join, Junction, LazyMap, NotFoundError, 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, 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 };
|
|
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
|