atom.io 0.24.8 → 0.25.0
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 +204 -104
- package/internal/dist/index.d.ts +10 -5
- package/internal/dist/index.js +205 -105
- package/internal/src/families/dispose-from-store.ts +56 -3
- package/internal/src/get-state/get-from-store.ts +58 -25
- package/internal/src/molecule/make-molecule-in-store.ts +59 -23
- 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
|
@@ -407,8 +407,6 @@ var abortTransaction = (store) => {
|
|
|
407
407
|
);
|
|
408
408
|
target.parent.child = null;
|
|
409
409
|
};
|
|
410
|
-
|
|
411
|
-
// internal/src/not-found-error.ts
|
|
412
410
|
var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
|
|
413
411
|
function prettyPrintTokenType(token) {
|
|
414
412
|
switch (token.type) {
|
|
@@ -427,10 +425,19 @@ function prettyPrintTokenType(token) {
|
|
|
427
425
|
}
|
|
428
426
|
}
|
|
429
427
|
var NotFoundError = class extends Error {
|
|
430
|
-
constructor(
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
)
|
|
428
|
+
constructor(...params) {
|
|
429
|
+
const token = params[0];
|
|
430
|
+
const store = params.length === 2 ? params[1] : params[2];
|
|
431
|
+
if (params.length === 2) {
|
|
432
|
+
super(
|
|
433
|
+
`${prettyPrintTokenType(token)} "${token.key}" not found in store "${store.config.name}".`
|
|
434
|
+
);
|
|
435
|
+
} else {
|
|
436
|
+
const key = params[1];
|
|
437
|
+
super(
|
|
438
|
+
`${prettyPrintTokenType(token)} "${token.key}" member ${json.stringifyJson(key)} not found in store "${store.config.name}".`
|
|
439
|
+
);
|
|
440
|
+
}
|
|
434
441
|
}
|
|
435
442
|
};
|
|
436
443
|
|
|
@@ -690,41 +697,6 @@ var setAtomOrSelector = (state, value, store) => {
|
|
|
690
697
|
break;
|
|
691
698
|
}
|
|
692
699
|
};
|
|
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
700
|
function createRegularAtomFamily(options, store) {
|
|
729
701
|
const subject = new Subject();
|
|
730
702
|
const atomFamily = Object.assign(
|
|
@@ -766,17 +738,31 @@ function createAtomFamily(options, store) {
|
|
|
766
738
|
}
|
|
767
739
|
|
|
768
740
|
// internal/src/get-state/get-from-store.ts
|
|
769
|
-
function getFromStore(
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
741
|
+
function getFromStore(...params) {
|
|
742
|
+
let token;
|
|
743
|
+
let store;
|
|
744
|
+
if (params.length === 2) {
|
|
745
|
+
token = params[0];
|
|
746
|
+
store = params[1];
|
|
747
|
+
} else {
|
|
748
|
+
const family = params[0];
|
|
749
|
+
const key = params[1];
|
|
750
|
+
store = params[2];
|
|
751
|
+
const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
|
|
752
|
+
if (!maybeToken) {
|
|
753
|
+
throw new NotFoundError(family, key, store);
|
|
776
754
|
}
|
|
755
|
+
token = maybeToken;
|
|
756
|
+
}
|
|
757
|
+
switch (token.type) {
|
|
758
|
+
case `atom`:
|
|
759
|
+
case `mutable_atom`:
|
|
760
|
+
case `selector`:
|
|
761
|
+
case `readonly_selector`:
|
|
762
|
+
return readOrComputeValue(withdraw(token, store), store);
|
|
763
|
+
case `molecule`:
|
|
764
|
+
return withdraw(token, store).instance;
|
|
777
765
|
}
|
|
778
|
-
const state = withdraw(token, store);
|
|
779
|
-
return readOrComputeValue(state, store);
|
|
780
766
|
}
|
|
781
767
|
|
|
782
768
|
// internal/src/keys.ts
|
|
@@ -857,8 +843,16 @@ var updateSelectorAtoms = (selectorKey, dependency, covered, store) => {
|
|
|
857
843
|
|
|
858
844
|
// internal/src/selector/register-selector.ts
|
|
859
845
|
var registerSelector = (selectorKey, covered, store) => ({
|
|
860
|
-
get: (dependency) => {
|
|
846
|
+
get: (dependency, key) => {
|
|
861
847
|
const target = newest(store);
|
|
848
|
+
if (key) {
|
|
849
|
+
switch (dependency.type) {
|
|
850
|
+
case `molecule_family`:
|
|
851
|
+
return getFromStore(dependency, key, store);
|
|
852
|
+
case `atom_family`:
|
|
853
|
+
dependency = seekInStore(dependency, key, store);
|
|
854
|
+
}
|
|
855
|
+
}
|
|
862
856
|
if (dependency.type === `molecule`) {
|
|
863
857
|
return getFromStore(dependency, store);
|
|
864
858
|
}
|
|
@@ -884,10 +878,25 @@ var registerSelector = (selectorKey, covered, store) => ({
|
|
|
884
878
|
updateSelectorAtoms(selectorKey, dependency, covered, store);
|
|
885
879
|
return dependencyValue;
|
|
886
880
|
},
|
|
887
|
-
set: (
|
|
881
|
+
set: (...params) => {
|
|
882
|
+
let token;
|
|
883
|
+
let value;
|
|
884
|
+
if (params.length === 2) {
|
|
885
|
+
token = params[0];
|
|
886
|
+
value = params[1];
|
|
887
|
+
} else {
|
|
888
|
+
const family = params[0];
|
|
889
|
+
const key = params[1];
|
|
890
|
+
value = params[2];
|
|
891
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
|
|
892
|
+
if (!maybeToken) {
|
|
893
|
+
throw new NotFoundError(family, key, store);
|
|
894
|
+
}
|
|
895
|
+
token = maybeToken;
|
|
896
|
+
}
|
|
888
897
|
const target = newest(store);
|
|
889
|
-
const state = withdraw(
|
|
890
|
-
setAtomOrSelector(state,
|
|
898
|
+
const state = withdraw(token, target);
|
|
899
|
+
setAtomOrSelector(state, value, target);
|
|
891
900
|
},
|
|
892
901
|
find: (token, key) => findInStore(token, key, store),
|
|
893
902
|
seek: (token, key) => seekInStore(token, key, store),
|
|
@@ -940,11 +949,11 @@ var createWritableSelector = (options, family, store) => {
|
|
|
940
949
|
const target = newest(store);
|
|
941
950
|
const subject = new Subject();
|
|
942
951
|
const covered = /* @__PURE__ */ new Set();
|
|
943
|
-
const
|
|
944
|
-
const { find, get, seek, json } =
|
|
945
|
-
const
|
|
952
|
+
const toolkit = registerSelector(options.key, covered, target);
|
|
953
|
+
const { find, get, seek, json } = toolkit;
|
|
954
|
+
const getterToolkit = { find, get, seek, json };
|
|
946
955
|
const getSelf = (innerTarget = newest(store)) => {
|
|
947
|
-
const value = options.get(
|
|
956
|
+
const value = options.get(getterToolkit);
|
|
948
957
|
cacheValue(options.key, value, subject, innerTarget);
|
|
949
958
|
covered.clear();
|
|
950
959
|
return value;
|
|
@@ -968,7 +977,7 @@ var createWritableSelector = (options, family, store) => {
|
|
|
968
977
|
if (isRootStore(innerTarget)) {
|
|
969
978
|
subject.next({ newValue, oldValue });
|
|
970
979
|
}
|
|
971
|
-
options.set(
|
|
980
|
+
options.set(toolkit, newValue);
|
|
972
981
|
};
|
|
973
982
|
const mySelector = __spreadValues(__spreadProps(__spreadValues({}, options), {
|
|
974
983
|
subject,
|
|
@@ -1222,23 +1231,6 @@ function disposeMolecule(token, store) {
|
|
|
1222
1231
|
}
|
|
1223
1232
|
}
|
|
1224
1233
|
|
|
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
1234
|
// internal/src/families/init-family-member.ts
|
|
1243
1235
|
function initFamilyMemberInStore(token, key, store) {
|
|
1244
1236
|
const familyKey = token.key;
|
|
@@ -1312,6 +1304,91 @@ function findInStore(token, key, store) {
|
|
|
1312
1304
|
return state;
|
|
1313
1305
|
}
|
|
1314
1306
|
|
|
1307
|
+
// internal/src/families/dispose-from-store.ts
|
|
1308
|
+
function disposeFromStore(...params) {
|
|
1309
|
+
let token;
|
|
1310
|
+
let store;
|
|
1311
|
+
if (params.length === 2) {
|
|
1312
|
+
token = params[0];
|
|
1313
|
+
store = params[1];
|
|
1314
|
+
} else {
|
|
1315
|
+
const family = params[0];
|
|
1316
|
+
const key = params[1];
|
|
1317
|
+
store = params[2];
|
|
1318
|
+
const maybeToken = family.type === `molecule_family` ? seekInStore(family, key, store) : store.config.lifespan === `immortal` ? seekInStore(family, key, store) : findInStore(family, key, store);
|
|
1319
|
+
if (!maybeToken) {
|
|
1320
|
+
throw new NotFoundError(family, key, store);
|
|
1321
|
+
}
|
|
1322
|
+
token = maybeToken;
|
|
1323
|
+
}
|
|
1324
|
+
switch (token.type) {
|
|
1325
|
+
case `atom`:
|
|
1326
|
+
case `mutable_atom`:
|
|
1327
|
+
disposeAtom(token, store);
|
|
1328
|
+
break;
|
|
1329
|
+
case `selector`:
|
|
1330
|
+
case `readonly_selector`:
|
|
1331
|
+
disposeSelector(token, store);
|
|
1332
|
+
break;
|
|
1333
|
+
case `molecule`:
|
|
1334
|
+
disposeMolecule(token, store);
|
|
1335
|
+
break;
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
// internal/src/set-state/set-into-store.ts
|
|
1340
|
+
function setIntoStore(...params) {
|
|
1341
|
+
let token;
|
|
1342
|
+
let value;
|
|
1343
|
+
let store;
|
|
1344
|
+
if (params.length === 3) {
|
|
1345
|
+
token = params[0];
|
|
1346
|
+
value = params[1];
|
|
1347
|
+
store = params[2];
|
|
1348
|
+
} else {
|
|
1349
|
+
const family = params[0];
|
|
1350
|
+
const key = params[1];
|
|
1351
|
+
value = params[2];
|
|
1352
|
+
store = params[3];
|
|
1353
|
+
const maybeToken = store.config.lifespan === `ephemeral` ? findInStore(family, key, store) : seekInStore(family, key, store);
|
|
1354
|
+
if (!maybeToken) {
|
|
1355
|
+
throw new NotFoundError(family, key, store);
|
|
1356
|
+
}
|
|
1357
|
+
token = maybeToken;
|
|
1358
|
+
}
|
|
1359
|
+
const rejectionTime = openOperation(token, store);
|
|
1360
|
+
if (rejectionTime) {
|
|
1361
|
+
const unsubscribe = store.on.operationClose.subscribe(
|
|
1362
|
+
`waiting to set "${token.key}" at T-${rejectionTime}`,
|
|
1363
|
+
() => {
|
|
1364
|
+
unsubscribe();
|
|
1365
|
+
store.logger.info(
|
|
1366
|
+
`\u{1F7E2}`,
|
|
1367
|
+
token.type,
|
|
1368
|
+
token.key,
|
|
1369
|
+
`resuming deferred setState from T-${rejectionTime}`
|
|
1370
|
+
);
|
|
1371
|
+
setIntoStore(token, value, store);
|
|
1372
|
+
}
|
|
1373
|
+
);
|
|
1374
|
+
return;
|
|
1375
|
+
}
|
|
1376
|
+
const state = withdraw(token, store);
|
|
1377
|
+
setAtomOrSelector(state, value, store);
|
|
1378
|
+
closeOperation(store);
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
// internal/src/ingest-updates/ingest-atom-update.ts
|
|
1382
|
+
function ingestAtomUpdate(applying, atomUpdate, store) {
|
|
1383
|
+
const { key, newValue, oldValue } = atomUpdate;
|
|
1384
|
+
const value = applying === `newValue` ? newValue : oldValue;
|
|
1385
|
+
const token = { key, type: `atom` };
|
|
1386
|
+
if (atomUpdate.family) {
|
|
1387
|
+
Object.assign(token, { family: atomUpdate.family });
|
|
1388
|
+
}
|
|
1389
|
+
setIntoStore(token, value, store);
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1315
1392
|
// internal/src/molecule/create-molecule-family.ts
|
|
1316
1393
|
function createMoleculeFamily(options, store) {
|
|
1317
1394
|
var _a;
|
|
@@ -1373,30 +1450,34 @@ var Molecule = class {
|
|
|
1373
1450
|
};
|
|
1374
1451
|
|
|
1375
1452
|
// internal/src/molecule/make-molecule-in-store.ts
|
|
1453
|
+
function capitalize2(string) {
|
|
1454
|
+
return string[0].toUpperCase() + string.slice(1);
|
|
1455
|
+
}
|
|
1376
1456
|
function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
1377
1457
|
const target = newest(store);
|
|
1378
|
-
|
|
1458
|
+
const stringKey = json.stringifyJson(key);
|
|
1459
|
+
target.moleculeInProgress = stringKey;
|
|
1379
1460
|
const contextArray = Array.isArray(context) ? context : [context];
|
|
1380
1461
|
const owners = contextArray.map((ctx) => {
|
|
1381
1462
|
if (ctx instanceof Molecule) {
|
|
1382
1463
|
return ctx;
|
|
1383
1464
|
}
|
|
1384
|
-
const
|
|
1385
|
-
const molecule2 = store.molecules.get(
|
|
1465
|
+
const ctxStringKey = json.stringifyJson(ctx.key);
|
|
1466
|
+
const molecule2 = store.molecules.get(ctxStringKey);
|
|
1386
1467
|
if (!molecule2) {
|
|
1387
1468
|
throw new Error(
|
|
1388
|
-
`Molecule ${
|
|
1469
|
+
`Molecule ${ctxStringKey} not found in store "${store.config.name}"`
|
|
1389
1470
|
);
|
|
1390
1471
|
}
|
|
1391
1472
|
return molecule2;
|
|
1392
1473
|
});
|
|
1393
1474
|
const molecule = new Molecule(owners, key, familyToken);
|
|
1394
|
-
target.molecules.set(
|
|
1475
|
+
target.molecules.set(stringKey, molecule);
|
|
1395
1476
|
for (const owner of owners) {
|
|
1396
1477
|
owner.below.set(molecule.stringKey, molecule);
|
|
1397
1478
|
}
|
|
1398
|
-
const
|
|
1399
|
-
get: (t) => getFromStore(t, newest(store)),
|
|
1479
|
+
const toolkit = {
|
|
1480
|
+
get: (t) => getFromStore(t, void 0, newest(store)),
|
|
1400
1481
|
set: (t, newValue) => {
|
|
1401
1482
|
setIntoStore(t, newValue, newest(store));
|
|
1402
1483
|
},
|
|
@@ -1408,11 +1489,36 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1408
1489
|
disposeFromStore(t, newest(store));
|
|
1409
1490
|
},
|
|
1410
1491
|
env: () => getEnvironmentData(newest(store)),
|
|
1411
|
-
bond: (
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1492
|
+
bond: (token2, maybeRole) => {
|
|
1493
|
+
if (token2.type === `join`) {
|
|
1494
|
+
const { as: role } = maybeRole;
|
|
1495
|
+
const join = data.getJoin(token2, store);
|
|
1496
|
+
join.molecules.set(stringKey, molecule);
|
|
1497
|
+
molecule.joins.set(token2.key, join);
|
|
1498
|
+
const unsubFromFamily = family.subject.subscribe(
|
|
1499
|
+
`join:${token2.key}-${stringKey}`,
|
|
1500
|
+
(event) => {
|
|
1501
|
+
if (event.type === `molecule_disposal` && json.stringifyJson(event.token.key) === stringKey) {
|
|
1502
|
+
unsubFromFamily();
|
|
1503
|
+
join.molecules.delete(stringKey);
|
|
1504
|
+
}
|
|
1505
|
+
}
|
|
1506
|
+
);
|
|
1507
|
+
if (role === null) {
|
|
1508
|
+
return;
|
|
1509
|
+
}
|
|
1510
|
+
const otherRole = token2.a === role ? token2.b : token2.a;
|
|
1511
|
+
const relations = data.findRelations(token2, key);
|
|
1512
|
+
const relatedKeys = relations[`${otherRole}KeysOf${capitalize2(role)}`];
|
|
1513
|
+
const relatedEntries = relations[`${otherRole}EntriesOf${capitalize2(role)}`];
|
|
1514
|
+
let tokens = { relatedKeys };
|
|
1515
|
+
if (relatedEntries) {
|
|
1516
|
+
tokens = Object.assign(tokens, { relatedEntries });
|
|
1517
|
+
}
|
|
1518
|
+
return tokens;
|
|
1519
|
+
}
|
|
1520
|
+
return growMoleculeInStore(molecule, withdraw(token2, store), newest(store));
|
|
1521
|
+
},
|
|
1416
1522
|
claim: (below, options) => {
|
|
1417
1523
|
const { exclusive } = options;
|
|
1418
1524
|
const belowMolecule = newest(store).molecules.get(json.stringifyJson(below.key));
|
|
@@ -1430,12 +1536,6 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1430
1536
|
}
|
|
1431
1537
|
}
|
|
1432
1538
|
},
|
|
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
1539
|
spawn: (f, k, ...p) => makeMoleculeInStore(
|
|
1440
1540
|
newest(store),
|
|
1441
1541
|
[molecule],
|
|
@@ -1446,7 +1546,7 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
|
|
|
1446
1546
|
};
|
|
1447
1547
|
const family = withdraw(familyToken, store);
|
|
1448
1548
|
const Constructor = family.new;
|
|
1449
|
-
molecule.instance = new Constructor(
|
|
1549
|
+
molecule.instance = new Constructor(toolkit, key, ...params);
|
|
1450
1550
|
const token = {
|
|
1451
1551
|
type: `molecule`,
|
|
1452
1552
|
key,
|
|
@@ -1747,18 +1847,18 @@ var buildTransaction = (key, params, store, id) => {
|
|
|
1747
1847
|
params,
|
|
1748
1848
|
output: void 0
|
|
1749
1849
|
},
|
|
1750
|
-
|
|
1751
|
-
get: (
|
|
1752
|
-
set: (
|
|
1753
|
-
setIntoStore(
|
|
1850
|
+
toolkit: {
|
|
1851
|
+
get: (...ps) => getFromStore(...ps, child),
|
|
1852
|
+
set: (...ps) => {
|
|
1853
|
+
setIntoStore(...ps, child);
|
|
1754
1854
|
},
|
|
1755
1855
|
run: (token, identifier = arbitrary()) => actUponStore(token, identifier, child),
|
|
1756
1856
|
find: (token, k) => findInStore(token, k, child),
|
|
1757
1857
|
seek: (token, k) => seekInStore(token, k, child),
|
|
1758
1858
|
json: (token) => getJsonToken(token, child),
|
|
1759
1859
|
make: (context, family, k, ...args) => makeMoleculeInStore(child, context, family, k, ...args),
|
|
1760
|
-
dispose: (
|
|
1761
|
-
disposeFromStore(
|
|
1860
|
+
dispose: (...ps) => {
|
|
1861
|
+
disposeFromStore(...ps, child);
|
|
1762
1862
|
},
|
|
1763
1863
|
env: () => getEnvironmentData(child)
|
|
1764
1864
|
}
|
|
@@ -1786,8 +1886,8 @@ function createTransaction(options, store) {
|
|
|
1786
1886
|
const childStore = buildTransaction(options.key, params, store, id);
|
|
1787
1887
|
try {
|
|
1788
1888
|
const target2 = newest(store);
|
|
1789
|
-
const {
|
|
1790
|
-
const output = options.do(
|
|
1889
|
+
const { toolkit } = childStore.transactionMeta;
|
|
1890
|
+
const output = options.do(toolkit, ...params);
|
|
1791
1891
|
applyTransaction(output, target2);
|
|
1792
1892
|
return output;
|
|
1793
1893
|
} catch (thrown) {
|
|
@@ -1903,6 +2003,7 @@ var Store = class {
|
|
|
1903
2003
|
for (const logger of this.loggers) logger.warn(...messages);
|
|
1904
2004
|
}
|
|
1905
2005
|
};
|
|
2006
|
+
this.config = __spreadValues(__spreadValues({}, store == null ? void 0 : store.config), config);
|
|
1906
2007
|
if (store !== null) {
|
|
1907
2008
|
this.valueMap = new Map(store == null ? void 0 : store.valueMap);
|
|
1908
2009
|
this.operation = __spreadValues({}, store == null ? void 0 : store.operation);
|
|
@@ -1914,7 +2015,6 @@ var Store = class {
|
|
|
1914
2015
|
)
|
|
1915
2016
|
};
|
|
1916
2017
|
}
|
|
1917
|
-
this.config = __spreadValues(__spreadValues({}, store == null ? void 0 : store.config), config);
|
|
1918
2018
|
for (const [, family] of store.families) {
|
|
1919
2019
|
family.install(this);
|
|
1920
2020
|
}
|
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>;
|
|
@@ -397,7 +397,9 @@ declare function createRegularAtomFamily<T, K extends Json.Serializable>(options
|
|
|
397
397
|
declare function createSelectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>, store: Store): WritableSelectorFamily<T, K>;
|
|
398
398
|
declare function createSelectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>, store: Store): ReadonlySelectorFamily<T, K>;
|
|
399
399
|
|
|
400
|
-
declare function disposeFromStore(token: MoleculeToken<any> | ReadableToken<any>, store
|
|
400
|
+
declare function disposeFromStore(token: MoleculeToken<any> | ReadableToken<any>, store: Store): void;
|
|
401
|
+
declare function disposeFromStore<K extends Json.Serializable>(token: ReadableFamilyToken<any, K>, key: K, store: Store): void;
|
|
402
|
+
declare function disposeFromStore<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>, store: Store): void;
|
|
401
403
|
|
|
402
404
|
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
405
|
declare function findInStore<T, K extends Json.Serializable, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key, store: Store): RegularAtomToken<T>;
|
|
@@ -434,7 +436,8 @@ declare function getEnvironmentData(store: Store): EnvironmentData;
|
|
|
434
436
|
|
|
435
437
|
declare function getFromStore<T>(token: ReadableToken<T>, store: Store): T;
|
|
436
438
|
declare function getFromStore<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): InstanceType<M> | undefined;
|
|
437
|
-
declare function getFromStore<T,
|
|
439
|
+
declare function getFromStore<T, K extends Json.Serializable>(token: ReadableFamilyToken<T, K>, key: K, store: Store): T;
|
|
440
|
+
declare function getFromStore<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>, store: Store): InstanceType<M>;
|
|
438
441
|
|
|
439
442
|
declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
|
|
440
443
|
|
|
@@ -510,6 +513,7 @@ declare function makeMoleculeInStore<M extends MoleculeConstructor>(store: Store
|
|
|
510
513
|
type AtomIOToken = MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
|
|
511
514
|
declare class NotFoundError extends Error {
|
|
512
515
|
constructor(token: AtomIOToken, store: Store);
|
|
516
|
+
constructor(familyToken: AtomIOToken, key: Json.Serializable, store: Store);
|
|
513
517
|
}
|
|
514
518
|
|
|
515
519
|
declare const createReadonlySelector: <T>(options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined, store: Store) => ReadonlySelectorToken<T>;
|
|
@@ -523,7 +527,7 @@ declare function disposeSelector(selectorToken: ReadonlySelectorToken<unknown> |
|
|
|
523
527
|
|
|
524
528
|
declare const getSelectorDependencyKeys: (key: string, store: Store) => (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[];
|
|
525
529
|
|
|
526
|
-
declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) =>
|
|
530
|
+
declare const registerSelector: (selectorKey: string, covered: Set<string>, store: Store) => SetterToolkit;
|
|
527
531
|
|
|
528
532
|
declare const traceSelectorAtoms: (directDependencyKey: StateKey<unknown>, covered: Set<string>, store: Store) => AtomKey<unknown>[];
|
|
529
533
|
declare const traceAllSelectorAtoms: (selector: Selector<any>, store: Store) => AtomKey<unknown>[];
|
|
@@ -536,6 +540,7 @@ declare const become: <T>(nextVersionOfThing: Modify<T> | T) => (originalThing:
|
|
|
536
540
|
declare const setAtomOrSelector: <T>(state: WritableState<T>, value: T | ((oldValue: T) => T), store: Store) => void;
|
|
537
541
|
|
|
538
542
|
declare function setIntoStore<T, New extends T>(token: WritableToken<T>, value: New | ((oldValue: T) => New), store: Store): void;
|
|
543
|
+
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
544
|
|
|
540
545
|
declare const subscribeToRootAtoms: <T>(selector: Selector<T>, store: Store) => (() => void)[];
|
|
541
546
|
|