atom.io 0.21.1 → 0.23.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 +152 -63
- package/data/dist/index.d.ts +6 -0
- package/data/dist/index.js +3 -3
- package/data/src/join.ts +164 -51
- package/data/src/struct-family.ts +2 -2
- package/dist/chunk-6MLFYN32.js +18 -0
- package/dist/{chunk-HITX3MO4.js → chunk-7DT3PVS3.js} +151 -62
- package/dist/{chunk-RT43TVKP.js → chunk-GVHKIJ3G.js} +1 -1
- package/dist/chunk-OAYGID5B.js +27 -0
- package/dist/index.cjs +4 -18
- package/dist/index.d.ts +71 -28
- package/dist/index.js +6 -19
- package/ephemeral/dist/index.cjs +11 -0
- package/ephemeral/dist/index.js +9 -0
- package/ephemeral/package.json +16 -0
- package/ephemeral/src/index.ts +1 -0
- package/eslint-plugin/dist/index.cjs +155 -1
- package/eslint-plugin/dist/index.js +155 -1
- package/eslint-plugin/src/rules/index.ts +1 -0
- package/eslint-plugin/src/rules/lifespan.ts +203 -0
- package/eslint-plugin/src/rules/synchronous-selector-dependencies.ts +1 -65
- package/eslint-plugin/src/walk.ts +73 -0
- package/immortal/dist/index.cjs +260 -0
- package/immortal/dist/index.js +212 -0
- package/immortal/package.json +16 -0
- package/immortal/src/index.ts +3 -0
- package/immortal/src/make-molecule.ts +222 -0
- package/immortal/src/molecule.ts +167 -0
- package/immortal/src/seek-state.ts +73 -0
- package/internal/dist/index.cjs +1242 -837
- package/internal/dist/index.d.ts +135 -22
- package/internal/dist/index.js +1215 -838
- package/internal/src/atom/create-regular-atom.ts +0 -2
- package/internal/src/atom/create-standalone-atom.ts +6 -2
- package/internal/src/atom/dispose-atom.ts +26 -3
- package/internal/src/families/create-readonly-selector-family.ts +15 -10
- package/internal/src/families/create-regular-atom-family.ts +20 -21
- package/internal/src/families/create-writable-selector-family.ts +13 -9
- package/{src/dispose.ts → internal/src/families/dispose-from-store.ts} +7 -4
- package/internal/src/families/find-in-store.ts +11 -6
- package/internal/src/families/index.ts +3 -0
- package/internal/src/families/init-family-member.ts +112 -0
- package/internal/src/families/seek-in-store.ts +123 -0
- package/internal/src/get-state/get-from-store.ts +2 -2
- package/internal/src/ingest-updates/index.ts +1 -0
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +104 -0
- package/internal/src/ingest-updates/ingest-transaction-update.ts +26 -4
- package/internal/src/mutable/create-mutable-atom-family.ts +22 -24
- package/internal/src/mutable/create-mutable-atom.ts +3 -3
- package/internal/src/mutable/get-json-family.ts +2 -2
- package/internal/src/mutable/get-json-token.ts +26 -12
- package/internal/src/mutable/tracker-family.ts +21 -19
- package/internal/src/not-found-error.ts +16 -3
- package/internal/src/selector/create-readonly-selector.ts +2 -3
- package/internal/src/selector/create-standalone-selector.ts +6 -2
- package/internal/src/selector/create-writable-selector.ts +2 -3
- package/internal/src/selector/dispose-selector.ts +68 -24
- package/internal/src/selector/register-selector.ts +10 -5
- package/internal/src/set-state/set-into-store.ts +2 -2
- package/internal/src/set-state/stow-update.ts +5 -1
- package/internal/src/store/deposit.ts +41 -7
- package/internal/src/store/index.ts +0 -1
- package/internal/src/store/store.ts +29 -5
- package/internal/src/store/withdraw.ts +28 -1
- package/internal/src/subscribe/subscribe-to-state.ts +2 -2
- package/internal/src/timeline/add-atom-to-timeline.ts +206 -182
- package/internal/src/timeline/create-timeline.ts +181 -60
- package/internal/src/timeline/time-travel.ts +20 -0
- package/internal/src/transaction/apply-transaction.ts +2 -12
- package/internal/src/transaction/build-transaction.ts +16 -2
- package/introspection/dist/index.cjs +40 -53
- package/introspection/dist/index.js +40 -53
- package/introspection/src/attach-atom-index.ts +38 -48
- package/introspection/src/attach-selector-index.ts +45 -50
- package/introspection/src/attach-timeline-family.ts +1 -0
- package/json/dist/index.cjs +40 -6
- package/json/dist/index.js +44 -9
- package/json/src/select-json-family.ts +47 -9
- package/package.json +30 -10
- package/react/dist/index.cjs +1 -1
- package/react/dist/index.js +1 -1
- package/react/src/use-json.ts +1 -1
- package/react-devtools/dist/index.cjs +69 -57
- package/react-devtools/dist/index.js +62 -49
- package/react-devtools/src/StateIndex.tsx +2 -1
- package/react-devtools/src/TimelineIndex.tsx +17 -14
- package/react-devtools/src/TransactionIndex.tsx +7 -7
- package/react-devtools/src/Updates.tsx +41 -32
- package/realtime-client/dist/index.cjs +3 -3
- package/realtime-client/dist/index.js +3 -3
- package/realtime-client/src/pull-mutable-atom-family-member.ts +1 -1
- package/realtime-client/src/pull-mutable-atom.ts +1 -1
- package/realtime-client/src/sync-continuity.ts +1 -2
- package/realtime-react/dist/index.cjs +1 -1
- package/realtime-react/dist/index.js +1 -1
- package/realtime-server/dist/index.cjs +39 -27
- package/realtime-server/dist/index.d.ts +1 -1
- package/realtime-server/dist/index.js +27 -16
- package/realtime-server/src/realtime-continuity-synchronizer.ts +5 -3
- package/realtime-server/src/realtime-mutable-family-provider.ts +2 -1
- package/realtime-server/src/realtime-mutable-provider.ts +1 -1
- package/realtime-server/src/realtime-server-stores/server-sync-store.ts +21 -11
- package/realtime-testing/dist/index.cjs +7 -2
- package/realtime-testing/dist/index.js +8 -5
- package/realtime-testing/src/setup-realtime-test.tsx +5 -2
- package/src/atom.ts +19 -7
- package/src/dispose-state.ts +10 -0
- package/src/index.ts +5 -2
- package/src/selector.ts +13 -7
- package/src/silo.ts +3 -3
- package/src/subscribe.ts +8 -4
- package/src/timeline.ts +18 -1
- package/src/transaction.ts +59 -4
- package/dist/chunk-BF4MVQF6.js +0 -44
- package/internal/src/store/withdraw-new-family-member.ts +0 -69
- /package/{src → ephemeral/src}/find-state.ts +0 -0
package/data/dist/index.cjs
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var internal = require('atom.io/internal');
|
|
4
4
|
var atom_io = require('atom.io');
|
|
5
|
+
var immortal = require('atom.io/immortal');
|
|
6
|
+
var json = require('atom.io/json');
|
|
5
7
|
var setRtx = require('atom.io/transceivers/set-rtx');
|
|
6
8
|
|
|
7
9
|
// data/src/dict.ts
|
|
@@ -284,34 +286,36 @@ function capitalize(string) {
|
|
|
284
286
|
return string[0].toUpperCase() + string.slice(1);
|
|
285
287
|
}
|
|
286
288
|
var Join = class _Join {
|
|
287
|
-
transact(transactors, run) {
|
|
288
|
-
const originalTransactors = this.transactors;
|
|
289
|
-
this.transactors = transactors;
|
|
290
|
-
run(this);
|
|
291
|
-
this.transactors = originalTransactors;
|
|
292
|
-
}
|
|
293
|
-
in(store) {
|
|
294
|
-
const key = store.config.name;
|
|
295
|
-
const alternate = this.alternates.get(key);
|
|
296
|
-
if (alternate) {
|
|
297
|
-
return alternate;
|
|
298
|
-
}
|
|
299
|
-
const join2 = new _Join(this.options, this.defaultContent, store);
|
|
300
|
-
this.alternates.set(key, join2);
|
|
301
|
-
join2.alternates = this.alternates;
|
|
302
|
-
return join2;
|
|
303
|
-
}
|
|
304
289
|
constructor(options, defaultContent, store = internal.IMPLICIT.STORE) {
|
|
290
|
+
this.molecules = /* @__PURE__ */ new Map();
|
|
291
|
+
this.store = store;
|
|
305
292
|
this.options = options;
|
|
306
293
|
this.defaultContent = defaultContent;
|
|
307
294
|
this.alternates = /* @__PURE__ */ new Map();
|
|
308
295
|
this.alternates.set(store.config.name, this);
|
|
296
|
+
this.store.miscResources.set(`join:${options.key}`, this);
|
|
309
297
|
this.transactors = {
|
|
310
298
|
get: (token) => internal.getFromStore(token, store),
|
|
311
299
|
set: (token, value) => {
|
|
312
300
|
internal.setIntoStore(token, value, store);
|
|
313
301
|
},
|
|
314
|
-
find: (token, key) => internal.findInStore(token, key, store)
|
|
302
|
+
find: (token, key) => internal.findInStore(token, key, store),
|
|
303
|
+
seek: (token, key) => internal.seekInStore(token, key, store),
|
|
304
|
+
json: (token) => internal.getJsonToken(token, store)
|
|
305
|
+
};
|
|
306
|
+
this.retrieve = (token, key) => {
|
|
307
|
+
const maybeToken = this.transactors.seek(token, key);
|
|
308
|
+
if (maybeToken) {
|
|
309
|
+
return maybeToken;
|
|
310
|
+
}
|
|
311
|
+
const molecule = this.molecules.get(json.stringifyJson(key));
|
|
312
|
+
if (!molecule) {
|
|
313
|
+
if (store.config.lifespan === `immortal`) {
|
|
314
|
+
throw new Error(`No molecule found for key "${json.stringifyJson(key)}"`);
|
|
315
|
+
}
|
|
316
|
+
return internal.initFamilyMember(token, key, store);
|
|
317
|
+
}
|
|
318
|
+
return molecule.bond(token);
|
|
315
319
|
};
|
|
316
320
|
const aSide = options.between[0];
|
|
317
321
|
const bSide = options.between[1];
|
|
@@ -326,31 +330,57 @@ var Join = class _Join {
|
|
|
326
330
|
store
|
|
327
331
|
);
|
|
328
332
|
this.core = { findRelatedKeysState: relatedKeysAtoms };
|
|
329
|
-
const getRelatedKeys = ({
|
|
333
|
+
const getRelatedKeys = ({ get }, key) => get(this.retrieve(relatedKeysAtoms, key));
|
|
330
334
|
const addRelation = (transactors, a, b) => {
|
|
331
|
-
const { set
|
|
332
|
-
const aKeysState =
|
|
333
|
-
const bKeysState =
|
|
335
|
+
const { set } = transactors;
|
|
336
|
+
const aKeysState = this.retrieve(relatedKeysAtoms, a);
|
|
337
|
+
const bKeysState = this.retrieve(relatedKeysAtoms, b);
|
|
334
338
|
set(aKeysState, (aKeys) => aKeys.add(b));
|
|
335
339
|
set(bKeysState, (bKeys) => bKeys.add(a));
|
|
336
340
|
};
|
|
337
341
|
const deleteRelation = (transactors, a, b) => {
|
|
338
|
-
|
|
339
|
-
const
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
342
|
+
var _a, _b;
|
|
343
|
+
const { set } = transactors;
|
|
344
|
+
const aKeysState = this.retrieve(relatedKeysAtoms, a);
|
|
345
|
+
const bKeysState = this.retrieve(relatedKeysAtoms, b);
|
|
346
|
+
let stringA;
|
|
347
|
+
let stringB;
|
|
348
|
+
set(aKeysState, (aKeys) => {
|
|
349
|
+
aKeys.delete(b);
|
|
350
|
+
if (aKeys.size === 0) {
|
|
351
|
+
stringA = `"${a}"`;
|
|
352
|
+
}
|
|
353
|
+
return aKeys;
|
|
354
|
+
});
|
|
355
|
+
set(bKeysState, (bKeys) => {
|
|
356
|
+
bKeys.delete(a);
|
|
357
|
+
if (bKeys.size === 0) {
|
|
358
|
+
stringB = `"${b}"`;
|
|
359
|
+
}
|
|
360
|
+
return bKeys;
|
|
361
|
+
});
|
|
362
|
+
if (stringA && this.molecules.has(stringA)) {
|
|
363
|
+
(_a = this.molecules.get(stringA)) == null ? void 0 : _a.clear();
|
|
364
|
+
this.molecules.delete(stringA);
|
|
365
|
+
}
|
|
366
|
+
if (stringB && this.molecules.has(stringB)) {
|
|
367
|
+
(_b = this.molecules.get(stringB)) == null ? void 0 : _b.clear();
|
|
368
|
+
this.molecules.delete(stringB);
|
|
369
|
+
}
|
|
343
370
|
};
|
|
344
371
|
const replaceRelationsSafely = (transactors, a, newRelationsOfA) => {
|
|
345
|
-
const {
|
|
346
|
-
const relationsOfAState =
|
|
372
|
+
const { get, set } = transactors;
|
|
373
|
+
const relationsOfAState = this.retrieve(relatedKeysAtoms, a);
|
|
347
374
|
const currentRelationsOfA = get(relationsOfAState);
|
|
348
375
|
for (const currentRelationB of currentRelationsOfA) {
|
|
349
376
|
const remainsRelated = newRelationsOfA.includes(currentRelationB);
|
|
350
377
|
if (remainsRelated) {
|
|
351
378
|
continue;
|
|
352
379
|
}
|
|
353
|
-
const relationsOfBState =
|
|
380
|
+
const relationsOfBState = this.retrieve(
|
|
381
|
+
relatedKeysAtoms,
|
|
382
|
+
currentRelationB
|
|
383
|
+
);
|
|
354
384
|
set(relationsOfBState, (relationsOfB) => {
|
|
355
385
|
relationsOfB.delete(a);
|
|
356
386
|
return relationsOfB;
|
|
@@ -363,6 +393,7 @@ var Join = class _Join {
|
|
|
363
393
|
const relationsOfB = getRelatedKeys(transactors, newRelationB);
|
|
364
394
|
const newRelationBIsAlreadyRelated = relationsOfB.has(a);
|
|
365
395
|
if (this.relations.cardinality === `1:n`) {
|
|
396
|
+
const previousOwnersToDispose = [];
|
|
366
397
|
for (const previousOwner of relationsOfB) {
|
|
367
398
|
if (previousOwner === a) {
|
|
368
399
|
continue;
|
|
@@ -372,10 +403,21 @@ var Join = class _Join {
|
|
|
372
403
|
previousOwner
|
|
373
404
|
);
|
|
374
405
|
previousOwnerRelations.delete(newRelationB);
|
|
406
|
+
if (previousOwnerRelations.size === 0) {
|
|
407
|
+
previousOwnersToDispose.push(previousOwner);
|
|
408
|
+
}
|
|
375
409
|
}
|
|
376
410
|
if (!newRelationBIsAlreadyRelated && relationsOfB.size > 0) {
|
|
377
411
|
relationsOfB.clear();
|
|
378
412
|
}
|
|
413
|
+
for (const previousOwner of previousOwnersToDispose) {
|
|
414
|
+
const molecule = this.molecules.get(previousOwner);
|
|
415
|
+
molecule == null ? void 0 : molecule.clear();
|
|
416
|
+
this.molecules.delete(previousOwner);
|
|
417
|
+
const sorted = [newRelationB, previousOwner].sort();
|
|
418
|
+
const compositeKey = `"${sorted[0]}:${sorted[1]}"`;
|
|
419
|
+
this.molecules.delete(compositeKey);
|
|
420
|
+
}
|
|
379
421
|
}
|
|
380
422
|
if (!newRelationBIsAlreadyRelated) {
|
|
381
423
|
relationsOfB.add(a);
|
|
@@ -388,8 +430,8 @@ var Join = class _Join {
|
|
|
388
430
|
});
|
|
389
431
|
};
|
|
390
432
|
const replaceRelationsUnsafely = (transactors, a, newRelationsOfA) => {
|
|
391
|
-
const {
|
|
392
|
-
const relationsOfAState =
|
|
433
|
+
const { set } = transactors;
|
|
434
|
+
const relationsOfAState = this.retrieve(relatedKeysAtoms, a);
|
|
393
435
|
set(relationsOfAState, (relationsOfA) => {
|
|
394
436
|
relationsOfA.transaction((nextRelationsOfA) => {
|
|
395
437
|
for (const newRelationB of newRelationsOfA) {
|
|
@@ -400,7 +442,7 @@ var Join = class _Join {
|
|
|
400
442
|
return relationsOfA;
|
|
401
443
|
});
|
|
402
444
|
for (const newRelationB of newRelationsOfA) {
|
|
403
|
-
const newRelationsBState =
|
|
445
|
+
const newRelationsBState = this.retrieve(relatedKeysAtoms, newRelationB);
|
|
404
446
|
set(newRelationsBState, (newRelationsB) => {
|
|
405
447
|
newRelationsB.add(a);
|
|
406
448
|
return newRelationsB;
|
|
@@ -430,6 +472,7 @@ var Join = class _Join {
|
|
|
430
472
|
};
|
|
431
473
|
let externalStore;
|
|
432
474
|
let contentAtoms;
|
|
475
|
+
let contentMolecules;
|
|
433
476
|
if (defaultContent) {
|
|
434
477
|
contentAtoms = internal.createRegularAtomFamily(
|
|
435
478
|
{
|
|
@@ -438,12 +481,24 @@ var Join = class _Join {
|
|
|
438
481
|
},
|
|
439
482
|
store
|
|
440
483
|
);
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
484
|
+
contentMolecules = immortal.createMoleculeFamily(
|
|
485
|
+
{
|
|
486
|
+
key: `${options.key}/content-molecules`,
|
|
487
|
+
new: (s) => class ContentMolecule extends immortal.Molecule {
|
|
488
|
+
constructor(context, token) {
|
|
489
|
+
super(s, context, token);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
store
|
|
494
|
+
);
|
|
495
|
+
const getContent = ({ get }, key) => get(this.retrieve(contentAtoms, key));
|
|
496
|
+
const setContent = ({ set }, key, content) => {
|
|
497
|
+
set(this.retrieve(contentAtoms, key), content);
|
|
444
498
|
};
|
|
445
|
-
const deleteContent = (
|
|
446
|
-
atom_io.disposeState(
|
|
499
|
+
const deleteContent = (_, compositeKey) => {
|
|
500
|
+
atom_io.disposeState(this.retrieve(contentAtoms, compositeKey));
|
|
501
|
+
this.molecules.delete(`"${compositeKey}"`);
|
|
447
502
|
};
|
|
448
503
|
const externalStoreWithContentConfiguration = {
|
|
449
504
|
getContent: (contentKey) => {
|
|
@@ -466,13 +521,26 @@ var Join = class _Join {
|
|
|
466
521
|
}
|
|
467
522
|
const relations = new Junction(options, {
|
|
468
523
|
externalStore,
|
|
469
|
-
makeContentKey: (...args) =>
|
|
524
|
+
makeContentKey: (...args) => {
|
|
525
|
+
const sorted = args.sort();
|
|
526
|
+
const compositeKey = `${sorted[0]}:${sorted[1]}`;
|
|
527
|
+
const [m0, m1] = sorted.map(
|
|
528
|
+
(key) => this.molecules.get(json.stringifyJson(key))
|
|
529
|
+
);
|
|
530
|
+
if (store.config.lifespan === `immortal` && m0 && m1) {
|
|
531
|
+
const composite = m0.with(m1)(compositeKey);
|
|
532
|
+
this.molecules.set(`"${compositeKey}"`, composite);
|
|
533
|
+
const target = internal.newest(store);
|
|
534
|
+
immortal.makeMoleculeInStore(target, [m0, m1], contentMolecules, compositeKey);
|
|
535
|
+
}
|
|
536
|
+
return compositeKey;
|
|
537
|
+
}
|
|
470
538
|
});
|
|
471
539
|
const createSingleKeyStateFamily = () => internal.createSelectorFamily(
|
|
472
540
|
{
|
|
473
541
|
key: `${options.key}/singleRelatedKey`,
|
|
474
|
-
get: (key) => ({
|
|
475
|
-
const relatedKeysState =
|
|
542
|
+
get: (key) => ({ get }) => {
|
|
543
|
+
const relatedKeysState = this.retrieve(relatedKeysAtoms, key);
|
|
476
544
|
const relatedKeys = get(relatedKeysState);
|
|
477
545
|
for (const relatedKey of relatedKeys) {
|
|
478
546
|
return relatedKey;
|
|
@@ -486,9 +554,9 @@ var Join = class _Join {
|
|
|
486
554
|
return internal.createSelectorFamily(
|
|
487
555
|
{
|
|
488
556
|
key: `${options.key}/multipleRelatedKeys`,
|
|
489
|
-
get: (key) => ({
|
|
557
|
+
get: (key) => ({ get }) => {
|
|
490
558
|
const jsonFamily = internal.getJsonFamily(relatedKeysAtoms, store);
|
|
491
|
-
const jsonState =
|
|
559
|
+
const jsonState = this.retrieve(jsonFamily, key);
|
|
492
560
|
const json = get(jsonState);
|
|
493
561
|
return json.members;
|
|
494
562
|
}
|
|
@@ -499,12 +567,12 @@ var Join = class _Join {
|
|
|
499
567
|
const createSingleEntryStateFamily = () => internal.createSelectorFamily(
|
|
500
568
|
{
|
|
501
569
|
key: `${options.key}/singleRelatedEntry`,
|
|
502
|
-
get: (key) => ({
|
|
503
|
-
const relatedKeysState =
|
|
570
|
+
get: (key) => ({ get }) => {
|
|
571
|
+
const relatedKeysState = this.retrieve(relatedKeysAtoms, key);
|
|
504
572
|
const relatedKeys = get(relatedKeysState);
|
|
505
573
|
for (const relatedKey of relatedKeys) {
|
|
506
574
|
const contentKey = relations.makeContentKey(key, relatedKey);
|
|
507
|
-
const contentState =
|
|
575
|
+
const contentState = this.retrieve(contentAtoms, contentKey);
|
|
508
576
|
const content = get(contentState);
|
|
509
577
|
return [relatedKey, content];
|
|
510
578
|
}
|
|
@@ -516,12 +584,13 @@ var Join = class _Join {
|
|
|
516
584
|
const getMultipleEntryStateFamily = () => internal.createSelectorFamily(
|
|
517
585
|
{
|
|
518
586
|
key: `${options.key}/multipleRelatedEntries`,
|
|
519
|
-
get: (key) => ({
|
|
587
|
+
get: (key) => ({ get }) => {
|
|
520
588
|
const jsonFamily = internal.getJsonFamily(relatedKeysAtoms, store);
|
|
521
|
-
const
|
|
589
|
+
const jsonState = this.retrieve(jsonFamily, key);
|
|
590
|
+
const json = get(jsonState);
|
|
522
591
|
return json.members.map((relatedKey) => {
|
|
523
592
|
const contentKey = relations.makeContentKey(key, relatedKey);
|
|
524
|
-
const contentState =
|
|
593
|
+
const contentState = this.retrieve(contentAtoms, contentKey);
|
|
525
594
|
const content = get(contentState);
|
|
526
595
|
return [relatedKey, content];
|
|
527
596
|
});
|
|
@@ -614,6 +683,26 @@ var Join = class _Join {
|
|
|
614
683
|
}
|
|
615
684
|
}
|
|
616
685
|
}
|
|
686
|
+
transact(transactors, run) {
|
|
687
|
+
const originalTransactors = this.transactors;
|
|
688
|
+
this.transactors = transactors;
|
|
689
|
+
run(this);
|
|
690
|
+
this.transactors = originalTransactors;
|
|
691
|
+
}
|
|
692
|
+
[Symbol.dispose]() {
|
|
693
|
+
this.alternates.delete(this.store.config.name);
|
|
694
|
+
}
|
|
695
|
+
in(store) {
|
|
696
|
+
const key = store.config.name;
|
|
697
|
+
const alternate = this.alternates.get(key);
|
|
698
|
+
if (alternate) {
|
|
699
|
+
return alternate;
|
|
700
|
+
}
|
|
701
|
+
const join2 = new _Join(this.options, this.defaultContent, store);
|
|
702
|
+
this.alternates.set(key, join2);
|
|
703
|
+
join2.alternates = this.alternates;
|
|
704
|
+
return join2;
|
|
705
|
+
}
|
|
617
706
|
};
|
|
618
707
|
function join(options, defaultContent, store = internal.IMPLICIT.STORE) {
|
|
619
708
|
const joins = getJoinMap(store);
|
|
@@ -661,12 +750,12 @@ function findRelationsInStore(token, key, store) {
|
|
|
661
750
|
relations = {
|
|
662
751
|
get [keyAB]() {
|
|
663
752
|
const familyAB = myJoin.states[keyAB];
|
|
664
|
-
const state =
|
|
753
|
+
const state = myJoin.retrieve(familyAB, key);
|
|
665
754
|
return state;
|
|
666
755
|
},
|
|
667
756
|
get [keyBA]() {
|
|
668
757
|
const familyBA = myJoin.states[keyBA];
|
|
669
|
-
const state =
|
|
758
|
+
const state = myJoin.retrieve(familyBA, key);
|
|
670
759
|
return state;
|
|
671
760
|
}
|
|
672
761
|
};
|
|
@@ -676,12 +765,12 @@ function findRelationsInStore(token, key, store) {
|
|
|
676
765
|
Object.assign(relations, {
|
|
677
766
|
get [entryAB]() {
|
|
678
767
|
const familyAB = myJoin.states[entryAB];
|
|
679
|
-
const state =
|
|
768
|
+
const state = myJoin.retrieve(familyAB, key);
|
|
680
769
|
return state;
|
|
681
770
|
},
|
|
682
771
|
get [entryBA]() {
|
|
683
772
|
const familyBA = myJoin.states[entryBA];
|
|
684
|
-
const state =
|
|
773
|
+
const state = myJoin.retrieve(familyBA, key);
|
|
685
774
|
return state;
|
|
686
775
|
}
|
|
687
776
|
});
|
|
@@ -694,12 +783,12 @@ function findRelationsInStore(token, key, store) {
|
|
|
694
783
|
relations = {
|
|
695
784
|
get [keyAB]() {
|
|
696
785
|
const familyAB = myJoin.states[keyAB];
|
|
697
|
-
const state =
|
|
786
|
+
const state = myJoin.retrieve(familyAB, key);
|
|
698
787
|
return state;
|
|
699
788
|
},
|
|
700
789
|
get [keysBA]() {
|
|
701
790
|
const familyBA = myJoin.states[keysBA];
|
|
702
|
-
const state =
|
|
791
|
+
const state = myJoin.retrieve(familyBA, key);
|
|
703
792
|
return state;
|
|
704
793
|
}
|
|
705
794
|
};
|
|
@@ -709,12 +798,12 @@ function findRelationsInStore(token, key, store) {
|
|
|
709
798
|
Object.assign(relations, {
|
|
710
799
|
get [entryAB]() {
|
|
711
800
|
const familyAB = myJoin.states[entryAB];
|
|
712
|
-
const state =
|
|
801
|
+
const state = myJoin.retrieve(familyAB, key);
|
|
713
802
|
return state;
|
|
714
803
|
},
|
|
715
804
|
get [entriesBA]() {
|
|
716
805
|
const familyBA = myJoin.states[entriesBA];
|
|
717
|
-
const state =
|
|
806
|
+
const state = myJoin.retrieve(familyBA, key);
|
|
718
807
|
return state;
|
|
719
808
|
}
|
|
720
809
|
});
|
|
@@ -727,12 +816,12 @@ function findRelationsInStore(token, key, store) {
|
|
|
727
816
|
relations = {
|
|
728
817
|
get [keysAB]() {
|
|
729
818
|
const familyAB = myJoin.states[keysAB];
|
|
730
|
-
const state =
|
|
819
|
+
const state = myJoin.retrieve(familyAB, key);
|
|
731
820
|
return state;
|
|
732
821
|
},
|
|
733
822
|
get [keysBA]() {
|
|
734
823
|
const familyBA = myJoin.states[keysBA];
|
|
735
|
-
const state =
|
|
824
|
+
const state = myJoin.retrieve(familyBA, key);
|
|
736
825
|
return state;
|
|
737
826
|
}
|
|
738
827
|
};
|
|
@@ -742,12 +831,12 @@ function findRelationsInStore(token, key, store) {
|
|
|
742
831
|
Object.assign(relations, {
|
|
743
832
|
get [entriesAB]() {
|
|
744
833
|
const familyAB = myJoin.states[entriesAB];
|
|
745
|
-
const state =
|
|
834
|
+
const state = myJoin.retrieve(familyAB, key);
|
|
746
835
|
return state;
|
|
747
836
|
},
|
|
748
837
|
get [entriesBA]() {
|
|
749
838
|
const familyBA = myJoin.states[entriesBA];
|
|
750
|
-
const state =
|
|
839
|
+
const state = myJoin.retrieve(familyBA, key);
|
|
751
840
|
return state;
|
|
752
841
|
}
|
|
753
842
|
});
|
|
@@ -827,10 +916,10 @@ function structFamily(options) {
|
|
|
827
916
|
const findStructState = internal.createSelectorFamily(
|
|
828
917
|
{
|
|
829
918
|
key: options.key,
|
|
830
|
-
get: (id) => ({ get }) => {
|
|
919
|
+
get: (id) => ({ find, get }) => {
|
|
831
920
|
return Object.keys(options.default).reduce((acc, subKey) => {
|
|
832
921
|
acc[subKey] = get(
|
|
833
|
-
atoms[nameFamily(options.key, subKey)]
|
|
922
|
+
find(atoms[nameFamily(options.key, subKey)], id)
|
|
834
923
|
);
|
|
835
924
|
return acc;
|
|
836
925
|
}, {});
|
package/data/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import * as AtomIO from 'atom.io';
|
|
|
2
2
|
import { ReadonlySelectorFamily, MutableAtomFamily, Transactors, ReadonlySelectorToken, MutableAtomFamilyToken } from 'atom.io';
|
|
3
3
|
import { Store } from 'atom.io/internal';
|
|
4
4
|
import { Json, Stringified } from 'atom.io/json';
|
|
5
|
+
import { findState } from 'atom.io/ephemeral';
|
|
6
|
+
import { Molecule } from 'atom.io/immortal';
|
|
5
7
|
import { SetRTX, SetRTXJson } from 'atom.io/transceivers/set-rtx';
|
|
6
8
|
|
|
7
9
|
declare function dict<State, Key extends Json.Serializable>(findState: AtomIO.ReadonlySelectorFamilyToken<State, Key> | AtomIO.RegularAtomFamilyToken<State, Key> | AtomIO.WritableSelectorFamily<State, Key>, index: AtomIO.ReadonlySelectorToken<Key[]> | AtomIO.RegularAtomToken<Key[]> | AtomIO.WritableSelectorToken<Key[]>, store?: Store): AtomIO.ReadonlySelectorToken<{
|
|
@@ -119,13 +121,17 @@ declare class Join<const ASide extends string, const BSide extends string, const
|
|
|
119
121
|
private options;
|
|
120
122
|
private defaultContent;
|
|
121
123
|
private transactors;
|
|
124
|
+
retrieve: typeof findState;
|
|
125
|
+
molecules: Map<string, Molecule<any>>;
|
|
122
126
|
relations: Junction<ASide, BSide, Content>;
|
|
123
127
|
states: JoinStateFamilies<ASide, BSide, Cardinality, Content>;
|
|
124
128
|
core: {
|
|
125
129
|
findRelatedKeysState: MutableAtomFamily<SetRTX<string>, SetRTXJson<string>, string>;
|
|
126
130
|
};
|
|
127
131
|
transact(transactors: Transactors, run: (join: Join<ASide, BSide, Cardinality, Content>) => void): void;
|
|
132
|
+
store: Store;
|
|
128
133
|
alternates: Map<string, Join<ASide, BSide, Cardinality, Content>>;
|
|
134
|
+
[Symbol.dispose](): void;
|
|
129
135
|
in(store: Store): Join<ASide, BSide, Cardinality, Content>;
|
|
130
136
|
constructor(options: JoinOptions<ASide, BSide, Cardinality, Content>, defaultContent: Content | undefined, store?: Store);
|
|
131
137
|
}
|
package/data/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Join, editRelations, editRelationsInStore, findRelations, findRelationsInStore, getInternalRelations, getInternalRelationsFromStore, getJoin, getJoinMap, join } from '../../dist/chunk-
|
|
1
|
+
export { Join, editRelations, editRelationsInStore, findRelations, findRelationsInStore, getInternalRelations, getInternalRelationsFromStore, getJoin, getJoinMap, join } from '../../dist/chunk-7DT3PVS3.js';
|
|
2
2
|
import '../../dist/chunk-FTONNX2R.js';
|
|
3
3
|
import '../../dist/chunk-F2X4B4VY.js';
|
|
4
4
|
import { createStandaloneSelector, findInStore, IMPLICIT, createRegularAtom, createRegularAtomFamily, createSelectorFamily } from 'atom.io/internal';
|
|
@@ -63,10 +63,10 @@ function structFamily(options) {
|
|
|
63
63
|
const findStructState = createSelectorFamily(
|
|
64
64
|
{
|
|
65
65
|
key: options.key,
|
|
66
|
-
get: (id) => ({ get }) => {
|
|
66
|
+
get: (id) => ({ find, get }) => {
|
|
67
67
|
return Object.keys(options.default).reduce((acc, subKey) => {
|
|
68
68
|
acc[subKey] = get(
|
|
69
|
-
atoms[nameFamily(options.key, subKey)]
|
|
69
|
+
find(atoms[nameFamily(options.key, subKey)], id)
|
|
70
70
|
);
|
|
71
71
|
return acc;
|
|
72
72
|
}, {});
|