atom.io 0.24.8 → 0.25.1
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.cjs +40 -62
- package/data/dist/index.d.ts +3 -3
- package/data/dist/index.js +41 -63
- package/data/src/join.ts +47 -64
- package/dist/index.cjs +26 -8
- package/dist/index.d.ts +37 -15
- package/dist/index.js +27 -9
- package/internal/dist/index.cjs +223 -111
- package/internal/dist/index.d.ts +12 -6
- package/internal/dist/index.js +224 -113
- package/internal/src/families/dispose-from-store.ts +56 -3
- package/internal/src/get-state/get-from-store.ts +58 -25
- package/internal/src/lineage.ts +7 -0
- package/internal/src/molecule/make-molecule-in-store.ts +75 -31
- package/internal/src/not-found-error.ts +29 -6
- package/internal/src/selector/create-writable-selector.ts +5 -5
- package/internal/src/selector/register-selector.ts +58 -9
- package/internal/src/set-state/set-into-store.ts +48 -1
- package/internal/src/store/store.ts +4 -4
- package/internal/src/transaction/build-transaction.ts +10 -9
- package/internal/src/transaction/create-transaction.ts +2 -2
- package/internal/src/transaction/index.ts +2 -2
- package/package.json +5 -5
- package/react/dist/index.cjs +4 -1
- package/react/dist/index.js +5 -2
- package/react/src/use-o.ts +11 -3
- package/realtime/dist/index.cjs +0 -1
- package/realtime/dist/index.js +0 -1
- package/realtime/src/realtime-continuity.ts +0 -1
- package/realtime-server/dist/index.cjs +7 -7
- package/realtime-server/dist/index.js +7 -7
- package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +7 -7
- package/src/dispose-state.ts +32 -3
- package/src/get-state.ts +37 -4
- package/src/molecule.ts +20 -7
- package/src/set-state.ts +19 -2
- package/src/silo.ts +11 -4
- package/src/transaction.ts +9 -17
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) {
|
|
@@ -407,8 +413,6 @@ var abortTransaction = (store) => {
|
|
|
407
413
|
);
|
|
408
414
|
target.parent.child = null;
|
|
409
415
|
};
|
|
410
|
-
|
|
411
|
-
// internal/src/not-found-error.ts
|
|
412
416
|
var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
|
|
413
417
|
function prettyPrintTokenType(token) {
|
|
414
418
|
switch (token.type) {
|
|
@@ -427,10 +431,19 @@ function prettyPrintTokenType(token) {
|
|
|
427
431
|
}
|
|
428
432
|
}
|
|
429
433
|
var NotFoundError = class extends Error {
|
|
430
|
-
constructor(
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
)
|
|
434
|
+
constructor(...params) {
|
|
435
|
+
const token = params[0];
|
|
436
|
+
const store = params.length === 2 ? params[1] : params[2];
|
|
437
|
+
if (params.length === 2) {
|
|
438
|
+
super(
|
|
439
|
+
`${prettyPrintTokenType(token)} ${json.stringifyJson(token.key)} not found in store "${store.config.name}".`
|
|
440
|
+
);
|
|
441
|
+
} else {
|
|
442
|
+
const key = params[1];
|
|
443
|
+
super(
|
|
444
|
+
`${prettyPrintTokenType(token)} "${token.key}" member ${json.stringifyJson(key)} not found in store "${store.config.name}".`
|
|
445
|
+
);
|
|
446
|
+
}
|
|
434
447
|
}
|
|
435
448
|
};
|
|
436
449
|
|
|
@@ -690,41 +703,6 @@ var setAtomOrSelector = (state, value, store) => {
|
|
|
690
703
|
break;
|
|
691
704
|
}
|
|
692
705
|
};
|
|
693
|
-
|
|
694
|
-
// internal/src/set-state/set-into-store.ts
|
|
695
|
-
function setIntoStore(token, value, store) {
|
|
696
|
-
const rejectionTime = openOperation(token, store);
|
|
697
|
-
if (rejectionTime) {
|
|
698
|
-
const unsubscribe = store.on.operationClose.subscribe(
|
|
699
|
-
`waiting to set "${token.key}" at T-${rejectionTime}`,
|
|
700
|
-
() => {
|
|
701
|
-
unsubscribe();
|
|
702
|
-
store.logger.info(
|
|
703
|
-
`\u{1F7E2}`,
|
|
704
|
-
token.type,
|
|
705
|
-
token.key,
|
|
706
|
-
`resuming deferred setState from T-${rejectionTime}`
|
|
707
|
-
);
|
|
708
|
-
setIntoStore(token, value, store);
|
|
709
|
-
}
|
|
710
|
-
);
|
|
711
|
-
return;
|
|
712
|
-
}
|
|
713
|
-
const state = withdraw(token, store);
|
|
714
|
-
setAtomOrSelector(state, value, store);
|
|
715
|
-
closeOperation(store);
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
// internal/src/ingest-updates/ingest-atom-update.ts
|
|
719
|
-
function ingestAtomUpdate(applying, atomUpdate, store) {
|
|
720
|
-
const { key, newValue, oldValue } = atomUpdate;
|
|
721
|
-
const value = applying === `newValue` ? newValue : oldValue;
|
|
722
|
-
const token = { key, type: `atom` };
|
|
723
|
-
if (atomUpdate.family) {
|
|
724
|
-
Object.assign(token, { family: atomUpdate.family });
|
|
725
|
-
}
|
|
726
|
-
setIntoStore(token, value, store);
|
|
727
|
-
}
|
|
728
706
|
function createRegularAtomFamily(options, store) {
|
|
729
707
|
const subject = new Subject();
|
|
730
708
|
const atomFamily = Object.assign(
|
|
@@ -766,17 +744,31 @@ function createAtomFamily(options, store) {
|
|
|
766
744
|
}
|
|
767
745
|
|
|
768
746
|
// internal/src/get-state/get-from-store.ts
|
|
769
|
-
function getFromStore(
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
747
|
+
function getFromStore(...params) {
|
|
748
|
+
let token;
|
|
749
|
+
let store;
|
|
750
|
+
if (params.length === 2) {
|
|
751
|
+
token = params[0];
|
|
752
|
+
store = params[1];
|
|
753
|
+
} else {
|
|
754
|
+
const family = params[0];
|
|
755
|
+
const key = params[1];
|
|
756
|
+
store = params[2];
|
|
757
|
+
const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
|
|
758
|
+
if (!maybeToken) {
|
|
759
|
+
throw new NotFoundError(family, key, store);
|
|
776
760
|
}
|
|
761
|
+
token = maybeToken;
|
|
762
|
+
}
|
|
763
|
+
switch (token.type) {
|
|
764
|
+
case `atom`:
|
|
765
|
+
case `mutable_atom`:
|
|
766
|
+
case `selector`:
|
|
767
|
+
case `readonly_selector`:
|
|
768
|
+
return readOrComputeValue(withdraw(token, store), store);
|
|
769
|
+
case `molecule`:
|
|
770
|
+
return withdraw(token, store).instance;
|
|
777
771
|
}
|
|
778
|
-
const state = withdraw(token, store);
|
|
779
|
-
return readOrComputeValue(state, store);
|
|
780
772
|
}
|
|
781
773
|
|
|
782
774
|
// internal/src/keys.ts
|
|
@@ -857,8 +849,16 @@ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
|
|
|
857
849
|
|
|
858
850
|
// internal/src/selector/register-selector.ts
|
|
859
851
|
var registerSelector = (selectorKey, covered, store) => ({
|
|
860
|
-
get: (dependency) => {
|
|
852
|
+
get: (dependency, key) => {
|
|
861
853
|
const target = newest(store);
|
|
854
|
+
if (key) {
|
|
855
|
+
switch (dependency.type) {
|
|
856
|
+
case `molecule_family`:
|
|
857
|
+
return getFromStore(dependency, key, store);
|
|
858
|
+
case `atom_family`:
|
|
859
|
+
dependency = seekInStore(dependency, key, store);
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
862
|
if (dependency.type === `molecule`) {
|
|
863
863
|
return getFromStore(dependency, store);
|
|
864
864
|
}
|
|
@@ -884,10 +884,25 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
884
884
|
updateSelectorAtoms(selectorKey, dependency, covered, store);
|
|
885
885
|
return dependencyValue;
|
|
886
886
|
},
|
|
887
|
-
set: (
|
|
887
|
+
set: (...params) => {
|
|
888
|
+
let token;
|
|
889
|
+
let value;
|
|
890
|
+
if (params.length === 2) {
|
|
891
|
+
token = params[0];
|
|
892
|
+
value = params[1];
|
|
893
|
+
} else {
|
|
894
|
+
const family = params[0];
|
|
895
|
+
const key = params[1];
|
|
896
|
+
value = params[2];
|
|
897
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
|
|
898
|
+
if (!maybeToken) {
|
|
899
|
+
throw new NotFoundError(family, key, store);
|
|
900
|
+
}
|
|
901
|
+
token = maybeToken;
|
|
902
|
+
}
|
|
888
903
|
const target = newest(store);
|
|
889
|
-
const state = withdraw(
|
|
890
|
-
setAtomOrSelector(state,
|
|
904
|
+
const state = withdraw(token, target);
|
|
905
|
+
setAtomOrSelector(state, value, target);
|
|
891
906
|
},
|
|
892
907
|
find: (token, key) => findInStore(token, key, store),
|
|
893
908
|
seek: (token, key) => seekInStore(token, key, store),
|
|
@@ -940,11 +955,11 @@ var createWritableSelector = (options, family, store) => {
|
|
|
940
955
|
const target = newest(store);
|
|
941
956
|
const subject = new Subject();
|
|
942
957
|
const covered = /* @__PURE__ */ new Set();
|
|
943
|
-
const
|
|
944
|
-
const { find, get, seek, json } =
|
|
945
|
-
const
|
|
958
|
+
const toolkit = registerSelector(options.key, covered, target);
|
|
959
|
+
const { find, get, seek, json } = toolkit;
|
|
960
|
+
const getterToolkit = { find, get, seek, json };
|
|
946
961
|
const getSelf = (innerTarget = newest(store)) => {
|
|
947
|
-
const value = options.get(
|
|
962
|
+
const value = options.get(getterToolkit);
|
|
948
963
|
cacheValue(options.key, value, subject, innerTarget);
|
|
949
964
|
covered.clear();
|
|
950
965
|
return value;
|
|
@@ -968,7 +983,7 @@ var createWritableSelector = (options, family, store) => {
|
|
|
968
983
|
if (isRootStore(innerTarget)) {
|
|
969
984
|
subject.next({ newValue, oldValue });
|
|
970
985
|
}
|
|
971
|
-
options.set(
|
|
986
|
+
options.set(toolkit, newValue);
|
|
972
987
|
};
|
|
973
988
|
const mySelector = __spreadValues(__spreadProps(__spreadValues({}, options), {
|
|
974
989
|
subject,
|
|
@@ -1222,23 +1237,6 @@ function disposeMolecule(token, store) {
|
|
|
1222
1237
|
}
|
|
1223
1238
|
}
|
|
1224
1239
|
|
|
1225
|
-
// internal/src/families/dispose-from-store.ts
|
|
1226
|
-
function disposeFromStore(token, store = IMPLICIT.STORE) {
|
|
1227
|
-
switch (token.type) {
|
|
1228
|
-
case `atom`:
|
|
1229
|
-
case `mutable_atom`:
|
|
1230
|
-
disposeAtom(token, store);
|
|
1231
|
-
break;
|
|
1232
|
-
case `selector`:
|
|
1233
|
-
case `readonly_selector`:
|
|
1234
|
-
disposeSelector(token, store);
|
|
1235
|
-
break;
|
|
1236
|
-
case `molecule`:
|
|
1237
|
-
disposeMolecule(token, store);
|
|
1238
|
-
break;
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
|
|
1242
1240
|
// internal/src/families/init-family-member.ts
|
|
1243
1241
|
function initFamilyMemberInStore(token, key, store) {
|
|
1244
1242
|
const familyKey = token.key;
|
|
@@ -1312,6 +1310,91 @@ function findInStore(token, key, store) {
|
|
|
1312
1310
|
return state;
|
|
1313
1311
|
}
|
|
1314
1312
|
|
|
1313
|
+
// internal/src/families/dispose-from-store.ts
|
|
1314
|
+
function disposeFromStore(...params) {
|
|
1315
|
+
let token;
|
|
1316
|
+
let store;
|
|
1317
|
+
if (params.length === 2) {
|
|
1318
|
+
token = params[0];
|
|
1319
|
+
store = params[1];
|
|
1320
|
+
} else {
|
|
1321
|
+
const family = params[0];
|
|
1322
|
+
const key = params[1];
|
|
1323
|
+
store = params[2];
|
|
1324
|
+
const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
|
|
1325
|
+
if (!maybeToken) {
|
|
1326
|
+
throw new NotFoundError(family, key, store);
|
|
1327
|
+
}
|
|
1328
|
+
token = maybeToken;
|
|
1329
|
+
}
|
|
1330
|
+
switch (token.type) {
|
|
1331
|
+
case `atom`:
|
|
1332
|
+
case `mutable_atom`:
|
|
1333
|
+
disposeAtom(token, store);
|
|
1334
|
+
break;
|
|
1335
|
+
case `selector`:
|
|
1336
|
+
case `readonly_selector`:
|
|
1337
|
+
disposeSelector(token, store);
|
|
1338
|
+
break;
|
|
1339
|
+
case `molecule`:
|
|
1340
|
+
disposeMolecule(token, store);
|
|
1341
|
+
break;
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
// internal/src/set-state/set-into-store.ts
|
|
1346
|
+
function setIntoStore(...params) {
|
|
1347
|
+
let token;
|
|
1348
|
+
let value;
|
|
1349
|
+
let store;
|
|
1350
|
+
if (params.length === 3) {
|
|
1351
|
+
token = params[0];
|
|
1352
|
+
value = params[1];
|
|
1353
|
+
store = params[2];
|
|
1354
|
+
} else {
|
|
1355
|
+
const family = params[0];
|
|
1356
|
+
const key = params[1];
|
|
1357
|
+
value = params[2];
|
|
1358
|
+
store = params[3];
|
|
1359
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
|
|
1360
|
+
if (!maybeToken) {
|
|
1361
|
+
throw new NotFoundError(family, key, store);
|
|
1362
|
+
}
|
|
1363
|
+
token = maybeToken;
|
|
1364
|
+
}
|
|
1365
|
+
const rejectionTime = openOperation(token, store);
|
|
1366
|
+
if (rejectionTime) {
|
|
1367
|
+
const unsubscribe = store.on.operationClose.subscribe(
|
|
1368
|
+
`waiting to set "${token.key}" at T-${rejectionTime}`,
|
|
1369
|
+
() => {
|
|
1370
|
+
unsubscribe();
|
|
1371
|
+
store.logger.info(
|
|
1372
|
+
`\u{1F7E2}`,
|
|
1373
|
+
token.type,
|
|
1374
|
+
token.key,
|
|
1375
|
+
`resuming deferred setState from T-${rejectionTime}`
|
|
1376
|
+
);
|
|
1377
|
+
setIntoStore(token, value, store);
|
|
1378
|
+
}
|
|
1379
|
+
);
|
|
1380
|
+
return;
|
|
1381
|
+
}
|
|
1382
|
+
const state = withdraw(token, store);
|
|
1383
|
+
setAtomOrSelector(state, value, store);
|
|
1384
|
+
closeOperation(store);
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
// internal/src/ingest-updates/ingest-atom-update.ts
|
|
1388
|
+
function ingestAtomUpdate(applying, atomUpdate, store) {
|
|
1389
|
+
const { key, newValue, oldValue } = atomUpdate;
|
|
1390
|
+
const value = applying === `newValue` ? newValue : oldValue;
|
|
1391
|
+
const token = { key, type: `atom` };
|
|
1392
|
+
if (atomUpdate.family) {
|
|
1393
|
+
Object.assign(token, { family: atomUpdate.family });
|
|
1394
|
+
}
|
|
1395
|
+
setIntoStore(token, value, store);
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1315
1398
|
// internal/src/molecule/create-molecule-family.ts
|
|
1316
1399
|
function createMoleculeFamily(options, store) {
|
|
1317
1400
|
var _a;
|
|
@@ -1373,46 +1456,80 @@ var Molecule = class {
|
|
|
1373
1456
|
};
|
|
1374
1457
|
|
|
1375
1458
|
// internal/src/molecule/make-molecule-in-store.ts
|
|
1459
|
+
function capitalize2(string) {
|
|
1460
|
+
return string[0].toUpperCase() + string.slice(1);
|
|
1461
|
+
}
|
|
1376
1462
|
function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
1463
|
+
const rootStore = eldest(store);
|
|
1377
1464
|
const target = newest(store);
|
|
1378
|
-
|
|
1465
|
+
const stringKey = json.stringifyJson(key);
|
|
1466
|
+
target.moleculeInProgress = stringKey;
|
|
1379
1467
|
const contextArray = Array.isArray(context) ? context : [context];
|
|
1380
1468
|
const owners = contextArray.map((ctx) => {
|
|
1381
1469
|
if (ctx instanceof Molecule) {
|
|
1382
1470
|
return ctx;
|
|
1383
1471
|
}
|
|
1384
|
-
const
|
|
1385
|
-
const molecule2 = store.molecules.get(
|
|
1472
|
+
const ctxStringKey = json.stringifyJson(ctx.key);
|
|
1473
|
+
const molecule2 = store.molecules.get(ctxStringKey);
|
|
1386
1474
|
if (!molecule2) {
|
|
1387
1475
|
throw new Error(
|
|
1388
|
-
`Molecule ${
|
|
1476
|
+
`Molecule ${ctxStringKey} not found in store "${store.config.name}"`
|
|
1389
1477
|
);
|
|
1390
1478
|
}
|
|
1391
1479
|
return molecule2;
|
|
1392
1480
|
});
|
|
1393
1481
|
const molecule = new Molecule(owners, key, familyToken);
|
|
1394
|
-
target.molecules.set(
|
|
1482
|
+
target.molecules.set(stringKey, molecule);
|
|
1395
1483
|
for (const owner of owners) {
|
|
1396
1484
|
owner.below.set(molecule.stringKey, molecule);
|
|
1397
1485
|
}
|
|
1398
|
-
const
|
|
1399
|
-
get: (
|
|
1400
|
-
set: (
|
|
1401
|
-
setIntoStore(
|
|
1486
|
+
const toolkit = {
|
|
1487
|
+
get: (...ps) => getFromStore(...ps, newest(rootStore)),
|
|
1488
|
+
set: (...ps) => {
|
|
1489
|
+
setIntoStore(...ps, newest(rootStore));
|
|
1402
1490
|
},
|
|
1403
|
-
seek: (t, k) => seekInStore(t, k, newest(
|
|
1404
|
-
json: (t) => getJsonToken(t, newest(
|
|
1491
|
+
seek: (t, k) => seekInStore(t, k, newest(rootStore)),
|
|
1492
|
+
json: (t) => getJsonToken(t, newest(rootStore)),
|
|
1405
1493
|
run: (t, i = arbitrary()) => actUponStore(t, i, newest(store)),
|
|
1406
|
-
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(
|
|
1494
|
+
make: (ctx, f, k, ...args) => makeMoleculeInStore(newest(rootStore), ctx, f, k, ...args),
|
|
1407
1495
|
dispose: (t) => {
|
|
1408
|
-
disposeFromStore(t, newest(
|
|
1496
|
+
disposeFromStore(t, newest(rootStore));
|
|
1497
|
+
},
|
|
1498
|
+
env: () => getEnvironmentData(newest(rootStore)),
|
|
1499
|
+
bond: (token2, maybeRole) => {
|
|
1500
|
+
if (token2.type === `join`) {
|
|
1501
|
+
const { as: role } = maybeRole;
|
|
1502
|
+
const join = data.getJoin(token2, rootStore);
|
|
1503
|
+
join.molecules.set(stringKey, molecule);
|
|
1504
|
+
molecule.joins.set(token2.key, join);
|
|
1505
|
+
const unsubFromFamily = family.subject.subscribe(
|
|
1506
|
+
`join:${token2.key}-${stringKey}`,
|
|
1507
|
+
(event) => {
|
|
1508
|
+
if (event.type === `molecule_disposal` && json.stringifyJson(event.token.key) === stringKey) {
|
|
1509
|
+
unsubFromFamily();
|
|
1510
|
+
join.molecules.delete(stringKey);
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1513
|
+
);
|
|
1514
|
+
if (role === null) {
|
|
1515
|
+
return;
|
|
1516
|
+
}
|
|
1517
|
+
const otherRole = token2.a === role ? token2.b : token2.a;
|
|
1518
|
+
const relations = data.findRelations(token2, key);
|
|
1519
|
+
const relatedKeys = relations[`${otherRole}KeysOf${capitalize2(role)}`];
|
|
1520
|
+
const relatedEntries = relations[`${otherRole}EntriesOf${capitalize2(role)}`];
|
|
1521
|
+
let tokens = { relatedKeys };
|
|
1522
|
+
if (relatedEntries) {
|
|
1523
|
+
tokens = Object.assign(tokens, { relatedEntries });
|
|
1524
|
+
}
|
|
1525
|
+
return tokens;
|
|
1526
|
+
}
|
|
1527
|
+
return growMoleculeInStore(
|
|
1528
|
+
molecule,
|
|
1529
|
+
withdraw(token2, rootStore),
|
|
1530
|
+
newest(rootStore)
|
|
1531
|
+
);
|
|
1409
1532
|
},
|
|
1410
|
-
env: () => getEnvironmentData(newest(store)),
|
|
1411
|
-
bond: (f) => growMoleculeInStore(
|
|
1412
|
-
molecule,
|
|
1413
|
-
withdraw(f, store),
|
|
1414
|
-
newest(store)
|
|
1415
|
-
),
|
|
1416
1533
|
claim: (below, options) => {
|
|
1417
1534
|
const { exclusive } = options;
|
|
1418
1535
|
const belowMolecule = newest(store).molecules.get(json.stringifyJson(below.key));
|
|
@@ -1430,12 +1547,6 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1430
1547
|
}
|
|
1431
1548
|
}
|
|
1432
1549
|
},
|
|
1433
|
-
join: (joinToken) => {
|
|
1434
|
-
const join = data.getJoin(joinToken, store);
|
|
1435
|
-
join.molecules.set(json.stringifyJson(key), molecule);
|
|
1436
|
-
molecule.joins.set(joinToken.key, join);
|
|
1437
|
-
return joinToken;
|
|
1438
|
-
},
|
|
1439
1550
|
spawn: (f, k, ...p) => makeMoleculeInStore(
|
|
1440
1551
|
newest(store),
|
|
1441
1552
|
[molecule],
|
|
@@ -1446,7 +1557,7 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1446
1557
|
};
|
|
1447
1558
|
const family = withdraw(familyToken, store);
|
|
1448
1559
|
const Constructor = family.new;
|
|
1449
|
-
molecule.instance = new Constructor(
|
|
1560
|
+
molecule.instance = new Constructor(toolkit, key, ...params);
|
|
1450
1561
|
const token = {
|
|
1451
1562
|
type: `molecule`,
|
|
1452
1563
|
key,
|
|
@@ -1747,18 +1858,18 @@ var buildTransaction = (key, params, store, id) => {
|
|
|
1747
1858
|
params,
|
|
1748
1859
|
output: void 0
|
|
1749
1860
|
},
|
|
1750
|
-
|
|
1751
|
-
get: (
|
|
1752
|
-
set: (
|
|
1753
|
-
setIntoStore(
|
|
1861
|
+
toolkit: {
|
|
1862
|
+
get: (...ps) => getFromStore(...ps, child),
|
|
1863
|
+
set: (...ps) => {
|
|
1864
|
+
setIntoStore(...ps, child);
|
|
1754
1865
|
},
|
|
1755
1866
|
run: (token, identifier = arbitrary()) => actUponStore(token, identifier, child),
|
|
1756
1867
|
find: (token, k) => findInStore(token, k, child),
|
|
1757
1868
|
seek: (token, k) => seekInStore(token, k, child),
|
|
1758
1869
|
json: (token) => getJsonToken(token, child),
|
|
1759
1870
|
make: (context, family, k, ...args) => makeMoleculeInStore(child, context, family, k, ...args),
|
|
1760
|
-
dispose: (
|
|
1761
|
-
disposeFromStore(
|
|
1871
|
+
dispose: (...ps) => {
|
|
1872
|
+
disposeFromStore(...ps, child);
|
|
1762
1873
|
},
|
|
1763
1874
|
env: () => getEnvironmentData(child)
|
|
1764
1875
|
}
|
|
@@ -1786,8 +1897,8 @@ function createTransaction(options, store) {
|
|
|
1786
1897
|
const childStore = buildTransaction(options.key, params, store, id);
|
|
1787
1898
|
try {
|
|
1788
1899
|
const target2 = newest(store);
|
|
1789
|
-
const {
|
|
1790
|
-
const output = options.do(
|
|
1900
|
+
const { toolkit } = childStore.transactionMeta;
|
|
1901
|
+
const output = options.do(toolkit, ...params);
|
|
1791
1902
|
applyTransaction(output, target2);
|
|
1792
1903
|
return output;
|
|
1793
1904
|
} catch (thrown) {
|
|
@@ -1903,6 +2014,7 @@ var Store = class {
|
|
|
1903
2014
|
for (const logger of this.loggers) logger.warn(...messages);
|
|
1904
2015
|
}
|
|
1905
2016
|
};
|
|
2017
|
+
this.config = __spreadValues(__spreadValues({}, store == null ? void 0 : store.config), config);
|
|
1906
2018
|
if (store !== null) {
|
|
1907
2019
|
this.valueMap = new Map(store == null ? void 0 : store.valueMap);
|
|
1908
2020
|
this.operation = __spreadValues({}, store == null ? void 0 : store.operation);
|
|
@@ -1914,7 +2026,6 @@ var Store = class {
|
|
|
1914
2026
|
)
|
|
1915
2027
|
};
|
|
1916
2028
|
}
|
|
1917
|
-
this.config = __spreadValues(__spreadValues({}, store == null ? void 0 : store.config), config);
|
|
1918
2029
|
for (const [, family] of store.families) {
|
|
1919
2030
|
family.install(this);
|
|
1920
2031
|
}
|
|
@@ -3224,6 +3335,7 @@ exports.disposeAtom = disposeAtom;
|
|
|
3224
3335
|
exports.disposeFromStore = disposeFromStore;
|
|
3225
3336
|
exports.disposeMolecule = disposeMolecule;
|
|
3226
3337
|
exports.disposeSelector = disposeSelector;
|
|
3338
|
+
exports.eldest = eldest;
|
|
3227
3339
|
exports.evictCachedValue = evictCachedValue;
|
|
3228
3340
|
exports.findInStore = findInStore;
|
|
3229
3341
|
exports.getContinuityKey = getContinuityKey;
|
package/internal/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as atom_io from 'atom.io';
|
|
2
|
-
import { Func, TransactionToken, TransactionUpdate, TransactionOptions,
|
|
2
|
+
import { Func, TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, RegularAtomToken, MutableAtomToken, AtomToken, WritableSelectorToken, ReadonlySelectorToken, SelectorToken, WritableToken, MoleculeToken, MoleculeFamily, MoleculeFamilyToken, ReadableToken, TimelineManageable, Flat, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeConstructor, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, WritableSelectorFamily, MutableAtomFamily, RegularAtomFamily, ReadonlySelectorFamily, AtomIOLogger, Logger, AtomFamily, ReadableFamily, SelectorFamily, WritableFamily, RegularAtomFamilyToken, MutableAtomFamilyToken, AtomFamilyToken, ReadonlySelectorFamilyToken, WritableSelectorFamilyToken, SelectorFamilyToken, ReadableFamilyToken, WritableFamilyToken, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, MoleculeKey, KeyedStateUpdate, MoleculeFamilyOptions, MK, MoleculeParams, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
|
|
3
3
|
import { Json, JsonInterface } from 'atom.io/json';
|
|
4
4
|
import { Join } from 'atom.io/data';
|
|
5
5
|
|
|
@@ -134,7 +134,7 @@ type TransactionPhase = (typeof TRANSACTION_PHASES)[number];
|
|
|
134
134
|
type TransactionProgress<F extends Func> = {
|
|
135
135
|
phase: `applying` | `building`;
|
|
136
136
|
update: TransactionUpdate<F>;
|
|
137
|
-
|
|
137
|
+
toolkit: ActorToolkit;
|
|
138
138
|
};
|
|
139
139
|
type TransactionEpoch = {
|
|
140
140
|
epoch: Map<string, number>;
|
|
@@ -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;
|
|
@@ -397,7 +398,9 @@ declare function createRegularAtomFamily<T, K extends Json.Serializable>(options
|
|
|
397
398
|
declare function createSelectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>, store: Store): WritableSelectorFamily<T, K>;
|
|
398
399
|
declare function createSelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store: Store): ReadonlySelectorFamily<T, K>;
|
|
399
400
|
|
|
400
|
-
declare function disposeFromStore(token: MoleculeToken<any> | ReadableToken<any>, store
|
|
401
|
+
declare function disposeFromStore(token: MoleculeToken<any> | ReadableToken<any>, store: Store): void;
|
|
402
|
+
declare function disposeFromStore<K extends Json.Serializable>(token: ReadableFamilyToken<any, K>, key: K, store: Store): void;
|
|
403
|
+
declare function disposeFromStore<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>, store: Store): void;
|
|
401
404
|
|
|
402
405
|
declare function findInStore<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key, store: Store): MutableAtomToken<T, J>;
|
|
403
406
|
declare function findInStore<T, K extends Json.Serializable, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key, store: Store): RegularAtomToken<T>;
|
|
@@ -434,7 +437,8 @@ declare function getEnvironmentData(store: Store): EnvironmentData;
|
|
|
434
437
|
|
|
435
438
|
declare function getFromStore<T>(token: ReadableToken<T>, store: Store): T;
|
|
436
439
|
declare function getFromStore<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): InstanceType<M> | undefined;
|
|
437
|
-
declare function getFromStore<T,
|
|
440
|
+
declare function getFromStore<T, K extends Json.Serializable>(token: ReadableFamilyToken<T, K>, key: K, store: Store): T;
|
|
441
|
+
declare function getFromStore<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>, store: Store): InstanceType<M>;
|
|
438
442
|
|
|
439
443
|
declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
|
|
440
444
|
|
|
@@ -510,6 +514,7 @@ declare function makeMoleculeInStore<M extends MoleculeConstructor>(store: Store
|
|
|
510
514
|
type AtomIOToken = MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
|
|
511
515
|
declare class NotFoundError extends Error {
|
|
512
516
|
constructor(token: AtomIOToken, store: Store);
|
|
517
|
+
constructor(familyToken: AtomIOToken, key: Json.Serializable, store: Store);
|
|
513
518
|
}
|
|
514
519
|
|
|
515
520
|
declare const createReadonlySelector: <T>(options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined, store: Store) => ReadonlySelectorToken<T>;
|
|
@@ -523,7 +528,7 @@ declare function disposeSelector(selectorToken: ReadonlySelectorToken<unknown> |
|
|
|
523
528
|
|
|
524
529
|
declare const getSelectorDependencyKeys: (key: string, store: Store) => (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[];
|
|
525
530
|
|
|
526
|
-
declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) =>
|
|
531
|
+
declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) => SetterToolkit;
|
|
527
532
|
|
|
528
533
|
declare const traceSelectorAtoms: (directDependencyKey: StateKey<unknown>, covered: Set<string>, store: Store) => AtomKey<unknown>[];
|
|
529
534
|
declare const traceAllSelectorAtoms: (selector: Selector<any>, store: Store) => AtomKey<unknown>[];
|
|
@@ -536,6 +541,7 @@ declare const become: <T>(nextVersionOfThing: Modify<T> | T) => (originalThing:
|
|
|
536
541
|
declare const setAtomOrSelector: <T>(state: WritableState<T>, value: T | ((oldValue: T) => T), store: Store) => void;
|
|
537
542
|
|
|
538
543
|
declare function setIntoStore<T, New extends T>(token: WritableToken<T>, value: New | ((oldValue: T) => New), store: Store): void;
|
|
544
|
+
declare function setIntoStore<T, K extends Json.Serializable, New extends T>(token: WritableFamilyToken<T, K>, key: K, value: New | ((oldValue: T) => New), store: Store): void;
|
|
539
545
|
|
|
540
546
|
declare const subscribeToRootAtoms: <T>(selector: Selector<T>, store: Store) => (() => void)[];
|
|
541
547
|
|
|
@@ -578,4 +584,4 @@ type Selector<T> = ReadonlySelector<T> | WritableSelector<T>;
|
|
|
578
584
|
type WritableState<T> = Atom<T> | WritableSelector<T>;
|
|
579
585
|
type ReadableState<T> = Atom<T> | Selector<T>;
|
|
580
586
|
|
|
581
|
-
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 };
|