atom.io 0.30.6 → 0.31.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.d.ts +20 -18
- package/data/dist/index.js +104 -172
- package/data/src/join.ts +138 -210
- package/dist/{chunk-LSCRHXLI.js → chunk-42UH5F5Q.js} +385 -773
- package/dist/chunk-ICGFFQ3H.js +272 -0
- package/dist/index.d.ts +52 -103
- package/dist/index.js +3 -11
- package/eslint-plugin/dist/index.d.ts +22 -3
- package/eslint-plugin/dist/index.js +7 -7
- package/immortal/dist/index.d.ts +1 -2
- package/immortal/dist/index.js +0 -3
- package/immortal/src/seek-state.ts +2 -14
- package/internal/dist/index.d.ts +59 -95
- package/internal/dist/index.js +2 -2
- package/internal/src/atom/dispose-atom.ts +31 -15
- package/internal/src/families/dispose-from-store.ts +15 -44
- package/internal/src/families/find-in-store.ts +15 -8
- package/internal/src/families/init-family-member.ts +1 -1
- package/internal/src/families/seek-in-store.ts +2 -14
- package/internal/src/get-state/get-from-store.ts +13 -79
- package/internal/src/get-trace.ts +7 -0
- package/internal/src/index.ts +2 -1
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +63 -70
- package/internal/src/ingest-updates/ingest-transaction-update.ts +4 -0
- package/internal/src/junction.ts +52 -12
- package/internal/src/lineage.ts +0 -7
- package/internal/src/molecule.ts +7 -0
- package/internal/src/mutable/transceiver.ts +5 -5
- package/internal/src/pretty-print.ts +0 -4
- package/internal/src/selector/dispose-selector.ts +3 -5
- package/internal/src/selector/register-selector.ts +2 -26
- package/internal/src/set-state/set-into-store.ts +3 -2
- package/internal/src/store/counterfeit.ts +11 -25
- package/internal/src/store/deposit.ts +5 -39
- package/internal/src/store/index.ts +1 -0
- package/internal/src/store/store.ts +51 -12
- package/internal/src/store/withdraw.ts +3 -26
- package/internal/src/timeline/create-timeline.ts +133 -237
- package/internal/src/timeline/time-travel.ts +1 -8
- package/internal/src/transaction/build-transaction.ts +10 -5
- package/internal/src/transaction/index.ts +1 -1
- package/internal/src/utility-types.ts +2 -0
- package/introspection/dist/index.d.ts +2 -3
- package/introspection/dist/index.js +9 -9
- package/introspection/src/refinery.ts +1 -3
- package/json/dist/index.js +9 -40
- package/json/src/index.ts +2 -0
- package/json/src/select-json-family.ts +7 -44
- package/package.json +34 -29
- package/react/dist/index.js +2 -10
- package/react/src/parse-state-overloads.ts +3 -11
- package/react-devtools/dist/index.js +13 -13
- package/react-devtools/src/Updates.tsx +2 -0
- package/realtime-client/dist/index.d.ts +20 -12
- package/realtime-client/dist/index.js +241 -244
- package/realtime-client/src/continuity/index.ts +3 -0
- package/realtime-client/src/continuity/register-and-attempt-confirmed-update.ts +231 -0
- package/realtime-client/src/continuity/use-conceal-state.ts +11 -0
- package/realtime-client/src/continuity/use-reveal-state.ts +19 -0
- package/realtime-client/src/index.ts +1 -0
- package/realtime-client/src/sync-continuity.ts +18 -262
- package/realtime-react/dist/index.js +2 -2
- package/realtime-server/dist/index.d.ts +1 -1
- package/realtime-server/dist/index.js +2 -2
- package/realtime-server/src/index.ts +1 -1
- package/realtime-testing/dist/index.js +2 -3
- package/realtime-testing/src/setup-realtime-test.tsx +1 -2
- package/src/allocate.ts +311 -145
- package/src/dispose-state.ts +5 -21
- package/src/get-state.ts +3 -21
- package/src/molecule.ts +11 -133
- package/src/silo.ts +1 -12
- package/src/timeline.ts +2 -3
- package/src/transaction.ts +25 -38
- package/dist/chunk-ADMEAXYU.js +0 -167
- package/internal/src/molecule/create-molecule-family.ts +0 -30
- package/internal/src/molecule/dispose-molecule.ts +0 -79
- package/internal/src/molecule/grow-molecule-in-store.ts +0 -95
- package/internal/src/molecule/index.ts +0 -5
- package/internal/src/molecule/make-molecule-in-store.ts +0 -191
- package/internal/src/molecule/molecule-internal.ts +0 -52
package/immortal/dist/index.js
CHANGED
|
@@ -2,9 +2,6 @@ import '../../dist/chunk-XWL6SNVU.js';
|
|
|
2
2
|
import { seekInStore, IMPLICIT } from 'atom.io/internal';
|
|
3
3
|
|
|
4
4
|
function seekState(token, key) {
|
|
5
|
-
if (token.type === `molecule_family`) {
|
|
6
|
-
return seekInStore(IMPLICIT.STORE, token, key);
|
|
7
|
-
}
|
|
8
5
|
const state = seekInStore(IMPLICIT.STORE, token, key);
|
|
9
6
|
return state;
|
|
10
7
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
MoleculeConstructor,
|
|
3
|
-
MoleculeFamilyToken,
|
|
4
|
-
MoleculeKey,
|
|
5
|
-
MoleculeToken,
|
|
6
2
|
MutableAtomFamilyToken,
|
|
7
3
|
MutableAtomToken,
|
|
8
4
|
ReadableFamilyToken,
|
|
@@ -55,18 +51,10 @@ export function seekState<T, K extends Canonical, Key extends K>(
|
|
|
55
51
|
key: Key,
|
|
56
52
|
): ReadableToken<T, K> | undefined
|
|
57
53
|
|
|
58
|
-
export function seekState<M extends MoleculeConstructor>(
|
|
59
|
-
token: MoleculeFamilyToken<M>,
|
|
60
|
-
key: MoleculeKey<M>,
|
|
61
|
-
): MoleculeToken<M> | undefined
|
|
62
|
-
|
|
63
54
|
export function seekState(
|
|
64
|
-
token:
|
|
55
|
+
token: ReadableFamilyToken<any, any>,
|
|
65
56
|
key: Canonical,
|
|
66
|
-
):
|
|
67
|
-
if (token.type === `molecule_family`) {
|
|
68
|
-
return seekInStore(IMPLICIT.STORE, token, key)
|
|
69
|
-
}
|
|
57
|
+
): ReadableToken<any> | undefined {
|
|
70
58
|
const state = seekInStore(IMPLICIT.STORE, token, key)
|
|
71
59
|
return state
|
|
72
60
|
}
|
package/internal/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { Json, Canonical, JsonInterface } from 'atom.io/json';
|
|
1
|
+
import { MutableAtomFamilyToken, MutableAtomToken, RegularAtomFamilyToken, RegularAtomToken, AtomFamilyToken, AtomToken, WritableSelectorFamilyToken, WritableSelectorToken, ReadonlySelectorFamilyToken, ReadonlySelectorToken, SelectorFamilyToken, SelectorToken, WritableFamilyToken, WritableToken, ReadableFamilyToken, ReadableToken, TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, AtomIOLogger, Logger, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, KeyedStateUpdate, MoleculeTransfer, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
|
|
2
|
+
import { Json, Canonical, stringified, JsonInterface } from 'atom.io/json';
|
|
4
3
|
import { Join } from 'atom.io/data';
|
|
5
|
-
import { Refinement } from 'atom.io/introspection';
|
|
6
4
|
import { Store as Store$1, Func as Func$1 } from 'atom.io/internal';
|
|
7
5
|
|
|
6
|
+
declare class CircularBuffer<T> {
|
|
7
|
+
protected _buffer: T[];
|
|
8
|
+
protected _index: number;
|
|
9
|
+
constructor(array: T[]);
|
|
10
|
+
constructor(length: number);
|
|
11
|
+
get buffer(): ReadonlyArray<T | undefined>;
|
|
12
|
+
get index(): number;
|
|
13
|
+
add(item: T): void;
|
|
14
|
+
copy(): CircularBuffer<T>;
|
|
15
|
+
}
|
|
16
|
+
|
|
8
17
|
declare const FAMILY_MEMBER_TOKEN_TYPES: {
|
|
9
18
|
readonly atom_family: "atom";
|
|
10
19
|
readonly mutable_atom_family: "mutable_atom";
|
|
@@ -20,7 +29,21 @@ declare function counterfeit<T, K extends Canonical, Key extends K>(token: Reado
|
|
|
20
29
|
declare function counterfeit<T, K extends Canonical, Key extends K>(token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
|
|
21
30
|
declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
|
|
22
31
|
declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
|
|
23
|
-
|
|
32
|
+
|
|
33
|
+
type Func = (...parameters: any[]) => any;
|
|
34
|
+
type Flat<R extends {
|
|
35
|
+
[K in PropertyKey]: any;
|
|
36
|
+
}> = {
|
|
37
|
+
[K in keyof R]: R[K];
|
|
38
|
+
};
|
|
39
|
+
type Count<N extends number, A extends any[] = []> = [
|
|
40
|
+
...A,
|
|
41
|
+
any
|
|
42
|
+
][`length`] extends N ? A[`length`] : A[`length`] | Count<N, [...A, any]>;
|
|
43
|
+
type Each<E extends any[]> = {
|
|
44
|
+
[P in Count<E[`length`]>]: E[P];
|
|
45
|
+
};
|
|
46
|
+
type Refinement<A, B extends A> = (a: A) => a is B;
|
|
24
47
|
|
|
25
48
|
type JunctionEntriesBase<AType extends string, BType extends string, Content extends Json.Object | null> = {
|
|
26
49
|
readonly relations: ([AType, BType[]] | [BType, AType[]])[];
|
|
@@ -117,20 +140,6 @@ declare class Junction<const ASide extends string, const AType extends string, c
|
|
|
117
140
|
has(b: BType, a?: AType): boolean;
|
|
118
141
|
}
|
|
119
142
|
|
|
120
|
-
type Func = (...parameters: any[]) => any;
|
|
121
|
-
type Flat<R extends {
|
|
122
|
-
[K in PropertyKey]: any;
|
|
123
|
-
}> = {
|
|
124
|
-
[K in keyof R]: R[K];
|
|
125
|
-
};
|
|
126
|
-
type Count<N extends number, A extends any[] = []> = [
|
|
127
|
-
...A,
|
|
128
|
-
any
|
|
129
|
-
][`length`] extends N ? A[`length`] : A[`length`] | Count<N, [...A, any]>;
|
|
130
|
-
type Each<E extends any[]> = {
|
|
131
|
-
[P in Count<E[`length`]>]: E[P];
|
|
132
|
-
};
|
|
133
|
-
|
|
134
143
|
declare const abortTransaction: (store: Store) => void;
|
|
135
144
|
|
|
136
145
|
declare function actUponStore<F extends Func>(token: TransactionToken<F>, id: string, store: Store): (...parameters: Parameters<F>) => ReturnType<F>;
|
|
@@ -211,49 +220,21 @@ declare function deposit<T>(state: ReadonlySelectorFamily<T, any>): ReadonlySele
|
|
|
211
220
|
declare function deposit<T>(state: SelectorFamily<T, any>): SelectorFamilyToken<T, any>;
|
|
212
221
|
declare function deposit<T>(state: WritableFamily<T, any>): WritableFamilyToken<T, any>;
|
|
213
222
|
declare function deposit<T>(state: ReadableFamily<T, any>): ReadableFamilyToken<T, any>;
|
|
214
|
-
declare function deposit<M extends MoleculeConstructor>(state: MoleculeFamily<M>): MoleculeFamilyToken<M>;
|
|
215
|
-
declare function deposit<M extends MoleculeConstructor>(state: Molecule<M>): MoleculeToken<M>;
|
|
216
223
|
declare function deposit<T extends Func>(state: Transaction<T>): TransactionToken<T>;
|
|
217
|
-
declare function deposit(state:
|
|
218
|
-
declare function deposit(state:
|
|
224
|
+
declare function deposit(state: ReadableState<any>): ReadableToken<any>;
|
|
225
|
+
declare function deposit(state: ReadableFamily<any, any> | ReadableState<any> | Transaction<Func>): ReadableFamilyToken<any, any> | ReadableToken<any> | TransactionToken<Func>;
|
|
219
226
|
|
|
220
227
|
interface Lineage {
|
|
221
228
|
parent: typeof this | null;
|
|
222
229
|
child: typeof this | null;
|
|
223
230
|
}
|
|
224
231
|
declare function newest<T extends Lineage>(scion: T): T;
|
|
225
|
-
declare function eldest<T extends Lineage>(scion: T): T;
|
|
226
|
-
|
|
227
|
-
declare function createMoleculeFamily<M extends MoleculeConstructor>(store: Store, options: MoleculeFamilyOptions<M>): MoleculeFamilyToken<M>;
|
|
228
|
-
|
|
229
|
-
declare function disposeMolecule<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): void;
|
|
230
|
-
|
|
231
|
-
declare class Molecule<M extends MoleculeConstructor> implements MoleculeToken<M> {
|
|
232
|
-
readonly key: MoleculeKey<M>;
|
|
233
|
-
readonly type = "molecule";
|
|
234
|
-
stringKey: string;
|
|
235
|
-
family?: MoleculeFamilyToken<M>;
|
|
236
|
-
_dependsOn: `all` | `any`;
|
|
237
|
-
get dependsOn(): `all` | `any`;
|
|
238
|
-
readonly subject: Subject<StateCreation<any> | StateDisposal<any>>;
|
|
239
|
-
tokens: Map<string, ReadableToken<any>>;
|
|
240
|
-
above: Map<string, Molecule<any>>;
|
|
241
|
-
below: Map<string, Molecule<any>>;
|
|
242
|
-
joins: Map<string, Join<any, any, any, any, any, any>>;
|
|
243
|
-
instance: InstanceType<M>;
|
|
244
|
-
constructor(ctx: Molecule<any>[] | undefined, key: MoleculeKey<M>, family?: MoleculeFamilyToken<M>);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
declare function growMoleculeInStore<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(molecule: Molecule<any>, family: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomToken<T, J>;
|
|
248
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomToken<T>;
|
|
249
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: AtomFamilyToken<T, K>, store: Store): AtomToken<T>;
|
|
250
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorToken<T>;
|
|
251
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: ReadonlySelectorFamilyToken<T, K>, store: Store): ReadonlySelectorToken<T>;
|
|
252
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: SelectorFamilyToken<T, K>, store: Store): SelectorToken<T>;
|
|
253
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableFamilyToken<T, K>, store: Store): WritableToken<T>;
|
|
254
|
-
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: ReadableFamilyToken<T, K>, store: Store): ReadableToken<T>;
|
|
255
232
|
|
|
256
|
-
|
|
233
|
+
type Molecule<K extends Canonical> = {
|
|
234
|
+
readonly key: K;
|
|
235
|
+
readonly stringKey: stringified<K>;
|
|
236
|
+
readonly dependsOn: `all` | `any`;
|
|
237
|
+
};
|
|
257
238
|
|
|
258
239
|
type OperationProgress = {
|
|
259
240
|
open: false;
|
|
@@ -292,7 +273,7 @@ type TimelineStateCreation<T extends ReadableToken<any>> = Flat<StateCreation<T>
|
|
|
292
273
|
type TimelineStateDisposal<T extends ReadableToken<any>> = Flat<StateDisposal<T> & {
|
|
293
274
|
timestamp: number;
|
|
294
275
|
}>;
|
|
295
|
-
type TimelineMoleculeCreation
|
|
276
|
+
type TimelineMoleculeCreation = Flat<MoleculeCreation & {
|
|
296
277
|
timestamp: number;
|
|
297
278
|
}>;
|
|
298
279
|
type TimelineMoleculeDisposal = Flat<MoleculeDisposal & {
|
|
@@ -315,17 +296,6 @@ declare function createTimeline<ManagedAtom extends TimelineManageable>(options:
|
|
|
315
296
|
|
|
316
297
|
declare const timeTravel: (store: Store, action: `redo` | `undo`, token: TimelineToken<any>) => void;
|
|
317
298
|
|
|
318
|
-
declare class CircularBuffer<T> {
|
|
319
|
-
protected _buffer: T[];
|
|
320
|
-
protected _index: number;
|
|
321
|
-
constructor(array: T[]);
|
|
322
|
-
constructor(length: number);
|
|
323
|
-
get buffer(): ReadonlyArray<T | undefined>;
|
|
324
|
-
get index(): number;
|
|
325
|
-
add(item: T): void;
|
|
326
|
-
copy(): CircularBuffer<T>;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
299
|
declare class Store implements Lineage {
|
|
330
300
|
parent: Store | null;
|
|
331
301
|
child: Store | null;
|
|
@@ -341,6 +311,7 @@ declare class Store implements Lineage {
|
|
|
341
311
|
}>;
|
|
342
312
|
trackers: Map<string, Tracker<Transceiver<any>>>;
|
|
343
313
|
families: Map<string, MutableAtomFamily<any, any, any> | ReadonlySelectorFamily<any, any> | RegularAtomFamily<any, any> | WritableSelectorFamily<any, any>>;
|
|
314
|
+
joins: Map<string, Join<any, any, any, any, any, any, `T$--content==${any}::${string}++${any}::${string}`>>;
|
|
344
315
|
transactions: Map<string, Transaction<Func>>;
|
|
345
316
|
transactionMeta: TransactionEpoch | TransactionProgress<Func>;
|
|
346
317
|
timelines: Map<string, Timeline<any>>;
|
|
@@ -351,13 +322,12 @@ declare class Store implements Lineage {
|
|
|
351
322
|
key: string;
|
|
352
323
|
trace: string;
|
|
353
324
|
}>;
|
|
354
|
-
molecules: Map<string, Molecule<
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
moleculeInProgress: string | null;
|
|
325
|
+
molecules: Map<string, Molecule<Canonical>>;
|
|
326
|
+
moleculeJoins: Junction<"moleculeKey", stringified<Canonical>, "joinKey", string, null>;
|
|
327
|
+
moleculeGraph: Junction<"upstreamMoleculeKey", stringified<Canonical> | "root", "downstreamMoleculeKey", stringified<Canonical>, {
|
|
328
|
+
source: stringified<Canonical>;
|
|
329
|
+
}>;
|
|
330
|
+
moleculeData: Junction<"moleculeKey", stringified<Canonical>, "stateFamilyKey", string, null>;
|
|
361
331
|
miscResources: Map<string, Disposable>;
|
|
362
332
|
on: {
|
|
363
333
|
atomCreation: Subject<AtomToken<unknown>>;
|
|
@@ -368,9 +338,8 @@ declare class Store implements Lineage {
|
|
|
368
338
|
transactionCreation: Subject<TransactionToken<Func>>;
|
|
369
339
|
transactionApplying: StatefulSubject<TransactionProgress<Func> | null>;
|
|
370
340
|
operationClose: Subject<OperationProgress>;
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
moleculeDisposal: Subject<MoleculeToken<any> | MoleculeDisposalModern>;
|
|
341
|
+
moleculeCreation: Subject<MoleculeCreation>;
|
|
342
|
+
moleculeDisposal: Subject<MoleculeDisposal>;
|
|
374
343
|
};
|
|
375
344
|
operation: OperationProgress;
|
|
376
345
|
config: {
|
|
@@ -386,7 +355,7 @@ declare const IMPLICIT: {
|
|
|
386
355
|
};
|
|
387
356
|
declare const clearStore: (store: Store) => void;
|
|
388
357
|
|
|
389
|
-
type Withdrawable = Atom<any> | AtomFamily<any, any> | Molecule<any> |
|
|
358
|
+
type Withdrawable = Atom<any> | AtomFamily<any, any> | Molecule<any> | MutableAtom<any, any> | MutableAtomFamily<any, any, any> | ReadableFamily<any, any> | ReadableState<any> | ReadonlySelector<any> | ReadonlySelectorFamily<any, any> | RegularAtom<any> | RegularAtomFamily<any, any> | Selector<any> | SelectorFamily<any, any> | Timeline<any> | Transaction<any> | WritableFamily<any, any> | WritableSelector<any> | WritableSelectorFamily<any, any> | WritableState<any>;
|
|
390
359
|
declare function withdraw<T>(token: RegularAtomToken<T>, store: Store): RegularAtom<T>;
|
|
391
360
|
declare function withdraw<T extends Transceiver<any>>(token: MutableAtomToken<T, any>, store: Store): MutableAtom<T, any>;
|
|
392
361
|
declare function withdraw<T>(token: AtomToken<T>, store: Store): Atom<T>;
|
|
@@ -403,18 +372,16 @@ declare function withdraw<T, K extends Canonical>(token: WritableSelectorFamilyT
|
|
|
403
372
|
declare function withdraw<T, K extends Canonical>(token: SelectorFamilyToken<T, K>, store: Store): SelectorFamily<T, any>;
|
|
404
373
|
declare function withdraw<T, K extends Canonical>(token: ReadableFamilyToken<T, K>, store: Store): ReadableFamily<T, any>;
|
|
405
374
|
declare function withdraw<T, K extends Canonical>(token: WritableFamilyToken<T, K>, store: Store): WritableFamily<T, any>;
|
|
406
|
-
declare function withdraw<M extends MoleculeConstructor>(token: MoleculeToken<M>, store: Store): Molecule<M>;
|
|
407
|
-
declare function withdraw<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, store: Store): MoleculeFamily<M>;
|
|
408
375
|
declare function withdraw<T extends Func>(token: TransactionToken<T>, store: Store): Transaction<T extends Func ? T : never>;
|
|
409
376
|
declare function withdraw<T>(token: TimelineToken<T>, store: Store): Timeline<T extends TimelineManageable ? T : never>;
|
|
410
|
-
declare function withdraw<T
|
|
377
|
+
declare function withdraw<T>(token: ReadableToken<T>, store: Store): ReadableState<T>;
|
|
411
378
|
|
|
412
|
-
interface Transceiver<
|
|
413
|
-
do: (update:
|
|
414
|
-
undo: (update:
|
|
415
|
-
subscribe: (key: string, fn: (update:
|
|
379
|
+
interface Transceiver<S extends Json.Serializable> {
|
|
380
|
+
do: (update: S) => number | `OUT_OF_RANGE` | null;
|
|
381
|
+
undo: (update: S) => void;
|
|
382
|
+
subscribe: (key: string, fn: (update: S) => void) => () => void;
|
|
416
383
|
cacheUpdateNumber: number;
|
|
417
|
-
getUpdateNumber: (update:
|
|
384
|
+
getUpdateNumber: (update: S) => number;
|
|
418
385
|
}
|
|
419
386
|
declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
|
|
420
387
|
type TransceiverMode = `playback` | `record` | `transaction`;
|
|
@@ -505,9 +472,8 @@ declare function createRegularAtomFamily<T, K extends Canonical>(store: Store, o
|
|
|
505
472
|
declare function createSelectorFamily<T, K extends Canonical>(store: Store, options: WritableSelectorFamilyOptions<T, K>): WritableSelectorFamilyToken<T, K>;
|
|
506
473
|
declare function createSelectorFamily<T, K extends Canonical>(store: Store, options: ReadonlySelectorFamilyOptions<T, K>): ReadonlySelectorFamilyToken<T, K>;
|
|
507
474
|
|
|
508
|
-
declare function disposeFromStore(store: Store, token:
|
|
475
|
+
declare function disposeFromStore(store: Store, token: ReadableToken<any>): void;
|
|
509
476
|
declare function disposeFromStore<K extends Canonical>(store: Store, token: ReadableFamilyToken<any, K>, key: K): void;
|
|
510
|
-
declare function disposeFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): void;
|
|
511
477
|
|
|
512
478
|
declare function findInStore<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J, K>;
|
|
513
479
|
declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K>;
|
|
@@ -535,7 +501,6 @@ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store
|
|
|
535
501
|
declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T, K> | undefined;
|
|
536
502
|
declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K> | undefined;
|
|
537
503
|
declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K> | undefined;
|
|
538
|
-
declare function seekInStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeKey<M> | undefined;
|
|
539
504
|
|
|
540
505
|
type EnvironmentData = {
|
|
541
506
|
store: Store;
|
|
@@ -543,20 +508,19 @@ type EnvironmentData = {
|
|
|
543
508
|
declare function getEnvironmentData(store: Store): EnvironmentData;
|
|
544
509
|
|
|
545
510
|
declare function getFromStore<T>(store: Store, token: ReadableToken<T>): T;
|
|
546
|
-
declare function getFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeToken<M>): InstanceType<M>;
|
|
547
511
|
declare function getFromStore<T, K extends Canonical>(store: Store, token: ReadableFamilyToken<T, K>, key: K): T;
|
|
548
|
-
declare function getFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): InstanceType<M>;
|
|
549
|
-
declare function getFromStore(store: Store, token: MoleculeToken<any> | ReadableToken<any>): any;
|
|
550
|
-
declare function getFromStore(store: Store, token: MoleculeFamilyToken<any> | ReadableFamilyToken<any, any>, key: Canonical): any;
|
|
551
512
|
|
|
552
513
|
declare const readOrComputeValue: <T>(state: ReadableState<T>, target: Store) => T;
|
|
553
514
|
|
|
515
|
+
declare function getTrace(error: Error): string;
|
|
516
|
+
|
|
554
517
|
declare function ingestAtomUpdate(applying: `newValue` | `oldValue`, atomUpdate: KeyedStateUpdate<any>, store: Store): void;
|
|
555
518
|
|
|
556
519
|
declare function ingestCreationEvent(update: StateCreation<any>, applying: `newValue` | `oldValue`, store: Store): void;
|
|
557
520
|
declare function ingestDisposalEvent(update: StateDisposal<ReadableToken<any>>, applying: `newValue` | `oldValue`, store: Store): void;
|
|
558
|
-
declare function ingestMoleculeCreationEvent(update: MoleculeCreation
|
|
521
|
+
declare function ingestMoleculeCreationEvent(update: MoleculeCreation, applying: `newValue` | `oldValue`, store: Store): void;
|
|
559
522
|
declare function ingestMoleculeDisposalEvent(update: MoleculeDisposal, applying: `newValue` | `oldValue`, store: Store): void;
|
|
523
|
+
declare function ingestMoleculeTransferEvent(update: MoleculeTransfer, applying: `newValue` | `oldValue`, store: Store): void;
|
|
560
524
|
|
|
561
525
|
declare function ingestSelectorUpdate(applying: `newValue` | `oldValue`, selectorUpdate: TimelineSelectorUpdate<any>, store: Store): void;
|
|
562
526
|
|
|
@@ -591,7 +555,7 @@ declare class LazyMap<K, V> extends Map<K, V> {
|
|
|
591
555
|
delete(key: K): boolean;
|
|
592
556
|
}
|
|
593
557
|
|
|
594
|
-
type AtomIOToken =
|
|
558
|
+
type AtomIOToken = ReadableFamilyToken<any, any> | ReadableToken<any> | TimelineToken<any> | TransactionToken<any>;
|
|
595
559
|
declare function prettyPrintTokenType(token: AtomIOToken): string;
|
|
596
560
|
|
|
597
561
|
declare class NotFoundError extends Error {
|
|
@@ -701,4 +665,4 @@ type SelectorFamily<T, K extends Canonical> = ReadonlySelectorFamily<T, K> | Wri
|
|
|
701
665
|
type WritableFamily<T, K extends Canonical> = AtomFamily<T, K> | WritableSelectorFamily<T, K>;
|
|
702
666
|
type ReadableFamily<T, K extends Canonical> = AtomFamily<T, K> | SelectorFamily<T, K>;
|
|
703
667
|
|
|
704
|
-
export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type BaseExternalStoreConfiguration, type ChildStore, type Count, type Each, type Empty, type EnvironmentData, type ExternalStoreConfiguration, type ExternalStoreWithContentConfiguration, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, type Flat, type Func, Future, IMPLICIT, Junction, type JunctionAdvancedConfiguration, type JunctionEntries, type JunctionEntriesBase, type JunctionJSON, type JunctionSchema, type JunctionSchemaBase, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type ReadableFamily, type ReadableState, type ReadonlySelector, type ReadonlySelectorFamily, type ReadonlySelectorKey, type RegularAtom, type RegularAtomFamily, type RootStore, type Selector, type SelectorFamily, 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 WritableFamily, type WritableSelector, type WritableSelectorFamily, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, createAtomFamily,
|
|
668
|
+
export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type BaseExternalStoreConfiguration, type ChildStore, CircularBuffer, type Count, type Each, type Empty, type EnvironmentData, type ExternalStoreConfiguration, type ExternalStoreWithContentConfiguration, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, type Flat, type Func, Future, IMPLICIT, Junction, type JunctionAdvancedConfiguration, type JunctionEntries, type JunctionEntriesBase, type JunctionJSON, type JunctionSchema, type JunctionSchemaBase, LazyMap, type Lineage, type Modify, type Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type ReadableFamily, type ReadableState, type ReadonlySelector, type ReadonlySelectorFamily, type ReadonlySelectorKey, type Refinement, type RegularAtom, type RegularAtomFamily, type RootStore, type Selector, type SelectorFamily, 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 WritableFamily, type WritableSelector, type WritableSelectorFamily, type WritableState, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw };
|
package/internal/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Junction, LazyMap,
|
|
2
|
-
import '../../dist/chunk-
|
|
1
|
+
export { CircularBuffer, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, Junction, LazyMap, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, createAtomFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeSelector, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getTrace, getUpdateFamily, getUpdateToken, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestMoleculeTransferEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, markAtomAsDefault, markAtomAsNotDefault, markDone, newest, openOperation, prettyPrintTokenType, readCachedValue, readOrComputeValue, recallState, registerSelector, seekInStore, setAtomOrSelector, setEpochNumberOfAction, setEpochNumberOfContinuity, setIntoStore, subscribeInStore, subscribeToRootAtoms, subscribeToState, subscribeToTimeline, subscribeToTransaction, timeTravel, traceAllSelectorAtoms, traceSelectorAtoms, updateSelectorAtoms, withdraw } from '../../dist/chunk-42UH5F5Q.js';
|
|
2
|
+
import '../../dist/chunk-ICGFFQ3H.js';
|
|
3
3
|
import '../../dist/chunk-XWL6SNVU.js';
|
|
@@ -1,28 +1,39 @@
|
|
|
1
|
-
import type { AtomToken } from "atom.io"
|
|
1
|
+
import type { AtomDisposal, AtomToken } from "atom.io"
|
|
2
2
|
|
|
3
3
|
import type { Store } from ".."
|
|
4
4
|
import { getUpdateToken, isChildStore, newest, withdraw } from ".."
|
|
5
5
|
|
|
6
6
|
export function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void {
|
|
7
7
|
const target = newest(store)
|
|
8
|
-
const { key } = atomToken
|
|
8
|
+
const { key, family } = atomToken
|
|
9
9
|
const atom = withdraw(atomToken, target)
|
|
10
|
-
if (!
|
|
10
|
+
if (!family) {
|
|
11
11
|
store.logger.error(`❌`, `atom`, key, `Standalone atoms cannot be disposed.`)
|
|
12
12
|
} else {
|
|
13
13
|
atom.cleanup?.()
|
|
14
14
|
const lastValue = store.valueMap.get(atom.key)
|
|
15
|
-
const
|
|
16
|
-
|
|
15
|
+
const atomFamily = withdraw({ key: family.key, type: `atom_family` }, store)
|
|
16
|
+
|
|
17
|
+
const disposal: AtomDisposal<AtomToken<unknown>> = {
|
|
17
18
|
type: `state_disposal`,
|
|
19
|
+
subType: `atom`,
|
|
18
20
|
token: atomToken,
|
|
19
21
|
value: lastValue,
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
const molecule = target.molecules.get(atom.family.subKey)
|
|
23
|
-
if (molecule) {
|
|
24
|
-
molecule.tokens.delete(key)
|
|
25
22
|
}
|
|
23
|
+
|
|
24
|
+
atomFamily.subject.next(disposal)
|
|
25
|
+
|
|
26
|
+
const isChild = isChildStore(target)
|
|
27
|
+
// let molecule = target.molecules.get(family.subKey)
|
|
28
|
+
// if (molecule && isChild) {
|
|
29
|
+
// const parentMolecule = target.parent.molecules.get(family.subKey)
|
|
30
|
+
// if (parentMolecule === molecule) {
|
|
31
|
+
// molecule = parentMolecule.copy()
|
|
32
|
+
// target.molecules.set(family.subKey, molecule)
|
|
33
|
+
// }
|
|
34
|
+
// }
|
|
35
|
+
// molecule?.tokens.delete(family.key)
|
|
36
|
+
|
|
26
37
|
target.atoms.delete(key)
|
|
27
38
|
target.valueMap.delete(key)
|
|
28
39
|
target.selectorAtoms.delete(key)
|
|
@@ -35,11 +46,16 @@ export function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void {
|
|
|
35
46
|
store.trackers.delete(key)
|
|
36
47
|
}
|
|
37
48
|
store.logger.info(`🔥`, `atom`, key, `deleted`)
|
|
38
|
-
if (
|
|
39
|
-
target.transactionMeta.update.updates.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
if (isChild && target.transactionMeta.phase === `building`) {
|
|
50
|
+
const mostRecentUpdate = target.transactionMeta.update.updates.at(-1)
|
|
51
|
+
const wasMoleculeDisposal = mostRecentUpdate?.type === `molecule_disposal`
|
|
52
|
+
const updateAlreadyCaptured =
|
|
53
|
+
wasMoleculeDisposal &&
|
|
54
|
+
mostRecentUpdate.values.some(([k]) => k === atom.family?.key)
|
|
55
|
+
|
|
56
|
+
if (!updateAlreadyCaptured) {
|
|
57
|
+
target.transactionMeta.update.updates.push(disposal)
|
|
58
|
+
}
|
|
43
59
|
} else {
|
|
44
60
|
store.on.atomDisposal.next(atomToken)
|
|
45
61
|
}
|
|
@@ -1,24 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
MoleculeConstructor,
|
|
3
|
-
MoleculeFamilyToken,
|
|
4
|
-
MoleculeKey,
|
|
5
|
-
MoleculeToken,
|
|
6
|
-
ReadableFamilyToken,
|
|
7
|
-
ReadableToken,
|
|
8
|
-
} from "atom.io"
|
|
1
|
+
import type { ReadableFamilyToken, ReadableToken } from "atom.io"
|
|
9
2
|
import type { Canonical } from "atom.io/json"
|
|
10
3
|
|
|
11
4
|
import { disposeAtom } from "../atom"
|
|
12
|
-
import {
|
|
5
|
+
import { getTrace } from "../get-trace"
|
|
13
6
|
import { disposeSelector } from "../selector"
|
|
14
|
-
import {
|
|
7
|
+
import { type Store, withdraw } from "../store"
|
|
15
8
|
import { findInStore } from "./find-in-store"
|
|
16
|
-
import { seekInStore } from "./seek-in-store"
|
|
17
9
|
|
|
18
|
-
export function disposeFromStore(
|
|
19
|
-
store: Store,
|
|
20
|
-
token: MoleculeToken<any> | ReadableToken<any>,
|
|
21
|
-
): void
|
|
10
|
+
export function disposeFromStore(store: Store, token: ReadableToken<any>): void
|
|
22
11
|
|
|
23
12
|
export function disposeFromStore<K extends Canonical>(
|
|
24
13
|
store: Store,
|
|
@@ -26,47 +15,35 @@ export function disposeFromStore<K extends Canonical>(
|
|
|
26
15
|
key: K,
|
|
27
16
|
): void
|
|
28
17
|
|
|
29
|
-
export function disposeFromStore<M extends MoleculeConstructor>(
|
|
30
|
-
store: Store,
|
|
31
|
-
token: MoleculeFamilyToken<M>,
|
|
32
|
-
key: MoleculeKey<M>,
|
|
33
|
-
): void
|
|
34
|
-
|
|
35
18
|
export function disposeFromStore(
|
|
36
19
|
store: Store,
|
|
37
20
|
...params:
|
|
38
|
-
| [token: MoleculeFamilyToken<any>, key: MoleculeKey<any>]
|
|
39
|
-
| [token: MoleculeToken<any> | ReadableToken<any>]
|
|
40
21
|
| [token: ReadableFamilyToken<any, any>, key: Canonical]
|
|
22
|
+
| [token: ReadableToken<any>]
|
|
41
23
|
): void {
|
|
42
|
-
let token:
|
|
43
|
-
let fullKey: string
|
|
24
|
+
let token: ReadableToken<any>
|
|
44
25
|
if (params.length === 1) {
|
|
45
26
|
token = params[0]
|
|
46
|
-
fullKey = token.key
|
|
47
27
|
} else {
|
|
48
28
|
const family = params[0]
|
|
49
29
|
const key = params[1]
|
|
50
|
-
const maybeToken =
|
|
51
|
-
family.type === `molecule_family`
|
|
52
|
-
? (seekInStore(store, family, key) ?? counterfeit(family, key))
|
|
53
|
-
: findInStore(store, family, key)
|
|
30
|
+
const maybeToken = findInStore(store, family, key)
|
|
54
31
|
token = maybeToken
|
|
55
32
|
}
|
|
56
33
|
try {
|
|
57
34
|
withdraw(token, store)
|
|
58
35
|
} catch (thrown) {
|
|
59
|
-
const disposal = store.disposalTraces.buffer.find(
|
|
60
|
-
|
|
61
|
-
)
|
|
36
|
+
// const disposal = store.disposalTraces.buffer.find(
|
|
37
|
+
// (item) => item?.key === token.key,
|
|
38
|
+
// )
|
|
62
39
|
store.logger.error(
|
|
63
40
|
`❌`,
|
|
64
41
|
token.type,
|
|
65
42
|
token.key,
|
|
66
43
|
`could not be disposed because it was not found in the store "${store.config.name}".`,
|
|
67
|
-
disposal
|
|
68
|
-
|
|
69
|
-
|
|
44
|
+
// disposal
|
|
45
|
+
// ? `\n This state was most recently disposed\n${disposal.trace}`
|
|
46
|
+
// : `No previous disposal trace was found.`,
|
|
70
47
|
)
|
|
71
48
|
return
|
|
72
49
|
}
|
|
@@ -79,14 +56,8 @@ export function disposeFromStore(
|
|
|
79
56
|
case `readonly_selector`:
|
|
80
57
|
disposeSelector(token, store)
|
|
81
58
|
break
|
|
82
|
-
case `molecule`:
|
|
83
|
-
disposeMolecule(token, store)
|
|
84
|
-
break
|
|
85
59
|
}
|
|
86
60
|
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
const trace = stack?.split(`\n`)?.slice(3)?.join(`\n`)
|
|
90
|
-
store.disposalTraces.add({ key: token.key, trace })
|
|
91
|
-
}
|
|
61
|
+
// const trace = getTrace(new Error())
|
|
62
|
+
// store.disposalTraces.add({ key: token.key, trace })
|
|
92
63
|
}
|
|
@@ -16,9 +16,14 @@ import type {
|
|
|
16
16
|
WritableSelectorToken,
|
|
17
17
|
WritableToken,
|
|
18
18
|
} from "atom.io"
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
type Canonical,
|
|
21
|
+
type Json,
|
|
22
|
+
stringified,
|
|
23
|
+
stringifyJson,
|
|
24
|
+
} from "atom.io/json"
|
|
20
25
|
|
|
21
|
-
import {
|
|
26
|
+
import { newest } from "../lineage"
|
|
22
27
|
import type { Transceiver } from "../mutable"
|
|
23
28
|
import { counterfeit, type Store } from "../store"
|
|
24
29
|
import { initFamilyMemberInStore } from "./init-family-member"
|
|
@@ -80,17 +85,15 @@ export function findInStore<T, K extends Canonical, Key extends K>(
|
|
|
80
85
|
export function findInStore(
|
|
81
86
|
store: Store,
|
|
82
87
|
token: ReadableFamilyToken<any, any>,
|
|
83
|
-
key:
|
|
88
|
+
key: Canonical,
|
|
84
89
|
): ReadableToken<any> {
|
|
85
90
|
let state = seekInStore(store, token, key)
|
|
86
91
|
if (state) {
|
|
87
92
|
return state
|
|
88
93
|
}
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
if (store.config.lifespan === `immortal`) {
|
|
94
|
+
const stringKey = stringifyJson(key)
|
|
95
|
+
const molecule = store.molecules.get(stringKey)
|
|
96
|
+
if (!molecule && store.config.lifespan === `immortal`) {
|
|
94
97
|
const fakeToken = counterfeit(token, key)
|
|
95
98
|
store.logger.error(
|
|
96
99
|
`❌`,
|
|
@@ -101,5 +104,9 @@ export function findInStore(
|
|
|
101
104
|
return fakeToken
|
|
102
105
|
}
|
|
103
106
|
state = initFamilyMemberInStore(store, token, key)
|
|
107
|
+
if (molecule) {
|
|
108
|
+
const target = newest(store)
|
|
109
|
+
target.moleculeData.set(stringKey, token.key)
|
|
110
|
+
}
|
|
104
111
|
return state
|
|
105
112
|
}
|
|
@@ -88,7 +88,7 @@ export function initFamilyMemberInStore(
|
|
|
88
88
|
}
|
|
89
89
|
const state = family(key)
|
|
90
90
|
const target = newest(store)
|
|
91
|
-
if (state.family
|
|
91
|
+
if (state.family) {
|
|
92
92
|
if (isRootStore(target)) {
|
|
93
93
|
switch (state.type) {
|
|
94
94
|
case `atom`:
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
AtomFamilyToken,
|
|
3
3
|
AtomToken,
|
|
4
|
-
MoleculeConstructor,
|
|
5
|
-
MoleculeFamilyToken,
|
|
6
|
-
MoleculeKey,
|
|
7
|
-
MoleculeToken,
|
|
8
4
|
MutableAtomFamilyToken,
|
|
9
5
|
MutableAtomToken,
|
|
10
6
|
ReadableFamilyToken,
|
|
@@ -81,17 +77,11 @@ export function seekInStore<T, K extends Canonical, Key extends K>(
|
|
|
81
77
|
key: Key,
|
|
82
78
|
): ReadableToken<T, K> | undefined
|
|
83
79
|
|
|
84
|
-
export function seekInStore<M extends MoleculeConstructor>(
|
|
85
|
-
store: Store,
|
|
86
|
-
token: MoleculeFamilyToken<M>,
|
|
87
|
-
key: MoleculeKey<M>,
|
|
88
|
-
): MoleculeKey<M> | undefined
|
|
89
|
-
|
|
90
80
|
export function seekInStore(
|
|
91
81
|
store: Store,
|
|
92
|
-
token:
|
|
82
|
+
token: ReadableFamilyToken<any, any>,
|
|
93
83
|
key: Canonical,
|
|
94
|
-
):
|
|
84
|
+
): ReadableToken<any> | undefined {
|
|
95
85
|
const subKey = stringifyJson(key)
|
|
96
86
|
const fullKey = `${token.key}(${subKey})`
|
|
97
87
|
const target = newest(store)
|
|
@@ -107,8 +97,6 @@ export function seekInStore(
|
|
|
107
97
|
case `readonly_selector_family`:
|
|
108
98
|
state = target.readonlySelectors.get(fullKey)
|
|
109
99
|
break
|
|
110
|
-
case `molecule_family`:
|
|
111
|
-
state = target.molecules.get(stringifyJson(key))
|
|
112
100
|
}
|
|
113
101
|
if (state) {
|
|
114
102
|
return deposit(state)
|