valdres 0.2.0-pre.12 → 0.2.0-pre.15
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/dist/index.js +134 -38
- package/dist/types/indexConstructor.d.ts +1 -1
- package/dist/types/lib/createAtomFamily.d.ts +1 -1
- package/dist/types/lib/createGlobalAtomFamily.d.ts +1 -1
- package/dist/types/lib/getState.d.ts +1 -1
- package/dist/types/lib/initAtom.d.ts +1 -1
- package/dist/types/lib/propagateUpdatedAtoms.d.ts +15 -0
- package/dist/types/lib/transaction.d.ts +1 -0
- package/dist/types/selector.d.ts +1 -1
- package/dist/types/selectorFamily.d.ts +1 -1
- package/dist/types/utils/isAtomFamily.d.ts +1 -1
- package/dist/types/utils/isFamilyAtom.d.ts +1 -1
- package/dist/types/utils/isFamilySelector.d.ts +1 -1
- package/dist/types/utils/isFamilyState.d.ts +1 -1
- package/dist/types/utils/isSelectorFamily.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -278,7 +278,7 @@ function getState(state, data, initializedAtomsSet, circularDependencySet) {
|
|
|
278
278
|
const closestData = findClosestStoreWithAtomInitialized(state, data);
|
|
279
279
|
return getState(state, closestData, initializedAtomsSet, circularDependencySet);
|
|
280
280
|
}
|
|
281
|
-
data.values.set(state,
|
|
281
|
+
data.values.set(state, new FamilyIndex(state, data).toArray());
|
|
282
282
|
initializedAtomsSet.add(state);
|
|
283
283
|
return data.values.get(state);
|
|
284
284
|
}
|
|
@@ -422,28 +422,125 @@ var addSetToSet = (fromSet, toSet) => {
|
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
};
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
425
|
+
class FamilyIndex {
|
|
426
|
+
map;
|
|
427
|
+
family;
|
|
428
|
+
data;
|
|
429
|
+
parentIndex;
|
|
430
|
+
constructor(family, data, parentIndex, map) {
|
|
431
|
+
this.family = family;
|
|
432
|
+
this.data = data;
|
|
433
|
+
this.parentIndex = parentIndex;
|
|
434
|
+
this.map = new Map(map);
|
|
435
|
+
}
|
|
436
|
+
add(atoms) {
|
|
437
|
+
atoms.forEach((atom) => {
|
|
438
|
+
this.map.set(atom, true);
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
delete(atoms) {
|
|
442
|
+
atoms.forEach((atom) => {
|
|
443
|
+
this.map.set(atom, false);
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
has(atom) {
|
|
447
|
+
return this.map.has(atom);
|
|
448
|
+
}
|
|
449
|
+
clone() {
|
|
450
|
+
return new FamilyIndex(this.family, this.data, this.parentIndex, this.map);
|
|
451
|
+
}
|
|
452
|
+
toSet() {
|
|
453
|
+
let set;
|
|
454
|
+
if (this.parentIndex) {
|
|
455
|
+
set = new Set(this.parentIndex.toSet());
|
|
456
|
+
} else {
|
|
457
|
+
set = new Set;
|
|
458
|
+
}
|
|
459
|
+
for (const [key, value] of this.map) {
|
|
460
|
+
if (value === true)
|
|
461
|
+
set.add(key);
|
|
462
|
+
if (value === false)
|
|
463
|
+
set.delete(key);
|
|
464
|
+
}
|
|
465
|
+
return set;
|
|
466
|
+
}
|
|
467
|
+
toArray() {
|
|
468
|
+
const arr = [...this.toSet()];
|
|
469
|
+
arr.__index = this;
|
|
470
|
+
return arr;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
var deleteFamilyAtomsFromSet = (family, familyAtoms, data) => {
|
|
474
|
+
const index = findFamilyIndex(family, data);
|
|
475
|
+
index.delete(familyAtoms);
|
|
476
|
+
data.values.set(family, index.toArray());
|
|
477
|
+
recursivlyUpdateIndexes(data, family);
|
|
478
|
+
};
|
|
479
|
+
var initFamilyIndex = (family, data) => {
|
|
480
|
+
if (data.values.has(family))
|
|
481
|
+
return;
|
|
482
|
+
if ("parent" in data) {
|
|
483
|
+
initFamilyIndex(family, data.parent);
|
|
484
|
+
const parentIndex = data.parent.values.get(family).__index;
|
|
485
|
+
if (!parentIndex)
|
|
486
|
+
throw new Error("Parent index is missing");
|
|
487
|
+
const index = new FamilyIndex(family, data, parentIndex);
|
|
488
|
+
data.values.set(family, index.toArray());
|
|
489
|
+
} else {
|
|
490
|
+
const index = new FamilyIndex(family, data);
|
|
491
|
+
data.values.set(family, index.toArray());
|
|
492
|
+
}
|
|
431
493
|
};
|
|
432
|
-
var
|
|
433
|
-
|
|
434
|
-
|
|
494
|
+
var findFamilyIndex = (family, data) => {
|
|
495
|
+
if (!data.values.has(family)) {
|
|
496
|
+
initFamilyIndex(family, data);
|
|
497
|
+
}
|
|
498
|
+
const value = data.values.get(family);
|
|
499
|
+
if (!value?.__index) {
|
|
500
|
+
console.log("value", value);
|
|
501
|
+
throw new Error("Family index is missing");
|
|
502
|
+
}
|
|
503
|
+
return value.__index;
|
|
504
|
+
};
|
|
505
|
+
var recursivlyUpdateIndexes = (data, family) => {
|
|
506
|
+
Object.keys(data.scopes).forEach((scopeKey) => {
|
|
507
|
+
const scopedData = data.scopes[scopeKey];
|
|
508
|
+
if (scopeKey) {
|
|
509
|
+
if (scopedData.values.has(family)) {
|
|
510
|
+
scopedData.values.set(family, scopedData.values.get(family).__index.toArray());
|
|
511
|
+
}
|
|
512
|
+
recursivlyUpdateIndexes(scopedData, family);
|
|
513
|
+
}
|
|
514
|
+
});
|
|
435
515
|
};
|
|
436
516
|
var addFamilyAtomsToSet = (family, familyAtoms, data) => {
|
|
437
|
-
const
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
517
|
+
const index = findFamilyIndex(family, data);
|
|
518
|
+
index.add(familyAtoms);
|
|
519
|
+
data.values.set(family, index.toArray());
|
|
520
|
+
recursivlyUpdateIndexes(data, family);
|
|
521
|
+
};
|
|
522
|
+
var propagateDeletedAtoms = (atoms, data, subscriptions = new Set, families = new Map) => {
|
|
523
|
+
const selectors = new Set;
|
|
524
|
+
for (const atom of atoms) {
|
|
525
|
+
addSetToSet(data.stateDependents.get(atom), selectors);
|
|
526
|
+
addSetToSet(data.subscriptions.get(atom), subscriptions);
|
|
527
|
+
if (isFamilyAtom(atom)) {
|
|
528
|
+
if (!families.has(atom.family)) {
|
|
529
|
+
families.set(atom.family, new Set);
|
|
530
|
+
}
|
|
531
|
+
families.get(atom.family).add(atom);
|
|
442
532
|
}
|
|
443
533
|
}
|
|
444
|
-
if (
|
|
445
|
-
|
|
534
|
+
if (families.size > 0) {
|
|
535
|
+
for (const [family, familyAtoms] of families) {
|
|
536
|
+
addSetToSet(data.stateDependents.get(family), selectors);
|
|
537
|
+
addSetToSet(data.subscriptions.get(family), subscriptions);
|
|
538
|
+
if (familyAtoms.size === 0)
|
|
539
|
+
throw new Error("Should not be possible");
|
|
540
|
+
deleteFamilyAtomsFromSet(family, familyAtoms, data);
|
|
541
|
+
}
|
|
446
542
|
}
|
|
543
|
+
propagateDirtySelectors(atoms, selectors, data, subscriptions, families);
|
|
447
544
|
};
|
|
448
545
|
var propagateUpdatedAtoms = (atoms, data, subscriptions = new Set, families = new Map, isRecursive = false) => {
|
|
449
546
|
const selectors = new Set;
|
|
@@ -550,16 +647,8 @@ function createStoreData(id, parent) {
|
|
|
550
647
|
|
|
551
648
|
// src/lib/deleteFamilyAtom.ts
|
|
552
649
|
var deleteFamilyAtom = (atom, data) => {
|
|
553
|
-
const array = data.values.get(atom.family);
|
|
554
|
-
const index = array.indexOf(atom);
|
|
555
|
-
const newArray = [
|
|
556
|
-
...array.slice(0, index),
|
|
557
|
-
...array.slice(index + 1)
|
|
558
|
-
];
|
|
559
650
|
data.values.delete(atom);
|
|
560
|
-
|
|
561
|
-
setValueInData(atom.family, newArray, data);
|
|
562
|
-
propagateUpdatedAtoms([atom.family], data);
|
|
651
|
+
propagateDeletedAtoms([atom], data);
|
|
563
652
|
};
|
|
564
653
|
|
|
565
654
|
// src/lib/resetAtom.ts
|
|
@@ -802,21 +891,19 @@ class Transaction {
|
|
|
802
891
|
this.dirty = true;
|
|
803
892
|
if (isFamilyAtom(atom)) {
|
|
804
893
|
const currentFamilyList = this.get(atom.family);
|
|
805
|
-
if (!currentFamilyList.
|
|
806
|
-
const
|
|
807
|
-
|
|
894
|
+
if (currentFamilyList && !currentFamilyList.__index.has(atom)) {
|
|
895
|
+
const index = currentFamilyList ? currentFamilyList.__index.clone() : new FamilyIndex(atom.family, this.data);
|
|
896
|
+
index.add([atom]);
|
|
897
|
+
this.atomMap.set(atom.family, index.toArray());
|
|
808
898
|
}
|
|
809
899
|
}
|
|
810
900
|
return value;
|
|
811
901
|
};
|
|
812
902
|
del = (atom) => {
|
|
813
|
-
const
|
|
814
|
-
const
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
...array.slice(index + 1)
|
|
818
|
-
];
|
|
819
|
-
this.atomMap.set(atom.family, newArr);
|
|
903
|
+
const index = this.get(atom.family).__index;
|
|
904
|
+
const cloned = index.clone();
|
|
905
|
+
cloned.delete([atom]);
|
|
906
|
+
this.atomMap.set(atom.family, cloned.toArray());
|
|
820
907
|
if (this.data.values.has(atom)) {
|
|
821
908
|
this.deleteSet.add(atom);
|
|
822
909
|
}
|
|
@@ -831,6 +918,12 @@ class Transaction {
|
|
|
831
918
|
throw new Error(`Scope '${scopeId}' not found. Registered scopes: ${Object.keys(this.data.scopes).join(", ")}`);
|
|
832
919
|
}
|
|
833
920
|
};
|
|
921
|
+
parentScope = (callback) => {
|
|
922
|
+
if (!this._parentTransaction) {
|
|
923
|
+
this._parentTransaction = new Transaction(this.data.parent);
|
|
924
|
+
}
|
|
925
|
+
return this._parentTransaction.execute(callback, false);
|
|
926
|
+
};
|
|
834
927
|
reset = (atom) => {
|
|
835
928
|
const value = getAtomInitValue(atom, this.data, this.initializedAtomsSet);
|
|
836
929
|
this.atomMap.set(atom, value);
|
|
@@ -853,6 +946,9 @@ class Transaction {
|
|
|
853
946
|
scopedTxn.commit();
|
|
854
947
|
}
|
|
855
948
|
}
|
|
949
|
+
if (this._parentTransaction) {
|
|
950
|
+
this._parentTransaction.commit();
|
|
951
|
+
}
|
|
856
952
|
};
|
|
857
953
|
get atomMap() {
|
|
858
954
|
if (!this._atomMap)
|
|
@@ -1298,9 +1394,9 @@ var isFamilySelector = (state) => isFamilyState(state) && isSelector(state);
|
|
|
1298
1394
|
|
|
1299
1395
|
// src/index.ts
|
|
1300
1396
|
if (globalThis.__valdres__) {
|
|
1301
|
-
throw new Error(`Error! An instance of valdres is already loaded. Loaded: ${globalThis.__valdres__}. Attempted to load: ${"0.2.0-pre.
|
|
1397
|
+
throw new Error(`Error! An instance of valdres is already loaded. Loaded: ${globalThis.__valdres__}. Attempted to load: ${"0.2.0-pre.15"}`);
|
|
1302
1398
|
} else {
|
|
1303
|
-
globalThis.__valdres__ = "0.2.0-pre.
|
|
1399
|
+
globalThis.__valdres__ = "0.2.0-pre.15";
|
|
1304
1400
|
}
|
|
1305
1401
|
export {
|
|
1306
1402
|
store,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AtomFamily } from "./types/AtomFamily";
|
|
2
2
|
import type { Selector } from "./types/Selector";
|
|
3
|
-
export declare const index: <Term, Value extends
|
|
3
|
+
export declare const index: <Term, Value extends any, FamilyArgs extends [any, ...any[]] = [any, ...any[]]>(family: AtomFamily<Value, FamilyArgs>, callback: (value: Value, term: Term) => boolean, options?: {
|
|
4
4
|
name?: string;
|
|
5
5
|
}) => ((term: Term) => Selector<Term[]>);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
2
2
|
import type { AtomFamilyDefaultValue } from "../types/AtomFamilyDefaultValue";
|
|
3
3
|
import type { AtomOptions } from "../types/AtomOptions";
|
|
4
|
-
export declare const createAtomFamily: <Value extends
|
|
4
|
+
export declare const createAtomFamily: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue: AtomFamilyDefaultValue<Value, Args>, options?: AtomOptions<Value>) => AtomFamily<Value, Args>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
2
2
|
import type { AtomFamilyDefaultValue } from "../types/AtomFamilyDefaultValue";
|
|
3
3
|
import type { AtomOptions } from "../types/AtomOptions";
|
|
4
|
-
export declare const createGlobalAtomFamily: <Value extends
|
|
4
|
+
export declare const createGlobalAtomFamily: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue: AtomFamilyDefaultValue<Value, Args>, options: AtomOptions<Value>) => AtomFamily<Value, Args>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Atom } from "../types/Atom";
|
|
2
2
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
3
|
+
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
3
4
|
import type { Selector } from "../types/Selector";
|
|
4
5
|
import type { StoreData } from "../types/StoreData";
|
|
5
|
-
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
6
6
|
export declare function getState<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(atom: Atom<Value>, data: StoreData, initializedAtomsSet: Set<Atom>, circularDependencySet?: WeakSet<Selector>): Value;
|
|
7
7
|
export declare function getState<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(selector: Selector<Value>, data: StoreData, initializedAtomsSet: Set<Atom>, circularDependencySet?: WeakSet<Selector>): Value;
|
|
8
8
|
export declare function getState<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(family: AtomFamily<Value, Args>, data: StoreData, initializedAtomsSet: Set<Atom>, circularDependencySet?: WeakSet<Selector>): AtomFamilyAtom<Value, Args>[];
|
|
@@ -2,4 +2,4 @@ import type { Atom } from "../types/Atom";
|
|
|
2
2
|
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
3
3
|
import type { StoreData } from "../types/StoreData";
|
|
4
4
|
export declare const getAtomInitValue: <V = any>(atom: Atom<V>, data: StoreData, initializedAtomsSet: Set<Atom>) => any;
|
|
5
|
-
export declare const initAtom: <Value extends
|
|
5
|
+
export declare const initAtom: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(atom: Atom<Value> | AtomFamilyAtom<Value, Args>, data: StoreData, initializedAtomsSet: Set<Atom>) => void;
|
|
@@ -5,6 +5,21 @@ import type { Family } from "../types/Family";
|
|
|
5
5
|
import type { Selector } from "../types/Selector";
|
|
6
6
|
import type { StoreData } from "../types/StoreData";
|
|
7
7
|
import type { Subscription } from "../types/Subscription";
|
|
8
|
+
export declare class FamilyIndex {
|
|
9
|
+
map: Map<AtomFamilyAtom<any>, boolean>;
|
|
10
|
+
family: Family<any>;
|
|
11
|
+
data: StoreData;
|
|
12
|
+
parentIndex: FamilyIndex | undefined;
|
|
13
|
+
constructor(family: Family<any>, data: StoreData, parentIndex?: FamilyIndex, map?: Map<AtomFamilyAtom<any>, boolean>);
|
|
14
|
+
add(atoms: AtomFamilyAtom<any>[]): void;
|
|
15
|
+
delete(atoms: AtomFamilyAtom<any>[]): void;
|
|
16
|
+
has(atom: AtomFamilyAtom<any>): boolean;
|
|
17
|
+
clone(): FamilyIndex;
|
|
18
|
+
toSet(): Set<AtomFamilyAtom<any>>;
|
|
19
|
+
toArray(): AtomFamilyAtom<any>[];
|
|
20
|
+
}
|
|
21
|
+
export declare const deleteFamilyAtomsFromSet: (family: Family<any>, familyAtoms: Set<AtomFamilyAtom<any>>, data: StoreData) => void;
|
|
8
22
|
export declare const addFamilyAtomsToSet: (family: Family<any>, familyAtoms: Set<AtomFamilyAtom<any>>, data: StoreData) => void;
|
|
23
|
+
export declare const propagateDeletedAtoms: (atoms: AtomFamilyAtom<any, any>[], data: StoreData, subscriptions?: Set<Subscription>, families?: Map<AtomFamily<any>, Set<AtomFamilyAtom<any>>>) => void;
|
|
9
24
|
export declare const propagateUpdatedAtoms: (atoms: (Atom<any> | AtomFamilyAtom<any, any> | AtomFamily<any, any>)[], data: StoreData, subscriptions?: Set<Subscription>, families?: Map<AtomFamily<any>, Set<AtomFamilyAtom<any>>>, isRecursive?: boolean) => void;
|
|
10
25
|
export declare const propagateDirtySelectors: (updatedAtoms: Atom[], selectors: Set<Selector>, data: StoreData, subscriptions: Set<Subscription>, families: Map<AtomFamily<any>, Set<AtomFamilyAtom<any>>>) => void;
|
|
@@ -19,6 +19,7 @@ export declare class Transaction {
|
|
|
19
19
|
set: <V>(atom: Atom<V>, value: V | ((currentValue: V) => V)) => V;
|
|
20
20
|
del: (atom: AtomFamilyAtom<any, any>) => void;
|
|
21
21
|
scope: (scopeId: string, callback: (txn: Transaction) => any) => any;
|
|
22
|
+
parentScope: (callback: (txn: Transaction) => any) => any;
|
|
22
23
|
reset: (atom: Atom) => any;
|
|
23
24
|
execute: (callback: TransactionFn, autoCommit?: boolean) => any;
|
|
24
25
|
commit: () => void;
|
package/dist/types/selector.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { GetValue } from "./types/GetValue";
|
|
2
2
|
import type { Selector } from "./types/Selector";
|
|
3
3
|
import type { SelectorOptions } from "./types/SelectorOptions";
|
|
4
|
-
export declare const selector: <Value extends
|
|
4
|
+
export declare const selector: <Value extends any, FamilyArgs extends [any, ...any[]] = [any, ...any[]]>(get: (get: GetValue, storeId: string) => Value | Promise<Value>, options?: SelectorOptions<Value>) => Selector<Value, FamilyArgs>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { GetValue } from "./types/GetValue";
|
|
2
2
|
import type { SelectorFamily } from "./types/SelectorFamily";
|
|
3
3
|
import type { SelectorOptions } from "./types/SelectorOptions";
|
|
4
|
-
export declare const selectorFamily: <Value extends
|
|
4
|
+
export declare const selectorFamily: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(callback: (...args: Args) => (get: GetValue) => Value | Promise<Value>, options?: SelectorOptions<Value>) => SelectorFamily<Value, Args>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
2
|
-
export declare const isAtomFamily: <Value extends
|
|
2
|
+
export declare const isAtomFamily: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is AtomFamily<Value, Args>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
2
|
-
export declare const isFamilyAtom: <Value extends
|
|
2
|
+
export declare const isFamilyAtom: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is AtomFamilyAtom<Value, Args>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AtomFamilySelector } from "../types/AtomFamilySelector";
|
|
2
|
-
export declare const isFamilySelector: <Value extends
|
|
2
|
+
export declare const isFamilySelector: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is AtomFamilySelector<Value, Args>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
2
2
|
import type { AtomFamilySelector } from "../types/AtomFamilySelector";
|
|
3
|
-
export declare const isFamilyState: <Value extends
|
|
3
|
+
export declare const isFamilyState: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is AtomFamilyAtom<Value, Args> | AtomFamilySelector<Value, Args>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { SelectorFamily } from "../types/SelectorFamily";
|
|
2
|
-
export declare const isSelectorFamily: <Value extends
|
|
2
|
+
export declare const isSelectorFamily: <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is SelectorFamily<Value, Args>;
|