atom.io 0.27.5 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/dist/index.d.ts +31 -29
- package/data/dist/index.js +16 -17
- package/data/src/join.ts +17 -19
- package/dist/{chunk-6ABWLAGY.js → chunk-6WL4RQMQ.js} +314 -249
- package/dist/chunk-D52JNVER.js +721 -0
- package/dist/chunk-YQ46F5O2.js +95 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/internal/dist/index.d.ts +72 -36
- package/internal/dist/index.js +1 -1
- package/internal/src/atom/dispose-atom.ts +2 -9
- package/internal/src/families/dispose-from-store.ts +29 -18
- package/internal/src/families/find-in-store.ts +17 -7
- package/internal/src/get-state/get-from-store.ts +41 -32
- package/internal/src/ingest-updates/ingest-creation-disposal.ts +10 -1
- package/internal/src/molecule/dispose-molecule.ts +6 -17
- package/internal/src/pretty-print.ts +1 -16
- package/internal/src/selector/dispose-selector.ts +2 -9
- package/internal/src/set-state/set-into-store.ts +17 -19
- package/internal/src/store/circular-buffer.ts +34 -0
- package/internal/src/store/counterfeit.ts +109 -0
- package/internal/src/store/deposit.ts +14 -0
- package/internal/src/store/index.ts +1 -0
- package/internal/src/store/store.ts +3 -0
- package/internal/src/store/withdraw.ts +15 -10
- package/internal/src/transaction/build-transaction.ts +1 -0
- package/introspection/dist/index.d.ts +84 -4
- package/introspection/dist/index.js +1 -392
- package/introspection/src/attach-introspection-states.ts +7 -4
- package/introspection/src/attach-type-selectors.ts +26 -0
- package/introspection/src/differ.ts +167 -0
- package/introspection/src/index.ts +2 -0
- package/introspection/src/refinery.ts +100 -0
- package/json/dist/index.d.ts +31 -30
- package/json/dist/index.js +2 -77
- package/json/src/entries.ts +6 -0
- package/json/src/index.ts +53 -6
- package/package.json +18 -9
- package/react-devtools/dist/index.d.ts +1 -91
- package/react-devtools/dist/index.js +285 -414
- package/react-devtools/src/AtomIODevtools.tsx +2 -2
- package/react-devtools/src/StateEditor.tsx +20 -12
- package/react-devtools/src/StateIndex.tsx +10 -27
- package/react-devtools/src/TimelineIndex.tsx +3 -3
- package/react-devtools/src/TransactionIndex.tsx +6 -6
- package/react-devtools/src/Updates.tsx +2 -3
- package/react-devtools/src/index.ts +0 -71
- package/react-devtools/src/store.ts +51 -0
- package/realtime/dist/index.d.ts +7 -7
- package/realtime/dist/index.js +18 -22
- package/realtime/src/realtime-continuity.ts +30 -37
- package/realtime-client/dist/index.js +24 -10
- package/realtime-client/src/pull-atom-family-member.ts +2 -0
- package/realtime-client/src/pull-mutable-atom-family-member.ts +2 -0
- package/realtime-client/src/pull-selector-family-member.ts +2 -0
- package/realtime-client/src/realtime-client-stores/client-main-store.ts +6 -6
- package/realtime-client/src/sync-continuity.ts +28 -6
- package/realtime-server/dist/index.js +41 -5
- package/realtime-server/src/ipc-sockets/child-socket.ts +2 -0
- package/realtime-server/src/realtime-continuity-synchronizer.ts +42 -78
- package/realtime-testing/dist/index.d.ts +2 -0
- package/realtime-testing/dist/index.js +50 -8
- package/realtime-testing/src/setup-realtime-test.tsx +61 -9
- package/src/logger.ts +1 -0
- package/src/silo.ts +7 -3
- package/transceivers/set-rtx/src/set-rtx.ts +1 -0
- package/web/dist/index.d.ts +9 -0
- package/{dist/chunk-H6EDLPKH.js → web/dist/index.js} +5 -4
- package/web/package.json +13 -0
- package/web/src/index.ts +1 -0
- package/web/src/persist-sync.ts +25 -0
- package/dist/chunk-AK23DRMD.js +0 -21
- package/dist/chunk-IW6WYRS7.js +0 -140
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { createWritableSelectorFamily } from './chunk-6WL4RQMQ.js';
|
|
2
|
+
import { createStandaloneSelector, IMPLICIT, growMoleculeInStore, initFamilyMemberInStore, withdraw, seekInStore } from 'atom.io/internal';
|
|
3
|
+
|
|
4
|
+
// json/src/entries.ts
|
|
5
|
+
function fromEntries(entries) {
|
|
6
|
+
return Object.fromEntries(entries);
|
|
7
|
+
}
|
|
8
|
+
function toEntries(obj) {
|
|
9
|
+
return Object.entries(obj);
|
|
10
|
+
}
|
|
11
|
+
var selectJson = (atom, transform, store = IMPLICIT.STORE) => {
|
|
12
|
+
return createStandaloneSelector(store, {
|
|
13
|
+
key: `${atom.key}:JSON`,
|
|
14
|
+
get: ({ get }) => transform.toJson(get(atom)),
|
|
15
|
+
set: ({ set }, newValue) => {
|
|
16
|
+
set(atom, transform.fromJson(newValue));
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
function selectJsonFamily(atomFamilyToken, transform, store = IMPLICIT.STORE) {
|
|
21
|
+
const jsonFamily = createWritableSelectorFamily(
|
|
22
|
+
store,
|
|
23
|
+
{
|
|
24
|
+
key: `${atomFamilyToken.key}:JSON`,
|
|
25
|
+
get: (key) => ({ seek, get }) => {
|
|
26
|
+
const existingState = seek(atomFamilyToken, key);
|
|
27
|
+
if (existingState) {
|
|
28
|
+
return transform.toJson(get(existingState));
|
|
29
|
+
}
|
|
30
|
+
const stringKey = stringifyJson(key);
|
|
31
|
+
const molecule = store.molecules.get(stringKey);
|
|
32
|
+
if (molecule) {
|
|
33
|
+
const atom = growMoleculeInStore(molecule, atomFamilyToken, store);
|
|
34
|
+
return transform.toJson(get(atom));
|
|
35
|
+
}
|
|
36
|
+
if (store.config.lifespan === `immortal`) {
|
|
37
|
+
throw new Error(`No molecule found for key "${stringKey}"`);
|
|
38
|
+
}
|
|
39
|
+
const newToken = initFamilyMemberInStore(store, atomFamilyToken, key);
|
|
40
|
+
return transform.toJson(get(newToken));
|
|
41
|
+
},
|
|
42
|
+
set: (key) => ({ seek, set }, newValue) => {
|
|
43
|
+
const existingState = seek(atomFamilyToken, key);
|
|
44
|
+
if (existingState) {
|
|
45
|
+
set(existingState, transform.fromJson(newValue));
|
|
46
|
+
} else {
|
|
47
|
+
const stringKey = stringifyJson(key);
|
|
48
|
+
const molecule = store.molecules.get(stringKey);
|
|
49
|
+
if (molecule) {
|
|
50
|
+
const atom = growMoleculeInStore(molecule, atomFamilyToken, store);
|
|
51
|
+
set(atom, transform.fromJson(newValue));
|
|
52
|
+
} else {
|
|
53
|
+
if (store.config.lifespan === `immortal`) {
|
|
54
|
+
throw new Error(`No molecule found for key "${stringKey}"`);
|
|
55
|
+
}
|
|
56
|
+
set(
|
|
57
|
+
initFamilyMemberInStore(store, atomFamilyToken, key),
|
|
58
|
+
transform.fromJson(newValue)
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
[`mutable`, `json`]
|
|
65
|
+
);
|
|
66
|
+
const atomFamily = withdraw(atomFamilyToken, store);
|
|
67
|
+
atomFamily.subject.subscribe(
|
|
68
|
+
`store=${store.config.name}::json-selector-family`,
|
|
69
|
+
(event) => {
|
|
70
|
+
if (event.token.family) {
|
|
71
|
+
seekInStore(store, jsonFamily, parseJson(event.token.family.subKey));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
return jsonFamily;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// json/src/index.ts
|
|
79
|
+
var parseJson = (str) => JSON.parse(str);
|
|
80
|
+
var stringifyJson = (json) => JSON.stringify(json);
|
|
81
|
+
var JSON_PROTOTYPES = [
|
|
82
|
+
Array.prototype,
|
|
83
|
+
Boolean.prototype,
|
|
84
|
+
Number.prototype,
|
|
85
|
+
Object.prototype,
|
|
86
|
+
String.prototype
|
|
87
|
+
];
|
|
88
|
+
var isJson = (input) => {
|
|
89
|
+
if (input === null) return true;
|
|
90
|
+
if (input === void 0) return false;
|
|
91
|
+
const prototype = Object.getPrototypeOf(input);
|
|
92
|
+
return JSON_PROTOTYPES.includes(prototype);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export { fromEntries, isJson, parseJson, selectJson, selectJsonFamily, stringifyJson, toEntries };
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './chunk-XWL6SNVU.js';
|
|
2
2
|
import * as Internal from 'atom.io/internal';
|
|
3
|
-
import { createStandaloneAtom, IMPLICIT, createAtomFamily, createMoleculeFamily, makeMoleculeInStore, Molecule, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, findInStore, getFromStore, setIntoStore, disposeFromStore, subscribeInStore, timeTravel,
|
|
3
|
+
import { createStandaloneAtom, IMPLICIT, createAtomFamily, createMoleculeFamily, makeMoleculeInStore, Molecule, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, findInStore, getFromStore, setIntoStore, disposeFromStore, subscribeInStore, timeTravel, actUponStore, arbitrary } from 'atom.io/internal';
|
|
4
4
|
import { stringifyJson } from 'atom.io/json';
|
|
5
5
|
|
|
6
6
|
function atom(options) {
|
|
@@ -102,6 +102,7 @@ var Silo = class {
|
|
|
102
102
|
redo;
|
|
103
103
|
moleculeFamily;
|
|
104
104
|
makeMolecule;
|
|
105
|
+
runTransaction;
|
|
105
106
|
constructor(config, fromStore = null) {
|
|
106
107
|
const s = new Store(config, fromStore);
|
|
107
108
|
this.store = s;
|
|
@@ -132,6 +133,7 @@ var Silo = class {
|
|
|
132
133
|
this.makeMolecule = (...params) => {
|
|
133
134
|
return makeMoleculeInStore(s, ...params);
|
|
134
135
|
};
|
|
136
|
+
this.runTransaction = (token, id = arbitrary()) => actUponStore(token, id, s);
|
|
135
137
|
}
|
|
136
138
|
};
|
|
137
139
|
function subscribe(token, handleUpdate, key = arbitrary()) {
|
package/internal/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,43 @@
|
|
|
1
1
|
import * as atom_io from 'atom.io';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { MutableAtomFamilyToken, MutableAtomToken, RegularAtomFamilyToken, RegularAtomToken, AtomFamilyToken, AtomToken, WritableSelectorFamilyToken, WritableSelectorToken, ReadonlySelectorFamilyToken, ReadonlySelectorToken, SelectorFamilyToken, SelectorToken, WritableFamilyToken, WritableToken, ReadableFamilyToken, ReadableToken, MoleculeConstructor, MoleculeFamilyToken, MoleculeKey, TransactionToken, TransactionUpdate, TransactionOptions, ActorToolkit, MoleculeFamily, MoleculeToken, TimelineManageable, StateUpdate, TokenType, FamilyMetadata, StateCreation, StateDisposal, MoleculeCreation, MoleculeDisposal, TimelineUpdate, TimelineOptions, TimelineToken, AtomIOLogger, Logger, MutableAtomOptions, MutableAtomFamilyOptions, RegularAtomOptions, RegularAtomFamilyOptions, ReadonlySelectorFamilyOptions, WritableSelectorFamilyOptions, KeyedStateUpdate, MoleculeFamilyOptions, MoleculeParams, ReadonlySelectorOptions, WritableSelectorOptions, SetterToolkit, UpdateHandler, TransactionUpdateHandler } from 'atom.io';
|
|
3
|
+
import { Json as Json$1, Canonical, JsonInterface } from 'atom.io/json';
|
|
4
4
|
import { Join } from 'atom.io/data';
|
|
5
5
|
import { Store as Store$1, Func as Func$1 } from 'atom.io/internal';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
declare const FAMILY_MEMBER_TOKEN_TYPES: {
|
|
8
|
+
readonly atom_family: "atom";
|
|
9
|
+
readonly mutable_atom_family: "mutable_atom";
|
|
10
|
+
readonly selector_family: "selector";
|
|
11
|
+
readonly readonly_selector_family: "readonly_selector";
|
|
12
|
+
readonly molecule_family: "molecule";
|
|
13
|
+
};
|
|
14
|
+
declare function counterfeit<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
|
|
15
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
|
|
16
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
|
|
17
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
|
|
18
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T>;
|
|
19
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
|
|
20
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
|
|
21
|
+
declare function counterfeit<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
|
|
22
|
+
declare function counterfeit<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeKey<M>;
|
|
8
23
|
|
|
9
|
-
type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
24
|
+
type primitive = boolean | number | string | null;
|
|
25
|
+
declare namespace Json {
|
|
26
|
+
type Serializable = primitive | Readonly<{
|
|
27
|
+
[key: string]: Serializable;
|
|
28
|
+
}> | ReadonlyArray<Serializable>;
|
|
29
|
+
type Object<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
|
|
30
|
+
type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
|
|
31
|
+
}
|
|
13
32
|
|
|
14
33
|
type Refinement<Unrefined, Refined extends Unrefined> = (value: Unrefined) => value is Refined;
|
|
15
34
|
type Cardinality = `1:1` | `1:n` | `n:n`;
|
|
16
35
|
|
|
17
|
-
interface JunctionEntries<Content extends Object
|
|
36
|
+
interface JunctionEntries<Content extends Json.Object | null> extends Json.Object {
|
|
18
37
|
readonly relations: [string, string[]][];
|
|
19
38
|
readonly contents: [string, Content][];
|
|
20
39
|
}
|
|
21
|
-
interface JunctionSchema<ASide extends string, BSide extends string> extends Object
|
|
40
|
+
interface JunctionSchema<ASide extends string, BSide extends string> extends Json.Object {
|
|
22
41
|
readonly between: [a: ASide, b: BSide];
|
|
23
42
|
readonly cardinality: Cardinality;
|
|
24
43
|
}
|
|
@@ -30,7 +49,7 @@ type BaseExternalStoreConfiguration = {
|
|
|
30
49
|
getRelatedKeys: (key: string) => Set<string> | undefined;
|
|
31
50
|
has: (a: string, b?: string) => boolean;
|
|
32
51
|
};
|
|
33
|
-
type ExternalStoreWithContentConfiguration<Content extends Object
|
|
52
|
+
type ExternalStoreWithContentConfiguration<Content extends Json.Object> = {
|
|
34
53
|
getContent: (contentKey: string) => Content | undefined;
|
|
35
54
|
setContent: (contentKey: string, content: Content) => void;
|
|
36
55
|
deleteContent: (contentKey: string) => void;
|
|
@@ -38,14 +57,14 @@ type ExternalStoreWithContentConfiguration<Content extends Object$1> = {
|
|
|
38
57
|
type Empty<Obj extends object> = {
|
|
39
58
|
[Key in keyof Obj]?: undefined;
|
|
40
59
|
};
|
|
41
|
-
type ExternalStoreConfiguration<Content extends Object
|
|
42
|
-
type JunctionAdvancedConfiguration<Content extends Object
|
|
60
|
+
type ExternalStoreConfiguration<Content extends Json.Object | null> = Content extends Json.Object ? BaseExternalStoreConfiguration & ExternalStoreWithContentConfiguration<Content> : BaseExternalStoreConfiguration & Empty<ExternalStoreWithContentConfiguration<Json.Object>>;
|
|
61
|
+
type JunctionAdvancedConfiguration<Content extends Json.Object | null> = {
|
|
43
62
|
externalStore?: ExternalStoreConfiguration<Content>;
|
|
44
63
|
isContent?: Refinement<unknown, Content>;
|
|
45
64
|
makeContentKey?: (a: string, b: string) => string;
|
|
46
65
|
};
|
|
47
|
-
type JunctionJSON<ASide extends string, BSide extends string, Content extends Object
|
|
48
|
-
declare class Junction<const ASide extends string, const BSide extends string, const Content extends Object
|
|
66
|
+
type JunctionJSON<ASide extends string, BSide extends string, Content extends Json.Object | null> = JunctionEntries<Content> & JunctionSchema<ASide, BSide>;
|
|
67
|
+
declare class Junction<const ASide extends string, const BSide extends string, const Content extends Json.Object | null = null> {
|
|
49
68
|
readonly a: ASide;
|
|
50
69
|
readonly b: BSide;
|
|
51
70
|
readonly cardinality: Cardinality;
|
|
@@ -159,7 +178,7 @@ declare function deposit<T>(state: Selector<T>): SelectorToken<T>;
|
|
|
159
178
|
declare function deposit<T>(state: WritableState<T>): WritableToken<T>;
|
|
160
179
|
declare function deposit<T>(state: ReadableState<T>): ReadableToken<T>;
|
|
161
180
|
declare function deposit<T, K extends Canonical>(state: RegularAtomFamily<T, K>): RegularAtomFamilyToken<T, K>;
|
|
162
|
-
declare function deposit<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(state: MutableAtomFamily<T, J, K>): MutableAtomFamilyToken<T, J, K>;
|
|
181
|
+
declare function deposit<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(state: MutableAtomFamily<T, J, K>): MutableAtomFamilyToken<T, J, K>;
|
|
163
182
|
declare function deposit<T>(state: AtomFamily<T, any>): AtomFamilyToken<T, any>;
|
|
164
183
|
declare function deposit<T>(state: WritableSelectorFamily<T, any>): WritableSelectorFamilyToken<T, any>;
|
|
165
184
|
declare function deposit<T>(state: ReadonlySelectorFamily<T, any>): ReadonlySelectorFamilyToken<T, any>;
|
|
@@ -170,6 +189,7 @@ declare function deposit<M extends MoleculeConstructor>(state: MoleculeFamily<M>
|
|
|
170
189
|
declare function deposit<M extends MoleculeConstructor>(state: Molecule<M>): MoleculeToken<M>;
|
|
171
190
|
declare function deposit<T extends Func>(state: Transaction<T>): TransactionToken<T>;
|
|
172
191
|
declare function deposit(state: Molecule<any> | ReadableState<any>): MoleculeToken<any> | ReadableToken<any>;
|
|
192
|
+
declare function deposit(state: Molecule<any> | MoleculeFamily<any> | ReadableFamily<any, any> | ReadableState<any> | Transaction<Func>): MoleculeFamilyToken<any> | MoleculeToken<any> | ReadableFamilyToken<any, any> | ReadableToken<any> | TransactionToken<Func>;
|
|
173
193
|
|
|
174
194
|
interface Lineage {
|
|
175
195
|
parent: typeof this | null;
|
|
@@ -238,6 +258,17 @@ declare function createTimeline<ManagedAtom extends TimelineManageable>(options:
|
|
|
238
258
|
|
|
239
259
|
declare const timeTravel: (store: Store, action: `redo` | `undo`, token: TimelineToken<any>) => void;
|
|
240
260
|
|
|
261
|
+
declare class CircularBuffer<T> {
|
|
262
|
+
protected _buffer: T[];
|
|
263
|
+
protected _index: number;
|
|
264
|
+
constructor(array: T[]);
|
|
265
|
+
constructor(length: number);
|
|
266
|
+
get buffer(): ReadonlyArray<T | undefined>;
|
|
267
|
+
get index(): number;
|
|
268
|
+
add(item: T): void;
|
|
269
|
+
copy(): CircularBuffer<T>;
|
|
270
|
+
}
|
|
271
|
+
|
|
241
272
|
declare class Store implements Lineage {
|
|
242
273
|
parent: Store | null;
|
|
243
274
|
child: Store | null;
|
|
@@ -259,6 +290,10 @@ declare class Store implements Lineage {
|
|
|
259
290
|
timelineTopics: Junction<"timelineKey", "topicKey", {
|
|
260
291
|
topicType: `atom_family` | `atom` | `molecule_family` | `molecule`;
|
|
261
292
|
}>;
|
|
293
|
+
disposalTraces: CircularBuffer<{
|
|
294
|
+
key: string;
|
|
295
|
+
trace: string;
|
|
296
|
+
}>;
|
|
262
297
|
molecules: Map<string, Molecule<any>>;
|
|
263
298
|
moleculeFamilies: Map<string, Flat<atom_io.MoleculeFamilyToken<any> & {
|
|
264
299
|
subject: Subject<atom_io.MoleculeCreation<any> | atom_io.MoleculeDisposal>;
|
|
@@ -304,7 +339,7 @@ declare function withdraw<T>(token: SelectorToken<T>, store: Store): Selector<T>
|
|
|
304
339
|
declare function withdraw<T>(token: WritableToken<T>, store: Store): WritableState<T>;
|
|
305
340
|
declare function withdraw<T>(token: ReadableToken<T>, store: Store): ReadableState<T>;
|
|
306
341
|
declare function withdraw<T, K extends Canonical>(token: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomFamily<T, K>;
|
|
307
|
-
declare function withdraw<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(token: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomFamily<T, J, K>;
|
|
342
|
+
declare function withdraw<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(token: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomFamily<T, J, K>;
|
|
308
343
|
declare function withdraw<T, K extends Canonical>(token: AtomFamilyToken<T>, store: Store): AtomFamily<T, any>;
|
|
309
344
|
declare function withdraw<T, K extends Canonical>(token: ReadonlySelectorFamilyToken<T, K>, store: Store): ReadonlySelectorFamily<T, any>;
|
|
310
345
|
declare function withdraw<T, K extends Canonical>(token: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorFamily<T, any>;
|
|
@@ -315,29 +350,30 @@ declare function withdraw<M extends MoleculeConstructor>(token: MoleculeToken<M>
|
|
|
315
350
|
declare function withdraw<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, store: Store): MoleculeFamily<M>;
|
|
316
351
|
declare function withdraw<T extends Func>(token: TransactionToken<T>, store: Store): Transaction<T extends Func ? T : never>;
|
|
317
352
|
declare function withdraw<T>(token: TimelineToken<T>, store: Store): Timeline<T extends TimelineManageable ? T : never>;
|
|
353
|
+
declare function withdraw<T, M extends MoleculeConstructor>(token: MoleculeToken<M> | ReadableToken<T>, store: Store): Molecule<M> | ReadableState<T>;
|
|
318
354
|
|
|
319
|
-
interface Transceiver<Signal extends Json.Serializable> {
|
|
355
|
+
interface Transceiver<Signal extends Json$1.Serializable> {
|
|
320
356
|
do: (update: Signal) => number | `OUT_OF_RANGE` | null;
|
|
321
357
|
undo: (update: Signal) => void;
|
|
322
358
|
subscribe: (key: string, fn: (update: Signal) => void) => () => void;
|
|
323
359
|
cacheUpdateNumber: number;
|
|
324
360
|
getUpdateNumber: (update: Signal) => number;
|
|
325
361
|
}
|
|
326
|
-
declare function isTransceiver(value: unknown): value is Transceiver<Json.Serializable>;
|
|
362
|
+
declare function isTransceiver(value: unknown): value is Transceiver<Json$1.Serializable>;
|
|
327
363
|
type TransceiverMode = `playback` | `record` | `transaction`;
|
|
328
364
|
type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<infer S> ? S : never;
|
|
329
365
|
|
|
330
|
-
declare function createMutableAtom<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, options: MutableAtomOptions<T, J>, family: FamilyMetadata | undefined): MutableAtomToken<T, J>;
|
|
366
|
+
declare function createMutableAtom<T extends Transceiver<any>, J extends Json$1.Serializable>(store: Store, options: MutableAtomOptions<T, J>, family: FamilyMetadata | undefined): MutableAtomToken<T, J>;
|
|
331
367
|
|
|
332
|
-
declare function createMutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends string>(store: Store, options: MutableAtomFamilyOptions<T, J, K>, internalRoles?: string[]): MutableAtomFamilyToken<T, J, K>;
|
|
368
|
+
declare function createMutableAtomFamily<T extends Transceiver<any>, J extends Json$1.Serializable, K extends string>(store: Store, options: MutableAtomFamilyOptions<T, J, K>, internalRoles?: string[]): MutableAtomFamilyToken<T, J, K>;
|
|
333
369
|
|
|
334
|
-
declare const getJsonFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => WritableSelectorFamily<SerializableCore, Key>;
|
|
370
|
+
declare const getJsonFamily: <Core extends Transceiver<Json$1.Serializable>, SerializableCore extends Json$1.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => WritableSelectorFamily<SerializableCore, Key>;
|
|
335
371
|
|
|
336
|
-
declare const getJsonToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(store: Store, mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => WritableSelectorToken<SerializableCore>;
|
|
372
|
+
declare const getJsonToken: <Core extends Transceiver<any>, SerializableCore extends Json$1.Serializable>(store: Store, mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => WritableSelectorToken<SerializableCore>;
|
|
337
373
|
|
|
338
|
-
declare const getUpdateFamily: <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => AtomFamily<Signal<Core>, Key>;
|
|
374
|
+
declare const getUpdateFamily: <Core extends Transceiver<Json$1.Serializable>, SerializableCore extends Json$1.Serializable, Key extends string>(mutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>, store: Store) => AtomFamily<Signal<Core>, Key>;
|
|
339
375
|
|
|
340
|
-
declare const getUpdateToken: <Core extends Transceiver<any>, SerializableCore extends Json.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => RegularAtomToken<Signal<Core>>;
|
|
376
|
+
declare const getUpdateToken: <Core extends Transceiver<any>, SerializableCore extends Json$1.Serializable>(mutableAtomToken: MutableAtomToken<Core, SerializableCore>) => RegularAtomToken<Signal<Core>>;
|
|
341
377
|
|
|
342
378
|
/**
|
|
343
379
|
* @internal Give the tracker a transceiver state and a store, and it will
|
|
@@ -351,10 +387,10 @@ declare class Tracker<Mutable extends Transceiver<any>> {
|
|
|
351
387
|
private unsubscribeFromState;
|
|
352
388
|
private observeCore;
|
|
353
389
|
private updateCore;
|
|
354
|
-
mutableState: MutableAtomToken<Mutable, Json.Serializable>;
|
|
390
|
+
mutableState: MutableAtomToken<Mutable, Json$1.Serializable>;
|
|
355
391
|
latestUpdateState: RegularAtomToken<typeof this.Update | null>;
|
|
356
392
|
dispose: () => void;
|
|
357
|
-
constructor(mutableState: MutableAtomToken<Mutable, Json.Serializable>, store: Store);
|
|
393
|
+
constructor(mutableState: MutableAtomToken<Mutable, Json$1.Serializable>, store: Store);
|
|
358
394
|
}
|
|
359
395
|
|
|
360
396
|
declare class FamilyTracker<Core extends Transceiver<any>, FamilyMemberKey extends Canonical> {
|
|
@@ -369,7 +405,7 @@ declare function arbitrary(random?: () => number): string;
|
|
|
369
405
|
declare function createRegularAtom<T>(store: Store, options: RegularAtomOptions<T>, family: FamilyMetadata | undefined): RegularAtomToken<T>;
|
|
370
406
|
|
|
371
407
|
declare function createStandaloneAtom<T>(store: Store, options: RegularAtomOptions<T>): RegularAtomToken<T>;
|
|
372
|
-
declare function createStandaloneAtom<T extends Transceiver<any>, J extends Json.Serializable>(store: Store, options: MutableAtomOptions<T, J>): MutableAtomToken<T, J>;
|
|
408
|
+
declare function createStandaloneAtom<T extends Transceiver<any>, J extends Json$1.Serializable>(store: Store, options: MutableAtomOptions<T, J>): MutableAtomToken<T, J>;
|
|
373
409
|
|
|
374
410
|
declare function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void;
|
|
375
411
|
|
|
@@ -401,7 +437,7 @@ declare function cacheValue<T extends Promise<any>>(key: string, value: T, subje
|
|
|
401
437
|
declare const readCachedValue: <T>(token: ReadableState<any>, target: Store) => T;
|
|
402
438
|
declare const evictCachedValue: (key: string, target: Store) => void;
|
|
403
439
|
|
|
404
|
-
declare function createAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical>(store: Store, options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamilyToken<T, J, K>;
|
|
440
|
+
declare function createAtomFamily<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(store: Store, options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamilyToken<T, J, K>;
|
|
405
441
|
declare function createAtomFamily<T, K extends Canonical>(store: Store, options: RegularAtomFamilyOptions<T, K>): RegularAtomFamilyToken<T, K>;
|
|
406
442
|
|
|
407
443
|
declare function createReadonlySelectorFamily<T, K extends Canonical>(store: Store, options: ReadonlySelectorFamilyOptions<T, K>, internalRoles?: string[]): ReadonlySelectorFamilyToken<T, K>;
|
|
@@ -415,7 +451,7 @@ declare function disposeFromStore(store: Store, token: MoleculeToken<any> | Read
|
|
|
415
451
|
declare function disposeFromStore<K extends Canonical>(store: Store, token: ReadableFamilyToken<any, K>, key: K): void;
|
|
416
452
|
declare function disposeFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): void;
|
|
417
453
|
|
|
418
|
-
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>;
|
|
454
|
+
declare function findInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
|
|
419
455
|
declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
|
|
420
456
|
declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
|
|
421
457
|
declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
|
|
@@ -424,7 +460,7 @@ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store
|
|
|
424
460
|
declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
|
|
425
461
|
declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
|
|
426
462
|
|
|
427
|
-
declare function initFamilyMemberInStore<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>;
|
|
463
|
+
declare function initFamilyMemberInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
|
|
428
464
|
declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
|
|
429
465
|
declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
|
|
430
466
|
declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
|
|
@@ -433,7 +469,7 @@ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
|
|
|
433
469
|
declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
|
|
434
470
|
declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
|
|
435
471
|
|
|
436
|
-
declare function seekInStore<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> | undefined;
|
|
472
|
+
declare function seekInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical, Key extends K>(store: Store, token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J> | undefined;
|
|
437
473
|
declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T> | undefined;
|
|
438
474
|
declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T> | undefined;
|
|
439
475
|
declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T> | undefined;
|
|
@@ -515,7 +551,7 @@ declare class Molecule<M extends MoleculeConstructor> implements MoleculeToken<M
|
|
|
515
551
|
constructor(ctx: Molecule<any> | Molecule<any>[] | undefined, key: MoleculeKey<M>, family?: MoleculeFamilyToken<M>);
|
|
516
552
|
}
|
|
517
553
|
|
|
518
|
-
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>;
|
|
554
|
+
declare function growMoleculeInStore<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical>(molecule: Molecule<any>, family: MutableAtomFamilyToken<T, J, K>, store: Store): MutableAtomToken<T, J>;
|
|
519
555
|
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: RegularAtomFamilyToken<T, K>, store: Store): RegularAtomToken<T>;
|
|
520
556
|
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: AtomFamilyToken<T, K>, store: Store): AtomToken<T>;
|
|
521
557
|
declare function growMoleculeInStore<T, K extends Canonical>(molecule: Molecule<any>, family: WritableSelectorFamilyToken<T, K>, store: Store): WritableSelectorToken<T>;
|
|
@@ -531,7 +567,7 @@ declare function prettyPrintTokenType(token: AtomIOToken): string;
|
|
|
531
567
|
|
|
532
568
|
declare class NotFoundError extends Error {
|
|
533
569
|
constructor(token: AtomIOToken, store: Store);
|
|
534
|
-
constructor(familyToken: AtomIOToken, key: Json.Serializable, store: Store);
|
|
570
|
+
constructor(familyToken: AtomIOToken, key: Json$1.Serializable, store: Store);
|
|
535
571
|
}
|
|
536
572
|
|
|
537
573
|
declare const createReadonlySelector: <T>(store: Store, options: ReadonlySelectorOptions<T>, family: FamilyMetadata | undefined) => ReadonlySelectorToken<T>;
|
|
@@ -589,7 +625,7 @@ type RegularAtom<T> = AtomIOState & {
|
|
|
589
625
|
default: T | (() => T);
|
|
590
626
|
cleanup?: () => void;
|
|
591
627
|
};
|
|
592
|
-
type MutableAtom<T extends Transceiver<any>, J extends Json.Serializable> = AtomIOState & JsonInterface<T, J> & {
|
|
628
|
+
type MutableAtom<T extends Transceiver<any>, J extends Json$1.Serializable> = AtomIOState & JsonInterface<T, J> & {
|
|
593
629
|
type: `mutable_atom`;
|
|
594
630
|
default: T | (() => T);
|
|
595
631
|
cleanup?: () => void;
|
|
@@ -613,7 +649,7 @@ type RegularAtomFamily<T, K extends Canonical> = RegularAtomFamilyToken<T, K> &
|
|
|
613
649
|
install: (store: Store) => void;
|
|
614
650
|
internalRoles: string[] | undefined;
|
|
615
651
|
};
|
|
616
|
-
type MutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical> = JsonInterface<T, J> & MutableAtomFamilyToken<T, J, K> & {
|
|
652
|
+
type MutableAtomFamily<T extends Transceiver<any>, J extends Json$1.Serializable, K extends Canonical> = JsonInterface<T, J> & MutableAtomFamilyToken<T, J, K> & {
|
|
617
653
|
(key: K): MutableAtomToken<T, J>;
|
|
618
654
|
subject: Subject<StateCreation<MutableAtomToken<T, J>> | StateDisposal<MutableAtomToken<T, J>>>;
|
|
619
655
|
install: (store: Store) => void;
|
|
@@ -636,4 +672,4 @@ type SelectorFamily<T, K extends Canonical> = ReadonlySelectorFamily<T, K> | Wri
|
|
|
636
672
|
type WritableFamily<T, K extends Canonical> = AtomFamily<T, K> | WritableSelectorFamily<T, K>;
|
|
637
673
|
type ReadableFamily<T, K extends Canonical> = AtomFamily<T, K> | SelectorFamily<T, K>;
|
|
638
674
|
|
|
639
|
-
export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type ChildStore, type EnvironmentData, FamilyTracker, type Flat, type Func, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type Range, 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, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, 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 };
|
|
675
|
+
export { type Atom, type AtomFamily, type AtomIOState, type AtomIOToken, type AtomKey, type ChildStore, type EnvironmentData, FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, type Flat, type Func, Future, IMPLICIT, LazyMap, type Lineage, type Modify, Molecule, type MutableAtom, type MutableAtomFamily, NotFoundError, type OperationProgress, type Range, 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, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, 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 { FamilyTracker, Future, IMPLICIT, LazyMap, Molecule, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, 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-
|
|
1
|
+
export { FAMILY_MEMBER_TOKEN_TYPES, FamilyTracker, Future, IMPLICIT, LazyMap, Molecule, NotFoundError, StatefulSubject, Store, Subject, TRANSACTION_PHASES, Tracker, abortTransaction, actUponStore, applyTransaction, arbitrary, assignTransactionToContinuity, become, buildTransaction, cacheValue, clearStore, closeOperation, counterfeit, createAtomFamily, createMoleculeFamily, createMutableAtom, createMutableAtomFamily, createReadonlySelector, createReadonlySelectorFamily, createRegularAtom, createRegularAtomFamily, createSelectorFamily, createStandaloneAtom, createStandaloneSelector, createTimeline, createTransaction, createWritableSelector, deposit, disposeAtom, disposeFromStore, disposeMolecule, disposeSelector, eldest, evictCachedValue, findInStore, getContinuityKey, getEnvironmentData, getEpochNumberOfAction, getEpochNumberOfContinuity, getFromStore, getJsonFamily, getJsonToken, getSelectorDependencyKeys, getUpdateFamily, getUpdateToken, growMoleculeInStore, ingestAtomUpdate, ingestCreationEvent, ingestDisposalEvent, ingestMoleculeCreationEvent, ingestMoleculeDisposalEvent, ingestSelectorUpdate, ingestTransactionUpdate, initFamilyMemberInStore, isAtomDefault, isAtomKey, isChildStore, isDone, isReadonlySelectorKey, isRootStore, isSelectorKey, isStateKey, isTransceiver, makeMoleculeInStore, 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-6WL4RQMQ.js';
|
|
2
2
|
import '../../dist/chunk-IBTHB2PI.js';
|
|
3
3
|
import '../../dist/chunk-XWL6SNVU.js';
|
|
@@ -12,15 +12,8 @@ import {
|
|
|
12
12
|
export function disposeAtom(atomToken: AtomToken<unknown>, store: Store): void {
|
|
13
13
|
const target = newest(store)
|
|
14
14
|
const { key } = atomToken
|
|
15
|
-
const atom = target
|
|
16
|
-
if (!atom) {
|
|
17
|
-
store.logger.error(
|
|
18
|
-
`❌`,
|
|
19
|
-
`atom`,
|
|
20
|
-
key,
|
|
21
|
-
`Tried to dispose atom, but it does not exist in the store.`,
|
|
22
|
-
)
|
|
23
|
-
} else if (!atom.family) {
|
|
15
|
+
const atom = withdraw(atomToken, target)
|
|
16
|
+
if (!atom.family) {
|
|
24
17
|
store.logger.error(`❌`, `atom`, key, `Standalone atoms cannot be disposed.`)
|
|
25
18
|
} else {
|
|
26
19
|
atom.cleanup?.()
|
|
@@ -6,12 +6,12 @@ import type {
|
|
|
6
6
|
ReadableFamilyToken,
|
|
7
7
|
ReadableToken,
|
|
8
8
|
} from "atom.io"
|
|
9
|
-
import {
|
|
9
|
+
import type { Canonical } from "atom.io/json"
|
|
10
10
|
|
|
11
11
|
import { disposeAtom } from "../atom"
|
|
12
12
|
import { disposeMolecule } from "../molecule/dispose-molecule"
|
|
13
13
|
import { disposeSelector } from "../selector"
|
|
14
|
-
import type
|
|
14
|
+
import { counterfeit, type Store, withdraw } from "../store"
|
|
15
15
|
import { findInStore } from "./find-in-store"
|
|
16
16
|
import { seekInStore } from "./seek-in-store"
|
|
17
17
|
|
|
@@ -40,31 +40,36 @@ export function disposeFromStore(
|
|
|
40
40
|
| [token: ReadableFamilyToken<any, any>, key: Canonical]
|
|
41
41
|
): void {
|
|
42
42
|
let token: MoleculeToken<any> | ReadableToken<any>
|
|
43
|
+
let fullKey: string
|
|
43
44
|
if (params.length === 1) {
|
|
44
45
|
token = params[0]
|
|
46
|
+
fullKey = token.key
|
|
45
47
|
} else {
|
|
46
48
|
const family = params[0]
|
|
47
49
|
const key = params[1]
|
|
48
50
|
const maybeToken =
|
|
49
51
|
family.type === `molecule_family`
|
|
50
|
-
? seekInStore(store, family, key)
|
|
51
|
-
: store
|
|
52
|
-
? seekInStore(store, family, key)
|
|
53
|
-
: findInStore(store, family, key)
|
|
54
|
-
if (!maybeToken) {
|
|
55
|
-
store.logger.error(
|
|
56
|
-
`❗`,
|
|
57
|
-
family.type,
|
|
58
|
-
family.key,
|
|
59
|
-
`tried to dispose of member`,
|
|
60
|
-
stringifyJson(key),
|
|
61
|
-
`but it was not found in store`,
|
|
62
|
-
store.config.name,
|
|
63
|
-
)
|
|
64
|
-
return
|
|
65
|
-
}
|
|
52
|
+
? seekInStore(store, family, key) ?? counterfeit(family, key)
|
|
53
|
+
: findInStore(store, family, key)
|
|
66
54
|
token = maybeToken
|
|
67
55
|
}
|
|
56
|
+
try {
|
|
57
|
+
withdraw(token, store)
|
|
58
|
+
} catch (thrown) {
|
|
59
|
+
const disposal = store.disposalTraces.buffer.find(
|
|
60
|
+
(item) => item?.key === token.key,
|
|
61
|
+
)
|
|
62
|
+
store.logger.error(
|
|
63
|
+
`❌`,
|
|
64
|
+
token.type,
|
|
65
|
+
token.key,
|
|
66
|
+
`could not be disposed because it was not found in the store "${store.config.name}".`,
|
|
67
|
+
disposal
|
|
68
|
+
? `\n This state was most recently disposed\n${disposal.trace}`
|
|
69
|
+
: `No previous disposal trace was found.`,
|
|
70
|
+
)
|
|
71
|
+
return
|
|
72
|
+
}
|
|
68
73
|
switch (token.type) {
|
|
69
74
|
case `atom`:
|
|
70
75
|
case `mutable_atom`:
|
|
@@ -78,4 +83,10 @@ export function disposeFromStore(
|
|
|
78
83
|
disposeMolecule(token, store)
|
|
79
84
|
break
|
|
80
85
|
}
|
|
86
|
+
|
|
87
|
+
const { stack } = new Error()
|
|
88
|
+
if (stack) {
|
|
89
|
+
const trace = stack?.split(`\n`)?.slice(3)?.join(`\n`)
|
|
90
|
+
store.disposalTraces.add({ key: token.key, trace })
|
|
91
|
+
}
|
|
81
92
|
}
|
|
@@ -16,10 +16,11 @@ import type {
|
|
|
16
16
|
WritableSelectorToken,
|
|
17
17
|
WritableToken,
|
|
18
18
|
} from "atom.io"
|
|
19
|
-
import type
|
|
19
|
+
import { type Canonical, type Json, stringifyJson } from "atom.io/json"
|
|
20
20
|
|
|
21
|
+
import { growMoleculeInStore } from "../molecule"
|
|
21
22
|
import type { Transceiver } from "../mutable"
|
|
22
|
-
import type
|
|
23
|
+
import { counterfeit, type Store } from "../store"
|
|
23
24
|
import { initFamilyMemberInStore } from "./init-family-member"
|
|
24
25
|
import { seekInStore } from "./seek-in-store"
|
|
25
26
|
|
|
@@ -81,15 +82,24 @@ export function findInStore(
|
|
|
81
82
|
token: ReadableFamilyToken<any, any>,
|
|
82
83
|
key: Json.Serializable,
|
|
83
84
|
): ReadableToken<any> {
|
|
84
|
-
if (store.config.lifespan === `immortal`) {
|
|
85
|
-
throw new Error(
|
|
86
|
-
`Do not use \`find\` or \`findState\` in an immortal store. Prefer \`seek\` or \`seekState\`.`,
|
|
87
|
-
)
|
|
88
|
-
}
|
|
89
85
|
let state = seekInStore(store, token, key)
|
|
90
86
|
if (state) {
|
|
91
87
|
return state
|
|
92
88
|
}
|
|
89
|
+
const molecule = store.molecules.get(stringifyJson(key))
|
|
90
|
+
if (molecule) {
|
|
91
|
+
return growMoleculeInStore(molecule, token, store)
|
|
92
|
+
}
|
|
93
|
+
if (store.config.lifespan === `immortal`) {
|
|
94
|
+
const fakeToken = counterfeit(token, key)
|
|
95
|
+
store.logger.error(
|
|
96
|
+
`❌`,
|
|
97
|
+
fakeToken.type,
|
|
98
|
+
fakeToken.key,
|
|
99
|
+
`was not found in store "${store.config.name}"; returned a counterfeit token.`,
|
|
100
|
+
)
|
|
101
|
+
return fakeToken
|
|
102
|
+
}
|
|
93
103
|
state = initFamilyMemberInStore(store, token, key)
|
|
94
104
|
return state
|
|
95
105
|
}
|