atom.io 0.27.4 → 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-JRENM6KL.js → chunk-6ABWLAGY.js} +177 -151
- package/dist/index.d.ts +3 -3
- 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 +80 -62
- 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 +20 -9
- package/internal/src/families/create-regular-atom-family.ts +15 -6
- package/internal/src/families/create-selector-family.ts +5 -5
- package/internal/src/families/create-writable-selector-family.ts +20 -10
- package/internal/src/families/dispose-from-store.ts +11 -14
- 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 -10
- package/internal/src/get-state/get-from-store.ts +32 -18
- 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 +2 -2
- package/internal/src/selector/register-selector.ts +9 -9
- package/internal/src/set-state/set-into-store.ts +8 -16
- package/internal/src/store/deposit.ts +53 -13
- package/internal/src/store/store.ts +1 -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 +6 -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 +1 -1
- 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/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) {
|
|
@@ -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,13 +468,13 @@ 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);
|
|
@@ -486,24 +483,21 @@ function createRegularAtomFamily(options, store, internalRoles) {
|
|
|
486
483
|
}
|
|
487
484
|
|
|
488
485
|
// internal/src/families/create-atom-family.ts
|
|
489
|
-
function createAtomFamily(
|
|
486
|
+
function createAtomFamily(store, options) {
|
|
490
487
|
const isMutable = `mutable` in options;
|
|
491
488
|
if (isMutable) {
|
|
492
|
-
return createMutableAtomFamily(
|
|
489
|
+
return createMutableAtomFamily(store, options);
|
|
493
490
|
}
|
|
494
|
-
return createRegularAtomFamily(
|
|
491
|
+
return createRegularAtomFamily(store, options);
|
|
495
492
|
}
|
|
496
|
-
function getFromStore(...params) {
|
|
493
|
+
function getFromStore(store, ...params) {
|
|
497
494
|
let token;
|
|
498
|
-
|
|
499
|
-
if (params.length === 2) {
|
|
495
|
+
if (params.length === 1) {
|
|
500
496
|
token = params[0];
|
|
501
|
-
store = params[1];
|
|
502
497
|
} else {
|
|
503
498
|
const family = params[0];
|
|
504
499
|
const key = params[1];
|
|
505
|
-
|
|
506
|
-
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);
|
|
507
501
|
if (!maybeToken) {
|
|
508
502
|
store.logger.error(
|
|
509
503
|
`\u2757`,
|
|
@@ -629,12 +623,12 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
629
623
|
const [family, key] = params;
|
|
630
624
|
switch (family.type) {
|
|
631
625
|
case `molecule_family`:
|
|
632
|
-
return getFromStore(family, key
|
|
626
|
+
return getFromStore(store, family, key);
|
|
633
627
|
default:
|
|
634
628
|
if (store.config.lifespan === `ephemeral`) {
|
|
635
|
-
dependency = findInStore(family, key
|
|
629
|
+
dependency = findInStore(store, family, key);
|
|
636
630
|
} else {
|
|
637
|
-
const maybeDependency = seekInStore(family, key
|
|
631
|
+
const maybeDependency = seekInStore(store, family, key);
|
|
638
632
|
if (maybeDependency) {
|
|
639
633
|
dependency = maybeDependency;
|
|
640
634
|
} else {
|
|
@@ -646,7 +640,7 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
646
640
|
[dependency] = params;
|
|
647
641
|
}
|
|
648
642
|
if (dependency.type === `molecule`) {
|
|
649
|
-
return getFromStore(
|
|
643
|
+
return getFromStore(store, dependency);
|
|
650
644
|
}
|
|
651
645
|
const dependencyState = withdraw(dependency, store);
|
|
652
646
|
const dependencyValue = readOrComputeValue(dependencyState, store);
|
|
@@ -680,7 +674,7 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
680
674
|
const family = params[0];
|
|
681
675
|
const key = params[1];
|
|
682
676
|
value = params[2];
|
|
683
|
-
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key
|
|
677
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(store, family, key) : seekInStore(store, family, key);
|
|
684
678
|
if (!maybeToken) {
|
|
685
679
|
throw new NotFoundError(family, key, store);
|
|
686
680
|
}
|
|
@@ -690,13 +684,13 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
690
684
|
const state = withdraw(token, target);
|
|
691
685
|
setAtomOrSelector(state, value, target);
|
|
692
686
|
},
|
|
693
|
-
find: (token, key) => findInStore(token, key
|
|
694
|
-
seek: (token, key) => seekInStore(token, key
|
|
695
|
-
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)
|
|
696
690
|
});
|
|
697
691
|
|
|
698
692
|
// internal/src/selector/create-readonly-selector.ts
|
|
699
|
-
var createReadonlySelector = (options, family
|
|
693
|
+
var createReadonlySelector = (store, options, family) => {
|
|
700
694
|
const target = newest(store);
|
|
701
695
|
const subject = new Subject();
|
|
702
696
|
const covered = /* @__PURE__ */ new Set();
|
|
@@ -714,7 +708,7 @@ var createReadonlySelector = (options, family, store) => {
|
|
|
714
708
|
const readonlySelector = {
|
|
715
709
|
...options,
|
|
716
710
|
subject,
|
|
717
|
-
install: (s) => createReadonlySelector(options, family
|
|
711
|
+
install: (s) => createReadonlySelector(s, options, family),
|
|
718
712
|
get: getSelf,
|
|
719
713
|
type: `readonly_selector`,
|
|
720
714
|
...family && { family }
|
|
@@ -739,7 +733,7 @@ var createReadonlySelector = (options, family, store) => {
|
|
|
739
733
|
};
|
|
740
734
|
|
|
741
735
|
// internal/src/selector/create-writable-selector.ts
|
|
742
|
-
var createWritableSelector = (options, family
|
|
736
|
+
var createWritableSelector = (store, options, family) => {
|
|
743
737
|
const target = newest(store);
|
|
744
738
|
const subject = new Subject();
|
|
745
739
|
const covered = /* @__PURE__ */ new Set();
|
|
@@ -776,7 +770,7 @@ var createWritableSelector = (options, family, store) => {
|
|
|
776
770
|
const mySelector = {
|
|
777
771
|
...options,
|
|
778
772
|
subject,
|
|
779
|
-
install: (s) => createWritableSelector(options, family
|
|
773
|
+
install: (s) => createWritableSelector(s, options, family),
|
|
780
774
|
get: getSelf,
|
|
781
775
|
set: setSelf,
|
|
782
776
|
type: `selector`,
|
|
@@ -796,14 +790,14 @@ var createWritableSelector = (options, family, store) => {
|
|
|
796
790
|
};
|
|
797
791
|
|
|
798
792
|
// internal/src/selector/create-standalone-selector.ts
|
|
799
|
-
function createStandaloneSelector(
|
|
793
|
+
function createStandaloneSelector(store, options) {
|
|
800
794
|
const isWritable = `set` in options;
|
|
801
795
|
if (isWritable) {
|
|
802
|
-
const state2 = createWritableSelector(options, void 0
|
|
796
|
+
const state2 = createWritableSelector(store, options, void 0);
|
|
803
797
|
store.on.selectorCreation.next(state2);
|
|
804
798
|
return state2;
|
|
805
799
|
}
|
|
806
|
-
const state = createReadonlySelector(options, void 0
|
|
800
|
+
const state = createReadonlySelector(store, options, void 0);
|
|
807
801
|
store.on.selectorCreation.next(state);
|
|
808
802
|
return state;
|
|
809
803
|
}
|
|
@@ -884,12 +878,22 @@ function disposeSelector(selectorToken, store) {
|
|
|
884
878
|
}
|
|
885
879
|
|
|
886
880
|
// internal/src/families/create-readonly-selector-family.ts
|
|
887
|
-
function createReadonlySelectorFamily(
|
|
881
|
+
function createReadonlySelectorFamily(store, options, internalRoles) {
|
|
888
882
|
const familyToken = {
|
|
889
883
|
key: options.key,
|
|
890
884
|
type: `readonly_selector_family`
|
|
891
885
|
};
|
|
892
|
-
|
|
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
|
+
}
|
|
893
897
|
const subject = new Subject();
|
|
894
898
|
const familyFunction = (key) => {
|
|
895
899
|
const subKey = stringifyJson(key);
|
|
@@ -897,12 +901,12 @@ function createReadonlySelectorFamily(options, store, internalRoles) {
|
|
|
897
901
|
const fullKey = `${options.key}(${subKey})`;
|
|
898
902
|
const target = newest(store);
|
|
899
903
|
const token = createReadonlySelector(
|
|
904
|
+
target,
|
|
900
905
|
{
|
|
901
906
|
key: fullKey,
|
|
902
907
|
get: options.get(key)
|
|
903
908
|
},
|
|
904
|
-
family
|
|
905
|
-
target
|
|
909
|
+
family
|
|
906
910
|
);
|
|
907
911
|
subject.next({ type: `state_creation`, token });
|
|
908
912
|
return token;
|
|
@@ -910,26 +914,36 @@ function createReadonlySelectorFamily(options, store, internalRoles) {
|
|
|
910
914
|
const readonlySelectorFamily = Object.assign(familyFunction, familyToken, {
|
|
911
915
|
internalRoles,
|
|
912
916
|
subject,
|
|
913
|
-
install: (s) => createReadonlySelectorFamily(
|
|
917
|
+
install: (s) => createReadonlySelectorFamily(s, options),
|
|
914
918
|
default: (key) => {
|
|
915
919
|
const getFn = options.get(key);
|
|
916
920
|
return getFn({
|
|
917
|
-
get: (
|
|
918
|
-
find: (token, k) => findInStore(token, k
|
|
919
|
-
seek: (token, k) => seekInStore(token, k
|
|
920
|
-
json: (token) => getJsonToken(
|
|
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)
|
|
921
925
|
});
|
|
922
926
|
}
|
|
923
927
|
});
|
|
924
928
|
store.families.set(options.key, readonlySelectorFamily);
|
|
925
929
|
return familyToken;
|
|
926
930
|
}
|
|
927
|
-
function createWritableSelectorFamily(
|
|
931
|
+
function createWritableSelectorFamily(store, options, internalRoles) {
|
|
928
932
|
const familyToken = {
|
|
929
933
|
key: options.key,
|
|
930
934
|
type: `selector_family`
|
|
931
935
|
};
|
|
932
|
-
|
|
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
|
+
}
|
|
933
947
|
const subject = new Subject();
|
|
934
948
|
const familyFunction = (key) => {
|
|
935
949
|
const subKey = stringifyJson(key);
|
|
@@ -937,13 +951,13 @@ function createWritableSelectorFamily(options, store, internalRoles) {
|
|
|
937
951
|
const fullKey = `${options.key}(${subKey})`;
|
|
938
952
|
const target = newest(store);
|
|
939
953
|
const token = createWritableSelector(
|
|
954
|
+
target,
|
|
940
955
|
{
|
|
941
956
|
key: fullKey,
|
|
942
957
|
get: options.get(key),
|
|
943
958
|
set: options.set(key)
|
|
944
959
|
},
|
|
945
|
-
family
|
|
946
|
-
target
|
|
960
|
+
family
|
|
947
961
|
);
|
|
948
962
|
subject.next({ type: `state_creation`, token });
|
|
949
963
|
return token;
|
|
@@ -951,15 +965,14 @@ function createWritableSelectorFamily(options, store, internalRoles) {
|
|
|
951
965
|
const selectorFamily = Object.assign(familyFunction, familyToken, {
|
|
952
966
|
internalRoles,
|
|
953
967
|
subject,
|
|
954
|
-
install: (s) => createWritableSelectorFamily(
|
|
968
|
+
install: (s) => createWritableSelectorFamily(s, options),
|
|
955
969
|
default: (key) => {
|
|
956
970
|
const getFn = options.get(key);
|
|
957
971
|
return getFn({
|
|
958
|
-
get: (...
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
json: (token) => getJsonToken(token, store)
|
|
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)
|
|
963
976
|
});
|
|
964
977
|
}
|
|
965
978
|
});
|
|
@@ -968,12 +981,12 @@ function createWritableSelectorFamily(options, store, internalRoles) {
|
|
|
968
981
|
}
|
|
969
982
|
|
|
970
983
|
// internal/src/families/create-selector-family.ts
|
|
971
|
-
function createSelectorFamily(
|
|
984
|
+
function createSelectorFamily(store, options) {
|
|
972
985
|
const isWritable = `set` in options;
|
|
973
986
|
if (isWritable) {
|
|
974
|
-
return createWritableSelectorFamily(
|
|
987
|
+
return createWritableSelectorFamily(store, options);
|
|
975
988
|
}
|
|
976
|
-
return createReadonlySelectorFamily(
|
|
989
|
+
return createReadonlySelectorFamily(store, options);
|
|
977
990
|
}
|
|
978
991
|
|
|
979
992
|
// internal/src/molecule/dispose-molecule.ts
|
|
@@ -1016,7 +1029,7 @@ function disposeMolecule(token, store) {
|
|
|
1016
1029
|
disposalEvent.family = token.family;
|
|
1017
1030
|
}
|
|
1018
1031
|
for (const state of molecule.tokens.values()) {
|
|
1019
|
-
disposeFromStore(
|
|
1032
|
+
disposeFromStore(store, state);
|
|
1020
1033
|
}
|
|
1021
1034
|
for (const child of molecule.below.values()) {
|
|
1022
1035
|
if (child.family?.dependsOn === `all`) {
|
|
@@ -1046,7 +1059,7 @@ function disposeMolecule(token, store) {
|
|
|
1046
1059
|
}
|
|
1047
1060
|
|
|
1048
1061
|
// internal/src/families/init-family-member.ts
|
|
1049
|
-
function initFamilyMemberInStore(token, key
|
|
1062
|
+
function initFamilyMemberInStore(store, token, key) {
|
|
1050
1063
|
const familyKey = token.key;
|
|
1051
1064
|
const family = store.families.get(familyKey);
|
|
1052
1065
|
if (family === void 0) {
|
|
@@ -1075,7 +1088,7 @@ function initFamilyMemberInStore(token, key, store) {
|
|
|
1075
1088
|
}
|
|
1076
1089
|
return state;
|
|
1077
1090
|
}
|
|
1078
|
-
function seekInStore(token, key
|
|
1091
|
+
function seekInStore(store, token, key) {
|
|
1079
1092
|
const subKey = stringifyJson(key);
|
|
1080
1093
|
const fullKey = `${token.key}(${subKey})`;
|
|
1081
1094
|
const target = newest(store);
|
|
@@ -1101,32 +1114,29 @@ function seekInStore(token, key, store) {
|
|
|
1101
1114
|
}
|
|
1102
1115
|
|
|
1103
1116
|
// internal/src/families/find-in-store.ts
|
|
1104
|
-
function findInStore(token, key
|
|
1117
|
+
function findInStore(store, token, key) {
|
|
1105
1118
|
if (store.config.lifespan === `immortal`) {
|
|
1106
1119
|
throw new Error(
|
|
1107
1120
|
`Do not use \`find\` or \`findState\` in an immortal store. Prefer \`seek\` or \`seekState\`.`
|
|
1108
1121
|
);
|
|
1109
1122
|
}
|
|
1110
|
-
let state = seekInStore(token, key
|
|
1123
|
+
let state = seekInStore(store, token, key);
|
|
1111
1124
|
if (state) {
|
|
1112
1125
|
return state;
|
|
1113
1126
|
}
|
|
1114
|
-
state = initFamilyMemberInStore(token, key
|
|
1127
|
+
state = initFamilyMemberInStore(store, token, key);
|
|
1115
1128
|
return state;
|
|
1116
1129
|
}
|
|
1117
1130
|
|
|
1118
1131
|
// internal/src/families/dispose-from-store.ts
|
|
1119
|
-
function disposeFromStore(...params) {
|
|
1132
|
+
function disposeFromStore(store, ...params) {
|
|
1120
1133
|
let token;
|
|
1121
|
-
|
|
1122
|
-
if (params.length === 2) {
|
|
1134
|
+
if (params.length === 1) {
|
|
1123
1135
|
token = params[0];
|
|
1124
|
-
store = params[1];
|
|
1125
1136
|
} else {
|
|
1126
1137
|
const family = params[0];
|
|
1127
1138
|
const key = params[1];
|
|
1128
|
-
|
|
1129
|
-
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);
|
|
1130
1140
|
if (!maybeToken) {
|
|
1131
1141
|
store.logger.error(
|
|
1132
1142
|
`\u2757`,
|
|
@@ -1157,20 +1167,17 @@ function disposeFromStore(...params) {
|
|
|
1157
1167
|
}
|
|
1158
1168
|
|
|
1159
1169
|
// internal/src/set-state/set-into-store.ts
|
|
1160
|
-
function setIntoStore(...params) {
|
|
1170
|
+
function setIntoStore(store, ...params) {
|
|
1161
1171
|
let token;
|
|
1162
1172
|
let value;
|
|
1163
|
-
|
|
1164
|
-
if (params.length === 3) {
|
|
1173
|
+
if (params.length === 2) {
|
|
1165
1174
|
token = params[0];
|
|
1166
1175
|
value = params[1];
|
|
1167
|
-
store = params[2];
|
|
1168
1176
|
} else {
|
|
1169
1177
|
const family = params[0];
|
|
1170
1178
|
const key = params[1];
|
|
1171
1179
|
value = params[2];
|
|
1172
|
-
|
|
1173
|
-
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);
|
|
1174
1181
|
if (!maybeToken) {
|
|
1175
1182
|
store.logger.error(
|
|
1176
1183
|
`\u2757`,
|
|
@@ -1199,7 +1206,7 @@ function setIntoStore(...params) {
|
|
|
1199
1206
|
token.key,
|
|
1200
1207
|
`resuming deferred setState from T-${rejectionTime}`
|
|
1201
1208
|
);
|
|
1202
|
-
setIntoStore(token, value
|
|
1209
|
+
setIntoStore(store, token, value);
|
|
1203
1210
|
}
|
|
1204
1211
|
);
|
|
1205
1212
|
return;
|
|
@@ -1217,11 +1224,11 @@ function ingestAtomUpdate(applying, atomUpdate, store) {
|
|
|
1217
1224
|
if (atomUpdate.family) {
|
|
1218
1225
|
Object.assign(token, { family: atomUpdate.family });
|
|
1219
1226
|
}
|
|
1220
|
-
setIntoStore(token, value
|
|
1227
|
+
setIntoStore(store, token, value);
|
|
1221
1228
|
}
|
|
1222
1229
|
|
|
1223
1230
|
// internal/src/molecule/create-molecule-family.ts
|
|
1224
|
-
function createMoleculeFamily(
|
|
1231
|
+
function createMoleculeFamily(store, options) {
|
|
1225
1232
|
const subject = new Subject();
|
|
1226
1233
|
const token = {
|
|
1227
1234
|
type: `molecule_family`,
|
|
@@ -1239,7 +1246,7 @@ function createMoleculeFamily(options, store) {
|
|
|
1239
1246
|
|
|
1240
1247
|
// internal/src/molecule/grow-molecule-in-store.ts
|
|
1241
1248
|
function growMoleculeInStore(molecule, family, store) {
|
|
1242
|
-
const stateToken = initFamilyMemberInStore(family, molecule.key
|
|
1249
|
+
const stateToken = initFamilyMemberInStore(store, family, molecule.key);
|
|
1243
1250
|
molecule.tokens.set(stateToken.key, stateToken);
|
|
1244
1251
|
const isTransaction = isChildStore(store) && store.transactionMeta.phase === `building`;
|
|
1245
1252
|
const moleculeInProgress = store.moleculeInProgress === molecule.key;
|
|
@@ -1312,16 +1319,16 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1312
1319
|
owner.below.set(molecule.stringKey, molecule);
|
|
1313
1320
|
}
|
|
1314
1321
|
const toolkit = {
|
|
1315
|
-
get: (...ps) => getFromStore(
|
|
1322
|
+
get: (...ps) => getFromStore(newest(rootStore), ...ps),
|
|
1316
1323
|
set: (...ps) => {
|
|
1317
|
-
setIntoStore(
|
|
1324
|
+
setIntoStore(newest(rootStore), ...ps);
|
|
1318
1325
|
},
|
|
1319
|
-
seek: (t, k) => seekInStore(t, k
|
|
1320
|
-
json: (t) => getJsonToken(
|
|
1326
|
+
seek: (t, k) => seekInStore(newest(rootStore), t, k),
|
|
1327
|
+
json: (t) => getJsonToken(newest(rootStore), t),
|
|
1321
1328
|
run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
|
|
1322
1329
|
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
|
|
1323
1330
|
dispose: (t) => {
|
|
1324
|
-
disposeFromStore(
|
|
1331
|
+
disposeFromStore(newest(rootStore), t);
|
|
1325
1332
|
},
|
|
1326
1333
|
env: () => getEnvironmentData(newest(rootStore)),
|
|
1327
1334
|
bond: (token2, maybeRole) => {
|
|
@@ -1415,7 +1422,7 @@ function ingestCreationEvent(update, applying, store) {
|
|
|
1415
1422
|
break;
|
|
1416
1423
|
}
|
|
1417
1424
|
case `oldValue`: {
|
|
1418
|
-
disposeFromStore(update.token
|
|
1425
|
+
disposeFromStore(store, update.token);
|
|
1419
1426
|
break;
|
|
1420
1427
|
}
|
|
1421
1428
|
}
|
|
@@ -1423,7 +1430,7 @@ function ingestCreationEvent(update, applying, store) {
|
|
|
1423
1430
|
function ingestDisposalEvent(update, applying, store) {
|
|
1424
1431
|
switch (applying) {
|
|
1425
1432
|
case `newValue`: {
|
|
1426
|
-
disposeFromStore(update.token
|
|
1433
|
+
disposeFromStore(store, update.token);
|
|
1427
1434
|
break;
|
|
1428
1435
|
}
|
|
1429
1436
|
case `oldValue`: {
|
|
@@ -1445,7 +1452,7 @@ function createInStore(token, store) {
|
|
|
1445
1452
|
if (store.config.lifespan === `immortal`) {
|
|
1446
1453
|
throw new Error(`No molecule found for key "${token.family.subKey}"`);
|
|
1447
1454
|
}
|
|
1448
|
-
initFamilyMemberInStore(family, parseJson(token.family.subKey)
|
|
1455
|
+
initFamilyMemberInStore(store, family, parseJson(token.family.subKey));
|
|
1449
1456
|
}
|
|
1450
1457
|
}
|
|
1451
1458
|
}
|
|
@@ -1461,14 +1468,14 @@ function ingestMoleculeCreationEvent(update, applying, store) {
|
|
|
1461
1468
|
);
|
|
1462
1469
|
break;
|
|
1463
1470
|
case `oldValue`:
|
|
1464
|
-
disposeFromStore(update.token
|
|
1471
|
+
disposeFromStore(store, update.token);
|
|
1465
1472
|
break;
|
|
1466
1473
|
}
|
|
1467
1474
|
}
|
|
1468
1475
|
function ingestMoleculeDisposalEvent(update, applying, store) {
|
|
1469
1476
|
switch (applying) {
|
|
1470
1477
|
case `newValue`:
|
|
1471
|
-
disposeFromStore(update.token
|
|
1478
|
+
disposeFromStore(store, update.token);
|
|
1472
1479
|
break;
|
|
1473
1480
|
case `oldValue`:
|
|
1474
1481
|
{
|
|
@@ -1687,17 +1694,17 @@ var buildTransaction = (key, params, store, id) => {
|
|
|
1687
1694
|
output: void 0
|
|
1688
1695
|
},
|
|
1689
1696
|
toolkit: {
|
|
1690
|
-
get: (...ps) => getFromStore(...ps
|
|
1697
|
+
get: (...ps) => getFromStore(child, ...ps),
|
|
1691
1698
|
set: (...ps) => {
|
|
1692
|
-
setIntoStore(...ps
|
|
1699
|
+
setIntoStore(child, ...ps);
|
|
1693
1700
|
},
|
|
1694
1701
|
run: (token, identifier = arbitrary()) => actUponStore(token, identifier, child),
|
|
1695
|
-
find: (token, k) => findInStore(token, k
|
|
1696
|
-
seek: (token, k) => seekInStore(token, k
|
|
1697
|
-
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),
|
|
1698
1705
|
make: (context, family, k, ...args) => makeMoleculeInStore(child, context, family, k, ...args),
|
|
1699
1706
|
dispose: (...ps) => {
|
|
1700
|
-
disposeFromStore(...ps
|
|
1707
|
+
disposeFromStore(child, ...ps);
|
|
1701
1708
|
},
|
|
1702
1709
|
env: () => getEnvironmentData(child)
|
|
1703
1710
|
}
|
|
@@ -1871,7 +1878,7 @@ var Store = class {
|
|
|
1871
1878
|
}
|
|
1872
1879
|
atom.install(this);
|
|
1873
1880
|
if (atom.type === `mutable_atom`) {
|
|
1874
|
-
const originalJsonToken = getJsonToken(
|
|
1881
|
+
const originalJsonToken = getJsonToken(store, atom);
|
|
1875
1882
|
const originalUpdateToken = getUpdateToken(atom);
|
|
1876
1883
|
mutableHelpers.add(originalJsonToken.key);
|
|
1877
1884
|
mutableHelpers.add(originalUpdateToken.key);
|
|
@@ -1964,6 +1971,19 @@ var recallState = (state, store) => {
|
|
|
1964
1971
|
}
|
|
1965
1972
|
return target.valueMap.get(state.key);
|
|
1966
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
|
+
}
|
|
1967
1987
|
|
|
1968
1988
|
// internal/src/subscribe/subscribe-to-root-atoms.ts
|
|
1969
1989
|
var subscribeToRootAtoms = (selector, store) => {
|
|
@@ -2010,7 +2030,7 @@ var subscribeToRootAtoms = (selector, store) => {
|
|
|
2010
2030
|
};
|
|
2011
2031
|
|
|
2012
2032
|
// internal/src/subscribe/subscribe-to-state.ts
|
|
2013
|
-
function
|
|
2033
|
+
function subscribeToState2(token, handleUpdate, key, store) {
|
|
2014
2034
|
function safelyHandleUpdate(update) {
|
|
2015
2035
|
if (store.operation.open) {
|
|
2016
2036
|
const unsubscribe2 = store.on.operationClose.subscribe(
|
|
@@ -2058,7 +2078,7 @@ function subscribeToState(token, handleUpdate, key, store) {
|
|
|
2058
2078
|
}
|
|
2059
2079
|
|
|
2060
2080
|
// internal/src/subscribe/subscribe-to-timeline.ts
|
|
2061
|
-
var
|
|
2081
|
+
var subscribeToTimeline2 = (token, handleUpdate, key, store) => {
|
|
2062
2082
|
const tl = withdraw(token, store);
|
|
2063
2083
|
store.logger.info(`\u{1F440}`, `timeline`, token.key, `Adding subscription "${key}"`);
|
|
2064
2084
|
const unsubscribe = tl.subject.subscribe(key, handleUpdate);
|
|
@@ -2074,7 +2094,7 @@ var subscribeToTimeline = (token, handleUpdate, key, store) => {
|
|
|
2074
2094
|
};
|
|
2075
2095
|
|
|
2076
2096
|
// internal/src/subscribe/subscribe-to-transaction.ts
|
|
2077
|
-
var
|
|
2097
|
+
var subscribeToTransaction2 = (token, handleUpdate, key, store) => {
|
|
2078
2098
|
const tx = withdraw(token, store);
|
|
2079
2099
|
store.logger.info(
|
|
2080
2100
|
`\u{1F440}`,
|
|
@@ -2106,12 +2126,12 @@ var Tracker = class {
|
|
|
2106
2126
|
subKey: mutableState.family.subKey
|
|
2107
2127
|
} : void 0;
|
|
2108
2128
|
const latestUpdateState = createRegularAtom(
|
|
2129
|
+
store,
|
|
2109
2130
|
{
|
|
2110
2131
|
key: latestUpdateStateKey,
|
|
2111
2132
|
default: null
|
|
2112
2133
|
},
|
|
2113
|
-
familyMetaData
|
|
2114
|
-
store
|
|
2134
|
+
familyMetaData
|
|
2115
2135
|
);
|
|
2116
2136
|
if (store.parent?.valueMap.has(latestUpdateStateKey)) {
|
|
2117
2137
|
const parentValue = store.parent.valueMap.get(latestUpdateStateKey);
|
|
@@ -2123,14 +2143,14 @@ var Tracker = class {
|
|
|
2123
2143
|
unsubscribeFromState;
|
|
2124
2144
|
observeCore(mutableState, latestUpdateState, target) {
|
|
2125
2145
|
const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
|
|
2126
|
-
const originalInnerValue = getFromStore(
|
|
2146
|
+
const originalInnerValue = getFromStore(target, mutableState);
|
|
2127
2147
|
this.unsubscribeFromInnerValue = originalInnerValue.subscribe(
|
|
2128
2148
|
subscriptionKey,
|
|
2129
2149
|
(update) => {
|
|
2130
|
-
setIntoStore(latestUpdateState, update
|
|
2150
|
+
setIntoStore(target, latestUpdateState, update);
|
|
2131
2151
|
}
|
|
2132
2152
|
);
|
|
2133
|
-
this.unsubscribeFromState =
|
|
2153
|
+
this.unsubscribeFromState = subscribeToState2(
|
|
2134
2154
|
mutableState,
|
|
2135
2155
|
(update) => {
|
|
2136
2156
|
if (update.newValue !== update.oldValue) {
|
|
@@ -2138,7 +2158,7 @@ var Tracker = class {
|
|
|
2138
2158
|
this.unsubscribeFromInnerValue = update.newValue.subscribe(
|
|
2139
2159
|
subscriptionKey,
|
|
2140
2160
|
(transceiverUpdate) => {
|
|
2141
|
-
setIntoStore(latestUpdateState, transceiverUpdate
|
|
2161
|
+
setIntoStore(target, latestUpdateState, transceiverUpdate);
|
|
2142
2162
|
}
|
|
2143
2163
|
);
|
|
2144
2164
|
}
|
|
@@ -2149,7 +2169,7 @@ var Tracker = class {
|
|
|
2149
2169
|
}
|
|
2150
2170
|
updateCore(mutableState, latestUpdateState, target) {
|
|
2151
2171
|
const subscriptionKey = `tracker:${target.config.name}:${isChildStore(target) ? target.transactionMeta.update.key : `main`}:${mutableState.key}`;
|
|
2152
|
-
|
|
2172
|
+
subscribeToState2(
|
|
2153
2173
|
latestUpdateState,
|
|
2154
2174
|
({ newValue, oldValue }) => {
|
|
2155
2175
|
const timelineId = target.timelineTopics.getRelatedKey(
|
|
@@ -2158,22 +2178,18 @@ var Tracker = class {
|
|
|
2158
2178
|
if (timelineId) {
|
|
2159
2179
|
const timelineData = target.timelines.get(timelineId);
|
|
2160
2180
|
if (timelineData?.timeTraveling) {
|
|
2161
|
-
const unsubscribe2 =
|
|
2181
|
+
const unsubscribe2 = subscribeToTimeline2(
|
|
2162
2182
|
{ key: timelineId, type: `timeline` },
|
|
2163
2183
|
(update) => {
|
|
2164
2184
|
unsubscribe2();
|
|
2165
|
-
setIntoStore(
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
return transceiver;
|
|
2174
|
-
},
|
|
2175
|
-
target
|
|
2176
|
-
);
|
|
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
|
+
});
|
|
2177
2193
|
},
|
|
2178
2194
|
subscriptionKey,
|
|
2179
2195
|
target
|
|
@@ -2185,14 +2201,14 @@ var Tracker = class {
|
|
|
2185
2201
|
subscriptionKey,
|
|
2186
2202
|
() => {
|
|
2187
2203
|
unsubscribe();
|
|
2188
|
-
const mutable = getFromStore(
|
|
2204
|
+
const mutable = getFromStore(target, mutableState);
|
|
2189
2205
|
const updateNumber = newValue === null ? -1 : mutable.getUpdateNumber(newValue);
|
|
2190
2206
|
const eventOffset = updateNumber - mutable.cacheUpdateNumber;
|
|
2191
2207
|
if (newValue && eventOffset === 1) {
|
|
2192
2208
|
setIntoStore(
|
|
2209
|
+
target,
|
|
2193
2210
|
mutableState,
|
|
2194
|
-
(transceiver) => (transceiver.do(newValue), transceiver)
|
|
2195
|
-
target
|
|
2211
|
+
(transceiver) => (transceiver.do(newValue), transceiver)
|
|
2196
2212
|
);
|
|
2197
2213
|
} else {
|
|
2198
2214
|
target.logger.info(
|
|
@@ -2228,7 +2244,7 @@ var Tracker = class {
|
|
|
2228
2244
|
};
|
|
2229
2245
|
|
|
2230
2246
|
// internal/src/mutable/create-mutable-atom.ts
|
|
2231
|
-
function createMutableAtom(options, family
|
|
2247
|
+
function createMutableAtom(store, options, family) {
|
|
2232
2248
|
store.logger.info(
|
|
2233
2249
|
`\u{1F528}`,
|
|
2234
2250
|
`atom`,
|
|
@@ -2257,7 +2273,7 @@ function createMutableAtom(options, family, store) {
|
|
|
2257
2273
|
options.key,
|
|
2258
2274
|
`installing in store "${s.config.name}"`
|
|
2259
2275
|
);
|
|
2260
|
-
return createMutableAtom(options, family
|
|
2276
|
+
return createMutableAtom(s, options, family);
|
|
2261
2277
|
},
|
|
2262
2278
|
subject
|
|
2263
2279
|
};
|
|
@@ -2275,9 +2291,9 @@ function createMutableAtom(options, family, store) {
|
|
|
2275
2291
|
for (const effect of options.effects) {
|
|
2276
2292
|
const cleanup = effect({
|
|
2277
2293
|
setSelf: (next) => {
|
|
2278
|
-
setIntoStore(token, next
|
|
2294
|
+
setIntoStore(store, token, next);
|
|
2279
2295
|
},
|
|
2280
|
-
onSet: (handle) =>
|
|
2296
|
+
onSet: (handle) => subscribeToState2(token, handle, `effect[${effectIndex}]`, store)
|
|
2281
2297
|
});
|
|
2282
2298
|
if (cleanup) {
|
|
2283
2299
|
cleanupFunctions.push(cleanup);
|
|
@@ -2302,11 +2318,11 @@ var FamilyTracker = class {
|
|
|
2302
2318
|
mutableAtoms;
|
|
2303
2319
|
constructor(mutableAtoms, store) {
|
|
2304
2320
|
const updateAtoms = createRegularAtomFamily(
|
|
2321
|
+
store,
|
|
2305
2322
|
{
|
|
2306
2323
|
key: `*${mutableAtoms.key}`,
|
|
2307
2324
|
default: null
|
|
2308
2325
|
},
|
|
2309
|
-
store,
|
|
2310
2326
|
[`mutable`, `updates`]
|
|
2311
2327
|
);
|
|
2312
2328
|
this.latestUpdateAtoms = withdraw(updateAtoms, store);
|
|
@@ -2316,7 +2332,7 @@ var FamilyTracker = class {
|
|
|
2316
2332
|
(event) => {
|
|
2317
2333
|
if (event.token.family) {
|
|
2318
2334
|
const key = parseJson(event.token.family.subKey);
|
|
2319
|
-
seekInStore(this.latestUpdateAtoms, key
|
|
2335
|
+
seekInStore(store, this.latestUpdateAtoms, key);
|
|
2320
2336
|
new Tracker(event.token, store);
|
|
2321
2337
|
}
|
|
2322
2338
|
}
|
|
@@ -2326,7 +2342,7 @@ var FamilyTracker = class {
|
|
|
2326
2342
|
(event) => {
|
|
2327
2343
|
if (event.token.family) {
|
|
2328
2344
|
const key = parseJson(event.token.family.subKey);
|
|
2329
|
-
const mutableAtomToken = seekInStore(this.mutableAtoms, key
|
|
2345
|
+
const mutableAtomToken = seekInStore(store, this.mutableAtoms, key);
|
|
2330
2346
|
if (mutableAtomToken) {
|
|
2331
2347
|
new Tracker(mutableAtomToken, store);
|
|
2332
2348
|
}
|
|
@@ -2337,12 +2353,22 @@ var FamilyTracker = class {
|
|
|
2337
2353
|
};
|
|
2338
2354
|
|
|
2339
2355
|
// internal/src/mutable/create-mutable-atom-family.ts
|
|
2340
|
-
function createMutableAtomFamily(
|
|
2356
|
+
function createMutableAtomFamily(store, options, internalRoles) {
|
|
2341
2357
|
const familyToken = {
|
|
2342
2358
|
key: options.key,
|
|
2343
2359
|
type: `mutable_atom_family`
|
|
2344
2360
|
};
|
|
2345
|
-
|
|
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
|
+
}
|
|
2346
2372
|
const subject = new Subject();
|
|
2347
2373
|
const familyFunction = (key) => {
|
|
2348
2374
|
const subKey = stringifyJson(key);
|
|
@@ -2359,13 +2385,13 @@ function createMutableAtomFamily(options, store, internalRoles) {
|
|
|
2359
2385
|
if (options.effects) {
|
|
2360
2386
|
individualOptions.effects = options.effects(key);
|
|
2361
2387
|
}
|
|
2362
|
-
const token = createMutableAtom(individualOptions, family
|
|
2388
|
+
const token = createMutableAtom(target, individualOptions, family);
|
|
2363
2389
|
subject.next({ type: `state_creation`, token });
|
|
2364
2390
|
return token;
|
|
2365
2391
|
};
|
|
2366
2392
|
const atomFamily = Object.assign(familyFunction, familyToken, {
|
|
2367
2393
|
subject,
|
|
2368
|
-
install: (s) => createMutableAtomFamily(
|
|
2394
|
+
install: (s) => createMutableAtomFamily(s, options),
|
|
2369
2395
|
toJson: options.toJson,
|
|
2370
2396
|
fromJson: options.fromJson,
|
|
2371
2397
|
internalRoles
|
|
@@ -2385,7 +2411,7 @@ var getJsonFamily = (mutableAtomFamily, store) => {
|
|
|
2385
2411
|
};
|
|
2386
2412
|
|
|
2387
2413
|
// internal/src/mutable/get-json-token.ts
|
|
2388
|
-
var getJsonToken = (
|
|
2414
|
+
var getJsonToken = (store, mutableAtomToken) => {
|
|
2389
2415
|
if (mutableAtomToken.family) {
|
|
2390
2416
|
const target = newest(store);
|
|
2391
2417
|
const jsonFamilyKey = `${mutableAtomToken.family.key}:JSON`;
|
|
@@ -2395,7 +2421,7 @@ var getJsonToken = (mutableAtomToken, store) => {
|
|
|
2395
2421
|
};
|
|
2396
2422
|
const family = withdraw(jsonFamilyToken, target);
|
|
2397
2423
|
const subKey = JSON.parse(mutableAtomToken.family.subKey);
|
|
2398
|
-
const jsonToken = findInStore(family, subKey
|
|
2424
|
+
const jsonToken = findInStore(store, family, subKey);
|
|
2399
2425
|
return jsonToken;
|
|
2400
2426
|
}
|
|
2401
2427
|
const token = {
|
|
@@ -2514,7 +2540,7 @@ var markAtomAsNotDefault = (key, store) => {
|
|
|
2514
2540
|
};
|
|
2515
2541
|
|
|
2516
2542
|
// internal/src/atom/create-regular-atom.ts
|
|
2517
|
-
function createRegularAtom(options, family
|
|
2543
|
+
function createRegularAtom(store, options, family) {
|
|
2518
2544
|
store.logger.info(
|
|
2519
2545
|
`\u{1F528}`,
|
|
2520
2546
|
`atom`,
|
|
@@ -2543,7 +2569,7 @@ function createRegularAtom(options, family, store) {
|
|
|
2543
2569
|
options.key,
|
|
2544
2570
|
`installing in store "${s.config.name}"`
|
|
2545
2571
|
);
|
|
2546
|
-
return createRegularAtom(options, family
|
|
2572
|
+
return createRegularAtom(s, options, family);
|
|
2547
2573
|
},
|
|
2548
2574
|
subject
|
|
2549
2575
|
};
|
|
@@ -2564,9 +2590,9 @@ function createRegularAtom(options, family, store) {
|
|
|
2564
2590
|
for (const effect of options.effects) {
|
|
2565
2591
|
const cleanup = effect({
|
|
2566
2592
|
setSelf: (next) => {
|
|
2567
|
-
setIntoStore(token, next
|
|
2593
|
+
setIntoStore(store, token, next);
|
|
2568
2594
|
},
|
|
2569
|
-
onSet: (handle) =>
|
|
2595
|
+
onSet: (handle) => subscribeToState2(token, handle, `effect[${effectIndex}]`, store)
|
|
2570
2596
|
});
|
|
2571
2597
|
if (cleanup) {
|
|
2572
2598
|
cleanupFunctions.push(cleanup);
|
|
@@ -2583,14 +2609,14 @@ function createRegularAtom(options, family, store) {
|
|
|
2583
2609
|
}
|
|
2584
2610
|
|
|
2585
2611
|
// internal/src/atom/create-standalone-atom.ts
|
|
2586
|
-
function createStandaloneAtom(
|
|
2612
|
+
function createStandaloneAtom(store, options) {
|
|
2587
2613
|
const isMutable = `mutable` in options;
|
|
2588
2614
|
if (isMutable) {
|
|
2589
|
-
const state2 = createMutableAtom(options, void 0
|
|
2615
|
+
const state2 = createMutableAtom(store, options, void 0);
|
|
2590
2616
|
store.on.atomCreation.next(state2);
|
|
2591
2617
|
return state2;
|
|
2592
2618
|
}
|
|
2593
|
-
const state = createRegularAtom(options, void 0
|
|
2619
|
+
const state = createRegularAtom(store, options, void 0);
|
|
2594
2620
|
store.on.atomCreation.next(state);
|
|
2595
2621
|
return state;
|
|
2596
2622
|
}
|
|
@@ -3070,7 +3096,7 @@ function handleStateLifecycleEvent(event, tl, store) {
|
|
|
3070
3096
|
}
|
|
3071
3097
|
|
|
3072
3098
|
// internal/src/timeline/time-travel.ts
|
|
3073
|
-
var timeTravel = (action, token
|
|
3099
|
+
var timeTravel = (store, action, token) => {
|
|
3074
3100
|
store.logger.info(
|
|
3075
3101
|
action === `redo` ? `\u23E9` : `\u23EA`,
|
|
3076
3102
|
`timeline`,
|
|
@@ -3145,4 +3171,4 @@ var timeTravel = (action, token, store) => {
|
|
|
3145
3171
|
);
|
|
3146
3172
|
};
|
|
3147
3173
|
|
|
3148
|
-
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 };
|