atom.io 0.29.0 → 0.29.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.
@@ -505,14 +505,33 @@ function createAtomFamily(store, options) {
505
505
  return createRegularAtomFamily(store, options);
506
506
  }
507
507
 
508
+ // internal/src/families/get-family-of-token.ts
509
+ function getFamilyOfToken(store, token) {
510
+ if (token.family) {
511
+ const family = store.families.get(token.family.key);
512
+ if (family) {
513
+ return family;
514
+ }
515
+ }
516
+ }
517
+
508
518
  // internal/src/get-state/get-from-store.ts
509
519
  function getFromStore(store, ...params) {
510
520
  let token;
521
+ let family;
522
+ let key;
511
523
  if (params.length === 1) {
512
524
  token = params[0];
525
+ if (token.type !== `molecule`) {
526
+ family = getFamilyOfToken(store, token) ?? null;
527
+ if (family) {
528
+ key = token.family ? parseJson(token.family.subKey) : null;
529
+ token = findInStore(store, family, key);
530
+ }
531
+ }
513
532
  } else {
514
- const family = params[0];
515
- const key = params[1];
533
+ family = params[0];
534
+ key = params[1];
516
535
  let maybeToken;
517
536
  if (family.type === `molecule_family`) {
518
537
  maybeToken = seekInStore(store, family, key) ?? counterfeit(family, key);
@@ -522,7 +541,7 @@ function getFromStore(store, ...params) {
522
541
  token = maybeToken;
523
542
  }
524
543
  if (`counterfeit` in token && `family` in token) {
525
- const family = token.type === `molecule` ? withdraw(token.family, store) : (
544
+ family = token.type === `molecule` ? withdraw(token.family, store) : (
526
545
  // biome-ignore lint/style/noNonNullAssertion: family must be present
527
546
  store.families.get(token.family.key)
528
547
  );
@@ -1248,8 +1267,7 @@ function makeMoleculeInStore(store, context, familyToken, key, ...params) {
1248
1267
 
1249
1268
  // internal/src/families/init-family-member.ts
1250
1269
  function initFamilyMemberInStore(store, token, key) {
1251
- const familyKey = token.key;
1252
- const family = store.families.get(familyKey);
1270
+ const family = store.families.get(token.key);
1253
1271
  if (family === void 0) {
1254
1272
  throw new NotFoundError(token, store);
1255
1273
  }
@@ -1379,16 +1397,22 @@ ${disposal.trace}` : `No previous disposal trace was found.`
1379
1397
  // internal/src/set-state/set-into-store.ts
1380
1398
  function setIntoStore(store, ...params) {
1381
1399
  let token;
1400
+ let family;
1401
+ let key;
1382
1402
  let value;
1383
1403
  if (params.length === 2) {
1384
1404
  token = params[0];
1385
1405
  value = params[1];
1406
+ family = getFamilyOfToken(store, token) ?? null;
1407
+ if (family) {
1408
+ key = token.family ? parseJson(token.family.subKey) : null;
1409
+ token = findInStore(store, family, key);
1410
+ }
1386
1411
  } else {
1387
- const family = params[0];
1388
- const key = params[1];
1412
+ family = params[0];
1413
+ key = params[1];
1389
1414
  value = params[2];
1390
- const maybeToken = findInStore(store, family, key);
1391
- token = maybeToken;
1415
+ token = findInStore(store, family, key);
1392
1416
  }
1393
1417
  if (`counterfeit` in token) {
1394
1418
  const disposal = store.disposalTraces.buffer.find(
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Transceiver, Func, EnvironmentData, Flat, Subject, Store, Timeline, TimelineAtomUpdate, TimelineMoleculeCreation, TimelineMoleculeDisposal, TimelineSelectorUpdate, TimelineStateCreation, TimelineStateDisposal, TimelineTransactionUpdate } from 'atom.io/internal';
2
- import { Json, JsonInterface, Canonical } from 'atom.io/json';
2
+ import { Json, JsonInterface, Canonical, stringified } from 'atom.io/json';
3
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, 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';
@@ -391,40 +391,40 @@ declare function belongsTo<Family extends ReadonlySelectorFamilyToken$1<any, any
391
391
  declare function belongsTo<Family extends WritableFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is WritableToken$1<TokenType<Family>>;
392
392
  declare function belongsTo<Family extends ReadableFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is ReadableToken$1<TokenType<Family>>;
393
393
 
394
- type RegularAtomToken<T> = {
394
+ type RegularAtomToken<T, K extends Canonical = any> = {
395
395
  key: string;
396
396
  type: `atom`;
397
- family?: FamilyMetadata;
397
+ family?: FamilyMetadata<K>;
398
398
  __T?: T;
399
399
  };
400
- type MutableAtomToken<T extends Transceiver<any>, J extends Json.Serializable> = {
400
+ type MutableAtomToken<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical = any> = {
401
401
  key: string;
402
402
  type: `mutable_atom`;
403
- family?: FamilyMetadata;
403
+ family?: FamilyMetadata<K>;
404
404
  __J?: J;
405
405
  __U?: T extends Transceiver<infer Update> ? Update : never;
406
406
  };
407
- type AtomToken<T> = MutableAtomToken<T extends Transceiver<any> ? T : never, any> | RegularAtomToken<T>;
408
- type WritableSelectorToken<T> = {
407
+ type AtomToken<T, K extends Canonical = any> = MutableAtomToken<T extends Transceiver<any> ? T : never, any, K> | RegularAtomToken<T, K>;
408
+ type WritableSelectorToken<T, K extends Canonical = any> = {
409
409
  key: string;
410
410
  type: `selector`;
411
- family?: FamilyMetadata;
411
+ family?: FamilyMetadata<K>;
412
412
  __T?: T;
413
413
  };
414
- type ReadonlySelectorToken<T> = {
414
+ type ReadonlySelectorToken<T, K extends Canonical = any> = {
415
415
  key: string;
416
416
  type: `readonly_selector`;
417
- family?: FamilyMetadata;
417
+ family?: FamilyMetadata<K>;
418
418
  __T?: T;
419
419
  };
420
- type SelectorToken<T> = ReadonlySelectorToken<T> | WritableSelectorToken<T>;
421
- type WritableToken<T> = AtomToken<T> | WritableSelectorToken<T>;
422
- type ReadableToken<T> = AtomToken<T> | SelectorToken<T>;
420
+ type SelectorToken<T, K extends Canonical = any> = ReadonlySelectorToken<T, K> | WritableSelectorToken<T, K>;
421
+ type WritableToken<T, K extends Canonical = any> = AtomToken<T, K> | WritableSelectorToken<T, K>;
422
+ type ReadableToken<T, K extends Canonical = any> = AtomToken<T, K> | SelectorToken<T, K>;
423
423
  type WritableFamilyToken<T, K extends Canonical> = AtomFamilyToken<T, K> | WritableSelectorFamilyToken<T, K>;
424
424
  type ReadableFamilyToken<T, K extends Canonical> = AtomFamilyToken<T, K> | SelectorFamilyToken<T, K>;
425
- type FamilyMetadata = {
425
+ type FamilyMetadata<K extends Canonical = any> = {
426
426
  key: string;
427
- subKey: string;
427
+ subKey: stringified<K>;
428
428
  };
429
429
 
430
430
  export { type ActorToolkit, type AtomEffect, type AtomFamilyToken, AtomIOLogger, type AtomOnly, type AtomToken, type CtorToolkit, type Effectors, type FamilyMetadata, type GetterToolkit, type KeyedStateUpdate, LOG_LEVELS, type LogFilter, type LogFn, type LogLevel, type Logger, type LoggerIcon, type MoleculeConstructor, type MoleculeCreation, type MoleculeDisposal, type MoleculeFamily, type MoleculeFamilyOptions, type MoleculeFamilyToken, type MoleculeKey, type MoleculeParams, type MoleculeToken, type MoleculeType, type MutableAtomFamilyOptions, type MutableAtomFamilyToken, type MutableAtomOptions, type MutableAtomToken, type Read, type ReadableFamilyToken, type ReadableToken, type ReadonlySelectorFamilyOptions, type ReadonlySelectorFamilyToken, type ReadonlySelectorOptions, type ReadonlySelectorToken, type RegularAtomFamilyOptions, type RegularAtomFamilyToken, type RegularAtomOptions, type RegularAtomToken, 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 WritableFamilyToken, type WritableSelectorFamilyOptions, type WritableSelectorFamilyToken, 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 };
@@ -10,7 +10,7 @@ import { Json, Canonical } from 'atom.io/json';
10
10
  * @returns
11
11
  * The current value of the state.
12
12
  */
13
- declare function findState<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>;
13
+ declare function findState<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J, K>;
14
14
  /**
15
15
  * Finds a state in the store.
16
16
  * @param token - The token of the state family.
@@ -18,7 +18,7 @@ declare function findState<T extends Transceiver<any>, J extends Json.Serializab
18
18
  * @returns
19
19
  * The current value of the state.
20
20
  */
21
- declare function findState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
21
+ declare function findState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K>;
22
22
  /**
23
23
  * Finds a state in the store.
24
24
  * @param token - The token of the state family.
@@ -26,7 +26,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Regular
26
26
  * @returns
27
27
  * The current value of the state.
28
28
  */
29
- declare function findState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
29
+ declare function findState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T, K>;
30
30
  /**
31
31
  * Finds a state in the store.
32
32
  * @param token - The token of the state family.
@@ -34,7 +34,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Writabl
34
34
  * @returns
35
35
  * The current value of the state.
36
36
  */
37
- declare function findState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T>;
37
+ declare function findState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T, K>;
38
38
  /**
39
39
  * Finds a state in the store.
40
40
  * @param token - The token of the state family.
@@ -42,7 +42,7 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Readonl
42
42
  * @returns
43
43
  * The current value of the state.
44
44
  */
45
- declare function findState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
45
+ declare function findState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K>;
46
46
  /**
47
47
  * @public
48
48
  * Finds a {@link ReadableToken} in the store.
@@ -52,6 +52,6 @@ declare function findState<T, K extends Canonical, Key extends K>(token: Writabl
52
52
  * The current value of the state.
53
53
  * @overload Unknown
54
54
  */
55
- declare function findState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
55
+ declare function findState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K>;
56
56
 
57
57
  export { findState };
@@ -29,7 +29,7 @@ export function findState<
29
29
  J extends Json.Serializable,
30
30
  K extends Canonical,
31
31
  Key extends K,
32
- >(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>
32
+ >(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J, K>
33
33
  /**
34
34
  * Finds a state in the store.
35
35
  * @param token - The token of the state family.
@@ -40,7 +40,7 @@ export function findState<
40
40
  export function findState<T, K extends Canonical, Key extends K>(
41
41
  token: RegularAtomFamilyToken<T, K>,
42
42
  key: Key,
43
- ): RegularAtomToken<T>
43
+ ): RegularAtomToken<T, K>
44
44
  /**
45
45
  * Finds a state in the store.
46
46
  * @param token - The token of the state family.
@@ -51,7 +51,7 @@ export function findState<T, K extends Canonical, Key extends K>(
51
51
  export function findState<T, K extends Canonical, Key extends K>(
52
52
  token: WritableSelectorFamilyToken<T, K>,
53
53
  key: Key,
54
- ): WritableSelectorToken<T>
54
+ ): WritableSelectorToken<T, K>
55
55
  /**
56
56
  * Finds a state in the store.
57
57
  * @param token - The token of the state family.
@@ -62,7 +62,7 @@ export function findState<T, K extends Canonical, Key extends K>(
62
62
  export function findState<T, K extends Canonical, Key extends K>(
63
63
  token: ReadonlySelectorFamilyToken<T, K>,
64
64
  key: Key,
65
- ): ReadonlySelectorToken<T>
65
+ ): ReadonlySelectorToken<T, K>
66
66
  /**
67
67
  * Finds a state in the store.
68
68
  * @param token - The token of the state family.
@@ -73,7 +73,7 @@ export function findState<T, K extends Canonical, Key extends K>(
73
73
  export function findState<T, K extends Canonical, Key extends K>(
74
74
  token: WritableFamilyToken<T, K>,
75
75
  key: Key,
76
- ): WritableToken<T>
76
+ ): WritableToken<T, K>
77
77
  /**
78
78
  * @public
79
79
  * Finds a {@link ReadableToken} in the store.
@@ -86,7 +86,7 @@ export function findState<T, K extends Canonical, Key extends K>(
86
86
  export function findState<T, K extends Canonical, Key extends K>(
87
87
  token: ReadableFamilyToken<T, K>,
88
88
  key: Key,
89
- ): ReadableToken<T>
89
+ ): ReadableToken<T, K>
90
90
 
91
91
  export function findState(
92
92
  token: ReadableFamilyToken<any, any>,
@@ -2,12 +2,12 @@ import { MutableAtomFamilyToken, MutableAtomToken, RegularAtomFamilyToken, Regul
2
2
  import { Transceiver } from 'atom.io/internal';
3
3
  import { Json, Canonical } from 'atom.io/json';
4
4
 
5
- declare function seekState<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J> | undefined;
6
- declare function seekState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T> | undefined;
7
- declare function seekState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T> | undefined;
8
- declare function seekState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T> | undefined;
9
- declare function seekState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T> | undefined;
10
- declare function seekState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T> | undefined;
5
+ declare function seekState<T extends Transceiver<any>, J extends Json.Serializable, K extends Canonical, Key extends K>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J, K> | undefined;
6
+ declare function seekState<T, K extends Canonical, Key extends K>(token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K> | undefined;
7
+ declare function seekState<T, K extends Canonical, Key extends K>(token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T, K> | undefined;
8
+ declare function seekState<T, K extends Canonical, Key extends K>(token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T, K> | undefined;
9
+ declare function seekState<T, K extends Canonical, Key extends K>(token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K> | undefined;
10
+ declare function seekState<T, K extends Canonical, Key extends K>(token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K> | undefined;
11
11
  declare function seekState<M extends MoleculeConstructor>(token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeToken<M> | undefined;
12
12
 
13
13
  export { seekState };
@@ -28,32 +28,32 @@ export function seekState<
28
28
  >(
29
29
  token: MutableAtomFamilyToken<T, J, K>,
30
30
  key: Key,
31
- ): MutableAtomToken<T, J> | undefined
31
+ ): MutableAtomToken<T, J, K> | undefined
32
32
 
33
33
  export function seekState<T, K extends Canonical, Key extends K>(
34
34
  token: RegularAtomFamilyToken<T, K>,
35
35
  key: Key,
36
- ): RegularAtomToken<T> | undefined
36
+ ): RegularAtomToken<T, K> | undefined
37
37
 
38
38
  export function seekState<T, K extends Canonical, Key extends K>(
39
39
  token: WritableSelectorFamilyToken<T, K>,
40
40
  key: Key,
41
- ): WritableSelectorToken<T> | undefined
41
+ ): WritableSelectorToken<T, K> | undefined
42
42
 
43
43
  export function seekState<T, K extends Canonical, Key extends K>(
44
44
  token: ReadonlySelectorFamilyToken<T, K>,
45
45
  key: Key,
46
- ): ReadonlySelectorToken<T> | undefined
46
+ ): ReadonlySelectorToken<T, K> | undefined
47
47
 
48
48
  export function seekState<T, K extends Canonical, Key extends K>(
49
49
  token: WritableFamilyToken<T, K>,
50
50
  key: Key,
51
- ): WritableToken<T> | undefined
51
+ ): WritableToken<T, K> | undefined
52
52
 
53
53
  export function seekState<T, K extends Canonical, Key extends K>(
54
54
  token: ReadableFamilyToken<T, K>,
55
55
  key: Key,
56
- ): ReadableToken<T> | undefined
56
+ ): ReadableToken<T, K> | undefined
57
57
 
58
58
  export function seekState<M extends MoleculeConstructor>(
59
59
  token: MoleculeFamilyToken<M>,
@@ -451,32 +451,32 @@ declare function disposeFromStore(store: Store, token: MoleculeToken<any> | Read
451
451
  declare function disposeFromStore<K extends Canonical>(store: Store, token: ReadableFamilyToken<any, K>, key: K): void;
452
452
  declare function disposeFromStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): void;
453
453
 
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>;
455
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
456
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
457
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
458
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T>;
459
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
460
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
461
- declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
462
-
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>;
464
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T>;
465
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T>;
466
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T>;
467
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T>;
468
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T>;
469
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T>;
470
- declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T>;
471
-
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;
473
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T> | undefined;
474
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T> | undefined;
475
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T> | undefined;
476
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T> | undefined;
477
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T> | undefined;
478
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T> | undefined;
479
- declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T> | undefined;
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, K>;
455
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K>;
456
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T, K>;
457
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T, K>;
458
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T, K>;
459
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T, K>;
460
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K>;
461
+ declare function findInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K>;
462
+
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, K>;
464
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K>;
465
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T, K>;
466
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T, K>;
467
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T, K>;
468
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T, K>;
469
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K>;
470
+ declare function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K>;
471
+
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, K> | undefined;
473
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: RegularAtomFamilyToken<T, K>, key: Key): RegularAtomToken<T, K> | undefined;
474
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: AtomFamilyToken<T, K>, key: Key): AtomToken<T, K> | undefined;
475
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableSelectorFamilyToken<T, K>, key: Key): WritableSelectorToken<T, K> | undefined;
476
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadonlySelectorFamilyToken<T, K>, key: Key): ReadonlySelectorToken<T, K> | undefined;
477
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: SelectorFamilyToken<T, K>, key: Key): SelectorToken<T, K> | undefined;
478
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: WritableFamilyToken<T, K>, key: Key): WritableToken<T, K> | undefined;
479
+ declare function seekInStore<T, K extends Canonical, Key extends K>(store: Store, token: ReadableFamilyToken<T, K>, key: Key): ReadableToken<T, K> | undefined;
480
480
  declare function seekInStore<M extends MoleculeConstructor>(store: Store, token: MoleculeFamilyToken<M>, key: MoleculeKey<M>): MoleculeKey<M> | undefined;
481
481
 
482
482
  type EnvironmentData = {
@@ -1,3 +1,3 @@
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-XPYU2HY2.js';
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-4WXELLFT.js';
2
2
  import '../../dist/chunk-IBTHB2PI.js';
3
3
  import '../../dist/chunk-XWL6SNVU.js';
@@ -33,49 +33,49 @@ export function findInStore<
33
33
  store: Store,
34
34
  token: MutableAtomFamilyToken<T, J, K>,
35
35
  key: Key,
36
- ): MutableAtomToken<T, J>
36
+ ): MutableAtomToken<T, J, K>
37
37
 
38
38
  export function findInStore<T, K extends Canonical, Key extends K>(
39
39
  store: Store,
40
40
  token: RegularAtomFamilyToken<T, K>,
41
41
  key: Key,
42
- ): RegularAtomToken<T>
42
+ ): RegularAtomToken<T, K>
43
43
 
44
44
  export function findInStore<T, K extends Canonical, Key extends K>(
45
45
  store: Store,
46
46
  token: AtomFamilyToken<T, K>,
47
47
  key: Key,
48
- ): AtomToken<T>
48
+ ): AtomToken<T, K>
49
49
 
50
50
  export function findInStore<T, K extends Canonical, Key extends K>(
51
51
  store: Store,
52
52
  token: WritableSelectorFamilyToken<T, K>,
53
53
  key: Key,
54
- ): WritableSelectorToken<T>
54
+ ): WritableSelectorToken<T, K>
55
55
 
56
56
  export function findInStore<T, K extends Canonical, Key extends K>(
57
57
  store: Store,
58
58
  token: ReadonlySelectorFamilyToken<T, K>,
59
59
  key: Key,
60
- ): ReadonlySelectorToken<T>
60
+ ): ReadonlySelectorToken<T, K>
61
61
 
62
62
  export function findInStore<T, K extends Canonical, Key extends K>(
63
63
  store: Store,
64
64
  token: SelectorFamilyToken<T, K>,
65
65
  key: Key,
66
- ): SelectorToken<T>
66
+ ): SelectorToken<T, K>
67
67
 
68
68
  export function findInStore<T, K extends Canonical, Key extends K>(
69
69
  store: Store,
70
70
  token: WritableFamilyToken<T, K>,
71
71
  key: Key,
72
- ): WritableToken<T>
72
+ ): WritableToken<T, K>
73
73
 
74
74
  export function findInStore<T, K extends Canonical, Key extends K>(
75
75
  store: Store,
76
76
  token: ReadableFamilyToken<T, K>,
77
77
  key: Key,
78
- ): ReadableToken<T>
78
+ ): ReadableToken<T, K>
79
79
 
80
80
  export function findInStore(
81
81
  store: Store,
@@ -0,0 +1,64 @@
1
+ import type {
2
+ MutableAtomFamilyToken,
3
+ MutableAtomToken,
4
+ ReadableFamilyToken,
5
+ ReadableToken,
6
+ ReadonlySelectorFamilyToken,
7
+ ReadonlySelectorToken,
8
+ RegularAtomFamilyToken,
9
+ RegularAtomToken,
10
+ WritableFamilyToken,
11
+ WritableSelectorFamilyToken,
12
+ WritableSelectorToken,
13
+ WritableToken,
14
+ } from "atom.io"
15
+ import type { Canonical, Json } from "atom.io/json"
16
+
17
+ import type { Transceiver } from "../mutable"
18
+ import type { Store } from "../store"
19
+
20
+ export function getFamilyOfToken<
21
+ T extends Transceiver<any>,
22
+ J extends Json.Serializable,
23
+ K extends Canonical,
24
+ >(
25
+ store: Store,
26
+ token: MutableAtomToken<T, J, K>,
27
+ ): MutableAtomFamilyToken<T, J, K> | undefined
28
+
29
+ export function getFamilyOfToken<T, K extends Canonical>(
30
+ store: Store,
31
+ token: RegularAtomToken<T, K>,
32
+ ): RegularAtomFamilyToken<T, K> | undefined
33
+
34
+ export function getFamilyOfToken<T, K extends Canonical>(
35
+ store: Store,
36
+ token: WritableSelectorToken<T, K>,
37
+ ): WritableSelectorFamilyToken<T, K> | undefined
38
+
39
+ export function getFamilyOfToken<T, K extends Canonical>(
40
+ store: Store,
41
+ token: ReadonlySelectorToken<T, K>,
42
+ ): ReadonlySelectorFamilyToken<T, K> | undefined
43
+
44
+ export function getFamilyOfToken<T, K extends Canonical>(
45
+ store: Store,
46
+ token: WritableToken<T, K>,
47
+ ): WritableFamilyToken<T, K> | undefined
48
+
49
+ export function getFamilyOfToken<T, K extends Canonical>(
50
+ store: Store,
51
+ token: ReadableToken<T, K>,
52
+ ): ReadableFamilyToken<T, K> | undefined
53
+
54
+ export function getFamilyOfToken(
55
+ store: Store,
56
+ token: ReadableToken<any, any>,
57
+ ): ReadableFamilyToken<any, any> | undefined {
58
+ if (token.family) {
59
+ const family = store.families.get(token.family.key)
60
+ if (family) {
61
+ return family
62
+ }
63
+ }
64
+ }
@@ -33,57 +33,56 @@ export function initFamilyMemberInStore<
33
33
  store: Store,
34
34
  token: MutableAtomFamilyToken<T, J, K>,
35
35
  key: Key,
36
- ): MutableAtomToken<T, J>
36
+ ): MutableAtomToken<T, J, K>
37
37
 
38
38
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
39
39
  store: Store,
40
40
  token: RegularAtomFamilyToken<T, K>,
41
41
  key: Key,
42
- ): RegularAtomToken<T>
42
+ ): RegularAtomToken<T, K>
43
43
 
44
44
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
45
45
  store: Store,
46
46
  token: AtomFamilyToken<T, K>,
47
47
  key: Key,
48
- ): AtomToken<T>
48
+ ): AtomToken<T, K>
49
49
 
50
50
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
51
51
  store: Store,
52
52
  token: WritableSelectorFamilyToken<T, K>,
53
53
  key: Key,
54
- ): WritableSelectorToken<T>
54
+ ): WritableSelectorToken<T, K>
55
55
 
56
56
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
57
57
  store: Store,
58
58
  token: ReadonlySelectorFamilyToken<T, K>,
59
59
  key: Key,
60
- ): ReadonlySelectorToken<T>
60
+ ): ReadonlySelectorToken<T, K>
61
61
 
62
62
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
63
63
  store: Store,
64
64
  token: SelectorFamilyToken<T, K>,
65
65
  key: Key,
66
- ): SelectorToken<T>
66
+ ): SelectorToken<T, K>
67
67
 
68
68
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
69
69
  store: Store,
70
70
  token: WritableFamilyToken<T, K>,
71
71
  key: Key,
72
- ): WritableToken<T>
72
+ ): WritableToken<T, K>
73
73
 
74
74
  export function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(
75
75
  store: Store,
76
76
  token: ReadableFamilyToken<T, K>,
77
77
  key: Key,
78
- ): ReadableToken<T>
78
+ ): ReadableToken<T, K>
79
79
 
80
80
  export function initFamilyMemberInStore(
81
81
  store: Store,
82
82
  token: ReadableFamilyToken<any, any>,
83
83
  key: Json.Serializable,
84
84
  ): ReadableToken<any> {
85
- const familyKey = token.key
86
- const family = store.families.get(familyKey)
85
+ const family = store.families.get(token.key)
87
86
  if (family === undefined) {
88
87
  throw new NotFoundError(token, store)
89
88
  }
@@ -37,49 +37,49 @@ export function seekInStore<
37
37
  store: Store,
38
38
  token: MutableAtomFamilyToken<T, J, K>,
39
39
  key: Key,
40
- ): MutableAtomToken<T, J> | undefined
40
+ ): MutableAtomToken<T, J, K> | undefined
41
41
 
42
42
  export function seekInStore<T, K extends Canonical, Key extends K>(
43
43
  store: Store,
44
44
  token: RegularAtomFamilyToken<T, K>,
45
45
  key: Key,
46
- ): RegularAtomToken<T> | undefined
46
+ ): RegularAtomToken<T, K> | undefined
47
47
 
48
48
  export function seekInStore<T, K extends Canonical, Key extends K>(
49
49
  store: Store,
50
50
  token: AtomFamilyToken<T, K>,
51
51
  key: Key,
52
- ): AtomToken<T> | undefined
52
+ ): AtomToken<T, K> | undefined
53
53
 
54
54
  export function seekInStore<T, K extends Canonical, Key extends K>(
55
55
  store: Store,
56
56
  token: WritableSelectorFamilyToken<T, K>,
57
57
  key: Key,
58
- ): WritableSelectorToken<T> | undefined
58
+ ): WritableSelectorToken<T, K> | undefined
59
59
 
60
60
  export function seekInStore<T, K extends Canonical, Key extends K>(
61
61
  store: Store,
62
62
  token: ReadonlySelectorFamilyToken<T, K>,
63
63
  key: Key,
64
- ): ReadonlySelectorToken<T> | undefined
64
+ ): ReadonlySelectorToken<T, K> | undefined
65
65
 
66
66
  export function seekInStore<T, K extends Canonical, Key extends K>(
67
67
  store: Store,
68
68
  token: SelectorFamilyToken<T, K>,
69
69
  key: Key,
70
- ): SelectorToken<T> | undefined
70
+ ): SelectorToken<T, K> | undefined
71
71
 
72
72
  export function seekInStore<T, K extends Canonical, Key extends K>(
73
73
  store: Store,
74
74
  token: WritableFamilyToken<T, K>,
75
75
  key: Key,
76
- ): WritableToken<T> | undefined
76
+ ): WritableToken<T, K> | undefined
77
77
 
78
78
  export function seekInStore<T, K extends Canonical, Key extends K>(
79
79
  store: Store,
80
80
  token: ReadableFamilyToken<T, K>,
81
81
  key: Key,
82
- ): ReadableToken<T> | undefined
82
+ ): ReadableToken<T, K> | undefined
83
83
 
84
84
  export function seekInStore<M extends MoleculeConstructor>(
85
85
  store: Store,
@@ -6,9 +6,11 @@ import type {
6
6
  ReadableFamilyToken,
7
7
  ReadableToken,
8
8
  } from "atom.io"
9
- import { type Canonical, stringifyJson } from "atom.io/json"
9
+ import { type Canonical, parseJson } from "atom.io/json"
10
+ import { M } from "vitest/dist/chunks/environment.0M5R1SX_.js"
10
11
 
11
12
  import { findInStore, seekInStore } from "../families"
13
+ import { getFamilyOfToken } from "../families/get-family-of-token"
12
14
  import { NotFoundError } from "../not-found-error"
13
15
  import type { Store } from "../store"
14
16
  import { counterfeit, withdraw } from "../store"
@@ -58,11 +60,23 @@ export function getFromStore(
58
60
  | [token: ReadableToken<any>]
59
61
  ): any {
60
62
  let token: MoleculeToken<any> | ReadableToken<any>
63
+ let family:
64
+ | MoleculeFamilyToken<any>
65
+ | ReadableFamilyToken<any, Canonical>
66
+ | null
67
+ let key: Canonical | null
61
68
  if (params.length === 1) {
62
69
  token = params[0]
70
+ if (token.type !== `molecule`) {
71
+ family = getFamilyOfToken(store, token) ?? null
72
+ if (family) {
73
+ key = token.family ? parseJson(token.family.subKey) : null
74
+ token = findInStore(store, family, key)
75
+ }
76
+ }
63
77
  } else {
64
- const family = params[0]
65
- const key = params[1]
78
+ family = params[0]
79
+ key = params[1]
66
80
  let maybeToken: MoleculeToken<any> | ReadableToken<any>
67
81
  if (family.type === `molecule_family`) {
68
82
  maybeToken = seekInStore(store, family, key) ?? counterfeit(family, key)
@@ -72,7 +86,7 @@ export function getFromStore(
72
86
  token = maybeToken
73
87
  }
74
88
  if (`counterfeit` in token && `family` in token) {
75
- const family =
89
+ family =
76
90
  token.type === `molecule`
77
91
  ? withdraw(token.family, store)
78
92
  : // biome-ignore lint/style/noNonNullAssertion: family must be present
@@ -1,7 +1,8 @@
1
1
  import type { WritableFamilyToken, WritableToken } from "atom.io"
2
- import { type Canonical, stringifyJson } from "atom.io/json"
2
+ import { type Canonical, parseJson, stringifyJson } from "atom.io/json"
3
3
 
4
4
  import { findInStore } from "../families"
5
+ import { getFamilyOfToken } from "../families/get-family-of-token"
5
6
  import { closeOperation, openOperation } from "../operation"
6
7
  import type { Store } from "../store"
7
8
  import { withdraw } from "../store"
@@ -31,17 +32,24 @@ export function setIntoStore<T, New extends T>(
31
32
  | [token: WritableToken<T>, value: New | ((oldValue: T) => New)]
32
33
  ): void {
33
34
  let token: WritableToken<T>
35
+ let family: WritableFamilyToken<T, Canonical> | null
36
+ let key: Canonical | null
34
37
  let value: New | ((oldValue: T) => New)
35
38
  if (params.length === 2) {
36
39
  token = params[0]
37
40
  value = params[1]
41
+ family = getFamilyOfToken(store, token) ?? null
42
+ if (family) {
43
+ key = token.family ? parseJson(token.family.subKey) : null
44
+ token = findInStore(store, family, key)
45
+ }
38
46
  } else {
39
- const family = params[0]
40
- const key = params[1]
47
+ family = params[0]
48
+ key = params[1]
41
49
  value = params[2]
42
- const maybeToken = findInStore(store, family, key)
43
- token = maybeToken
50
+ token = findInStore(store, family, key)
44
51
  }
52
+
45
53
  if (`counterfeit` in token) {
46
54
  const disposal = store.disposalTraces.buffer.find(
47
55
  (item) => item?.key === token.key,
@@ -1,7 +1,7 @@
1
1
  import { Range, Flat, Store, Transceiver } from 'atom.io/internal';
2
2
  import * as AtomIO from 'atom.io';
3
3
 
4
- type Entries<K extends keyof any = keyof any, V = any> = [K, V][];
4
+ type Entries<K extends PropertyKey = keyof any, V = any> = [K, V][];
5
5
  type KeyOfEntries<E extends Entries> = E extends [infer K, any][] ? K : never;
6
6
  type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {
7
7
  [P in Range<E[`length`]>]: E[P] extends [K, infer V] ? V : never;
@@ -32,8 +32,8 @@ declare namespace Json {
32
32
  type Object<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
33
33
  type Array<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
34
34
  }
35
- type stringified<J extends Json.Serializable> = string & {
36
- __json: J;
35
+ type stringified<J extends Json.Serializable> = J extends string ? `"${J}"` : J extends number ? `${J}` : J extends true ? `true` : J extends false ? `false` : J extends boolean ? `false` | `true` : J extends null ? `null` : string & {
36
+ __json?: J;
37
37
  };
38
38
  declare const parseJson: <S extends stringified<Json.Serializable>>(str: S | string) => S extends stringified<infer J> ? J : Json.Serializable;
39
39
  declare const stringifyJson: <J extends Json.Serializable>(json: J) => stringified<J>;
@@ -1,4 +1,4 @@
1
- import { createWritableSelectorFamily } from '../../dist/chunk-XPYU2HY2.js';
1
+ import { createWritableSelectorFamily } from '../../dist/chunk-4WXELLFT.js';
2
2
  import '../../dist/chunk-IBTHB2PI.js';
3
3
  import '../../dist/chunk-XWL6SNVU.js';
4
4
  import { createStandaloneSelector, IMPLICIT, growMoleculeInStore, initFamilyMemberInStore, withdraw, seekInStore } from 'atom.io/internal';
@@ -1,6 +1,6 @@
1
1
  import type { Flat, Range } from "atom.io/internal"
2
2
 
3
- export type Entries<K extends keyof any = keyof any, V = any> = [K, V][]
3
+ export type Entries<K extends PropertyKey = keyof any, V = any> = [K, V][]
4
4
 
5
5
  export type KeyOfEntries<E extends Entries> = E extends [infer K, any][]
6
6
  ? K
package/json/src/index.ts CHANGED
@@ -27,7 +27,19 @@ export namespace Json {
27
27
  ReadonlyArray<Element>
28
28
  }
29
29
 
30
- export type stringified<J extends Json.Serializable> = string & { __json: J }
30
+ export type stringified<J extends Json.Serializable> = J extends string
31
+ ? `"${J}"`
32
+ : J extends number
33
+ ? `${J}`
34
+ : J extends true
35
+ ? `true`
36
+ : J extends false
37
+ ? `false`
38
+ : J extends boolean
39
+ ? `false` | `true`
40
+ : J extends null
41
+ ? `null`
42
+ : string & { __json?: J }
31
43
 
32
44
  export const parseJson = <S extends stringified<Json.Serializable>>(
33
45
  str: S | string,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atom.io",
3
- "version": "0.29.0",
3
+ "version": "0.29.1",
4
4
  "description": "Composable and testable reactive data library.",
5
5
  "homepage": "https://atom.io.fyi",
6
6
  "sideEffects": false,
@@ -59,30 +59,30 @@
59
59
  "@types/npmlog": "7.0.0",
60
60
  "@types/react": "18.3.5",
61
61
  "@types/tmp": "0.2.6",
62
- "@typescript-eslint/parser": "8.4.0",
63
- "@typescript-eslint/rule-tester": "8.4.0",
62
+ "@typescript-eslint/parser": "8.5.0",
63
+ "@typescript-eslint/rule-tester": "8.5.0",
64
64
  "@vitest/coverage-v8": "2.0.5",
65
65
  "@vitest/ui": "2.0.5",
66
- "concurrently": "8.2.2",
66
+ "concurrently": "9.0.1",
67
67
  "drizzle-kit": "0.24.2",
68
68
  "drizzle-orm": "0.33.0",
69
- "eslint": "9.9.1",
70
- "framer-motion": "11.5.2",
71
- "happy-dom": "15.7.3",
69
+ "eslint": "9.10.0",
70
+ "framer-motion": "11.5.4",
71
+ "happy-dom": "15.7.4",
72
72
  "http-proxy": "1.18.1",
73
73
  "npmlog": "7.0.1",
74
74
  "postgres": "3.4.4",
75
75
  "preact": "10.23.2",
76
76
  "react": "18.3.1",
77
77
  "react-dom": "18.3.1",
78
- "react-router-dom": "6.26.1",
78
+ "react-router-dom": "6.26.2",
79
79
  "socket.io": "4.7.5",
80
80
  "socket.io-client": "4.7.5",
81
81
  "tmp": "0.2.3",
82
82
  "tsup": "8.2.4",
83
- "tsx": "4.19.0",
84
- "typescript": "5.5.4",
85
- "vite": "5.4.3",
83
+ "tsx": "4.19.1",
84
+ "typescript": "5.6.2",
85
+ "vite": "5.4.4",
86
86
  "vite-tsconfig-paths": "5.0.1",
87
87
  "vitest": "2.0.5"
88
88
  },
@@ -14,21 +14,19 @@ interface EventBuffer<Key extends string, Params extends Json.Serializable[]> ex
14
14
  toString(): StringifiedEvent<Key, Params>;
15
15
  }
16
16
  declare class CustomSocket<I extends Events, O extends Events> implements Socket {
17
- emit: <Event extends keyof O>(event: Event, ...args: O[Event]) => CustomSocket<I, O>;
18
- protected listeners: Map<keyof I, Set<(...args: Json.Array) => void>>;
17
+ emit: <Event extends keyof I>(event: Event, ...args: I[Event]) => CustomSocket<I, O>;
18
+ protected listeners: Map<keyof O, Set<(...args: Json.Array) => void>>;
19
19
  protected globalListeners: Set<(event: string, ...args: Json.Array) => void>;
20
20
  protected handleEvent<Event extends keyof I>(event: string, ...args: I[Event]): void;
21
21
  id: string;
22
- constructor(emit: <Event extends keyof O>(event: Event, ...args: O[Event]) => CustomSocket<I, O>);
23
- on<Event extends keyof I>(event: Event, listener: (...args: I[Event]) => void): this;
22
+ constructor(emit: <Event extends keyof I>(event: Event, ...args: I[Event]) => CustomSocket<I, O>);
23
+ on<Event extends keyof O>(event: Event, listener: (...args: O[Event]) => void): this;
24
24
  onAny(listener: (event: string, ...args: Json.Array) => void): this;
25
- off<Event extends keyof I>(event: Event, listener?: (...args: I[Event]) => void): this;
25
+ off<Event extends keyof O>(event: Event, listener?: (...args: O[Event]) => void): this;
26
26
  offAny(listener: (event: string, ...args: Json.Array) => void): this;
27
27
  }
28
28
 
29
- declare class ChildSocket<I extends Events, O extends Events & {
30
- "setup-relay": [string];
31
- }> extends CustomSocket<I, O> {
29
+ declare class ChildSocket<I extends Events, O extends Events> extends CustomSocket<I, O> {
32
30
  process: ChildProcessWithoutNullStreams;
33
31
  key: string;
34
32
  logger: {
@@ -58,12 +56,12 @@ declare class SubjectSocket<I extends Events, O extends Events> extends CustomSo
58
56
  dispose(): void;
59
57
  }
60
58
  declare class ParentSocket<I extends Events & {
59
+ [id in string as `relay:${id}`]: [string, ...Json.Serializable[]];
60
+ }, O extends Events & {
61
61
  [id in string as `user:${id}`]: [string, ...Json.Serializable[]];
62
62
  } & {
63
63
  "user-joins": [string];
64
64
  "user-leaves": [string];
65
- }, O extends Events & {
66
- [id in string as `relay:${id}`]: [string, ...Json.Serializable[]];
67
65
  }> extends CustomSocket<I, O> {
68
66
  protected incompleteData: string;
69
67
  protected unprocessedEvents: string[];
@@ -10,11 +10,7 @@ import { CustomSocket } from "./custom-socket"
10
10
 
11
11
  export class ChildSocket<
12
12
  I extends Events,
13
- O extends Events & {
14
- /* eslint-disable quotes */
15
- "setup-relay": [string]
16
- /* eslint-enable quotes */
17
- },
13
+ O extends Events,
18
14
  > extends CustomSocket<I, O> {
19
15
  protected incompleteData = ``
20
16
  protected unprocessedEvents: string[] = []
@@ -17,7 +17,7 @@ export interface EventBuffer<
17
17
  }
18
18
 
19
19
  export class CustomSocket<I extends Events, O extends Events> implements Socket {
20
- protected listeners: Map<keyof I, Set<(...args: Json.Array) => void>>
20
+ protected listeners: Map<keyof O, Set<(...args: Json.Array) => void>>
21
21
  protected globalListeners: Set<(event: string, ...args: Json.Array) => void>
22
22
  protected handleEvent<Event extends keyof I>(
23
23
  event: string,
@@ -37,18 +37,18 @@ export class CustomSocket<I extends Events, O extends Events> implements Socket
37
37
  public id = `no_id_retrieved`
38
38
 
39
39
  public constructor(
40
- public emit: <Event extends keyof O>(
40
+ public emit: <Event extends keyof I>(
41
41
  event: Event,
42
- ...args: O[Event]
42
+ ...args: I[Event]
43
43
  ) => CustomSocket<I, O>,
44
44
  ) {
45
45
  this.listeners = new Map()
46
46
  this.globalListeners = new Set()
47
47
  }
48
48
 
49
- public on<Event extends keyof I>(
49
+ public on<Event extends keyof O>(
50
50
  event: Event,
51
- listener: (...args: I[Event]) => void,
51
+ listener: (...args: O[Event]) => void,
52
52
  ): this {
53
53
  const listeners = this.listeners.get(event)
54
54
  if (listeners) {
@@ -64,9 +64,9 @@ export class CustomSocket<I extends Events, O extends Events> implements Socket
64
64
  return this
65
65
  }
66
66
 
67
- public off<Event extends keyof I>(
67
+ public off<Event extends keyof O>(
68
68
  event: Event,
69
- listener?: (...args: I[Event]) => void,
69
+ listener?: (...args: O[Event]) => void,
70
70
  ): this {
71
71
  const listeners = this.listeners.get(event)
72
72
  if (listeners) {
@@ -37,6 +37,9 @@ export class SubjectSocket<
37
37
 
38
38
  export class ParentSocket<
39
39
  I extends Events & {
40
+ [id in string as `relay:${id}`]: [string, ...Json.Serializable[]]
41
+ },
42
+ O extends Events & {
40
43
  [id in string as `user:${id}`]: [string, ...Json.Serializable[]]
41
44
  } & {
42
45
  /* eslint-disable quotes */
@@ -44,9 +47,6 @@ export class ParentSocket<
44
47
  "user-leaves": [string]
45
48
  /* eslint-enable quotes */
46
49
  },
47
- O extends Events & {
48
- [id in string as `relay:${id}`]: [string, ...Json.Serializable[]]
49
- },
50
50
  > extends CustomSocket<I, O> {
51
51
  protected incompleteData = ``
52
52
  protected unprocessedEvents: string[] = []
@@ -167,7 +167,7 @@ export class ParentSocket<
167
167
  relay.in.next(data)
168
168
  })
169
169
  relay.out.subscribe(`socket`, (data) => {
170
- this.emit(...(data as [string, ...O[keyof O]]))
170
+ this.emit(...(data as [string, ...I[keyof I]]))
171
171
  })
172
172
  })
173
173
 
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Transceiver } from "atom.io/internal"
2
- import type { Canonical, Json } from "atom.io/json"
2
+ import type { Canonical, Json, stringified } from "atom.io/json"
3
3
 
4
4
  import type { AtomFamilyToken } from "./atom"
5
5
  import type {
@@ -20,44 +20,49 @@ export * from "./timeline"
20
20
  export * from "./transaction"
21
21
  export * from "./validators"
22
22
 
23
- export type RegularAtomToken<T> = {
23
+ export type RegularAtomToken<T, K extends Canonical = any> = {
24
24
  key: string
25
25
  type: `atom`
26
- family?: FamilyMetadata
26
+ family?: FamilyMetadata<K>
27
27
  __T?: T
28
28
  }
29
29
  export type MutableAtomToken<
30
30
  T extends Transceiver<any>,
31
31
  J extends Json.Serializable,
32
+ K extends Canonical = any,
32
33
  > = {
33
34
  key: string
34
35
  type: `mutable_atom`
35
- family?: FamilyMetadata
36
+ family?: FamilyMetadata<K>
36
37
  __J?: J
37
38
  __U?: T extends Transceiver<infer Update> ? Update : never
38
39
  }
39
- export type AtomToken<T> =
40
- | MutableAtomToken<T extends Transceiver<any> ? T : never, any>
41
- | RegularAtomToken<T>
40
+ export type AtomToken<T, K extends Canonical = any> =
41
+ | MutableAtomToken<T extends Transceiver<any> ? T : never, any, K>
42
+ | RegularAtomToken<T, K>
42
43
 
43
- export type WritableSelectorToken<T> = {
44
+ export type WritableSelectorToken<T, K extends Canonical = any> = {
44
45
  key: string
45
46
  type: `selector`
46
- family?: FamilyMetadata
47
+ family?: FamilyMetadata<K>
47
48
  __T?: T
48
49
  }
49
- export type ReadonlySelectorToken<T> = {
50
+ export type ReadonlySelectorToken<T, K extends Canonical = any> = {
50
51
  key: string
51
52
  type: `readonly_selector`
52
- family?: FamilyMetadata
53
+ family?: FamilyMetadata<K>
53
54
  __T?: T
54
55
  }
55
- export type SelectorToken<T> =
56
- | ReadonlySelectorToken<T>
57
- | WritableSelectorToken<T>
56
+ export type SelectorToken<T, K extends Canonical = any> =
57
+ | ReadonlySelectorToken<T, K>
58
+ | WritableSelectorToken<T, K>
58
59
 
59
- export type WritableToken<T> = AtomToken<T> | WritableSelectorToken<T>
60
- export type ReadableToken<T> = AtomToken<T> | SelectorToken<T>
60
+ export type WritableToken<T, K extends Canonical = any> =
61
+ | AtomToken<T, K>
62
+ | WritableSelectorToken<T, K>
63
+ export type ReadableToken<T, K extends Canonical = any> =
64
+ | AtomToken<T, K>
65
+ | SelectorToken<T, K>
61
66
 
62
67
  export type WritableFamilyToken<T, K extends Canonical> =
63
68
  | AtomFamilyToken<T, K>
@@ -66,4 +71,7 @@ export type ReadableFamilyToken<T, K extends Canonical> =
66
71
  | AtomFamilyToken<T, K>
67
72
  | SelectorFamilyToken<T, K>
68
73
 
69
- export type FamilyMetadata = { key: string; subKey: string }
74
+ export type FamilyMetadata<K extends Canonical = any> = {
75
+ key: string
76
+ subKey: stringified<K>
77
+ }
@@ -1,6 +1,6 @@
1
1
  import '../../../dist/chunk-XWL6SNVU.js';
2
2
  import { Subject } from 'atom.io/internal';
3
- import { stringifyJson, parseJson } from 'atom.io/json';
3
+ import { stringifyJson } from 'atom.io/json';
4
4
 
5
5
  var SetRTX = class _SetRTX extends Set {
6
6
  mode = `record`;
@@ -111,13 +111,13 @@ var SetRTX = class _SetRTX extends Set {
111
111
  const value = update.substring(typeValueBreak + 1);
112
112
  switch (type) {
113
113
  case `add`:
114
- this.add(parseJson(value));
114
+ this.add(JSON.parse(value));
115
115
  break;
116
116
  case `clear`:
117
117
  this.clear();
118
118
  break;
119
119
  case `del`:
120
- this.delete(parseJson(value));
120
+ this.delete(JSON.parse(value));
121
121
  break;
122
122
  case `tx`:
123
123
  for (const subUpdate of value.split(`;`)) {
@@ -177,10 +177,10 @@ var SetRTX = class _SetRTX extends Set {
177
177
  const value = update.substring(breakpoint + 1);
178
178
  switch (type) {
179
179
  case `add`:
180
- this.delete(parseJson(value));
180
+ this.delete(JSON.parse(value));
181
181
  break;
182
182
  case `del`:
183
- this.add(parseJson(value));
183
+ this.add(JSON.parse(value));
184
184
  break;
185
185
  case `clear`: {
186
186
  const values = JSON.parse(value);
@@ -1,7 +1,7 @@
1
1
  import type { Lineage, Transceiver, TransceiverMode } from "atom.io/internal"
2
2
  import { Subject } from "atom.io/internal"
3
- import type { Json, primitive, stringified } from "atom.io/json"
4
- import { parseJson, stringifyJson } from "atom.io/json"
3
+ import type { Json, primitive } from "atom.io/json"
4
+ import { stringifyJson } from "atom.io/json"
5
5
 
6
6
  export type SetUpdate =
7
7
  | `add:${string}`
@@ -146,13 +146,13 @@ export class SetRTX<P extends primitive>
146
146
  const value = update.substring(typeValueBreak + 1)
147
147
  switch (type) {
148
148
  case `add`:
149
- this.add(parseJson(value as stringified<P>))
149
+ this.add(JSON.parse(value))
150
150
  break
151
151
  case `clear`:
152
152
  this.clear()
153
153
  break
154
154
  case `del`:
155
- this.delete(parseJson(value as stringified<P>))
155
+ this.delete(JSON.parse(value))
156
156
  break
157
157
  case `tx`:
158
158
  for (const subUpdate of value.split(`;`)) {
@@ -215,10 +215,10 @@ export class SetRTX<P extends primitive>
215
215
  const value = update.substring(breakpoint + 1)
216
216
  switch (type) {
217
217
  case `add`:
218
- this.delete(parseJson(value as stringified<P>))
218
+ this.delete(JSON.parse(value))
219
219
  break
220
220
  case `del`:
221
- this.add(parseJson(value as stringified<P>))
221
+ this.add(JSON.parse(value))
222
222
  break
223
223
  case `clear`: {
224
224
  const values = JSON.parse(value) as P[]