atom.io 0.24.8 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/dist/index.cjs +40 -62
- package/data/dist/index.d.ts +3 -3
- package/data/dist/index.js +41 -63
- package/data/src/join.ts +47 -64
- package/dist/index.cjs +26 -8
- package/dist/index.d.ts +37 -15
- package/dist/index.js +27 -9
- package/internal/dist/index.cjs +204 -104
- package/internal/dist/index.d.ts +10 -5
- package/internal/dist/index.js +205 -105
- package/internal/src/families/dispose-from-store.ts +56 -3
- package/internal/src/get-state/get-from-store.ts +58 -25
- package/internal/src/molecule/make-molecule-in-store.ts +59 -23
- package/internal/src/not-found-error.ts +29 -6
- package/internal/src/selector/create-writable-selector.ts +5 -5
- package/internal/src/selector/register-selector.ts +58 -9
- package/internal/src/set-state/set-into-store.ts +48 -1
- package/internal/src/store/store.ts +4 -4
- package/internal/src/transaction/build-transaction.ts +10 -9
- package/internal/src/transaction/create-transaction.ts +2 -2
- package/internal/src/transaction/index.ts +2 -2
- package/package.json +5 -5
- package/react/dist/index.cjs +4 -1
- package/react/dist/index.js +5 -2
- package/react/src/use-o.ts +11 -3
- package/realtime/dist/index.cjs +0 -1
- package/realtime/dist/index.js +0 -1
- package/realtime/src/realtime-continuity.ts +0 -1
- package/realtime-server/dist/index.cjs +7 -7
- package/realtime-server/dist/index.js +7 -7
- package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +7 -7
- package/src/dispose-state.ts +32 -3
- package/src/get-state.ts +37 -4
- package/src/molecule.ts +20 -7
- package/src/set-state.ts +19 -2
- package/src/silo.ts +11 -4
- package/src/transaction.ts +9 -17
package/data/src/join.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
2
2
|
import type {
|
|
3
|
+
CtorToolkit,
|
|
3
4
|
disposeState,
|
|
5
|
+
getState,
|
|
4
6
|
MoleculeFamilyToken,
|
|
5
|
-
MoleculeTransactors,
|
|
6
7
|
MutableAtomFamily,
|
|
7
8
|
MutableAtomFamilyToken,
|
|
8
9
|
Read,
|
|
@@ -11,7 +12,8 @@ import type {
|
|
|
11
12
|
ReadonlySelectorFamily,
|
|
12
13
|
ReadonlySelectorToken,
|
|
13
14
|
RegularAtomFamily,
|
|
14
|
-
|
|
15
|
+
setState,
|
|
16
|
+
SetterToolkit,
|
|
15
17
|
Write,
|
|
16
18
|
} from "atom.io"
|
|
17
19
|
import type { findState } from "atom.io/ephemeral"
|
|
@@ -33,6 +35,7 @@ import {
|
|
|
33
35
|
isChildStore,
|
|
34
36
|
makeMoleculeInStore,
|
|
35
37
|
newest,
|
|
38
|
+
NotFoundError,
|
|
36
39
|
seekInStore,
|
|
37
40
|
setIntoStore,
|
|
38
41
|
withdraw,
|
|
@@ -141,7 +144,7 @@ export class Join<
|
|
|
141
144
|
> {
|
|
142
145
|
private options: JoinOptions<ASide, BSide, Cardinality, Content>
|
|
143
146
|
private defaultContent: Content | undefined
|
|
144
|
-
private
|
|
147
|
+
private toolkit: SetterToolkit & { dispose: typeof disposeState }
|
|
145
148
|
public retrieve: typeof findState
|
|
146
149
|
public molecules: Map<string, Molecule<any>> = new Map()
|
|
147
150
|
public relations: Junction<ASide, BSide, Content>
|
|
@@ -154,13 +157,13 @@ export class Join<
|
|
|
154
157
|
>
|
|
155
158
|
}
|
|
156
159
|
public transact(
|
|
157
|
-
|
|
160
|
+
toolkit: SetterToolkit & { dispose: typeof disposeState },
|
|
158
161
|
run: (join: Join<ASide, BSide, Cardinality, Content>) => void,
|
|
159
162
|
): void {
|
|
160
|
-
const
|
|
161
|
-
this.
|
|
163
|
+
const originalToolkit = this.toolkit
|
|
164
|
+
this.toolkit = toolkit
|
|
162
165
|
run(this)
|
|
163
|
-
this.
|
|
166
|
+
this.toolkit = originalToolkit
|
|
164
167
|
}
|
|
165
168
|
|
|
166
169
|
public store: Store
|
|
@@ -194,23 +197,24 @@ export class Join<
|
|
|
194
197
|
|
|
195
198
|
this.store.miscResources.set(`join:${options.key}`, this)
|
|
196
199
|
|
|
197
|
-
this.
|
|
198
|
-
get: (
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
200
|
+
this.toolkit = {
|
|
201
|
+
get: ((...ps: Parameters<typeof getState>) =>
|
|
202
|
+
getFromStore(...ps, store)) as typeof getState,
|
|
203
|
+
set: ((...ps: Parameters<typeof setState>) => {
|
|
204
|
+
setIntoStore(...ps, store)
|
|
205
|
+
}) as typeof setState,
|
|
202
206
|
find: ((token, key) => findInStore(token, key, store)) as typeof findState,
|
|
203
207
|
seek: ((token, key) => seekInStore(token, key, store)) as typeof seekState,
|
|
204
208
|
json: (token) => getJsonToken(token, store),
|
|
205
|
-
dispose: (
|
|
206
|
-
disposeFromStore(
|
|
207
|
-
},
|
|
209
|
+
dispose: ((...ps: Parameters<typeof disposeState>) => {
|
|
210
|
+
disposeFromStore(...ps, store)
|
|
211
|
+
}) as typeof disposeState,
|
|
208
212
|
}
|
|
209
213
|
this.retrieve = ((
|
|
210
214
|
token: ReadableFamilyToken<any, any>,
|
|
211
215
|
key: Json.Serializable,
|
|
212
216
|
): ReadableToken<any> => {
|
|
213
|
-
const maybeToken = this.
|
|
217
|
+
const maybeToken = this.toolkit.seek(token, key)
|
|
214
218
|
if (maybeToken) {
|
|
215
219
|
return maybeToken
|
|
216
220
|
}
|
|
@@ -220,7 +224,7 @@ export class Join<
|
|
|
220
224
|
return growMoleculeInStore(molecule, family, store)
|
|
221
225
|
}
|
|
222
226
|
if (store.config.lifespan === `immortal`) {
|
|
223
|
-
throw new
|
|
227
|
+
throw new NotFoundError(token, key, store)
|
|
224
228
|
}
|
|
225
229
|
return initFamilyMemberInStore(token, key, store)
|
|
226
230
|
}) as typeof findState
|
|
@@ -246,22 +250,22 @@ export class Join<
|
|
|
246
250
|
key,
|
|
247
251
|
) => get(this.retrieve(relatedKeysAtoms, key))
|
|
248
252
|
const addRelation: Write<(a: string, b: string) => void> = (
|
|
249
|
-
|
|
253
|
+
toolkit,
|
|
250
254
|
a,
|
|
251
255
|
b,
|
|
252
256
|
) => {
|
|
253
|
-
const { set } =
|
|
257
|
+
const { set } = toolkit
|
|
254
258
|
const aKeysState = this.retrieve(relatedKeysAtoms, a)
|
|
255
259
|
const bKeysState = this.retrieve(relatedKeysAtoms, b)
|
|
256
260
|
set(aKeysState, (aKeys) => aKeys.add(b))
|
|
257
261
|
set(bKeysState, (bKeys) => bKeys.add(a))
|
|
258
262
|
}
|
|
259
263
|
const deleteRelation: Write<(a: string, b: string) => void> = (
|
|
260
|
-
|
|
264
|
+
toolkit,
|
|
261
265
|
a,
|
|
262
266
|
b,
|
|
263
267
|
) => {
|
|
264
|
-
const { set } =
|
|
268
|
+
const { set } = toolkit
|
|
265
269
|
const aKeysState = this.retrieve(relatedKeysAtoms, a)
|
|
266
270
|
const bKeysState = this.retrieve(relatedKeysAtoms, b)
|
|
267
271
|
let stringA: string | undefined
|
|
@@ -280,24 +284,11 @@ export class Join<
|
|
|
280
284
|
}
|
|
281
285
|
return bKeys
|
|
282
286
|
})
|
|
283
|
-
|
|
284
|
-
if (stringA) {
|
|
285
|
-
const molecule = this.molecules.get(stringA)
|
|
286
|
-
if (molecule) {
|
|
287
|
-
this.transactors.dispose(molecule)
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
if (stringB) {
|
|
291
|
-
const molecule = this.molecules.get(stringB)
|
|
292
|
-
if (molecule) {
|
|
293
|
-
this.transactors.dispose(molecule)
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
287
|
}
|
|
297
288
|
const replaceRelationsSafely: Write<
|
|
298
289
|
(a: string, newRelationsOfA: string[]) => void
|
|
299
|
-
> = (
|
|
300
|
-
const { get, set } =
|
|
290
|
+
> = (toolkit, a, newRelationsOfA) => {
|
|
291
|
+
const { get, set } = toolkit
|
|
301
292
|
const relationsOfAState = this.retrieve(relatedKeysAtoms, a)
|
|
302
293
|
const currentRelationsOfA = get(relationsOfAState)
|
|
303
294
|
for (const currentRelationB of currentRelationsOfA) {
|
|
@@ -318,7 +309,7 @@ export class Join<
|
|
|
318
309
|
relationsOfA.transaction((nextRelationsOfA) => {
|
|
319
310
|
nextRelationsOfA.clear()
|
|
320
311
|
for (const newRelationB of newRelationsOfA) {
|
|
321
|
-
const relationsOfB = getRelatedKeys(
|
|
312
|
+
const relationsOfB = getRelatedKeys(toolkit, newRelationB)
|
|
322
313
|
const newRelationBIsAlreadyRelated = relationsOfB.has(a)
|
|
323
314
|
if (this.relations.cardinality === `1:n`) {
|
|
324
315
|
const previousOwnersToDispose: string[] = []
|
|
@@ -327,7 +318,7 @@ export class Join<
|
|
|
327
318
|
continue
|
|
328
319
|
}
|
|
329
320
|
const previousOwnerRelations = getRelatedKeys(
|
|
330
|
-
|
|
321
|
+
toolkit,
|
|
331
322
|
previousOwner,
|
|
332
323
|
)
|
|
333
324
|
previousOwnerRelations.delete(newRelationB)
|
|
@@ -339,10 +330,6 @@ export class Join<
|
|
|
339
330
|
relationsOfB.clear()
|
|
340
331
|
}
|
|
341
332
|
for (const previousOwner of previousOwnersToDispose) {
|
|
342
|
-
const molecule = this.molecules.get(previousOwner)
|
|
343
|
-
if (molecule) {
|
|
344
|
-
this.transactors.dispose(molecule)
|
|
345
|
-
}
|
|
346
333
|
const sorted = [newRelationB, previousOwner].sort()
|
|
347
334
|
const compositeKey = `"${sorted[0]}:${sorted[1]}"`
|
|
348
335
|
this.molecules.delete(compositeKey)
|
|
@@ -360,8 +347,8 @@ export class Join<
|
|
|
360
347
|
}
|
|
361
348
|
const replaceRelationsUnsafely: Write<
|
|
362
349
|
(a: string, newRelationsOfA: string[]) => void
|
|
363
|
-
> = (
|
|
364
|
-
const { set } =
|
|
350
|
+
> = (toolkit, a, newRelationsOfA) => {
|
|
351
|
+
const { set } = toolkit
|
|
365
352
|
const relationsOfAState = this.retrieve(relatedKeysAtoms, a)
|
|
366
353
|
set(relationsOfAState, (relationsOfA) => {
|
|
367
354
|
relationsOfA.transaction((nextRelationsOfA) => {
|
|
@@ -381,29 +368,25 @@ export class Join<
|
|
|
381
368
|
}
|
|
382
369
|
return true
|
|
383
370
|
}
|
|
384
|
-
const has: Read<(a: string, b?: string) => boolean> = (
|
|
385
|
-
|
|
386
|
-
a,
|
|
387
|
-
b,
|
|
388
|
-
) => {
|
|
389
|
-
const aKeys = getRelatedKeys(transactors, a)
|
|
371
|
+
const has: Read<(a: string, b?: string) => boolean> = (toolkit, a, b) => {
|
|
372
|
+
const aKeys = getRelatedKeys(toolkit, a)
|
|
390
373
|
return b ? aKeys.has(b) : aKeys.size > 0
|
|
391
374
|
}
|
|
392
375
|
const baseExternalStoreConfiguration: BaseExternalStoreConfiguration = {
|
|
393
|
-
getRelatedKeys: (key) => getRelatedKeys(this.
|
|
376
|
+
getRelatedKeys: (key) => getRelatedKeys(this.toolkit, key),
|
|
394
377
|
addRelation: (a, b) => {
|
|
395
|
-
addRelation(this.
|
|
378
|
+
addRelation(this.toolkit, a, b)
|
|
396
379
|
},
|
|
397
380
|
deleteRelation: (a, b) => {
|
|
398
|
-
deleteRelation(this.
|
|
381
|
+
deleteRelation(this.toolkit, a, b)
|
|
399
382
|
},
|
|
400
383
|
replaceRelationsSafely: (a, bs) => {
|
|
401
|
-
replaceRelationsSafely(this.
|
|
384
|
+
replaceRelationsSafely(this.toolkit, a, bs)
|
|
402
385
|
},
|
|
403
386
|
replaceRelationsUnsafely: (a, bs) => {
|
|
404
|
-
replaceRelationsUnsafely(this.
|
|
387
|
+
replaceRelationsUnsafely(this.toolkit, a, bs)
|
|
405
388
|
},
|
|
406
|
-
has: (a, b) => has(this.
|
|
389
|
+
has: (a, b) => has(this.toolkit, a, b),
|
|
407
390
|
}
|
|
408
391
|
let externalStore: ExternalStoreConfiguration<Content>
|
|
409
392
|
let contentAtoms: RegularAtomFamily<Content, string>
|
|
@@ -432,10 +415,10 @@ export class Join<
|
|
|
432
415
|
key: `${options.key}/content-molecules`,
|
|
433
416
|
new: class ContentMolecule {
|
|
434
417
|
public constructor(
|
|
435
|
-
|
|
418
|
+
toolkit: CtorToolkit<string>,
|
|
436
419
|
public key: string,
|
|
437
420
|
) {
|
|
438
|
-
|
|
421
|
+
toolkit.bond(joinToken, { as: null } as any)
|
|
439
422
|
}
|
|
440
423
|
},
|
|
441
424
|
},
|
|
@@ -456,20 +439,20 @@ export class Join<
|
|
|
456
439
|
) => {
|
|
457
440
|
const contentMolecule = store.molecules.get(`"${compositeKey}"`)
|
|
458
441
|
if (contentMolecule) {
|
|
459
|
-
this.
|
|
442
|
+
this.toolkit.dispose(contentMolecule)
|
|
460
443
|
this.molecules.delete(`"${compositeKey}"`)
|
|
461
444
|
}
|
|
462
445
|
}
|
|
463
446
|
const externalStoreWithContentConfiguration = {
|
|
464
447
|
getContent: (contentKey: string) => {
|
|
465
|
-
const content = getContent(this.
|
|
448
|
+
const content = getContent(this.toolkit, contentKey)
|
|
466
449
|
return content
|
|
467
450
|
},
|
|
468
451
|
setContent: (contentKey: string, content: Content) => {
|
|
469
|
-
setContent(this.
|
|
452
|
+
setContent(this.toolkit, contentKey, content)
|
|
470
453
|
},
|
|
471
454
|
deleteContent: (contentKey: string) => {
|
|
472
|
-
deleteContent(this.
|
|
455
|
+
deleteContent(this.toolkit, contentKey)
|
|
473
456
|
},
|
|
474
457
|
}
|
|
475
458
|
externalStore = Object.assign(
|
|
@@ -950,8 +933,8 @@ export function editRelationsInStore<
|
|
|
950
933
|
const myJoin = getJoin(token, store)
|
|
951
934
|
const target = newest(store)
|
|
952
935
|
if (isChildStore(target)) {
|
|
953
|
-
const {
|
|
954
|
-
myJoin.transact(
|
|
936
|
+
const { toolkit } = target.transactionMeta
|
|
937
|
+
myJoin.transact(toolkit, ({ relations }) => {
|
|
955
938
|
change(relations)
|
|
956
939
|
})
|
|
957
940
|
} else {
|
package/dist/index.cjs
CHANGED
|
@@ -30,10 +30,21 @@ function atom(options) {
|
|
|
30
30
|
function atomFamily(options) {
|
|
31
31
|
return Internal.createAtomFamily(options, Internal.IMPLICIT.STORE);
|
|
32
32
|
}
|
|
33
|
-
function disposeState(token) {
|
|
34
|
-
|
|
33
|
+
function disposeState(token, key) {
|
|
34
|
+
if (key) {
|
|
35
|
+
Internal__namespace.disposeFromStore(token, key, Internal__namespace.IMPLICIT.STORE);
|
|
36
|
+
} else {
|
|
37
|
+
Internal__namespace.disposeFromStore(token, Internal__namespace.IMPLICIT.STORE);
|
|
38
|
+
}
|
|
35
39
|
}
|
|
36
|
-
function getState(token) {
|
|
40
|
+
function getState(token, key) {
|
|
41
|
+
if (key) {
|
|
42
|
+
return Internal__namespace.getFromStore(
|
|
43
|
+
token,
|
|
44
|
+
key,
|
|
45
|
+
Internal__namespace.IMPLICIT.STORE
|
|
46
|
+
);
|
|
47
|
+
}
|
|
37
48
|
return Internal__namespace.getFromStore(token, Internal__namespace.IMPLICIT.STORE);
|
|
38
49
|
}
|
|
39
50
|
|
|
@@ -95,8 +106,12 @@ function selector(options) {
|
|
|
95
106
|
function selectorFamily(options) {
|
|
96
107
|
return Internal.createSelectorFamily(options, Internal.IMPLICIT.STORE);
|
|
97
108
|
}
|
|
98
|
-
function setState(token,
|
|
99
|
-
|
|
109
|
+
function setState(token, p1, p2) {
|
|
110
|
+
if (p2) {
|
|
111
|
+
Internal__namespace.setIntoStore(token, p1, p2, Internal__namespace.IMPLICIT.STORE);
|
|
112
|
+
} else {
|
|
113
|
+
Internal__namespace.setIntoStore(token, p1, Internal__namespace.IMPLICIT.STORE);
|
|
114
|
+
}
|
|
100
115
|
}
|
|
101
116
|
var Silo = class {
|
|
102
117
|
constructor(config, fromStore = null) {
|
|
@@ -115,9 +130,12 @@ var Silo = class {
|
|
|
115
130
|
this.transaction = (options) => Internal.createTransaction(options, s);
|
|
116
131
|
this.timeline = (options) => Internal.createTimeline(options, s);
|
|
117
132
|
this.findState = (token, key) => Internal.findInStore(token, key, s);
|
|
118
|
-
this.getState = (
|
|
119
|
-
this.setState = (
|
|
120
|
-
Internal.setIntoStore(
|
|
133
|
+
this.getState = (...params) => Internal.getFromStore(...params, s);
|
|
134
|
+
this.setState = (...params) => {
|
|
135
|
+
Internal.setIntoStore(...params, s);
|
|
136
|
+
};
|
|
137
|
+
this.disposeState = (...params) => {
|
|
138
|
+
Internal.disposeFromStore(...params, s);
|
|
121
139
|
};
|
|
122
140
|
this.subscribe = (token, handler, key) => subscribe(token, handler, key, s);
|
|
123
141
|
this.undo = (token) => {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Transceiver, Subject, Store, EnvironmentData, Timeline, TimelineAtomUpdate, TimelineMoleculeCreation, TimelineMoleculeDisposal, TimelineSelectorUpdate, TimelineStateCreation, TimelineStateDisposal, TimelineTransactionUpdate } from 'atom.io/internal';
|
|
2
2
|
import { Json, JsonInterface } from 'atom.io/json';
|
|
3
|
-
import { MoleculeConstructor as MoleculeConstructor$1, MoleculeToken as MoleculeToken$1, MoleculeFamilyToken as MoleculeFamilyToken$1, MoleculeParams as MoleculeParams$1, getState as getState$1, makeMolecule as makeMolecule$1, Flat as Flat$1,
|
|
3
|
+
import { MoleculeConstructor as MoleculeConstructor$1, MoleculeToken as MoleculeToken$1, MoleculeFamilyToken as MoleculeFamilyToken$1, MoleculeParams as MoleculeParams$1, getState as getState$1, setState as setState$1, makeMolecule as makeMolecule$1, Flat as Flat$1, ActorToolkit as ActorToolkit$1, MutableAtomFamilyToken as MutableAtomFamilyToken$1, MutableAtomToken as MutableAtomToken$1, RegularAtomFamilyToken as RegularAtomFamilyToken$1, RegularAtomToken as RegularAtomToken$1, WritableSelectorFamilyToken as WritableSelectorFamilyToken$1, WritableSelectorToken as WritableSelectorToken$1, ReadonlySelectorFamilyToken as ReadonlySelectorFamilyToken$1, ReadonlySelectorToken as ReadonlySelectorToken$1, WritableFamilyToken as WritableFamilyToken$1, WritableToken as WritableToken$1, ReadableFamilyToken as ReadableFamilyToken$1, ReadableToken as ReadableToken$1, MoleculeCreation as MoleculeCreation$1, MoleculeDisposal as MoleculeDisposal$1 } from 'atom.io';
|
|
4
4
|
import { findState } from 'atom.io/ephemeral';
|
|
5
5
|
import { seekState } from 'atom.io/immortal';
|
|
6
6
|
import { JoinToken } from 'atom.io/data';
|
|
@@ -109,16 +109,17 @@ type TransactionUpdate<F extends Func> = {
|
|
|
109
109
|
params: Parameters<F>;
|
|
110
110
|
output: ReturnType<F>;
|
|
111
111
|
};
|
|
112
|
-
type
|
|
112
|
+
type GetterToolkit = Pick<SetterToolkit, `find` | `get` | `json` | `seek`>;
|
|
113
|
+
type SetterToolkit = Readonly<{
|
|
113
114
|
get: typeof getState$1;
|
|
114
|
-
set:
|
|
115
|
+
set: typeof setState$1;
|
|
115
116
|
find: typeof findState;
|
|
116
117
|
seek: typeof seekState;
|
|
117
118
|
json: <T extends Transceiver<any>, J extends Json.Serializable>(state: MutableAtomToken<T, J>) => WritableSelectorToken<J>;
|
|
118
119
|
}>;
|
|
119
|
-
type
|
|
120
|
+
type ActorToolkit = Readonly<{
|
|
120
121
|
get: typeof getState$1;
|
|
121
|
-
set:
|
|
122
|
+
set: typeof setState$1;
|
|
122
123
|
find: typeof findState;
|
|
123
124
|
seek: typeof seekState;
|
|
124
125
|
json: <T extends Transceiver<any>, J extends Json.Serializable>(state: MutableAtomToken<T, J>) => WritableSelectorToken<J>;
|
|
@@ -127,10 +128,9 @@ type TransactorsWithRunAndEnv = Readonly<{
|
|
|
127
128
|
run: typeof runTransaction;
|
|
128
129
|
env: () => EnvironmentData;
|
|
129
130
|
}>;
|
|
130
|
-
type
|
|
131
|
-
type
|
|
132
|
-
type
|
|
133
|
-
type Transact<F extends Func> = (transactors: TransactorsWithRunAndEnv, ...parameters: Parameters<F>) => ReturnType<F>;
|
|
131
|
+
type Read<F extends Func> = (toolkit: GetterToolkit, ...parameters: Parameters<F>) => ReturnType<F>;
|
|
132
|
+
type Write<F extends Func> = (toolkit: SetterToolkit, ...parameters: Parameters<F>) => ReturnType<F>;
|
|
133
|
+
type Transact<F extends Func> = (toolkit: ActorToolkit, ...parameters: Parameters<F>) => ReturnType<F>;
|
|
134
134
|
type TransactionOptions<F extends Func> = {
|
|
135
135
|
key: string;
|
|
136
136
|
do: Transact<F>;
|
|
@@ -197,20 +197,30 @@ type SelectorFamilyToken<T, K extends Json.Serializable> = ReadonlySelectorFamil
|
|
|
197
197
|
declare function selectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>): WritableSelectorFamilyTokenWithCall<T, K>;
|
|
198
198
|
declare function selectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>): ReadonlySelectorFamilyTokenWithCall<T, K>;
|
|
199
199
|
|
|
200
|
-
type
|
|
200
|
+
type CtorToolkit<K extends Json.Serializable> = Flat$1<Omit<ActorToolkit$1, `find`> & {
|
|
201
201
|
bond<T extends Transceiver<any>, J extends Json.Serializable>(family: MutableAtomFamilyToken$1<T, J, K>): MutableAtomToken$1<T, J>;
|
|
202
202
|
bond<T>(family: RegularAtomFamilyToken$1<T, K>): RegularAtomToken$1<T>;
|
|
203
203
|
bond<T>(family: WritableSelectorFamilyToken$1<T, K>): WritableSelectorToken$1<T>;
|
|
204
204
|
bond<T>(family: ReadonlySelectorFamilyToken$1<T, K>): ReadonlySelectorToken$1<T>;
|
|
205
205
|
bond<T>(family: WritableFamilyToken$1<T, K>): WritableToken$1<T>;
|
|
206
206
|
bond<T>(family: ReadableFamilyToken$1<T, K>): ReadableToken$1<T>;
|
|
207
|
+
bond<J extends JoinToken<any, any, any, any>>(joinToken: J, role: {
|
|
208
|
+
as: J extends JoinToken<infer A, infer B, any, any> ? A | B : never;
|
|
209
|
+
}): J extends JoinToken<any, any, any, infer Content> ? Content extends null ? {
|
|
210
|
+
relatedKeys: ReadonlySelectorToken$1<string[]>;
|
|
211
|
+
} : {
|
|
212
|
+
relatedKeys: ReadonlySelectorToken$1<string[]>;
|
|
213
|
+
relatedEntries: ReadonlySelectorToken$1<[
|
|
214
|
+
key: string,
|
|
215
|
+
value: Content
|
|
216
|
+
][]>;
|
|
217
|
+
} : never;
|
|
207
218
|
claim(below: MoleculeToken<any>, options: {
|
|
208
219
|
exclusive: boolean;
|
|
209
|
-
}):
|
|
210
|
-
join<J extends JoinToken<any, any, any, any>>(joinToken: J): J;
|
|
220
|
+
}): void;
|
|
211
221
|
spawn<Key extends Json.Serializable, Ctor extends MoleculeConstructor>(family: MoleculeFamilyToken<Ctor>, key: Key, ...params: MoleculeParams<Ctor>): MoleculeToken<Ctor>;
|
|
212
222
|
}>;
|
|
213
|
-
type MoleculeConstructor = new (
|
|
223
|
+
type MoleculeConstructor = new (toolkit: CtorToolkit<any>, key: any, ...params: any) => any;
|
|
214
224
|
type Tail<T extends any[]> = T extends [any, ...infer Rest] ? Rest : any[];
|
|
215
225
|
type MoleculeParams<M extends MoleculeConstructor> = Tail<Tail<ConstructorParameters<M>>>;
|
|
216
226
|
type MoleculeFamilyOptions<M extends MoleculeConstructor> = {
|
|
@@ -243,9 +253,13 @@ type MK<M extends MoleculeConstructor> = MoleculeKey<M>;
|
|
|
243
253
|
declare function makeRootMolecule(key: string, store?: Store): MoleculeToken<ObjectConstructor>;
|
|
244
254
|
|
|
245
255
|
declare function disposeState(token: MoleculeToken<any> | ReadableToken<any>): void;
|
|
256
|
+
declare function disposeState<K extends Json.Serializable>(token: ReadableFamilyToken<any, K>, key: K): void;
|
|
257
|
+
declare function disposeState<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): void;
|
|
246
258
|
|
|
247
259
|
declare function getState<T>(token: ReadableToken<T>): T;
|
|
248
|
-
declare function getState<M extends MoleculeConstructor>(token: MoleculeToken<M>): InstanceType<M
|
|
260
|
+
declare function getState<M extends MoleculeConstructor>(token: MoleculeToken<M>): InstanceType<M>;
|
|
261
|
+
declare function getState<T, K extends Json.Serializable>(token: ReadableFamilyToken<T, K>, key: K): T;
|
|
262
|
+
declare function getState<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: Json.Serializable): InstanceType<M>;
|
|
249
263
|
|
|
250
264
|
declare const LoggerIconDictionary: {
|
|
251
265
|
readonly "\u231B": "Timeline event fully captured";
|
|
@@ -317,7 +331,14 @@ declare class AtomIOLogger implements Logger {
|
|
|
317
331
|
warn: LogFn;
|
|
318
332
|
}
|
|
319
333
|
|
|
334
|
+
type primitive = boolean | number | string | null;
|
|
335
|
+
|
|
336
|
+
type Serializable = primitive | Readonly<{
|
|
337
|
+
[key: string]: Serializable;
|
|
338
|
+
}> | ReadonlyArray<Serializable>;
|
|
339
|
+
|
|
320
340
|
declare function setState<T, New extends T>(token: WritableToken<T>, value: New | ((oldValue: T) => New)): void;
|
|
341
|
+
declare function setState<T, K extends Serializable, New extends T>(token: WritableFamilyToken<T, K>, key: K, value: New | ((oldValue: T) => New)): void;
|
|
321
342
|
|
|
322
343
|
declare class Silo {
|
|
323
344
|
store: Store;
|
|
@@ -330,6 +351,7 @@ declare class Silo {
|
|
|
330
351
|
findState: typeof findState;
|
|
331
352
|
getState: typeof getState;
|
|
332
353
|
setState: typeof setState;
|
|
354
|
+
disposeState: typeof disposeState;
|
|
333
355
|
subscribe: typeof subscribe;
|
|
334
356
|
undo: typeof undo;
|
|
335
357
|
redo: typeof redo;
|
|
@@ -426,4 +448,4 @@ type FamilyMetadata = {
|
|
|
426
448
|
subKey: string;
|
|
427
449
|
};
|
|
428
450
|
|
|
429
|
-
export { type AtomEffect, type AtomFamily, type AtomFamilyToken, AtomIOLogger, type AtomOnly, type AtomToken, type Effectors, type FamilyMetadata, type Flat, type Func, type KeyedStateUpdate, LOG_LEVELS, type LogFilter, type LogFn, type LogLevel, type Logger, type LoggerIcon, type MK, type MoleculeConstructor, type MoleculeCreation, type MoleculeDisposal, type MoleculeFamily, type MoleculeFamilyOptions, type MoleculeFamilyToken, type MoleculeKey, type MoleculeParams, type MoleculeToken, type
|
|
451
|
+
export { type ActorToolkit, type AtomEffect, type AtomFamily, type AtomFamilyToken, AtomIOLogger, type AtomOnly, type AtomToken, type CtorToolkit, type Effectors, type FamilyMetadata, type Flat, type Func, type GetterToolkit, type KeyedStateUpdate, LOG_LEVELS, type LogFilter, type LogFn, type LogLevel, type Logger, type LoggerIcon, type MK, type MoleculeConstructor, type MoleculeCreation, type MoleculeDisposal, type MoleculeFamily, type MoleculeFamilyOptions, type MoleculeFamilyToken, type MoleculeKey, type MoleculeParams, type MoleculeToken, type MoleculeType, type MutableAtomFamily, type MutableAtomFamilyOptions, type MutableAtomFamilyToken, type MutableAtomFamilyTokenWithCall, type MutableAtomOptions, type MutableAtomToken, type Read, type ReadableFamily, type ReadableFamilyToken, type ReadableToken, type ReadonlySelectorFamily, type ReadonlySelectorFamilyOptions, type ReadonlySelectorFamilyToken, type ReadonlySelectorFamilyTokenWithCall, type ReadonlySelectorOptions, type ReadonlySelectorToken, type RegularAtomFamily, type RegularAtomFamilyOptions, type RegularAtomFamilyToken, type RegularAtomFamilyTokenWithCall, type RegularAtomOptions, type RegularAtomToken, type SelectorFamily, type SelectorFamilyToken, type SelectorToken, type SetterToolkit, Silo, type StateCreation, type StateDisposal, type StateUpdate, type TimelineManageable, type TimelineOptions, type TimelineToken, type TimelineUpdate, type TokenDenomination, type TokenType, type Transact, type TransactionIO, type TransactionOptions, type TransactionToken, type TransactionUpdate, type TransactionUpdateContent, type TransactionUpdateHandler, type UpdateHandler, type WritableFamily, type WritableFamilyToken, type WritableSelectorFamily, type WritableSelectorFamilyOptions, type WritableSelectorFamilyToken, type WritableSelectorFamilyTokenWithCall, type WritableSelectorOptions, type WritableSelectorToken, type WritableToken, type Write, atom, atomFamily, belongsTo, disposeState, getState, isToken, makeMolecule, makeRootMolecule, moleculeFamily, redo, runTransaction, selector, selectorFamily, setState, simpleLog, simpleLogger, subscribe, timeline, transaction, undo };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './chunk-S4N6XNPH.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, timeTravel, subscribeToTimeline, subscribeToTransaction, subscribeToState, arbitrary, actUponStore } from 'atom.io/internal';
|
|
3
|
+
import { createStandaloneAtom, IMPLICIT, createAtomFamily, createMoleculeFamily, makeMoleculeInStore, Molecule, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, findInStore, getFromStore, setIntoStore, disposeFromStore, timeTravel, subscribeToTimeline, subscribeToTransaction, subscribeToState, arbitrary, actUponStore } from 'atom.io/internal';
|
|
4
4
|
import { stringifyJson } from 'atom.io/json';
|
|
5
5
|
|
|
6
6
|
function atom(options) {
|
|
@@ -9,10 +9,21 @@ function atom(options) {
|
|
|
9
9
|
function atomFamily(options) {
|
|
10
10
|
return createAtomFamily(options, IMPLICIT.STORE);
|
|
11
11
|
}
|
|
12
|
-
function disposeState(token) {
|
|
13
|
-
|
|
12
|
+
function disposeState(token, key) {
|
|
13
|
+
if (key) {
|
|
14
|
+
Internal.disposeFromStore(token, key, Internal.IMPLICIT.STORE);
|
|
15
|
+
} else {
|
|
16
|
+
Internal.disposeFromStore(token, Internal.IMPLICIT.STORE);
|
|
17
|
+
}
|
|
14
18
|
}
|
|
15
|
-
function getState(token) {
|
|
19
|
+
function getState(token, key) {
|
|
20
|
+
if (key) {
|
|
21
|
+
return Internal.getFromStore(
|
|
22
|
+
token,
|
|
23
|
+
key,
|
|
24
|
+
Internal.IMPLICIT.STORE
|
|
25
|
+
);
|
|
26
|
+
}
|
|
16
27
|
return Internal.getFromStore(token, Internal.IMPLICIT.STORE);
|
|
17
28
|
}
|
|
18
29
|
|
|
@@ -74,8 +85,12 @@ function selector(options) {
|
|
|
74
85
|
function selectorFamily(options) {
|
|
75
86
|
return createSelectorFamily(options, IMPLICIT.STORE);
|
|
76
87
|
}
|
|
77
|
-
function setState(token,
|
|
78
|
-
|
|
88
|
+
function setState(token, p1, p2) {
|
|
89
|
+
if (p2) {
|
|
90
|
+
Internal.setIntoStore(token, p1, p2, Internal.IMPLICIT.STORE);
|
|
91
|
+
} else {
|
|
92
|
+
Internal.setIntoStore(token, p1, Internal.IMPLICIT.STORE);
|
|
93
|
+
}
|
|
79
94
|
}
|
|
80
95
|
var Silo = class {
|
|
81
96
|
constructor(config, fromStore = null) {
|
|
@@ -94,9 +109,12 @@ var Silo = class {
|
|
|
94
109
|
this.transaction = (options) => createTransaction(options, s);
|
|
95
110
|
this.timeline = (options) => createTimeline(options, s);
|
|
96
111
|
this.findState = (token, key) => findInStore(token, key, s);
|
|
97
|
-
this.getState = (
|
|
98
|
-
this.setState = (
|
|
99
|
-
setIntoStore(
|
|
112
|
+
this.getState = (...params) => getFromStore(...params, s);
|
|
113
|
+
this.setState = (...params) => {
|
|
114
|
+
setIntoStore(...params, s);
|
|
115
|
+
};
|
|
116
|
+
this.disposeState = (...params) => {
|
|
117
|
+
disposeFromStore(...params, s);
|
|
100
118
|
};
|
|
101
119
|
this.subscribe = (token, handler, key) => subscribe(token, handler, key, s);
|
|
102
120
|
this.undo = (token) => {
|