atom.io 0.27.3 → 0.27.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/dist/index.js +57 -72
- package/data/src/dict.ts +9 -12
- package/data/src/join.ts +25 -26
- package/data/src/struct-family.ts +17 -23
- package/data/src/struct.ts +9 -12
- package/dist/{chunk-ETCFHO7J.js → chunk-6ABWLAGY.js} +246 -159
- package/dist/index.d.ts +4 -4
- package/dist/index.js +33 -53
- package/ephemeral/dist/index.js +1 -1
- package/ephemeral/src/find-state.ts +1 -1
- package/immortal/dist/index.js +2 -2
- package/immortal/src/seek-state.ts +2 -2
- package/internal/dist/index.d.ts +88 -73
- package/internal/dist/index.js +1 -1
- package/internal/src/atom/create-regular-atom.ts +3 -3
- package/internal/src/atom/create-standalone-atom.ts +7 -5
- package/internal/src/families/create-atom-family.ts +5 -5
- package/internal/src/families/create-readonly-selector-family.ts +35 -7
- package/internal/src/families/create-regular-atom-family.ts +16 -6
- package/internal/src/families/create-selector-family.ts +5 -5
- package/internal/src/families/create-writable-selector-family.ts +35 -8
- package/internal/src/families/dispose-from-store.ts +22 -16
- package/internal/src/families/find-in-store.ts +11 -11
- package/internal/src/families/init-family-member.ts +9 -9
- package/internal/src/families/seek-in-store.ts +10 -13
- package/internal/src/get-state/get-from-store.ts +58 -20
- package/internal/src/get-state/read-or-compute-value.ts +1 -1
- package/internal/src/index.ts +5 -3
- package/internal/src/ingest-updates/ingest-atom-update.ts +1 -1
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +5 -5
- package/internal/src/molecule/create-molecule-family.ts +1 -1
- package/internal/src/molecule/dispose-molecule.ts +1 -1
- package/internal/src/molecule/grow-molecule-in-store.ts +1 -1
- package/internal/src/molecule/make-molecule-in-store.ts +5 -5
- package/internal/src/mutable/create-mutable-atom-family.ts +15 -6
- package/internal/src/mutable/create-mutable-atom.ts +3 -3
- package/internal/src/mutable/get-json-token.ts +2 -2
- package/internal/src/mutable/tracker-family.ts +3 -3
- package/internal/src/mutable/tracker.ts +14 -18
- package/internal/src/selector/create-readonly-selector.ts +2 -2
- package/internal/src/selector/create-standalone-selector.ts +5 -5
- package/internal/src/selector/create-writable-selector.ts +8 -8
- package/internal/src/selector/register-selector.ts +9 -9
- package/internal/src/set-state/set-into-store.ts +21 -18
- package/internal/src/store/deposit.ts +62 -21
- package/internal/src/store/store.ts +2 -1
- package/internal/src/subscribe/index.ts +2 -0
- package/internal/src/subscribe/subscribe-in-store.ts +62 -0
- package/internal/src/timeline/time-travel.ts +1 -1
- package/internal/src/transaction/build-transaction.ts +7 -6
- package/introspection/dist/index.js +66 -87
- package/introspection/src/attach-atom-index.ts +5 -8
- package/introspection/src/attach-selector-index.ts +6 -8
- package/introspection/src/attach-timeline-family.ts +25 -28
- package/introspection/src/attach-timeline-index.ts +5 -8
- package/introspection/src/attach-transaction-index.ts +5 -8
- package/introspection/src/attach-transaction-logs.ts +21 -27
- package/json/dist/index.js +12 -15
- package/json/src/select-json-family.ts +4 -4
- package/json/src/select-json.ts +6 -9
- package/package.json +4 -4
- package/react/dist/index.js +7 -7
- package/react/src/parse-state-overloads.ts +2 -2
- package/react/src/use-i.ts +1 -1
- package/react/src/use-json.ts +2 -2
- package/react/src/use-o.ts +2 -2
- package/realtime-client/dist/index.js +35 -55
- package/realtime-client/src/pull-atom-family-member.ts +1 -1
- package/realtime-client/src/pull-atom.ts +1 -1
- package/realtime-client/src/pull-mutable-atom-family-member.ts +3 -3
- package/realtime-client/src/pull-mutable-atom.ts +3 -3
- package/realtime-client/src/sync-continuity.ts +27 -47
- package/realtime-react/dist/index.js +3 -3
- package/realtime-react/src/use-pull-atom-family-member.ts +1 -1
- package/realtime-react/src/use-pull-mutable-family-member.ts +1 -1
- package/realtime-react/src/use-pull-selector-family-member.ts +1 -1
- package/realtime-server/dist/index.js +32 -32
- package/realtime-server/src/realtime-continuity-synchronizer.ts +16 -16
- package/realtime-server/src/realtime-family-provider.ts +3 -3
- package/realtime-server/src/realtime-mutable-family-provider.ts +5 -5
- package/realtime-server/src/realtime-mutable-provider.ts +2 -2
- package/realtime-server/src/realtime-state-provider.ts +1 -1
- package/realtime-server/src/realtime-state-receiver.ts +1 -1
- package/realtime-testing/dist/index.js +7 -7
- package/realtime-testing/src/setup-realtime-test.tsx +7 -7
- package/src/atom.ts +2 -2
- package/src/dispose-state.ts +2 -2
- package/src/get-state.ts +9 -13
- package/src/logger.ts +4 -0
- package/src/molecule.ts +1 -1
- package/src/selector.ts +2 -2
- package/src/set-state.ts +10 -7
- package/src/silo.ts +23 -53
- package/src/subscribe.ts +3 -23
- package/src/timeline.ts +2 -2
- package/internal/src/families/throw-in-case-of-conflicting-family.ts +0 -18
package/data/dist/index.js
CHANGED
|
@@ -5,19 +5,16 @@ import { stringifyJson } from 'atom.io/json';
|
|
|
5
5
|
import { SetRTX } from 'atom.io/transceivers/set-rtx';
|
|
6
6
|
|
|
7
7
|
function dict(family, index, store = IMPLICIT.STORE) {
|
|
8
|
-
return createStandaloneSelector(
|
|
9
|
-
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
},
|
|
19
|
-
store
|
|
20
|
-
);
|
|
8
|
+
return createStandaloneSelector(store, {
|
|
9
|
+
key: `${family.key}Dict`,
|
|
10
|
+
get: ({ get }) => {
|
|
11
|
+
const keys = get(index);
|
|
12
|
+
return keys.reduce((acc, key) => {
|
|
13
|
+
acc[key] = get(findInStore(store, family, key));
|
|
14
|
+
return acc;
|
|
15
|
+
}, {});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
21
18
|
}
|
|
22
19
|
function capitalize(string) {
|
|
23
20
|
return string[0].toUpperCase() + string.slice(1);
|
|
@@ -61,15 +58,15 @@ var Join = class _Join {
|
|
|
61
58
|
this.alternates.set(store.config.name, this);
|
|
62
59
|
this.store.miscResources.set(`join:${options.key}`, this);
|
|
63
60
|
this.toolkit = {
|
|
64
|
-
get: (...ps) => getFromStore(...ps
|
|
61
|
+
get: (...ps) => getFromStore(store, ...ps),
|
|
65
62
|
set: (...ps) => {
|
|
66
|
-
setIntoStore(...ps
|
|
63
|
+
setIntoStore(store, ...ps);
|
|
67
64
|
},
|
|
68
|
-
find: (
|
|
69
|
-
seek: (
|
|
70
|
-
json: (token) => getJsonToken(
|
|
65
|
+
find: (...ps) => findInStore(store, ...ps),
|
|
66
|
+
seek: (...ps) => seekInStore(store, ...ps),
|
|
67
|
+
json: (token) => getJsonToken(store, token),
|
|
71
68
|
dispose: (...ps) => {
|
|
72
|
-
disposeFromStore(...ps
|
|
69
|
+
disposeFromStore(store, ...ps);
|
|
73
70
|
}
|
|
74
71
|
};
|
|
75
72
|
this.retrieve = (token, key) => {
|
|
@@ -85,11 +82,12 @@ var Join = class _Join {
|
|
|
85
82
|
if (store.config.lifespan === `immortal`) {
|
|
86
83
|
throw new NotFoundError(token, key, store);
|
|
87
84
|
}
|
|
88
|
-
return initFamilyMemberInStore(token, key
|
|
85
|
+
return initFamilyMemberInStore(store, token, key);
|
|
89
86
|
};
|
|
90
87
|
const aSide = options.between[0];
|
|
91
88
|
const bSide = options.between[1];
|
|
92
89
|
const relatedKeysAtoms = createMutableAtomFamily(
|
|
90
|
+
store,
|
|
93
91
|
{
|
|
94
92
|
key: `${options.key}/relatedKeys`,
|
|
95
93
|
default: () => new SetRTX(),
|
|
@@ -97,7 +95,6 @@ var Join = class _Join {
|
|
|
97
95
|
fromJson: (json) => SetRTX.fromJSON(json),
|
|
98
96
|
toJson: (set) => set.toJSON()
|
|
99
97
|
},
|
|
100
|
-
store,
|
|
101
98
|
[`join`, `relations`]
|
|
102
99
|
);
|
|
103
100
|
this.core = { findRelatedKeysState: relatedKeysAtoms };
|
|
@@ -228,11 +225,11 @@ var Join = class _Join {
|
|
|
228
225
|
let contentMolecules;
|
|
229
226
|
if (defaultContent) {
|
|
230
227
|
contentAtoms = createRegularAtomFamily(
|
|
228
|
+
store,
|
|
231
229
|
{
|
|
232
230
|
key: `${options.key}/content`,
|
|
233
231
|
default: defaultContent
|
|
234
232
|
},
|
|
235
|
-
store,
|
|
236
233
|
[`join`, `content`]
|
|
237
234
|
);
|
|
238
235
|
const joinToken = {
|
|
@@ -242,18 +239,15 @@ var Join = class _Join {
|
|
|
242
239
|
b: options.between[1],
|
|
243
240
|
cardinality: options.cardinality
|
|
244
241
|
};
|
|
245
|
-
contentMolecules = createMoleculeFamily(
|
|
246
|
-
{
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
toolkit.bond(joinToken, { as: null });
|
|
252
|
-
}
|
|
242
|
+
contentMolecules = createMoleculeFamily(store, {
|
|
243
|
+
key: `${options.key}/content-molecules`,
|
|
244
|
+
new: class ContentMolecule {
|
|
245
|
+
constructor(toolkit, key) {
|
|
246
|
+
this.key = key;
|
|
247
|
+
toolkit.bond(joinToken, { as: null });
|
|
253
248
|
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
257
251
|
const getContent = ({ get }, key) => get(this.retrieve(contentAtoms, key));
|
|
258
252
|
const setContent = ({ set }, key, content) => {
|
|
259
253
|
set(this.retrieve(contentAtoms, key), content);
|
|
@@ -309,6 +303,7 @@ var Join = class _Join {
|
|
|
309
303
|
}
|
|
310
304
|
});
|
|
311
305
|
const createSingleKeyStateFamily = () => createReadonlySelectorFamily(
|
|
306
|
+
store,
|
|
312
307
|
{
|
|
313
308
|
key: `${options.key}/singleRelatedKey`,
|
|
314
309
|
get: (key) => ({ get }) => {
|
|
@@ -320,11 +315,11 @@ var Join = class _Join {
|
|
|
320
315
|
return null;
|
|
321
316
|
}
|
|
322
317
|
},
|
|
323
|
-
store,
|
|
324
318
|
[`join`, `keys`]
|
|
325
319
|
);
|
|
326
320
|
const getMultipleKeyStateFamily = () => {
|
|
327
321
|
return createReadonlySelectorFamily(
|
|
322
|
+
store,
|
|
328
323
|
{
|
|
329
324
|
key: `${options.key}/multipleRelatedKeys`,
|
|
330
325
|
get: (key) => ({ get }) => {
|
|
@@ -334,11 +329,11 @@ var Join = class _Join {
|
|
|
334
329
|
return json.members;
|
|
335
330
|
}
|
|
336
331
|
},
|
|
337
|
-
store,
|
|
338
332
|
[`join`, `keys`]
|
|
339
333
|
);
|
|
340
334
|
};
|
|
341
335
|
const createSingleEntryStateFamily = () => createReadonlySelectorFamily(
|
|
336
|
+
store,
|
|
342
337
|
{
|
|
343
338
|
key: `${options.key}/singleRelatedEntry`,
|
|
344
339
|
get: (key) => ({ get }) => {
|
|
@@ -353,10 +348,10 @@ var Join = class _Join {
|
|
|
353
348
|
return null;
|
|
354
349
|
}
|
|
355
350
|
},
|
|
356
|
-
store,
|
|
357
351
|
[`join`, `entries`]
|
|
358
352
|
);
|
|
359
353
|
const getMultipleEntryStateFamily = () => createReadonlySelectorFamily(
|
|
354
|
+
store,
|
|
360
355
|
{
|
|
361
356
|
key: `${options.key}/multipleRelatedEntries`,
|
|
362
357
|
get: (key) => ({ get }) => {
|
|
@@ -371,7 +366,6 @@ var Join = class _Join {
|
|
|
371
366
|
});
|
|
372
367
|
}
|
|
373
368
|
},
|
|
374
|
-
store,
|
|
375
369
|
[`join`, `entries`]
|
|
376
370
|
);
|
|
377
371
|
switch (options.cardinality) {
|
|
@@ -631,27 +625,24 @@ function struct(options, store = IMPLICIT.STORE) {
|
|
|
631
625
|
const atoms = Object.keys(options.default).reduce((acc, key) => {
|
|
632
626
|
const atomName = options.key + capitalize2(key) + `State`;
|
|
633
627
|
acc[atomName] = createRegularAtom(
|
|
628
|
+
store,
|
|
634
629
|
{
|
|
635
630
|
key: `${options.key}.${key}`,
|
|
636
631
|
default: options.default[key]
|
|
637
632
|
},
|
|
638
|
-
void 0
|
|
639
|
-
store
|
|
633
|
+
void 0
|
|
640
634
|
);
|
|
641
635
|
return acc;
|
|
642
636
|
}, {});
|
|
643
|
-
const structState = createStandaloneSelector(
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
},
|
|
653
|
-
store
|
|
654
|
-
);
|
|
637
|
+
const structState = createStandaloneSelector(store, {
|
|
638
|
+
key: options.key,
|
|
639
|
+
get: ({ get }) => {
|
|
640
|
+
return Object.keys(options.default).reduce((acc, key) => {
|
|
641
|
+
acc[key] = get(atoms[options.key + capitalize2(key) + `State`]);
|
|
642
|
+
return acc;
|
|
643
|
+
}, {});
|
|
644
|
+
}
|
|
645
|
+
});
|
|
655
646
|
return [atoms, structState];
|
|
656
647
|
}
|
|
657
648
|
var capitalize3 = (str) => str[0].toUpperCase() + str.slice(1);
|
|
@@ -659,29 +650,23 @@ var nameFamily = (topKey, subKey) => `find` + capitalize3(topKey) + capitalize3(
|
|
|
659
650
|
function structFamily(options) {
|
|
660
651
|
const atoms = Object.keys(options.default).reduce((acc, subKey) => {
|
|
661
652
|
const atomFamilyName = nameFamily(options.key, subKey);
|
|
662
|
-
acc[atomFamilyName] = createRegularAtomFamily(
|
|
663
|
-
{
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
},
|
|
667
|
-
IMPLICIT.STORE
|
|
668
|
-
);
|
|
653
|
+
acc[atomFamilyName] = createRegularAtomFamily(IMPLICIT.STORE, {
|
|
654
|
+
key: `${options.key}.${subKey}`,
|
|
655
|
+
default: options.default[subKey]
|
|
656
|
+
});
|
|
669
657
|
return acc;
|
|
670
658
|
}, {});
|
|
671
|
-
const findStructState = createSelectorFamily(
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
},
|
|
683
|
-
IMPLICIT.STORE
|
|
684
|
-
);
|
|
659
|
+
const findStructState = createSelectorFamily(IMPLICIT.STORE, {
|
|
660
|
+
key: options.key,
|
|
661
|
+
get: (id) => ({ find, get }) => {
|
|
662
|
+
return Object.keys(options.default).reduce((acc, subKey) => {
|
|
663
|
+
acc[subKey] = get(
|
|
664
|
+
find(atoms[nameFamily(options.key, subKey)], id)
|
|
665
|
+
);
|
|
666
|
+
return acc;
|
|
667
|
+
}, {});
|
|
668
|
+
}
|
|
669
|
+
});
|
|
685
670
|
return [atoms, findStructState];
|
|
686
671
|
}
|
|
687
672
|
|
package/data/src/dict.ts
CHANGED
|
@@ -18,17 +18,14 @@ export function dict<State, Key extends Canonical>(
|
|
|
18
18
|
| AtomIO.WritableSelectorToken<Key[]>,
|
|
19
19
|
store: Store = IMPLICIT.STORE,
|
|
20
20
|
): AtomIO.ReadonlySelectorToken<{ [K in stringified<Key>]: State }> {
|
|
21
|
-
return createStandaloneSelector(
|
|
22
|
-
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}, {} as any)
|
|
30
|
-
},
|
|
21
|
+
return createStandaloneSelector(store, {
|
|
22
|
+
key: `${family.key}Dict`,
|
|
23
|
+
get: ({ get }) => {
|
|
24
|
+
const keys = get(index)
|
|
25
|
+
return keys.reduce((acc, key) => {
|
|
26
|
+
acc[key] = get(findInStore(store, family, key))
|
|
27
|
+
return acc
|
|
28
|
+
}, {} as any)
|
|
31
29
|
},
|
|
32
|
-
|
|
33
|
-
)
|
|
30
|
+
})
|
|
34
31
|
}
|
package/data/src/join.ts
CHANGED
|
@@ -197,15 +197,17 @@ export class Join<
|
|
|
197
197
|
|
|
198
198
|
this.toolkit = {
|
|
199
199
|
get: ((...ps: Parameters<typeof getState>) =>
|
|
200
|
-
getFromStore(...ps
|
|
200
|
+
getFromStore(store, ...ps)) as typeof getState,
|
|
201
201
|
set: ((...ps: Parameters<typeof setState>) => {
|
|
202
|
-
setIntoStore(...ps
|
|
202
|
+
setIntoStore(store, ...ps)
|
|
203
203
|
}) as typeof setState,
|
|
204
|
-
find: ((
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
find: ((...ps: Parameters<typeof findState>) =>
|
|
205
|
+
findInStore(store, ...ps)) as typeof findState,
|
|
206
|
+
seek: ((...ps: Parameters<typeof seekState>) =>
|
|
207
|
+
seekInStore(store, ...ps)) as typeof seekState,
|
|
208
|
+
json: (token) => getJsonToken(store, token),
|
|
207
209
|
dispose: ((...ps: Parameters<typeof disposeState>) => {
|
|
208
|
-
disposeFromStore(...ps
|
|
210
|
+
disposeFromStore(store, ...ps)
|
|
209
211
|
}) as typeof disposeState,
|
|
210
212
|
}
|
|
211
213
|
this.retrieve = ((
|
|
@@ -224,7 +226,7 @@ export class Join<
|
|
|
224
226
|
if (store.config.lifespan === `immortal`) {
|
|
225
227
|
throw new NotFoundError(token, key, store)
|
|
226
228
|
}
|
|
227
|
-
return initFamilyMemberInStore(token, key
|
|
229
|
+
return initFamilyMemberInStore(store, token, key)
|
|
228
230
|
}) as typeof findState
|
|
229
231
|
const aSide: ASide = options.between[0]
|
|
230
232
|
const bSide: BSide = options.between[1]
|
|
@@ -233,6 +235,7 @@ export class Join<
|
|
|
233
235
|
SetRTXJson<string>,
|
|
234
236
|
string
|
|
235
237
|
>(
|
|
238
|
+
store,
|
|
236
239
|
{
|
|
237
240
|
key: `${options.key}/relatedKeys`,
|
|
238
241
|
default: () => new SetRTX(),
|
|
@@ -240,7 +243,6 @@ export class Join<
|
|
|
240
243
|
fromJson: (json) => SetRTX.fromJSON(json),
|
|
241
244
|
toJson: (set) => set.toJSON(),
|
|
242
245
|
},
|
|
243
|
-
store,
|
|
244
246
|
[`join`, `relations`],
|
|
245
247
|
)
|
|
246
248
|
this.core = { findRelatedKeysState: relatedKeysAtoms }
|
|
@@ -396,11 +398,11 @@ export class Join<
|
|
|
396
398
|
>
|
|
397
399
|
if (defaultContent) {
|
|
398
400
|
contentAtoms = createRegularAtomFamily<Content, string>(
|
|
401
|
+
store,
|
|
399
402
|
{
|
|
400
403
|
key: `${options.key}/content`,
|
|
401
404
|
default: defaultContent,
|
|
402
405
|
},
|
|
403
|
-
store,
|
|
404
406
|
[`join`, `content`],
|
|
405
407
|
)
|
|
406
408
|
const joinToken = {
|
|
@@ -410,20 +412,17 @@ export class Join<
|
|
|
410
412
|
b: options.between[1],
|
|
411
413
|
cardinality: options.cardinality,
|
|
412
414
|
} as const satisfies JoinToken<ASide, BSide, Cardinality, Content>
|
|
413
|
-
contentMolecules = createMoleculeFamily(
|
|
414
|
-
{
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
}
|
|
423
|
-
},
|
|
415
|
+
contentMolecules = createMoleculeFamily(store, {
|
|
416
|
+
key: `${options.key}/content-molecules`,
|
|
417
|
+
new: class ContentMolecule {
|
|
418
|
+
public constructor(
|
|
419
|
+
toolkit: CtorToolkit<string>,
|
|
420
|
+
public key: string,
|
|
421
|
+
) {
|
|
422
|
+
toolkit.bond(joinToken, { as: null } as any)
|
|
423
|
+
}
|
|
424
424
|
},
|
|
425
|
-
|
|
426
|
-
)
|
|
425
|
+
})
|
|
427
426
|
const getContent: Read<(key: string) => Content | null> = ({ get }, key) =>
|
|
428
427
|
get(this.retrieve(contentAtoms, key))
|
|
429
428
|
const setContent: Write<(key: string, content: Content) => void> = (
|
|
@@ -490,6 +489,7 @@ export class Join<
|
|
|
490
489
|
|
|
491
490
|
const createSingleKeyStateFamily = () =>
|
|
492
491
|
createReadonlySelectorFamily<string | null, string>(
|
|
492
|
+
store,
|
|
493
493
|
{
|
|
494
494
|
key: `${options.key}/singleRelatedKey`,
|
|
495
495
|
get:
|
|
@@ -503,11 +503,11 @@ export class Join<
|
|
|
503
503
|
return null
|
|
504
504
|
},
|
|
505
505
|
},
|
|
506
|
-
store,
|
|
507
506
|
[`join`, `keys`],
|
|
508
507
|
)
|
|
509
508
|
const getMultipleKeyStateFamily = () => {
|
|
510
509
|
return createReadonlySelectorFamily<string[], string>(
|
|
510
|
+
store,
|
|
511
511
|
{
|
|
512
512
|
key: `${options.key}/multipleRelatedKeys`,
|
|
513
513
|
get:
|
|
@@ -519,12 +519,12 @@ export class Join<
|
|
|
519
519
|
return json.members
|
|
520
520
|
},
|
|
521
521
|
},
|
|
522
|
-
store,
|
|
523
522
|
[`join`, `keys`],
|
|
524
523
|
)
|
|
525
524
|
}
|
|
526
525
|
const createSingleEntryStateFamily = () =>
|
|
527
526
|
createReadonlySelectorFamily<[string, Content] | null, string>(
|
|
527
|
+
store,
|
|
528
528
|
{
|
|
529
529
|
key: `${options.key}/singleRelatedEntry`,
|
|
530
530
|
get:
|
|
@@ -541,11 +541,11 @@ export class Join<
|
|
|
541
541
|
return null
|
|
542
542
|
},
|
|
543
543
|
},
|
|
544
|
-
store,
|
|
545
544
|
[`join`, `entries`],
|
|
546
545
|
)
|
|
547
546
|
const getMultipleEntryStateFamily = () =>
|
|
548
547
|
createReadonlySelectorFamily<[string, Content][], string>(
|
|
548
|
+
store,
|
|
549
549
|
{
|
|
550
550
|
key: `${options.key}/multipleRelatedEntries`,
|
|
551
551
|
get:
|
|
@@ -562,7 +562,6 @@ export class Join<
|
|
|
562
562
|
})
|
|
563
563
|
},
|
|
564
564
|
},
|
|
565
|
-
store,
|
|
566
565
|
[`join`, `entries`],
|
|
567
566
|
)
|
|
568
567
|
|
|
@@ -29,31 +29,25 @@ export function structFamily<
|
|
|
29
29
|
>}State`]: AtomIO.RegularAtomFamilyToken<Struct[K], string>
|
|
30
30
|
} = Object.keys(options.default).reduce((acc, subKey) => {
|
|
31
31
|
const atomFamilyName = nameFamily(options.key, subKey)
|
|
32
|
-
acc[atomFamilyName] = createRegularAtomFamily(
|
|
33
|
-
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
IMPLICIT.STORE,
|
|
38
|
-
)
|
|
32
|
+
acc[atomFamilyName] = createRegularAtomFamily(IMPLICIT.STORE, {
|
|
33
|
+
key: `${options.key}.${subKey}`,
|
|
34
|
+
default: (options.default as any)[subKey],
|
|
35
|
+
})
|
|
39
36
|
return acc
|
|
40
37
|
}, {} as any)
|
|
41
38
|
const findStructState: AtomIO.ReadonlySelectorFamilyToken<Struct, string> =
|
|
42
|
-
createSelectorFamily(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
(
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
IMPLICIT.STORE,
|
|
57
|
-
)
|
|
39
|
+
createSelectorFamily(IMPLICIT.STORE, {
|
|
40
|
+
key: options.key,
|
|
41
|
+
get:
|
|
42
|
+
(id) =>
|
|
43
|
+
({ find, get }) => {
|
|
44
|
+
return Object.keys(options.default).reduce((acc, subKey) => {
|
|
45
|
+
acc[subKey] = get(
|
|
46
|
+
find((atoms as any)[nameFamily(options.key, subKey)], id),
|
|
47
|
+
)
|
|
48
|
+
return acc
|
|
49
|
+
}, {} as any)
|
|
50
|
+
},
|
|
51
|
+
})
|
|
58
52
|
return [atoms, findStructState]
|
|
59
53
|
}
|
package/data/src/struct.ts
CHANGED
|
@@ -32,26 +32,23 @@ export function struct<
|
|
|
32
32
|
} = Object.keys(options.default).reduce((acc, key) => {
|
|
33
33
|
const atomName = options.key + capitalize(key) + `State`
|
|
34
34
|
acc[atomName] = createRegularAtom(
|
|
35
|
+
store,
|
|
35
36
|
{
|
|
36
37
|
key: `${options.key}.${key}`,
|
|
37
38
|
default: options.default[key],
|
|
38
39
|
},
|
|
39
40
|
undefined,
|
|
40
|
-
store,
|
|
41
41
|
)
|
|
42
42
|
return acc
|
|
43
43
|
}, {} as any)
|
|
44
|
-
const structState = createStandaloneSelector(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}, {} as any)
|
|
52
|
-
},
|
|
44
|
+
const structState = createStandaloneSelector(store, {
|
|
45
|
+
key: options.key,
|
|
46
|
+
get: ({ get }) => {
|
|
47
|
+
return Object.keys(options.default).reduce((acc, key) => {
|
|
48
|
+
acc[key] = get(atoms[options.key + capitalize(key) + `State`])
|
|
49
|
+
return acc
|
|
50
|
+
}, {} as any)
|
|
53
51
|
},
|
|
54
|
-
|
|
55
|
-
)
|
|
52
|
+
})
|
|
56
53
|
return [atoms, structState]
|
|
57
54
|
}
|