atom.io 0.27.3 → 0.27.5
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/data/dist/index.js +57 -72
- package/data/src/dict.ts +9 -12
- package/data/src/join.ts +25 -26
- package/data/src/struct-family.ts +17 -23
- package/data/src/struct.ts +9 -12
- package/dist/{chunk-ETCFHO7J.js → chunk-6ABWLAGY.js} +246 -159
- package/dist/index.d.ts +4 -4
- package/dist/index.js +33 -53
- package/ephemeral/dist/index.js +1 -1
- package/ephemeral/src/find-state.ts +1 -1
- package/immortal/dist/index.js +2 -2
- package/immortal/src/seek-state.ts +2 -2
- package/internal/dist/index.d.ts +88 -73
- package/internal/dist/index.js +1 -1
- package/internal/src/atom/create-regular-atom.ts +3 -3
- package/internal/src/atom/create-standalone-atom.ts +7 -5
- package/internal/src/families/create-atom-family.ts +5 -5
- package/internal/src/families/create-readonly-selector-family.ts +35 -7
- package/internal/src/families/create-regular-atom-family.ts +16 -6
- package/internal/src/families/create-selector-family.ts +5 -5
- package/internal/src/families/create-writable-selector-family.ts +35 -8
- package/internal/src/families/dispose-from-store.ts +22 -16
- package/internal/src/families/find-in-store.ts +11 -11
- package/internal/src/families/init-family-member.ts +9 -9
- package/internal/src/families/seek-in-store.ts +10 -13
- package/internal/src/get-state/get-from-store.ts +58 -20
- package/internal/src/get-state/read-or-compute-value.ts +1 -1
- package/internal/src/index.ts +5 -3
- package/internal/src/ingest-updates/ingest-atom-update.ts +1 -1
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +5 -5
- package/internal/src/molecule/create-molecule-family.ts +1 -1
- package/internal/src/molecule/dispose-molecule.ts +1 -1
- package/internal/src/molecule/grow-molecule-in-store.ts +1 -1
- package/internal/src/molecule/make-molecule-in-store.ts +5 -5
- package/internal/src/mutable/create-mutable-atom-family.ts +15 -6
- package/internal/src/mutable/create-mutable-atom.ts +3 -3
- package/internal/src/mutable/get-json-token.ts +2 -2
- package/internal/src/mutable/tracker-family.ts +3 -3
- package/internal/src/mutable/tracker.ts +14 -18
- package/internal/src/selector/create-readonly-selector.ts +2 -2
- package/internal/src/selector/create-standalone-selector.ts +5 -5
- package/internal/src/selector/create-writable-selector.ts +8 -8
- package/internal/src/selector/register-selector.ts +9 -9
- package/internal/src/set-state/set-into-store.ts +21 -18
- package/internal/src/store/deposit.ts +62 -21
- package/internal/src/store/store.ts +2 -1
- package/internal/src/subscribe/index.ts +2 -0
- package/internal/src/subscribe/subscribe-in-store.ts +62 -0
- package/internal/src/timeline/time-travel.ts +1 -1
- package/internal/src/transaction/build-transaction.ts +7 -6
- package/introspection/dist/index.js +66 -87
- package/introspection/src/attach-atom-index.ts +5 -8
- package/introspection/src/attach-selector-index.ts +6 -8
- package/introspection/src/attach-timeline-family.ts +25 -28
- package/introspection/src/attach-timeline-index.ts +5 -8
- package/introspection/src/attach-transaction-index.ts +5 -8
- package/introspection/src/attach-transaction-logs.ts +21 -27
- package/json/dist/index.js +12 -15
- package/json/src/select-json-family.ts +4 -4
- package/json/src/select-json.ts +6 -9
- package/package.json +4 -4
- package/react/dist/index.js +7 -7
- package/react/src/parse-state-overloads.ts +2 -2
- package/react/src/use-i.ts +1 -1
- package/react/src/use-json.ts +2 -2
- package/react/src/use-o.ts +2 -2
- package/realtime-client/dist/index.js +35 -55
- package/realtime-client/src/pull-atom-family-member.ts +1 -1
- package/realtime-client/src/pull-atom.ts +1 -1
- package/realtime-client/src/pull-mutable-atom-family-member.ts +3 -3
- package/realtime-client/src/pull-mutable-atom.ts +3 -3
- package/realtime-client/src/sync-continuity.ts +27 -47
- package/realtime-react/dist/index.js +3 -3
- package/realtime-react/src/use-pull-atom-family-member.ts +1 -1
- package/realtime-react/src/use-pull-mutable-family-member.ts +1 -1
- package/realtime-react/src/use-pull-selector-family-member.ts +1 -1
- package/realtime-server/dist/index.js +32 -32
- package/realtime-server/src/realtime-continuity-synchronizer.ts +16 -16
- package/realtime-server/src/realtime-family-provider.ts +3 -3
- package/realtime-server/src/realtime-mutable-family-provider.ts +5 -5
- package/realtime-server/src/realtime-mutable-provider.ts +2 -2
- package/realtime-server/src/realtime-state-provider.ts +1 -1
- package/realtime-server/src/realtime-state-receiver.ts +1 -1
- package/realtime-testing/dist/index.js +7 -7
- package/realtime-testing/src/setup-realtime-test.tsx +7 -7
- package/src/atom.ts +2 -2
- package/src/dispose-state.ts +2 -2
- package/src/get-state.ts +9 -13
- package/src/logger.ts +4 -0
- package/src/molecule.ts +1 -1
- package/src/selector.ts +2 -2
- package/src/set-state.ts +10 -7
- package/src/silo.ts +23 -53
- package/src/subscribe.ts +3 -23
- package/src/timeline.ts +2 -2
- package/internal/src/families/throw-in-case-of-conflicting-family.ts +0 -18
|
@@ -2,6 +2,7 @@ import { Junction } from './chunk-IBTHB2PI.js';
|
|
|
2
2
|
import { stringifyJson, parseJson, selectJson, selectJsonFamily } from 'atom.io/json';
|
|
3
3
|
import { AtomIOLogger } from 'atom.io';
|
|
4
4
|
import { getJoin, findRelations } from 'atom.io/data';
|
|
5
|
+
import { subscribeToTimeline, subscribeToTransaction, subscribeToState, arbitrary as arbitrary$1 } from 'atom.io/internal';
|
|
5
6
|
|
|
6
7
|
// internal/src/arbitrary.ts
|
|
7
8
|
function arbitrary(random = Math.random) {
|
|
@@ -202,7 +203,7 @@ var readOrComputeValue = (state, target) => {
|
|
|
202
203
|
target.logger.info(`\u{1F4D6}`, state.type, state.key, `reading cached value`);
|
|
203
204
|
return readCachedValue(state, target);
|
|
204
205
|
}
|
|
205
|
-
if (state.type
|
|
206
|
+
if (state.type === `selector` || state.type === `readonly_selector`) {
|
|
206
207
|
target.logger.info(`\u{1F9EE}`, state.type, state.key, `computing value`);
|
|
207
208
|
return state.get();
|
|
208
209
|
}
|
|
@@ -437,26 +438,22 @@ var setAtomOrSelector = (state, value, store) => {
|
|
|
437
438
|
break;
|
|
438
439
|
}
|
|
439
440
|
};
|
|
440
|
-
|
|
441
|
-
// internal/src/families/throw-in-case-of-conflicting-family.ts
|
|
442
|
-
function throwInCaseOfConflictingFamily(family, store) {
|
|
443
|
-
const existingFamily = store.families.get(family.key);
|
|
444
|
-
if (existingFamily) {
|
|
445
|
-
throw new Error(
|
|
446
|
-
`Tried to create ${family.type === `atom_family` ? `an` : `a`} ${prettyPrintTokenType(family)} with key "${family.key}", but "${family.key}" already exists in store "${store.config.name}" as ${existingFamily.type === `atom_family` ? `an` : `a`} ${prettyPrintTokenType(
|
|
447
|
-
existingFamily
|
|
448
|
-
)}`
|
|
449
|
-
);
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
// internal/src/families/create-regular-atom-family.ts
|
|
454
|
-
function createRegularAtomFamily(options, store, internalRoles) {
|
|
441
|
+
function createRegularAtomFamily(store, options, internalRoles) {
|
|
455
442
|
const familyToken = {
|
|
456
443
|
key: options.key,
|
|
457
444
|
type: `atom_family`
|
|
458
445
|
};
|
|
459
|
-
|
|
446
|
+
const existing = store.families.get(options.key);
|
|
447
|
+
if (existing) {
|
|
448
|
+
store.logger.error(
|
|
449
|
+
`\u2757`,
|
|
450
|
+
`atom_family`,
|
|
451
|
+
options.key,
|
|
452
|
+
`Overwriting an existing ${prettyPrintTokenType(
|
|
453
|
+
existing
|
|
454
|
+
)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`
|
|
455
|
+
);
|
|
456
|
+
}
|
|
460
457
|
const subject = new Subject();
|
|
461
458
|
const familyFunction = (key) => {
|
|
462
459
|
const subKey = stringifyJson(key);
|
|
@@ -471,42 +468,62 @@ function createRegularAtomFamily(options, store, internalRoles) {
|
|
|
471
468
|
if (options.effects) {
|
|
472
469
|
individualOptions.effects = options.effects(key);
|
|
473
470
|
}
|
|
474
|
-
const token = createRegularAtom(individualOptions, family
|
|
471
|
+
const token = createRegularAtom(target, individualOptions, family);
|
|
475
472
|
subject.next({ type: `state_creation`, token });
|
|
476
473
|
return token;
|
|
477
474
|
};
|
|
478
475
|
const atomFamily = Object.assign(familyFunction, familyToken, {
|
|
479
476
|
subject,
|
|
480
|
-
install: (s) => createRegularAtomFamily(
|
|
477
|
+
install: (s) => createRegularAtomFamily(s, options),
|
|
481
478
|
internalRoles
|
|
482
479
|
});
|
|
483
480
|
store.families.set(options.key, atomFamily);
|
|
481
|
+
store.defaults.set(options.key, options.default);
|
|
484
482
|
return familyToken;
|
|
485
483
|
}
|
|
486
484
|
|
|
487
485
|
// internal/src/families/create-atom-family.ts
|
|
488
|
-
function createAtomFamily(
|
|
486
|
+
function createAtomFamily(store, options) {
|
|
489
487
|
const isMutable = `mutable` in options;
|
|
490
488
|
if (isMutable) {
|
|
491
|
-
return createMutableAtomFamily(
|
|
489
|
+
return createMutableAtomFamily(store, options);
|
|
492
490
|
}
|
|
493
|
-
return createRegularAtomFamily(
|
|
491
|
+
return createRegularAtomFamily(store, options);
|
|
494
492
|
}
|
|
495
|
-
|
|
496
|
-
// internal/src/get-state/get-from-store.ts
|
|
497
|
-
function getFromStore(...params) {
|
|
493
|
+
function getFromStore(store, ...params) {
|
|
498
494
|
let token;
|
|
499
|
-
|
|
500
|
-
if (params.length === 2) {
|
|
495
|
+
if (params.length === 1) {
|
|
501
496
|
token = params[0];
|
|
502
|
-
store = params[1];
|
|
503
497
|
} else {
|
|
504
498
|
const family = params[0];
|
|
505
499
|
const key = params[1];
|
|
506
|
-
|
|
507
|
-
const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
|
|
500
|
+
const maybeToken = family.type === `molecule_family` ? seekInStore(store, family, key) : store.config.lifespan === `immortal` ? seekInStore(store, family, key) : findInStore(store, family, key);
|
|
508
501
|
if (!maybeToken) {
|
|
509
|
-
|
|
502
|
+
store.logger.error(
|
|
503
|
+
`\u2757`,
|
|
504
|
+
family.type,
|
|
505
|
+
family.key,
|
|
506
|
+
`tried to get member`,
|
|
507
|
+
stringifyJson(key),
|
|
508
|
+
`but it was not found in store`,
|
|
509
|
+
store.config.name
|
|
510
|
+
);
|
|
511
|
+
switch (family.type) {
|
|
512
|
+
case `atom_family`:
|
|
513
|
+
case `mutable_atom_family`:
|
|
514
|
+
return store.defaults.get(family.key);
|
|
515
|
+
case `selector_family`:
|
|
516
|
+
case `readonly_selector_family`: {
|
|
517
|
+
if (store.defaults.has(family.key)) {
|
|
518
|
+
return store.defaults.get(family.key);
|
|
519
|
+
}
|
|
520
|
+
const defaultValue = withdraw(family, store).default(key);
|
|
521
|
+
store.defaults.set(family.key, defaultValue);
|
|
522
|
+
return defaultValue;
|
|
523
|
+
}
|
|
524
|
+
case `molecule_family`:
|
|
525
|
+
throw new NotFoundError(family, key, store);
|
|
526
|
+
}
|
|
510
527
|
}
|
|
511
528
|
token = maybeToken;
|
|
512
529
|
}
|
|
@@ -606,12 +623,12 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
606
623
|
const [family, key] = params;
|
|
607
624
|
switch (family.type) {
|
|
608
625
|
case `molecule_family`:
|
|
609
|
-
return getFromStore(family, key
|
|
626
|
+
return getFromStore(store, family, key);
|
|
610
627
|
default:
|
|
611
628
|
if (store.config.lifespan === `ephemeral`) {
|
|
612
|
-
dependency = findInStore(family, key
|
|
629
|
+
dependency = findInStore(store, family, key);
|
|
613
630
|
} else {
|
|
614
|
-
const maybeDependency = seekInStore(family, key
|
|
631
|
+
const maybeDependency = seekInStore(store, family, key);
|
|
615
632
|
if (maybeDependency) {
|
|
616
633
|
dependency = maybeDependency;
|
|
617
634
|
} else {
|
|
@@ -623,7 +640,7 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
623
640
|
[dependency] = params;
|
|
624
641
|
}
|
|
625
642
|
if (dependency.type === `molecule`) {
|
|
626
|
-
return getFromStore(
|
|
643
|
+
return getFromStore(store, dependency);
|
|
627
644
|
}
|
|
628
645
|
const dependencyState = withdraw(dependency, store);
|
|
629
646
|
const dependencyValue = readOrComputeValue(dependencyState, store);
|
|
@@ -657,7 +674,7 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
657
674
|
const family = params[0];
|
|
658
675
|
const key = params[1];
|
|
659
676
|
value = params[2];
|
|
660
|
-
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key
|
|
677
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(store, family, key) : seekInStore(store, family, key);
|
|
661
678
|
if (!maybeToken) {
|
|
662
679
|
throw new NotFoundError(family, key, store);
|
|
663
680
|
}
|
|
@@ -667,13 +684,13 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
667
684
|
const state = withdraw(token, target);
|
|
668
685
|
setAtomOrSelector(state, value, target);
|
|
669
686
|
},
|
|
670
|
-
find: (token, key) => findInStore(token, key
|
|
671
|
-
seek: (token, key) => seekInStore(token, key
|
|
672
|
-
json: (token) => getJsonToken(
|
|
687
|
+
find: (token, key) => findInStore(store, token, key),
|
|
688
|
+
seek: (token, key) => seekInStore(store, token, key),
|
|
689
|
+
json: (token) => getJsonToken(store, token)
|
|
673
690
|
});
|
|
674
691
|
|
|
675
692
|
// internal/src/selector/create-readonly-selector.ts
|
|
676
|
-
var createReadonlySelector = (options, family
|
|
693
|
+
var createReadonlySelector = (store, options, family) => {
|
|
677
694
|
const target = newest(store);
|
|
678
695
|
const subject = new Subject();
|
|
679
696
|
const covered = /* @__PURE__ */ new Set();
|
|
@@ -691,7 +708,7 @@ var createReadonlySelector = (options, family, store) => {
|
|
|
691
708
|
const readonlySelector = {
|
|
692
709
|
...options,
|
|
693
710
|
subject,
|
|
694
|
-
install: (s) => createReadonlySelector(options, family
|
|
711
|
+
install: (s) => createReadonlySelector(s, options, family),
|
|
695
712
|
get: getSelf,
|
|
696
713
|
type: `readonly_selector`,
|
|
697
714
|
...family && { family }
|
|
@@ -716,22 +733,22 @@ var createReadonlySelector = (options, family, store) => {
|
|
|
716
733
|
};
|
|
717
734
|
|
|
718
735
|
// internal/src/selector/create-writable-selector.ts
|
|
719
|
-
var createWritableSelector = (options, family
|
|
736
|
+
var createWritableSelector = (store, options, family) => {
|
|
720
737
|
const target = newest(store);
|
|
721
738
|
const subject = new Subject();
|
|
722
739
|
const covered = /* @__PURE__ */ new Set();
|
|
723
|
-
const
|
|
724
|
-
const { find, get, seek, json } =
|
|
740
|
+
const setterToolkit = registerSelector(options.key, covered, target);
|
|
741
|
+
const { find, get, seek, json } = setterToolkit;
|
|
725
742
|
const getterToolkit = { find, get, seek, json };
|
|
726
|
-
const getSelf = (innerTarget = newest(store)) => {
|
|
727
|
-
const value =
|
|
743
|
+
const getSelf = (getFn = options.get, innerTarget = newest(store)) => {
|
|
744
|
+
const value = getFn(getterToolkit);
|
|
728
745
|
cacheValue(options.key, value, subject, innerTarget);
|
|
729
746
|
covered.clear();
|
|
730
747
|
return value;
|
|
731
748
|
};
|
|
732
749
|
const setSelf = (next) => {
|
|
733
750
|
const innerTarget = newest(store);
|
|
734
|
-
const oldValue = getSelf(innerTarget);
|
|
751
|
+
const oldValue = getSelf(options.get, innerTarget);
|
|
735
752
|
const newValue = become(next)(oldValue);
|
|
736
753
|
store.logger.info(
|
|
737
754
|
`\u{1F4DD}`,
|
|
@@ -748,12 +765,12 @@ var createWritableSelector = (options, family, store) => {
|
|
|
748
765
|
if (isRootStore(innerTarget)) {
|
|
749
766
|
subject.next({ newValue, oldValue });
|
|
750
767
|
}
|
|
751
|
-
options.set(
|
|
768
|
+
options.set(setterToolkit, newValue);
|
|
752
769
|
};
|
|
753
770
|
const mySelector = {
|
|
754
771
|
...options,
|
|
755
772
|
subject,
|
|
756
|
-
install: (s) => createWritableSelector(options, family
|
|
773
|
+
install: (s) => createWritableSelector(s, options, family),
|
|
757
774
|
get: getSelf,
|
|
758
775
|
set: setSelf,
|
|
759
776
|
type: `selector`,
|
|
@@ -773,14 +790,14 @@ var createWritableSelector = (options, family, store) => {
|
|
|
773
790
|
};
|
|
774
791
|
|
|
775
792
|
// internal/src/selector/create-standalone-selector.ts
|
|
776
|
-
function createStandaloneSelector(
|
|
793
|
+
function createStandaloneSelector(store, options) {
|
|
777
794
|
const isWritable = `set` in options;
|
|
778
795
|
if (isWritable) {
|
|
779
|
-
const state2 = createWritableSelector(options, void 0
|
|
796
|
+
const state2 = createWritableSelector(store, options, void 0);
|
|
780
797
|
store.on.selectorCreation.next(state2);
|
|
781
798
|
return state2;
|
|
782
799
|
}
|
|
783
|
-
const state = createReadonlySelector(options, void 0
|
|
800
|
+
const state = createReadonlySelector(store, options, void 0);
|
|
784
801
|
store.on.selectorCreation.next(state);
|
|
785
802
|
return state;
|
|
786
803
|
}
|
|
@@ -861,12 +878,22 @@ function disposeSelector(selectorToken, store) {
|
|
|
861
878
|
}
|
|
862
879
|
|
|
863
880
|
// internal/src/families/create-readonly-selector-family.ts
|
|
864
|
-
function createReadonlySelectorFamily(
|
|
881
|
+
function createReadonlySelectorFamily(store, options, internalRoles) {
|
|
865
882
|
const familyToken = {
|
|
866
883
|
key: options.key,
|
|
867
884
|
type: `readonly_selector_family`
|
|
868
885
|
};
|
|
869
|
-
|
|
886
|
+
const existing = store.families.get(options.key);
|
|
887
|
+
if (existing) {
|
|
888
|
+
store.logger.error(
|
|
889
|
+
`\u2757`,
|
|
890
|
+
`readonly_selector_family`,
|
|
891
|
+
options.key,
|
|
892
|
+
`Overwriting an existing ${prettyPrintTokenType(
|
|
893
|
+
existing
|
|
894
|
+
)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`
|
|
895
|
+
);
|
|
896
|
+
}
|
|
870
897
|
const subject = new Subject();
|
|
871
898
|
const familyFunction = (key) => {
|
|
872
899
|
const subKey = stringifyJson(key);
|
|
@@ -874,30 +901,49 @@ function createReadonlySelectorFamily(options, store, internalRoles) {
|
|
|
874
901
|
const fullKey = `${options.key}(${subKey})`;
|
|
875
902
|
const target = newest(store);
|
|
876
903
|
const token = createReadonlySelector(
|
|
904
|
+
target,
|
|
877
905
|
{
|
|
878
906
|
key: fullKey,
|
|
879
907
|
get: options.get(key)
|
|
880
908
|
},
|
|
881
|
-
family
|
|
882
|
-
target
|
|
909
|
+
family
|
|
883
910
|
);
|
|
884
911
|
subject.next({ type: `state_creation`, token });
|
|
885
912
|
return token;
|
|
886
913
|
};
|
|
887
914
|
const readonlySelectorFamily = Object.assign(familyFunction, familyToken, {
|
|
915
|
+
internalRoles,
|
|
888
916
|
subject,
|
|
889
|
-
install: (s) => createReadonlySelectorFamily(
|
|
890
|
-
|
|
917
|
+
install: (s) => createReadonlySelectorFamily(s, options),
|
|
918
|
+
default: (key) => {
|
|
919
|
+
const getFn = options.get(key);
|
|
920
|
+
return getFn({
|
|
921
|
+
get: (...ps) => getFromStore(store, ...ps),
|
|
922
|
+
find: (token, k) => findInStore(store, token, k),
|
|
923
|
+
seek: (token, k) => seekInStore(store, token, k),
|
|
924
|
+
json: (token) => getJsonToken(store, token)
|
|
925
|
+
});
|
|
926
|
+
}
|
|
891
927
|
});
|
|
892
928
|
store.families.set(options.key, readonlySelectorFamily);
|
|
893
929
|
return familyToken;
|
|
894
930
|
}
|
|
895
|
-
function createWritableSelectorFamily(
|
|
931
|
+
function createWritableSelectorFamily(store, options, internalRoles) {
|
|
896
932
|
const familyToken = {
|
|
897
933
|
key: options.key,
|
|
898
934
|
type: `selector_family`
|
|
899
935
|
};
|
|
900
|
-
|
|
936
|
+
const existing = store.families.get(options.key);
|
|
937
|
+
if (existing) {
|
|
938
|
+
store.logger.error(
|
|
939
|
+
`\u2757`,
|
|
940
|
+
`selector_family`,
|
|
941
|
+
options.key,
|
|
942
|
+
`Overwriting an existing ${prettyPrintTokenType(
|
|
943
|
+
existing
|
|
944
|
+
)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`
|
|
945
|
+
);
|
|
946
|
+
}
|
|
901
947
|
const subject = new Subject();
|
|
902
948
|
const familyFunction = (key) => {
|
|
903
949
|
const subKey = stringifyJson(key);
|
|
@@ -905,33 +951,42 @@ function createWritableSelectorFamily(options, store, internalRoles) {
|
|
|
905
951
|
const fullKey = `${options.key}(${subKey})`;
|
|
906
952
|
const target = newest(store);
|
|
907
953
|
const token = createWritableSelector(
|
|
954
|
+
target,
|
|
908
955
|
{
|
|
909
956
|
key: fullKey,
|
|
910
957
|
get: options.get(key),
|
|
911
958
|
set: options.set(key)
|
|
912
959
|
},
|
|
913
|
-
family
|
|
914
|
-
target
|
|
960
|
+
family
|
|
915
961
|
);
|
|
916
962
|
subject.next({ type: `state_creation`, token });
|
|
917
963
|
return token;
|
|
918
964
|
};
|
|
919
965
|
const selectorFamily = Object.assign(familyFunction, familyToken, {
|
|
966
|
+
internalRoles,
|
|
920
967
|
subject,
|
|
921
|
-
install: (s) => createWritableSelectorFamily(
|
|
922
|
-
|
|
968
|
+
install: (s) => createWritableSelectorFamily(s, options),
|
|
969
|
+
default: (key) => {
|
|
970
|
+
const getFn = options.get(key);
|
|
971
|
+
return getFn({
|
|
972
|
+
get: (...ps) => getFromStore(store, ...ps),
|
|
973
|
+
find: (token, k) => findInStore(store, token, k),
|
|
974
|
+
seek: (token, k) => seekInStore(store, token, k),
|
|
975
|
+
json: (token) => getJsonToken(store, token)
|
|
976
|
+
});
|
|
977
|
+
}
|
|
923
978
|
});
|
|
924
979
|
store.families.set(options.key, selectorFamily);
|
|
925
980
|
return familyToken;
|
|
926
981
|
}
|
|
927
982
|
|
|
928
983
|
// internal/src/families/create-selector-family.ts
|
|
929
|
-
function createSelectorFamily(
|
|
984
|
+
function createSelectorFamily(store, options) {
|
|
930
985
|
const isWritable = `set` in options;
|
|
931
986
|
if (isWritable) {
|
|
932
|
-
return createWritableSelectorFamily(
|
|
987
|
+
return createWritableSelectorFamily(store, options);
|
|
933
988
|
}
|
|
934
|
-
return createReadonlySelectorFamily(
|
|
989
|
+
return createReadonlySelectorFamily(store, options);
|
|
935
990
|
}
|
|
936
991
|
|
|
937
992
|
// internal/src/molecule/dispose-molecule.ts
|
|
@@ -974,7 +1029,7 @@ function disposeMolecule(token, store) {
|
|
|
974
1029
|
disposalEvent.family = token.family;
|
|
975
1030
|
}
|
|
976
1031
|
for (const state of molecule.tokens.values()) {
|
|
977
|
-
disposeFromStore(
|
|
1032
|
+
disposeFromStore(store, state);
|
|
978
1033
|
}
|
|
979
1034
|
for (const child of molecule.below.values()) {
|
|
980
1035
|
if (child.family?.dependsOn === `all`) {
|
|
@@ -1004,7 +1059,7 @@ function disposeMolecule(token, store) {
|
|
|
1004
1059
|
}
|
|
1005
1060
|
|
|
1006
1061
|
// internal/src/families/init-family-member.ts
|
|
1007
|
-
function initFamilyMemberInStore(token, key
|
|
1062
|
+
function initFamilyMemberInStore(store, token, key) {
|
|
1008
1063
|
const familyKey = token.key;
|
|
1009
1064
|
const family = store.families.get(familyKey);
|
|
1010
1065
|
if (family === void 0) {
|
|
@@ -1033,7 +1088,7 @@ function initFamilyMemberInStore(token, key, store) {
|
|
|
1033
1088
|
}
|
|
1034
1089
|
return state;
|
|
1035
1090
|
}
|
|
1036
|
-
function seekInStore(token, key
|
|
1091
|
+
function seekInStore(store, token, key) {
|
|
1037
1092
|
const subKey = stringifyJson(key);
|
|
1038
1093
|
const fullKey = `${token.key}(${subKey})`;
|
|
1039
1094
|
const target = newest(store);
|
|
@@ -1051,9 +1106,6 @@ function seekInStore(token, key, store) {
|
|
|
1051
1106
|
break;
|
|
1052
1107
|
case `molecule_family`:
|
|
1053
1108
|
state = target.molecules.get(stringifyJson(key));
|
|
1054
|
-
if (state) {
|
|
1055
|
-
return deposit(state);
|
|
1056
|
-
}
|
|
1057
1109
|
}
|
|
1058
1110
|
if (state) {
|
|
1059
1111
|
return deposit(state);
|
|
@@ -1062,34 +1114,40 @@ function seekInStore(token, key, store) {
|
|
|
1062
1114
|
}
|
|
1063
1115
|
|
|
1064
1116
|
// internal/src/families/find-in-store.ts
|
|
1065
|
-
function findInStore(token, key
|
|
1117
|
+
function findInStore(store, token, key) {
|
|
1066
1118
|
if (store.config.lifespan === `immortal`) {
|
|
1067
1119
|
throw new Error(
|
|
1068
1120
|
`Do not use \`find\` or \`findState\` in an immortal store. Prefer \`seek\` or \`seekState\`.`
|
|
1069
1121
|
);
|
|
1070
1122
|
}
|
|
1071
|
-
let state = seekInStore(token, key
|
|
1123
|
+
let state = seekInStore(store, token, key);
|
|
1072
1124
|
if (state) {
|
|
1073
1125
|
return state;
|
|
1074
1126
|
}
|
|
1075
|
-
state = initFamilyMemberInStore(token, key
|
|
1127
|
+
state = initFamilyMemberInStore(store, token, key);
|
|
1076
1128
|
return state;
|
|
1077
1129
|
}
|
|
1078
1130
|
|
|
1079
1131
|
// internal/src/families/dispose-from-store.ts
|
|
1080
|
-
function disposeFromStore(...params) {
|
|
1132
|
+
function disposeFromStore(store, ...params) {
|
|
1081
1133
|
let token;
|
|
1082
|
-
|
|
1083
|
-
if (params.length === 2) {
|
|
1134
|
+
if (params.length === 1) {
|
|
1084
1135
|
token = params[0];
|
|
1085
|
-
store = params[1];
|
|
1086
1136
|
} else {
|
|
1087
1137
|
const family = params[0];
|
|
1088
1138
|
const key = params[1];
|
|
1089
|
-
|
|
1090
|
-
const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
|
|
1139
|
+
const maybeToken = family.type === `molecule_family` ? seekInStore(store, family, key) : store.config.lifespan === `immortal` ? seekInStore(store, family, key) : findInStore(store, family, key);
|
|
1091
1140
|
if (!maybeToken) {
|
|
1092
|
-
|
|
1141
|
+
store.logger.error(
|
|
1142
|
+
`\u2757`,
|
|
1143
|
+
family.type,
|
|
1144
|
+
family.key,
|
|
1145
|
+
`tried to dispose of member`,
|
|
1146
|
+
stringifyJson(key),
|
|
1147
|
+
`but it was not found in store`,
|
|
1148
|
+
store.config.name
|
|
1149
|
+
);
|
|
1150
|
+
return;
|
|
1093
1151
|
}
|
|
1094
1152
|
token = maybeToken;
|
|
1095
1153
|
}
|
|
@@ -1109,22 +1167,30 @@ function disposeFromStore(...params) {
|
|
|
1109
1167
|
}
|
|
1110
1168
|
|
|
1111
1169
|
// internal/src/set-state/set-into-store.ts
|
|
1112
|
-
function setIntoStore(...params) {
|
|
1170
|
+
function setIntoStore(store, ...params) {
|
|
1113
1171
|
let token;
|
|
1114
1172
|
let value;
|
|
1115
|
-
|
|
1116
|
-
if (params.length === 3) {
|
|
1173
|
+
if (params.length === 2) {
|
|
1117
1174
|
token = params[0];
|
|
1118
1175
|
value = params[1];
|
|
1119
|
-
store = params[2];
|
|
1120
1176
|
} else {
|
|
1121
1177
|
const family = params[0];
|
|
1122
1178
|
const key = params[1];
|
|
1123
1179
|
value = params[2];
|
|
1124
|
-
|
|
1125
|
-
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
|
|
1180
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(store, family, key) : seekInStore(store, family, key);
|
|
1126
1181
|
if (!maybeToken) {
|
|
1127
|
-
|
|
1182
|
+
store.logger.error(
|
|
1183
|
+
`\u2757`,
|
|
1184
|
+
family.type,
|
|
1185
|
+
family.key,
|
|
1186
|
+
`tried to set member`,
|
|
1187
|
+
stringifyJson(key),
|
|
1188
|
+
`to`,
|
|
1189
|
+
value,
|
|
1190
|
+
`but it was not found in store`,
|
|
1191
|
+
store.config.name
|
|
1192
|
+
);
|
|
1193
|
+
return;
|
|
1128
1194
|
}
|
|
1129
1195
|
token = maybeToken;
|
|
1130
1196
|
}
|
|
@@ -1140,7 +1206,7 @@ function setIntoStore(...params) {
|
|
|
1140
1206
|
token.key,
|
|
1141
1207
|
`resuming deferred setState from T-${rejectionTime}`
|
|
1142
1208
|
);
|
|
1143
|
-
setIntoStore(token, value
|
|
1209
|
+
setIntoStore(store, token, value);
|
|
1144
1210
|
}
|
|
1145
1211
|
);
|
|
1146
1212
|
return;
|
|
@@ -1158,11 +1224,11 @@ function ingestAtomUpdate(applying, atomUpdate, store) {
|
|
|
1158
1224
|
if (atomUpdate.family) {
|
|
1159
1225
|
Object.assign(token, { family: atomUpdate.family });
|
|
1160
1226
|
}
|
|
1161
|
-
setIntoStore(token, value
|
|
1227
|
+
setIntoStore(store, token, value);
|
|
1162
1228
|
}
|
|
1163
1229
|
|
|
1164
1230
|
// internal/src/molecule/create-molecule-family.ts
|
|
1165
|
-
function createMoleculeFamily(
|
|
1231
|
+
function createMoleculeFamily(store, options) {
|
|
1166
1232
|
const subject = new Subject();
|
|
1167
1233
|
const token = {
|
|
1168
1234
|
type: `molecule_family`,
|
|
@@ -1180,7 +1246,7 @@ function createMoleculeFamily(options, store) {
|
|
|
1180
1246
|
|
|
1181
1247
|
// internal/src/molecule/grow-molecule-in-store.ts
|
|
1182
1248
|
function growMoleculeInStore(molecule, family, store) {
|
|
1183
|
-
const stateToken = initFamilyMemberInStore(family, molecule.key
|
|
1249
|
+
const stateToken = initFamilyMemberInStore(store, family, molecule.key);
|
|
1184
1250
|
molecule.tokens.set(stateToken.key, stateToken);
|
|
1185
1251
|
const isTransaction = isChildStore(store) && store.transactionMeta.phase === `building`;
|
|
1186
1252
|
const moleculeInProgress = store.moleculeInProgress === molecule.key;
|
|
@@ -1253,16 +1319,16 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1253
1319
|
owner.below.set(molecule.stringKey, molecule);
|
|
1254
1320
|
}
|
|
1255
1321
|
const toolkit = {
|
|
1256
|
-
get: (...ps) => getFromStore(
|
|
1322
|
+
get: (...ps) => getFromStore(newest(rootStore), ...ps),
|
|
1257
1323
|
set: (...ps) => {
|
|
1258
|
-
setIntoStore(
|
|
1324
|
+
setIntoStore(newest(rootStore), ...ps);
|
|
1259
1325
|
},
|
|
1260
|
-
seek: (t, k) => seekInStore(t, k
|
|
1261
|
-
json: (t) => getJsonToken(
|
|
1326
|
+
seek: (t, k) => seekInStore(newest(rootStore), t, k),
|
|
1327
|
+
json: (t) => getJsonToken(newest(rootStore), t),
|
|
1262
1328
|
run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
|
|
1263
1329
|
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
|
|
1264
1330
|
dispose: (t) => {
|
|
1265
|
-
disposeFromStore(
|
|
1331
|
+
disposeFromStore(newest(rootStore), t);
|
|
1266
1332
|
},
|
|
1267
1333
|
env: () => getEnvironmentData(newest(rootStore)),
|
|
1268
1334
|
bond: (token2, maybeRole) => {
|
|
@@ -1356,7 +1422,7 @@ function ingestCreationEvent(update, applying, store) {
|
|
|
1356
1422
|
break;
|
|
1357
1423
|
}
|
|
1358
1424
|
case `oldValue`: {
|
|
1359
|
-
disposeFromStore(update.token
|
|
1425
|
+
disposeFromStore(store, update.token);
|
|
1360
1426
|
break;
|
|
1361
1427
|
}
|
|
1362
1428
|
}
|
|
@@ -1364,7 +1430,7 @@ function ingestCreationEvent(update, applying, store) {
|
|
|
1364
1430
|
function ingestDisposalEvent(update, applying, store) {
|
|
1365
1431
|
switch (applying) {
|
|
1366
1432
|
case `newValue`: {
|
|
1367
|
-
disposeFromStore(update.token
|
|
1433
|
+
disposeFromStore(store, update.token);
|
|
1368
1434
|
break;
|
|
1369
1435
|
}
|
|
1370
1436
|
case `oldValue`: {
|
|
@@ -1386,7 +1452,7 @@ function createInStore(token, store) {
|
|
|
1386
1452
|
if (store.config.lifespan === `immortal`) {
|
|
1387
1453
|
throw new Error(`No molecule found for key "${token.family.subKey}"`);
|
|
1388
1454
|
}
|
|
1389
|
-
initFamilyMemberInStore(family, parseJson(token.family.subKey)
|
|
1455
|
+
initFamilyMemberInStore(store, family, parseJson(token.family.subKey));
|
|
1390
1456
|
}
|
|
1391
1457
|
}
|
|
1392
1458
|
}
|
|
@@ -1402,14 +1468,14 @@ function ingestMoleculeCreationEvent(update, applying, store) {
|
|
|
1402
1468
|
);
|
|
1403
1469
|
break;
|
|
1404
1470
|
case `oldValue`:
|
|
1405
|
-
disposeFromStore(update.token
|
|
1471
|
+
disposeFromStore(store, update.token);
|
|
1406
1472
|
break;
|
|
1407
1473
|
}
|
|
1408
1474
|
}
|
|
1409
1475
|
function ingestMoleculeDisposalEvent(update, applying, store) {
|
|
1410
1476
|
switch (applying) {
|
|
1411
1477
|
case `newValue`:
|
|
1412
|
-
disposeFromStore(update.token
|
|
1478
|
+
disposeFromStore(store, update.token);
|
|
1413
1479
|
break;
|
|
1414
1480
|
case `oldValue`:
|
|
1415
1481
|
{
|
|
@@ -1609,6 +1675,7 @@ var buildTransaction = (key, params, store, id) => {
|
|
|
1609
1675
|
}),
|
|
1610
1676
|
selectors: new LazyMap(parent.selectors),
|
|
1611
1677
|
valueMap: new LazyMap(parent.valueMap),
|
|
1678
|
+
defaults: parent.defaults,
|
|
1612
1679
|
molecules: new LazyMap(parent.molecules),
|
|
1613
1680
|
moleculeFamilies: new LazyMap(parent.moleculeFamilies),
|
|
1614
1681
|
moleculeInProgress: parent.moleculeInProgress,
|
|
@@ -1627,17 +1694,17 @@ var buildTransaction = (key, params, store, id) => {
|
|
|
1627
1694
|
output: void 0
|
|
1628
1695
|
},
|
|
1629
1696
|
toolkit: {
|
|
1630
|
-
get: (...ps) => getFromStore(...ps
|
|
1697
|
+
get: (...ps) => getFromStore(child, ...ps),
|
|
1631
1698
|
set: (...ps) => {
|
|
1632
|
-
setIntoStore(...ps
|
|
1699
|
+
setIntoStore(child, ...ps);
|
|
1633
1700
|
},
|
|
1634
1701
|
run: (token, identifier = arbitrary()) => actUponStore(token, identifier, child),
|
|
1635
|
-
find: (token, k) => findInStore(token, k
|
|
1636
|
-
seek: (token, k) => seekInStore(token, k
|
|
1637
|
-
json: (token) => getJsonToken(
|
|
1702
|
+
find: (token, k) => findInStore(child, token, k),
|
|
1703
|
+
seek: (token, k) => seekInStore(child, token, k),
|
|
1704
|
+
json: (token) => getJsonToken(child, token),
|
|
1638
1705
|
make: (context, family, k, ...args) => makeMoleculeInStore(child, context, family, k, ...args),
|
|
1639
1706
|
dispose: (...ps) => {
|
|
1640
|
-
disposeFromStore(...ps
|
|
1707
|
+
disposeFromStore(child, ...ps);
|
|
1641
1708
|
},
|
|
1642
1709
|
env: () => getEnvironmentData(child)
|
|
1643
1710
|
}
|
|
@@ -1711,6 +1778,7 @@ var Store = class {
|
|
|
1711
1778
|
parent = null;
|
|
1712
1779
|
child = null;
|
|
1713
1780
|
valueMap = /* @__PURE__ */ new Map();
|
|
1781
|
+
defaults = /* @__PURE__ */ new Map();
|
|
1714
1782
|
atoms = /* @__PURE__ */ new Map();
|
|
1715
1783
|
selectors = /* @__PURE__ */ new Map();
|
|
1716
1784
|
readonlySelectors = /* @__PURE__ */ new Map();
|
|
@@ -1810,7 +1878,7 @@ var Store = class {
|
|
|
1810
1878
|
}
|
|
1811
1879
|
atom.install(this);
|
|
1812
1880
|
if (atom.type === `mutable_atom`) {
|
|
1813
|
-
const originalJsonToken = getJsonToken(
|
|
1881
|
+
const originalJsonToken = getJsonToken(store, atom);
|
|
1814
1882
|
const originalUpdateToken = getUpdateToken(atom);
|
|
1815
1883
|
mutableHelpers.add(originalJsonToken.key);
|
|
1816
1884
|
mutableHelpers.add(originalUpdateToken.key);
|
|
@@ -1903,6 +1971,19 @@ var recallState = (state, store) => {
|
|
|
1903
1971
|
}
|
|
1904
1972
|
return target.valueMap.get(state.key);
|
|
1905
1973
|
};
|
|
1974
|
+
function subscribeInStore(store, token, handleUpdate, key = arbitrary$1()) {
|
|
1975
|
+
switch (token.type) {
|
|
1976
|
+
case `atom`:
|
|
1977
|
+
case `mutable_atom`:
|
|
1978
|
+
case `readonly_selector`:
|
|
1979
|
+
case `selector`:
|
|
1980
|
+
return subscribeToState(token, handleUpdate, key, store);
|
|
1981
|
+
case `transaction`:
|
|
1982
|
+
return subscribeToTransaction(token, handleUpdate, key, store);
|
|
1983
|
+
case `timeline`:
|
|
1984
|
+
return subscribeToTimeline(token, handleUpdate, key, store);
|
|
1985
|
+
}
|
|
1986
|
+
}
|
|
1906
1987
|
|
|
1907
1988
|
// internal/src/subscribe/subscribe-to-root-atoms.ts
|
|
1908
1989
|
var subscribeToRootAtoms = (selector, store) => {
|
|
@@ -1949,7 +2030,7 @@ var subscribeToRootAtoms = (selector, store) => {
|
|
|
1949
2030
|
};
|
|
1950
2031
|
|
|
1951
2032
|
// internal/src/subscribe/subscribe-to-state.ts
|
|
1952
|
-
function
|
|
2033
|
+
function subscribeToState2(token, handleUpdate, key, store) {
|
|
1953
2034
|
function safelyHandleUpdate(update) {
|
|
1954
2035
|
if (store.operation.open) {
|
|
1955
2036
|
const unsubscribe2 = store.on.operationClose.subscribe(
|
|
@@ -1997,7 +2078,7 @@ function subscribeToState(token, handleUpdate, key, store) {
|
|
|
1997
2078
|
}
|
|
1998
2079
|
|
|
1999
2080
|
// internal/src/subscribe/subscribe-to-timeline.ts
|
|
2000
|
-
var
|
|
2081
|
+
var subscribeToTimeline2 = (token, handleUpdate, key, store) => {
|
|
2001
2082
|
const tl = withdraw(token, store);
|
|
2002
2083
|
store.logger.info(`\u{1F440}`, `timeline`, token.key, `Adding subscription "${key}"`);
|
|
2003
2084
|
const unsubscribe = tl.subject.subscribe(key, handleUpdate);
|
|
@@ -2013,7 +2094,7 @@ var subscribeToTimeline = (token, handleUpdate, key, store) => {
|
|
|
2013
2094
|
};
|
|
2014
2095
|
|
|
2015
2096
|
// internal/src/subscribe/subscribe-to-transaction.ts
|
|
2016
|
-
var
|
|
2097
|
+
var subscribeToTransaction2 = (token, handleUpdate, key, store) => {
|
|
2017
2098
|
const tx = withdraw(token, store);
|
|
2018
2099
|
store.logger.info(
|
|
2019
2100
|
`\u{1F440}`,
|
|
@@ -2045,12 +2126,12 @@ var Tracker = class {
|
|
|
2045
2126
|
subKey: mutableState.family.subKey
|
|
2046
2127
|
} : void 0;
|
|
2047
2128
|
const latestUpdateState = createRegularAtom(
|
|
2129
|
+
store,
|
|
2048
2130
|
{
|
|
2049
2131
|
key: latestUpdateStateKey,
|
|
2050
2132
|
default: null
|
|
2051
2133
|
},
|
|
2052
|
-
familyMetaData
|
|
2053
|
-
store
|
|
2134
|
+
familyMetaData
|
|
2054
2135
|
);
|
|
2055
2136
|
if (store.parent?.valueMap.has(latestUpdateStateKey)) {
|
|
2056
2137
|
const parentValue = store.parent.valueMap.get(latestUpdateStateKey);
|
|
@@ -2062,14 +2143,14 @@ var Tracker = class {
|
|
|
2062
2143
|
unsubscribeFromState;
|
|
2063
2144
|
observeCore(mutableState, latestUpdateState, target) {
|
|
2064
2145
|
const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
|
|
2065
|
-
const originalInnerValue = getFromStore(
|
|
2146
|
+
const originalInnerValue = getFromStore(target, mutableState);
|
|
2066
2147
|
this.unsubscribeFromInnerValue = originalInnerValue.subscribe(
|
|
2067
2148
|
subscriptionKey,
|
|
2068
2149
|
(update) => {
|
|
2069
|
-
setIntoStore(latestUpdateState, update
|
|
2150
|
+
setIntoStore(target, latestUpdateState, update);
|
|
2070
2151
|
}
|
|
2071
2152
|
);
|
|
2072
|
-
this.unsubscribeFromState =
|
|
2153
|
+
this.unsubscribeFromState = subscribeToState2(
|
|
2073
2154
|
mutableState,
|
|
2074
2155
|
(update) => {
|
|
2075
2156
|
if (update.newValue !== update.oldValue) {
|
|
@@ -2077,7 +2158,7 @@ var Tracker = class {
|
|
|
2077
2158
|
this.unsubscribeFromInnerValue = update.newValue.subscribe(
|
|
2078
2159
|
subscriptionKey,
|
|
2079
2160
|
(transceiverUpdate) => {
|
|
2080
|
-
setIntoStore(latestUpdateState, transceiverUpdate
|
|
2161
|
+
setIntoStore(target, latestUpdateState, transceiverUpdate);
|
|
2081
2162
|
}
|
|
2082
2163
|
);
|
|
2083
2164
|
}
|
|
@@ -2088,7 +2169,7 @@ var Tracker = class {
|
|
|
2088
2169
|
}
|
|
2089
2170
|
updateCore(mutableState, latestUpdateState, target) {
|
|
2090
2171
|
const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
|
|
2091
|
-
|
|
2172
|
+
subscribeToState2(
|
|
2092
2173
|
latestUpdateState,
|
|
2093
2174
|
({ newValue, oldValue }) => {
|
|
2094
2175
|
const timelineId = target.timelineTopics.getRelatedKey(
|
|
@@ -2097,22 +2178,18 @@ var Tracker = class {
|
|
|
2097
2178
|
if (timelineId) {
|
|
2098
2179
|
const timelineData = target.timelines.get(timelineId);
|
|
2099
2180
|
if (timelineData?.timeTraveling) {
|
|
2100
|
-
const unsubscribe2 =
|
|
2181
|
+
const unsubscribe2 = subscribeToTimeline2(
|
|
2101
2182
|
{ key: timelineId, type: `timeline` },
|
|
2102
2183
|
(update) => {
|
|
2103
2184
|
unsubscribe2();
|
|
2104
|
-
setIntoStore(
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
return transceiver;
|
|
2113
|
-
},
|
|
2114
|
-
target
|
|
2115
|
-
);
|
|
2185
|
+
setIntoStore(target, mutableState, (transceiver) => {
|
|
2186
|
+
if (update === `redo` && newValue) {
|
|
2187
|
+
transceiver.do(newValue);
|
|
2188
|
+
} else if (update === `undo` && oldValue) {
|
|
2189
|
+
transceiver.undo(oldValue);
|
|
2190
|
+
}
|
|
2191
|
+
return transceiver;
|
|
2192
|
+
});
|
|
2116
2193
|
},
|
|
2117
2194
|
subscriptionKey,
|
|
2118
2195
|
target
|
|
@@ -2124,14 +2201,14 @@ var Tracker = class {
|
|
|
2124
2201
|
subscriptionKey,
|
|
2125
2202
|
() => {
|
|
2126
2203
|
unsubscribe();
|
|
2127
|
-
const mutable = getFromStore(
|
|
2204
|
+
const mutable = getFromStore(target, mutableState);
|
|
2128
2205
|
const updateNumber = newValue === null ? -1 : mutable.getUpdateNumber(newValue);
|
|
2129
2206
|
const eventOffset = updateNumber - mutable.cacheUpdateNumber;
|
|
2130
2207
|
if (newValue && eventOffset === 1) {
|
|
2131
2208
|
setIntoStore(
|
|
2209
|
+
target,
|
|
2132
2210
|
mutableState,
|
|
2133
|
-
(transceiver) => (transceiver.do(newValue), transceiver)
|
|
2134
|
-
target
|
|
2211
|
+
(transceiver) => (transceiver.do(newValue), transceiver)
|
|
2135
2212
|
);
|
|
2136
2213
|
} else {
|
|
2137
2214
|
target.logger.info(
|
|
@@ -2167,7 +2244,7 @@ var Tracker = class {
|
|
|
2167
2244
|
};
|
|
2168
2245
|
|
|
2169
2246
|
// internal/src/mutable/create-mutable-atom.ts
|
|
2170
|
-
function createMutableAtom(options, family
|
|
2247
|
+
function createMutableAtom(store, options, family) {
|
|
2171
2248
|
store.logger.info(
|
|
2172
2249
|
`\u{1F528}`,
|
|
2173
2250
|
`atom`,
|
|
@@ -2196,7 +2273,7 @@ function createMutableAtom(options, family, store) {
|
|
|
2196
2273
|
options.key,
|
|
2197
2274
|
`installing in store "${s.config.name}"`
|
|
2198
2275
|
);
|
|
2199
|
-
return createMutableAtom(options, family
|
|
2276
|
+
return createMutableAtom(s, options, family);
|
|
2200
2277
|
},
|
|
2201
2278
|
subject
|
|
2202
2279
|
};
|
|
@@ -2214,9 +2291,9 @@ function createMutableAtom(options, family, store) {
|
|
|
2214
2291
|
for (const effect of options.effects) {
|
|
2215
2292
|
const cleanup = effect({
|
|
2216
2293
|
setSelf: (next) => {
|
|
2217
|
-
setIntoStore(token, next
|
|
2294
|
+
setIntoStore(store, token, next);
|
|
2218
2295
|
},
|
|
2219
|
-
onSet: (handle) =>
|
|
2296
|
+
onSet: (handle) => subscribeToState2(token, handle, `effect[${effectIndex}]`, store)
|
|
2220
2297
|
});
|
|
2221
2298
|
if (cleanup) {
|
|
2222
2299
|
cleanupFunctions.push(cleanup);
|
|
@@ -2241,11 +2318,11 @@ var FamilyTracker = class {
|
|
|
2241
2318
|
mutableAtoms;
|
|
2242
2319
|
constructor(mutableAtoms, store) {
|
|
2243
2320
|
const updateAtoms = createRegularAtomFamily(
|
|
2321
|
+
store,
|
|
2244
2322
|
{
|
|
2245
2323
|
key: `*${mutableAtoms.key}`,
|
|
2246
2324
|
default: null
|
|
2247
2325
|
},
|
|
2248
|
-
store,
|
|
2249
2326
|
[`mutable`, `updates`]
|
|
2250
2327
|
);
|
|
2251
2328
|
this.latestUpdateAtoms = withdraw(updateAtoms, store);
|
|
@@ -2255,7 +2332,7 @@ var FamilyTracker = class {
|
|
|
2255
2332
|
(event) => {
|
|
2256
2333
|
if (event.token.family) {
|
|
2257
2334
|
const key = parseJson(event.token.family.subKey);
|
|
2258
|
-
seekInStore(this.latestUpdateAtoms, key
|
|
2335
|
+
seekInStore(store, this.latestUpdateAtoms, key);
|
|
2259
2336
|
new Tracker(event.token, store);
|
|
2260
2337
|
}
|
|
2261
2338
|
}
|
|
@@ -2265,7 +2342,7 @@ var FamilyTracker = class {
|
|
|
2265
2342
|
(event) => {
|
|
2266
2343
|
if (event.token.family) {
|
|
2267
2344
|
const key = parseJson(event.token.family.subKey);
|
|
2268
|
-
const mutableAtomToken = seekInStore(this.mutableAtoms, key
|
|
2345
|
+
const mutableAtomToken = seekInStore(store, this.mutableAtoms, key);
|
|
2269
2346
|
if (mutableAtomToken) {
|
|
2270
2347
|
new Tracker(mutableAtomToken, store);
|
|
2271
2348
|
}
|
|
@@ -2276,12 +2353,22 @@ var FamilyTracker = class {
|
|
|
2276
2353
|
};
|
|
2277
2354
|
|
|
2278
2355
|
// internal/src/mutable/create-mutable-atom-family.ts
|
|
2279
|
-
function createMutableAtomFamily(
|
|
2356
|
+
function createMutableAtomFamily(store, options, internalRoles) {
|
|
2280
2357
|
const familyToken = {
|
|
2281
2358
|
key: options.key,
|
|
2282
2359
|
type: `mutable_atom_family`
|
|
2283
2360
|
};
|
|
2284
|
-
|
|
2361
|
+
const existing = store.families.get(options.key);
|
|
2362
|
+
if (existing) {
|
|
2363
|
+
store.logger.error(
|
|
2364
|
+
`\u2757`,
|
|
2365
|
+
`mutable_atom_family`,
|
|
2366
|
+
options.key,
|
|
2367
|
+
`Overwriting an existing ${prettyPrintTokenType(
|
|
2368
|
+
existing
|
|
2369
|
+
)} "${existing.key}" in store "${store.config.name}". You can safely ignore this warning if it is due to hot module replacement.`
|
|
2370
|
+
);
|
|
2371
|
+
}
|
|
2285
2372
|
const subject = new Subject();
|
|
2286
2373
|
const familyFunction = (key) => {
|
|
2287
2374
|
const subKey = stringifyJson(key);
|
|
@@ -2298,13 +2385,13 @@ function createMutableAtomFamily(options, store, internalRoles) {
|
|
|
2298
2385
|
if (options.effects) {
|
|
2299
2386
|
individualOptions.effects = options.effects(key);
|
|
2300
2387
|
}
|
|
2301
|
-
const token = createMutableAtom(individualOptions, family
|
|
2388
|
+
const token = createMutableAtom(target, individualOptions, family);
|
|
2302
2389
|
subject.next({ type: `state_creation`, token });
|
|
2303
2390
|
return token;
|
|
2304
2391
|
};
|
|
2305
2392
|
const atomFamily = Object.assign(familyFunction, familyToken, {
|
|
2306
2393
|
subject,
|
|
2307
|
-
install: (s) => createMutableAtomFamily(
|
|
2394
|
+
install: (s) => createMutableAtomFamily(s, options),
|
|
2308
2395
|
toJson: options.toJson,
|
|
2309
2396
|
fromJson: options.fromJson,
|
|
2310
2397
|
internalRoles
|
|
@@ -2324,7 +2411,7 @@ var getJsonFamily = (mutableAtomFamily, store) => {
|
|
|
2324
2411
|
};
|
|
2325
2412
|
|
|
2326
2413
|
// internal/src/mutable/get-json-token.ts
|
|
2327
|
-
var getJsonToken = (
|
|
2414
|
+
var getJsonToken = (store, mutableAtomToken) => {
|
|
2328
2415
|
if (mutableAtomToken.family) {
|
|
2329
2416
|
const target = newest(store);
|
|
2330
2417
|
const jsonFamilyKey = `${mutableAtomToken.family.key}:JSON`;
|
|
@@ -2334,7 +2421,7 @@ var getJsonToken = (mutableAtomToken, store) => {
|
|
|
2334
2421
|
};
|
|
2335
2422
|
const family = withdraw(jsonFamilyToken, target);
|
|
2336
2423
|
const subKey = JSON.parse(mutableAtomToken.family.subKey);
|
|
2337
|
-
const jsonToken = findInStore(family, subKey
|
|
2424
|
+
const jsonToken = findInStore(store, family, subKey);
|
|
2338
2425
|
return jsonToken;
|
|
2339
2426
|
}
|
|
2340
2427
|
const token = {
|
|
@@ -2453,7 +2540,7 @@ var markAtomAsNotDefault = (key, store) => {
|
|
|
2453
2540
|
};
|
|
2454
2541
|
|
|
2455
2542
|
// internal/src/atom/create-regular-atom.ts
|
|
2456
|
-
function createRegularAtom(options, family
|
|
2543
|
+
function createRegularAtom(store, options, family) {
|
|
2457
2544
|
store.logger.info(
|
|
2458
2545
|
`\u{1F528}`,
|
|
2459
2546
|
`atom`,
|
|
@@ -2482,7 +2569,7 @@ function createRegularAtom(options, family, store) {
|
|
|
2482
2569
|
options.key,
|
|
2483
2570
|
`installing in store "${s.config.name}"`
|
|
2484
2571
|
);
|
|
2485
|
-
return createRegularAtom(options, family
|
|
2572
|
+
return createRegularAtom(s, options, family);
|
|
2486
2573
|
},
|
|
2487
2574
|
subject
|
|
2488
2575
|
};
|
|
@@ -2503,9 +2590,9 @@ function createRegularAtom(options, family, store) {
|
|
|
2503
2590
|
for (const effect of options.effects) {
|
|
2504
2591
|
const cleanup = effect({
|
|
2505
2592
|
setSelf: (next) => {
|
|
2506
|
-
setIntoStore(token, next
|
|
2593
|
+
setIntoStore(store, token, next);
|
|
2507
2594
|
},
|
|
2508
|
-
onSet: (handle) =>
|
|
2595
|
+
onSet: (handle) => subscribeToState2(token, handle, `effect[${effectIndex}]`, store)
|
|
2509
2596
|
});
|
|
2510
2597
|
if (cleanup) {
|
|
2511
2598
|
cleanupFunctions.push(cleanup);
|
|
@@ -2522,14 +2609,14 @@ function createRegularAtom(options, family, store) {
|
|
|
2522
2609
|
}
|
|
2523
2610
|
|
|
2524
2611
|
// internal/src/atom/create-standalone-atom.ts
|
|
2525
|
-
function createStandaloneAtom(
|
|
2612
|
+
function createStandaloneAtom(store, options) {
|
|
2526
2613
|
const isMutable = `mutable` in options;
|
|
2527
2614
|
if (isMutable) {
|
|
2528
|
-
const state2 = createMutableAtom(options, void 0
|
|
2615
|
+
const state2 = createMutableAtom(store, options, void 0);
|
|
2529
2616
|
store.on.atomCreation.next(state2);
|
|
2530
2617
|
return state2;
|
|
2531
2618
|
}
|
|
2532
|
-
const state = createRegularAtom(options, void 0
|
|
2619
|
+
const state = createRegularAtom(store, options, void 0);
|
|
2533
2620
|
store.on.atomCreation.next(state);
|
|
2534
2621
|
return state;
|
|
2535
2622
|
}
|
|
@@ -3009,7 +3096,7 @@ function handleStateLifecycleEvent(event, tl, store) {
|
|
|
3009
3096
|
}
|
|
3010
3097
|
|
|
3011
3098
|
// internal/src/timeline/time-travel.ts
|
|
3012
|
-
var timeTravel = (action, token
|
|
3099
|
+
var timeTravel = (store, action, token) => {
|
|
3013
3100
|
store.logger.info(
|
|
3014
3101
|
action === `redo` ? `\u23E9` : `\u23EA`,
|
|
3015
3102
|
`timeline`,
|
|
@@ -3084,4 +3171,4 @@ var timeTravel = (action, token, store) => {
|
|
|
3084
3171
|
);
|
|
3085
3172
|
};
|
|
3086
3173
|
|
|
3087
|
-
export { FamilyTracker, Future, IMPLICIT, LazyMap, Molecule, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, createWritableSelectorFamily, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|
|
3174
|
+
export { FamilyTracker, Future, IMPLICIT, LazyMap, Molecule, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, createWritableSelectorFamily, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState2 as subscribeToState, subscribeToTimeline2 as subscribeToTimeline, subscribeToTransaction2 as subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|