atom.io 0.25.0 → 0.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/internal/dist/index.cjs +33 -17
- package/internal/dist/index.d.ts +2 -1
- package/internal/dist/index.js +33 -18
- package/internal/src/lineage.ts +7 -0
- package/internal/src/molecule/make-molecule-in-store.ts +20 -12
- package/internal/src/not-found-error.ts +1 -1
- package/internal/src/selector/register-selector.ts +17 -14
- package/package.json +1 -1
package/internal/dist/index.cjs
CHANGED
|
@@ -78,6 +78,12 @@ function newest(scion) {
|
|
|
78
78
|
}
|
|
79
79
|
return scion;
|
|
80
80
|
}
|
|
81
|
+
function eldest(scion) {
|
|
82
|
+
while (scion.parent !== null) {
|
|
83
|
+
scion = scion.parent;
|
|
84
|
+
}
|
|
85
|
+
return scion;
|
|
86
|
+
}
|
|
81
87
|
|
|
82
88
|
// internal/src/store/deposit.ts
|
|
83
89
|
function deposit(state) {
|
|
@@ -430,7 +436,7 @@ var NotFoundError = class extends Error {
|
|
|
430
436
|
const store = params.length === 2 ? params[1] : params[2];
|
|
431
437
|
if (params.length === 2) {
|
|
432
438
|
super(
|
|
433
|
-
`${prettyPrintTokenType(token)}
|
|
439
|
+
`${prettyPrintTokenType(token)} ${json.stringifyJson(token.key)} not found in store "${store.config.name}".`
|
|
434
440
|
);
|
|
435
441
|
} else {
|
|
436
442
|
const key = params[1];
|
|
@@ -843,15 +849,19 @@ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
|
|
|
843
849
|
|
|
844
850
|
// internal/src/selector/register-selector.ts
|
|
845
851
|
var registerSelector = (selectorKey, covered, store) => ({
|
|
846
|
-
get: (
|
|
852
|
+
get: (...params) => {
|
|
847
853
|
const target = newest(store);
|
|
848
|
-
|
|
849
|
-
|
|
854
|
+
let dependency;
|
|
855
|
+
if (params.length === 2) {
|
|
856
|
+
const [family, key] = params;
|
|
857
|
+
switch (family.type) {
|
|
850
858
|
case `molecule_family`:
|
|
851
|
-
return getFromStore(
|
|
852
|
-
|
|
853
|
-
dependency = seekInStore(
|
|
859
|
+
return getFromStore(family, key, store);
|
|
860
|
+
default:
|
|
861
|
+
dependency = seekInStore(family, key, store);
|
|
854
862
|
}
|
|
863
|
+
} else {
|
|
864
|
+
[dependency] = params;
|
|
855
865
|
}
|
|
856
866
|
if (dependency.type === `molecule`) {
|
|
857
867
|
return getFromStore(dependency, store);
|
|
@@ -1454,6 +1464,7 @@ function capitalize2(string) {
|
|
|
1454
1464
|
return string[0].toUpperCase() + string.slice(1);
|
|
1455
1465
|
}
|
|
1456
1466
|
function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
1467
|
+
const rootStore = eldest(store);
|
|
1457
1468
|
const target = newest(store);
|
|
1458
1469
|
const stringKey = json.stringifyJson(key);
|
|
1459
1470
|
target.moleculeInProgress = stringKey;
|
|
@@ -1477,22 +1488,22 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1477
1488
|
owner.below.set(molecule.stringKey, molecule);
|
|
1478
1489
|
}
|
|
1479
1490
|
const toolkit = {
|
|
1480
|
-
get: (
|
|
1481
|
-
set: (
|
|
1482
|
-
setIntoStore(
|
|
1491
|
+
get: (...ps) => getFromStore(...ps, newest(rootStore)),
|
|
1492
|
+
set: (...ps) => {
|
|
1493
|
+
setIntoStore(...ps, newest(rootStore));
|
|
1483
1494
|
},
|
|
1484
|
-
seek: (t, k) => seekInStore(t, k, newest(
|
|
1485
|
-
json: (t) => getJsonToken(t, newest(
|
|
1495
|
+
seek: (t, k) => seekInStore(t, k, newest(rootStore)),
|
|
1496
|
+
json: (t) => getJsonToken(t, newest(rootStore)),
|
|
1486
1497
|
run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
|
|
1487
|
-
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(
|
|
1498
|
+
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
|
|
1488
1499
|
dispose: (t) => {
|
|
1489
|
-
disposeFromStore(t, newest(
|
|
1500
|
+
disposeFromStore(t, newest(rootStore));
|
|
1490
1501
|
},
|
|
1491
|
-
env: () => getEnvironmentData(newest(
|
|
1502
|
+
env: () => getEnvironmentData(newest(rootStore)),
|
|
1492
1503
|
bond: (token2, maybeRole) => {
|
|
1493
1504
|
if (token2.type === `join`) {
|
|
1494
1505
|
const { as: role } = maybeRole;
|
|
1495
|
-
const join = data.getJoin(token2,
|
|
1506
|
+
const join = data.getJoin(token2, rootStore);
|
|
1496
1507
|
join.molecules.set(stringKey, molecule);
|
|
1497
1508
|
molecule.joins.set(token2.key, join);
|
|
1498
1509
|
const unsubFromFamily = family.subject.subscribe(
|
|
@@ -1517,7 +1528,11 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1517
1528
|
}
|
|
1518
1529
|
return tokens;
|
|
1519
1530
|
}
|
|
1520
|
-
return growMoleculeInStore(
|
|
1531
|
+
return growMoleculeInStore(
|
|
1532
|
+
molecule,
|
|
1533
|
+
withdraw(token2, rootStore),
|
|
1534
|
+
newest(rootStore)
|
|
1535
|
+
);
|
|
1521
1536
|
},
|
|
1522
1537
|
claim: (below, options) => {
|
|
1523
1538
|
const { exclusive } = options;
|
|
@@ -3324,6 +3339,7 @@ exports.disposeAtom = disposeAtom;
|
|
|
3324
3339
|
exports.disposeFromStore = disposeFromStore;
|
|
3325
3340
|
exports.disposeMolecule = disposeMolecule;
|
|
3326
3341
|
exports.disposeSelector = disposeSelector;
|
|
3342
|
+
exports.eldest = eldest;
|
|
3327
3343
|
exports.evictCachedValue = evictCachedValue;
|
|
3328
3344
|
exports.findInStore = findInStore;
|
|
3329
3345
|
exports.getContinuityKey = getContinuityKey;
|
package/internal/dist/index.d.ts
CHANGED
|
@@ -162,6 +162,7 @@ interface Lineage {
|
|
|
162
162
|
child: typeof this | null;
|
|
163
163
|
}
|
|
164
164
|
declare function newest<T extends Lineage>(scion: T): T;
|
|
165
|
+
declare function eldest<T extends Lineage>(scion: T): T;
|
|
165
166
|
|
|
166
167
|
type OperationProgress = {
|
|
167
168
|
open: false;
|
|
@@ -583,4 +584,4 @@ type Selector<T> = ReadonlySelector<T> | WritableSelector<T>;
|
|
|
583
584
|
type WritableState<T> = Atom<T> | WritableSelector<T>;
|
|
584
585
|
type ReadableState<T> = Atom<T> | Selector<T>;
|
|
585
586
|
|
|
586
|
-
export { type Atom, type AtomIOState, type AtomKey, type ChildStore, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type RootStore, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineMoleculeCreation, type TimelineMoleculeDisposal, type TimelineSelectorUpdate, type TimelineStateCreation, type TimelineStateDisposal, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionEpoch, type TransactionPhase, type TransactionProgress, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isMutable, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|
|
587
|
+
export { type Atom, type AtomIOState, type AtomKey, type ChildStore, type EnvironmentData, FamilyTracker, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, NotFoundError, type OperationProgress, type ReadableState, type ReadonlySelector, type ReadonlySelectorKey, type RegularAtom, type RootStore, type Selector, type SelectorKey, type Signal, type StateKey, StatefulSubject, Store, Subject, TRANSACTION_PHASES, type Timeline, type TimelineAtomUpdate, type TimelineMoleculeCreation, type TimelineMoleculeDisposal, type TimelineSelectorUpdate, type TimelineStateCreation, type TimelineStateDisposal, type TimelineTransactionUpdate, Tracker, type Transaction, type TransactionEpoch, type TransactionPhase, type TransactionProgress, type Transceiver, type TransceiverMode, type Withdrawable, type WritableSelector, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isMutable, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|
package/internal/dist/index.js
CHANGED
|
@@ -58,6 +58,12 @@ function newest(scion) {
|
|
|
58
58
|
}
|
|
59
59
|
return scion;
|
|
60
60
|
}
|
|
61
|
+
function eldest(scion) {
|
|
62
|
+
while (scion.parent !== null) {
|
|
63
|
+
scion = scion.parent;
|
|
64
|
+
}
|
|
65
|
+
return scion;
|
|
66
|
+
}
|
|
61
67
|
|
|
62
68
|
// internal/src/store/deposit.ts
|
|
63
69
|
function deposit(state) {
|
|
@@ -155,7 +161,7 @@ var NotFoundError = class extends Error {
|
|
|
155
161
|
const store = params.length === 2 ? params[1] : params[2];
|
|
156
162
|
if (params.length === 2) {
|
|
157
163
|
super(
|
|
158
|
-
`${prettyPrintTokenType(token)}
|
|
164
|
+
`${prettyPrintTokenType(token)} ${stringifyJson(token.key)} not found in store "${store.config.name}".`
|
|
159
165
|
);
|
|
160
166
|
} else {
|
|
161
167
|
const key = params[1];
|
|
@@ -568,15 +574,19 @@ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
|
|
|
568
574
|
|
|
569
575
|
// internal/src/selector/register-selector.ts
|
|
570
576
|
var registerSelector = (selectorKey, covered, store) => ({
|
|
571
|
-
get: (
|
|
577
|
+
get: (...params) => {
|
|
572
578
|
const target = newest(store);
|
|
573
|
-
|
|
574
|
-
|
|
579
|
+
let dependency;
|
|
580
|
+
if (params.length === 2) {
|
|
581
|
+
const [family, key] = params;
|
|
582
|
+
switch (family.type) {
|
|
575
583
|
case `molecule_family`:
|
|
576
|
-
return getFromStore(
|
|
577
|
-
|
|
578
|
-
dependency = seekInStore(
|
|
584
|
+
return getFromStore(family, key, store);
|
|
585
|
+
default:
|
|
586
|
+
dependency = seekInStore(family, key, store);
|
|
579
587
|
}
|
|
588
|
+
} else {
|
|
589
|
+
[dependency] = params;
|
|
580
590
|
}
|
|
581
591
|
if (dependency.type === `molecule`) {
|
|
582
592
|
return getFromStore(dependency, store);
|
|
@@ -1179,6 +1189,7 @@ function capitalize2(string) {
|
|
|
1179
1189
|
return string[0].toUpperCase() + string.slice(1);
|
|
1180
1190
|
}
|
|
1181
1191
|
function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
1192
|
+
const rootStore = eldest(store);
|
|
1182
1193
|
const target = newest(store);
|
|
1183
1194
|
const stringKey = stringifyJson(key);
|
|
1184
1195
|
target.moleculeInProgress = stringKey;
|
|
@@ -1202,22 +1213,22 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1202
1213
|
owner.below.set(molecule.stringKey, molecule);
|
|
1203
1214
|
}
|
|
1204
1215
|
const toolkit = {
|
|
1205
|
-
get: (
|
|
1206
|
-
set: (
|
|
1207
|
-
setIntoStore(
|
|
1216
|
+
get: (...ps) => getFromStore(...ps, newest(rootStore)),
|
|
1217
|
+
set: (...ps) => {
|
|
1218
|
+
setIntoStore(...ps, newest(rootStore));
|
|
1208
1219
|
},
|
|
1209
|
-
seek: (t, k) => seekInStore(t, k, newest(
|
|
1210
|
-
json: (t) => getJsonToken(t, newest(
|
|
1220
|
+
seek: (t, k) => seekInStore(t, k, newest(rootStore)),
|
|
1221
|
+
json: (t) => getJsonToken(t, newest(rootStore)),
|
|
1211
1222
|
run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
|
|
1212
|
-
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(
|
|
1223
|
+
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
|
|
1213
1224
|
dispose: (t) => {
|
|
1214
|
-
disposeFromStore(t, newest(
|
|
1225
|
+
disposeFromStore(t, newest(rootStore));
|
|
1215
1226
|
},
|
|
1216
|
-
env: () => getEnvironmentData(newest(
|
|
1227
|
+
env: () => getEnvironmentData(newest(rootStore)),
|
|
1217
1228
|
bond: (token2, maybeRole) => {
|
|
1218
1229
|
if (token2.type === `join`) {
|
|
1219
1230
|
const { as: role } = maybeRole;
|
|
1220
|
-
const join = getJoin(token2,
|
|
1231
|
+
const join = getJoin(token2, rootStore);
|
|
1221
1232
|
join.molecules.set(stringKey, molecule);
|
|
1222
1233
|
molecule.joins.set(token2.key, join);
|
|
1223
1234
|
const unsubFromFamily = family.subject.subscribe(
|
|
@@ -1242,7 +1253,11 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1242
1253
|
}
|
|
1243
1254
|
return tokens;
|
|
1244
1255
|
}
|
|
1245
|
-
return growMoleculeInStore(
|
|
1256
|
+
return growMoleculeInStore(
|
|
1257
|
+
molecule,
|
|
1258
|
+
withdraw(token2, rootStore),
|
|
1259
|
+
newest(rootStore)
|
|
1260
|
+
);
|
|
1246
1261
|
},
|
|
1247
1262
|
claim: (below, options) => {
|
|
1248
1263
|
const { exclusive } = options;
|
|
@@ -3009,4 +3024,4 @@ var timeTravel = (action, token, store) => {
|
|
|
3009
3024
|
);
|
|
3010
3025
|
};
|
|
3011
3026
|
|
|
3012
|
-
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, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isMutable, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|
|
3027
|
+
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, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isMutable, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, readCachedValue, readOrComputeValue, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|
package/internal/src/lineage.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
CtorToolkit,
|
|
3
|
+
getState,
|
|
3
4
|
MK,
|
|
4
5
|
MoleculeConstructor,
|
|
5
6
|
MoleculeCreation,
|
|
@@ -8,6 +9,7 @@ import type {
|
|
|
8
9
|
MoleculeParams,
|
|
9
10
|
MoleculeToken,
|
|
10
11
|
ReadableFamilyToken,
|
|
12
|
+
setState,
|
|
11
13
|
} from "atom.io"
|
|
12
14
|
import { findRelations, getJoin, type JoinToken } from "atom.io/data"
|
|
13
15
|
import type { seekState } from "atom.io/immortal"
|
|
@@ -17,7 +19,7 @@ import { arbitrary } from "../arbitrary"
|
|
|
17
19
|
import { disposeFromStore, seekInStore } from "../families"
|
|
18
20
|
import { getEnvironmentData } from "../get-environment-data"
|
|
19
21
|
import { getFromStore } from "../get-state"
|
|
20
|
-
import { newest } from "../lineage"
|
|
22
|
+
import { eldest, newest } from "../lineage"
|
|
21
23
|
import { getJsonToken } from "../mutable"
|
|
22
24
|
import { setIntoStore } from "../set-state"
|
|
23
25
|
import type { Store } from "../store"
|
|
@@ -37,6 +39,7 @@ export function makeMoleculeInStore<M extends MoleculeConstructor>(
|
|
|
37
39
|
key: MoleculeKey<M>,
|
|
38
40
|
...params: MoleculeParams<M>
|
|
39
41
|
): MoleculeToken<M> {
|
|
42
|
+
const rootStore = eldest(store)
|
|
40
43
|
const target = newest(store)
|
|
41
44
|
const stringKey = stringifyJson(key)
|
|
42
45
|
|
|
@@ -65,26 +68,27 @@ export function makeMoleculeInStore<M extends MoleculeConstructor>(
|
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
const toolkit = {
|
|
68
|
-
get: (
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
get: ((...ps: Parameters<typeof getState>) =>
|
|
72
|
+
getFromStore(...ps, newest(rootStore))) as typeof getState,
|
|
73
|
+
set: ((...ps: Parameters<typeof setState>) => {
|
|
74
|
+
setIntoStore(...ps, newest(rootStore))
|
|
75
|
+
}) as typeof setState,
|
|
76
|
+
seek: ((t, k) => seekInStore(t, k, newest(rootStore))) as typeof seekState,
|
|
77
|
+
json: (t) => getJsonToken(t, newest(rootStore)),
|
|
74
78
|
run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
|
|
75
79
|
make: (ctx, f, k, ...args) =>
|
|
76
|
-
makeMoleculeInStore(newest(
|
|
80
|
+
makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
|
|
77
81
|
dispose: (t) => {
|
|
78
|
-
disposeFromStore(t, newest(
|
|
82
|
+
disposeFromStore(t, newest(rootStore))
|
|
79
83
|
},
|
|
80
|
-
env: () => getEnvironmentData(newest(
|
|
84
|
+
env: () => getEnvironmentData(newest(rootStore)),
|
|
81
85
|
bond: ((
|
|
82
86
|
token: JoinToken<any, any, any, any> | ReadableFamilyToken<any, any>,
|
|
83
87
|
maybeRole,
|
|
84
88
|
) => {
|
|
85
89
|
if (token.type === `join`) {
|
|
86
90
|
const { as: role } = maybeRole
|
|
87
|
-
const join = getJoin(token,
|
|
91
|
+
const join = getJoin(token, rootStore)
|
|
88
92
|
join.molecules.set(stringKey, molecule)
|
|
89
93
|
molecule.joins.set(token.key, join)
|
|
90
94
|
const unsubFromFamily = family.subject.subscribe(
|
|
@@ -119,7 +123,11 @@ export function makeMoleculeInStore<M extends MoleculeConstructor>(
|
|
|
119
123
|
}
|
|
120
124
|
return tokens
|
|
121
125
|
}
|
|
122
|
-
return growMoleculeInStore(
|
|
126
|
+
return growMoleculeInStore(
|
|
127
|
+
molecule,
|
|
128
|
+
withdraw(token, rootStore),
|
|
129
|
+
newest(rootStore),
|
|
130
|
+
)
|
|
123
131
|
}) as CtorToolkit<MK<M>>[`bond`],
|
|
124
132
|
claim: (below, options) => {
|
|
125
133
|
const { exclusive } = options
|
|
@@ -54,7 +54,7 @@ export class NotFoundError extends Error {
|
|
|
54
54
|
|
|
55
55
|
if (params.length === 2) {
|
|
56
56
|
super(
|
|
57
|
-
`${prettyPrintTokenType(token)}
|
|
57
|
+
`${prettyPrintTokenType(token)} ${stringifyJson(token.key)} not found in store "${
|
|
58
58
|
store.config.name
|
|
59
59
|
}".`,
|
|
60
60
|
)
|
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
ReadableToken,
|
|
7
7
|
setState,
|
|
8
8
|
SetterToolkit,
|
|
9
|
-
|
|
9
|
+
WritableFamilyToken,
|
|
10
10
|
WritableToken,
|
|
11
11
|
} from "atom.io"
|
|
12
12
|
import type { findState } from "atom.io/ephemeral"
|
|
@@ -30,29 +30,32 @@ export const registerSelector = (
|
|
|
30
30
|
store: Store,
|
|
31
31
|
): SetterToolkit => ({
|
|
32
32
|
get: (
|
|
33
|
-
|
|
34
|
-
| MoleculeFamilyToken<any
|
|
35
|
-
| MoleculeToken<MoleculeConstructor>
|
|
36
|
-
| ReadableFamilyToken<any, any
|
|
37
|
-
| ReadableToken<any
|
|
38
|
-
key?: Json.Serializable,
|
|
33
|
+
...params:
|
|
34
|
+
| [MoleculeFamilyToken<any>, Json.Serializable]
|
|
35
|
+
| [MoleculeToken<MoleculeConstructor>]
|
|
36
|
+
| [ReadableFamilyToken<any, any>, Json.Serializable]
|
|
37
|
+
| [ReadableToken<any>]
|
|
39
38
|
) => {
|
|
40
39
|
const target = newest(store)
|
|
40
|
+
let dependency: MoleculeToken<MoleculeConstructor> | ReadableToken<any>
|
|
41
41
|
|
|
42
|
-
if (
|
|
43
|
-
|
|
42
|
+
if (params.length === 2) {
|
|
43
|
+
const [family, key] = params
|
|
44
|
+
switch (family.type) {
|
|
44
45
|
case `molecule_family`:
|
|
45
|
-
return getFromStore(
|
|
46
|
-
|
|
47
|
-
dependency = seekInStore(
|
|
46
|
+
return getFromStore(family, key, store)
|
|
47
|
+
default:
|
|
48
|
+
dependency = seekInStore(family, key, store) as any
|
|
48
49
|
}
|
|
50
|
+
} else {
|
|
51
|
+
;[dependency] = params
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
if (dependency.type === `molecule`) {
|
|
52
55
|
return getFromStore(dependency, store)
|
|
53
56
|
}
|
|
54
57
|
|
|
55
|
-
const dependencyState = withdraw(dependency
|
|
58
|
+
const dependencyState = withdraw(dependency, store)
|
|
56
59
|
const dependencyValue = readOrComputeValue(dependencyState, store)
|
|
57
60
|
|
|
58
61
|
store.logger.info(
|
|
@@ -79,7 +82,7 @@ export const registerSelector = (
|
|
|
79
82
|
set: (<T, New extends T>(
|
|
80
83
|
...params:
|
|
81
84
|
| [
|
|
82
|
-
token:
|
|
85
|
+
token: WritableFamilyToken<T, any>,
|
|
83
86
|
key: Json.Serializable,
|
|
84
87
|
value: New | ((oldValue: any) => New),
|
|
85
88
|
]
|