valdres 0.2.0-alpha.74 → 0.2.0-alpha.76
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 +231 -138
- package/dist/types/src/atomFamily.d.ts +2 -3
- package/dist/types/src/indexConstructor.d.ts +3 -2
- package/dist/types/src/lib/atomFamilyAtom.d.ts +3 -3
- package/dist/types/src/lib/createAtomFamily.d.ts +1 -1
- package/dist/types/src/lib/createGlobalAtomFamily.d.ts +3 -4
- package/dist/types/src/lib/deleteFamilyAtom.d.ts +3 -0
- package/dist/types/src/lib/getState.d.ts +4 -3
- package/dist/types/src/lib/initAtom.d.ts +1 -1
- package/dist/types/src/lib/initSelector.d.ts +1 -1
- package/dist/types/src/lib/propagateUpdatedAtoms.d.ts +3 -2
- package/dist/types/src/lib/setValueInData.d.ts +2 -1
- package/dist/types/src/lib/stringifyFamilyArgs.d.ts +1 -0
- package/dist/types/src/lib/transaction.d.ts +1 -1
- package/dist/types/src/lib/updateStateSubscribers.d.ts +1 -1
- package/dist/types/src/selector.d.ts +1 -1
- package/dist/types/src/selectorFamily.d.ts +2 -2
- package/dist/types/src/types/AtomFamily.d.ts +6 -9
- package/dist/types/src/types/AtomFamilyAtom.d.ts +4 -3
- package/dist/types/src/types/AtomFamilyDefaultValue.d.ts +2 -2
- package/dist/types/src/types/AtomFamilyGlobalAtom.d.ts +1 -1
- package/dist/types/src/types/AtomFamilySelector.d.ts +3 -3
- package/dist/types/src/types/EqualFunc.d.ts +1 -1
- package/dist/types/src/types/Family.d.ts +1 -1
- package/dist/types/src/types/GetValue.d.ts +4 -3
- package/dist/types/src/types/Selector.d.ts +4 -4
- package/dist/types/src/types/SelectorFamily.d.ts +3 -4
- package/dist/types/src/types/SelectorOptions.d.ts +1 -1
- package/dist/types/src/types/State.d.ts +1 -1
- package/dist/types/src/types/Store.d.ts +4 -2
- package/dist/types/src/types/StoreData.d.ts +1 -1
- package/dist/types/src/types/SubscribeFn.d.ts +2 -2
- package/dist/types/src/types/TransactionInterface.d.ts +2 -0
- package/dist/types/src/utils/isAtomFamily.d.ts +1 -1
- package/dist/types/src/utils/isFamily.d.ts +1 -1
- package/dist/types/src/utils/isFamilyAtom.d.ts +1 -1
- package/dist/types/src/utils/isFamilySelector.d.ts +1 -1
- package/dist/types/src/utils/isFamilyState.d.ts +1 -1
- package/dist/types/src/utils/isSelectorFamily.d.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -92,6 +92,9 @@ var equal = (a, b) => {
|
|
|
92
92
|
}
|
|
93
93
|
};
|
|
94
94
|
|
|
95
|
+
// src/utils/isAtomFamily.ts
|
|
96
|
+
var isAtomFamily = (state) => state && Object.hasOwn(state, "__valdresAtomFamilyMap");
|
|
97
|
+
|
|
95
98
|
// src/utils/isAtom.ts
|
|
96
99
|
var isAtom = (state) => Object.hasOwn(state, "defaultValue");
|
|
97
100
|
|
|
@@ -101,32 +104,11 @@ var isFamilyState = (state) => state && Object.hasOwn(state, "family");
|
|
|
101
104
|
// src/utils/isFamilyAtom.ts
|
|
102
105
|
var isFamilyAtom = (state) => isFamilyState(state) && isAtom(state);
|
|
103
106
|
|
|
104
|
-
// src/lib/updateStateSubscribers.ts
|
|
105
|
-
var updateStateSubscribers = (state, data) => {
|
|
106
|
-
const subscribtions = data.subscriptions.get(state);
|
|
107
|
-
if (subscribtions?.size) {
|
|
108
|
-
for (const subscribtion of subscribtions) {
|
|
109
|
-
subscribtion.callback();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (isFamilyState(state)) {
|
|
113
|
-
const familySubscriptions = data.subscriptions.get(state.family);
|
|
114
|
-
if (familySubscriptions?.size) {
|
|
115
|
-
for (const subscribtion of familySubscriptions) {
|
|
116
|
-
subscribtion.callback(state.familyKey);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
107
|
// src/utils/isPromiseLike.ts
|
|
123
108
|
var isPromiseLike = (object) => {
|
|
124
109
|
return object && object.then && typeof object.then === "function";
|
|
125
110
|
};
|
|
126
111
|
|
|
127
|
-
// src/utils/isAtomFamily.ts
|
|
128
|
-
var isAtomFamily = (state) => state && Object.hasOwn(state, "__valdresAtomFamilyMap");
|
|
129
|
-
|
|
130
112
|
// src/utils/isSelector.ts
|
|
131
113
|
var isSelector = (state) => state && Object.hasOwn(state, "get");
|
|
132
114
|
|
|
@@ -193,6 +175,7 @@ var setAtom = (atom, newValue, data, skipOnSet = false) => {
|
|
|
193
175
|
if (currentValue?.__isEmptyAtomPromise__) {
|
|
194
176
|
currentValue.__resolveEmptyAtomPromise__(newValue);
|
|
195
177
|
}
|
|
178
|
+
if (isFamilyAtom(atom)) {}
|
|
196
179
|
propagateUpdatedAtoms([atom], data);
|
|
197
180
|
return newValue;
|
|
198
181
|
};
|
|
@@ -226,11 +209,10 @@ var initAtom = (atom, data) => {
|
|
|
226
209
|
const tmpVal = getAtomInitValue(atom, data);
|
|
227
210
|
let value = setValueInData(atom, tmpVal, data);
|
|
228
211
|
if (isFamilyAtom(atom)) {
|
|
229
|
-
const
|
|
230
|
-
if (!
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
setAtom(atom.family.__keysAtom, newSet, data);
|
|
212
|
+
const currentAtoms = data.values.get(atom.family) || [];
|
|
213
|
+
if (!currentAtoms.includes(atom)) {
|
|
214
|
+
data.values.set(atom.family, [...currentAtoms, atom]);
|
|
215
|
+
propagateUpdatedAtoms([atom.family], data);
|
|
234
216
|
}
|
|
235
217
|
}
|
|
236
218
|
if (atom.onInit)
|
|
@@ -250,14 +232,17 @@ function getState(state, data, circularDependencySet) {
|
|
|
250
232
|
return getState(state, data.parent, circularDependencySet);
|
|
251
233
|
return initAtom(state, data);
|
|
252
234
|
}
|
|
253
|
-
if (isSelector(state))
|
|
254
|
-
|
|
235
|
+
if (isSelector(state)) {
|
|
236
|
+
initSelector(state, data, circularDependencySet);
|
|
237
|
+
return data.values.get(state);
|
|
238
|
+
}
|
|
255
239
|
if (isAtomFamily(state)) {
|
|
256
240
|
if ("parent" in data) {
|
|
257
|
-
const closestData = findClosestStoreWithAtomInitialized(state
|
|
258
|
-
return getState(state
|
|
241
|
+
const closestData = findClosestStoreWithAtomInitialized(state, data);
|
|
242
|
+
return getState(state, closestData, circularDependencySet);
|
|
259
243
|
}
|
|
260
|
-
|
|
244
|
+
data.values.set(state, []);
|
|
245
|
+
return data.values.get(state);
|
|
261
246
|
}
|
|
262
247
|
if (isSelectorFamily(state)) {
|
|
263
248
|
const array = Array.from(state.__valdresSelectorFamilyMap.keys());
|
|
@@ -276,6 +261,24 @@ var findClosestStoreWithAtomInitialized = (atom, data) => {
|
|
|
276
261
|
return findClosestStoreWithAtomInitialized(atom, data.parent);
|
|
277
262
|
};
|
|
278
263
|
|
|
264
|
+
// src/lib/updateStateSubscribers.ts
|
|
265
|
+
var updateStateSubscribers = (state, data) => {
|
|
266
|
+
const subscribtions = data.subscriptions.get(state);
|
|
267
|
+
if (subscribtions?.size) {
|
|
268
|
+
for (const subscribtion of subscribtions) {
|
|
269
|
+
subscribtion.callback();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (isFamilyState(state)) {
|
|
273
|
+
const familySubscriptions = data.subscriptions.get(state.family);
|
|
274
|
+
if (familySubscriptions?.size) {
|
|
275
|
+
for (const subscribtion of familySubscriptions) {
|
|
276
|
+
subscribtion.callback(...state.familyArgs);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
|
|
279
282
|
// src/errors/lib/generateSelectorTrace.ts
|
|
280
283
|
var generateSelectorTrace = (selectors) => {
|
|
281
284
|
const lastIndex = selectors.length - 1;
|
|
@@ -331,11 +334,11 @@ class SuspendAndWaitForResolveError extends Error {
|
|
|
331
334
|
}
|
|
332
335
|
}
|
|
333
336
|
var getOrInitConsumersSet = (state, data) => {
|
|
334
|
-
const set = data.
|
|
337
|
+
const set = data.stateDependents.get(state);
|
|
335
338
|
if (set)
|
|
336
339
|
return set;
|
|
337
340
|
const newSet = new Set;
|
|
338
|
-
data.
|
|
341
|
+
data.stateDependents.set(state, newSet);
|
|
339
342
|
return newSet;
|
|
340
343
|
};
|
|
341
344
|
var evaluateSelector = (selector, data, circularDependencyMap = new WeakSet) => {
|
|
@@ -392,6 +395,16 @@ var handleSelectorResult = (value, selector, data) => {
|
|
|
392
395
|
}
|
|
393
396
|
};
|
|
394
397
|
var initSelector = (selector, data, circularDependencySet = new WeakSet) => {
|
|
398
|
+
const existingValue = data.values.get(selector);
|
|
399
|
+
const udpatedValue = evaluate(selector, data, circularDependencySet);
|
|
400
|
+
if (selector.equal(existingValue, udpatedValue)) {
|
|
401
|
+
return false;
|
|
402
|
+
} else {
|
|
403
|
+
setValueInData(selector, udpatedValue, data);
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
};
|
|
407
|
+
var evaluate = (selector, data, circularDependencySet) => {
|
|
395
408
|
let tmpValue;
|
|
396
409
|
try {
|
|
397
410
|
tmpValue = evaluateSelector(selector, data, circularDependencySet);
|
|
@@ -400,14 +413,7 @@ var initSelector = (selector, data, circularDependencySet = new WeakSet) => {
|
|
|
400
413
|
e.track(selector);
|
|
401
414
|
throw e;
|
|
402
415
|
}
|
|
403
|
-
|
|
404
|
-
if (data.expiredValues.has(selector)) {
|
|
405
|
-
const expiredValue = data.expiredValues.get(selector);
|
|
406
|
-
if (selector.equal(expiredValue, value)) {
|
|
407
|
-
return setValueInData(selector, expiredValue, data);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
return setValueInData(selector, value, data);
|
|
416
|
+
return handleSelectorResult(tmpValue, selector, data);
|
|
411
417
|
};
|
|
412
418
|
|
|
413
419
|
// src/lib/updateSelectorSubscribers.ts
|
|
@@ -416,15 +422,6 @@ var updateSelectorSubscribers = (selector, data) => {
|
|
|
416
422
|
const familySubscriptions = selector.family && data.subscriptions.get(selector.family);
|
|
417
423
|
if (!subscribtions?.size && !familySubscriptions?.size)
|
|
418
424
|
return;
|
|
419
|
-
if (subscribtions?.size && data.subscriptionsRequireEqualCheck.get(selector) || familySubscriptions?.size && selector.family && data.subscriptionsRequireEqualCheck.get(selector.family)) {
|
|
420
|
-
try {
|
|
421
|
-
const oldValue = data.expiredValues.get(selector);
|
|
422
|
-
const newValue = initSelector(selector, data);
|
|
423
|
-
if (selector.equal(newValue, oldValue))
|
|
424
|
-
return;
|
|
425
|
-
} catch (e) {
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
425
|
if (subscribtions?.size) {
|
|
429
426
|
for (const subscribtion of subscribtions) {
|
|
430
427
|
subscribtion.callback();
|
|
@@ -432,21 +429,53 @@ var updateSelectorSubscribers = (selector, data) => {
|
|
|
432
429
|
}
|
|
433
430
|
if (familySubscriptions?.size) {
|
|
434
431
|
for (const subscribtion of familySubscriptions) {
|
|
435
|
-
subscribtion.callback(selector.
|
|
432
|
+
subscribtion.callback(...selector.familyArgs);
|
|
436
433
|
}
|
|
437
434
|
}
|
|
438
435
|
};
|
|
439
436
|
|
|
440
437
|
// src/lib/propagateUpdatedAtoms.ts
|
|
438
|
+
var revalidate = (selector, data) => {
|
|
439
|
+
try {
|
|
440
|
+
return initSelector(selector, data);
|
|
441
|
+
} catch (e) {
|
|
442
|
+
data.expiredValues.set(selector, data.values.get(selector));
|
|
443
|
+
data.values.delete(selector);
|
|
444
|
+
return true;
|
|
445
|
+
}
|
|
446
|
+
};
|
|
441
447
|
var recursivlyResetSelectorTree = (selectors, data, clearedSelectors) => {
|
|
442
448
|
for (const selector of selectors) {
|
|
443
449
|
if (!clearedSelectors.has(selector)) {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
+
const subscribers = data.subscriptions.get(selector);
|
|
451
|
+
const dependents = data.stateDependents.get(selector);
|
|
452
|
+
if (!dependents && !subscribers) {
|
|
453
|
+
data.expiredValues.set(selector, data.values.get(selector));
|
|
454
|
+
data.values.delete(selector);
|
|
455
|
+
} else if (dependents && subscribers) {
|
|
456
|
+
if (dependents.size === 0)
|
|
457
|
+
throw new Error("Should not happen");
|
|
458
|
+
if (subscribers.size === 0)
|
|
459
|
+
throw new Error("Should not happen");
|
|
460
|
+
const isValueUpdated = revalidate(selector, data);
|
|
461
|
+
if (isValueUpdated) {
|
|
462
|
+
recursivlyResetSelectorTree(dependents, data, clearedSelectors);
|
|
463
|
+
updateSelectorSubscribers(selector, data);
|
|
464
|
+
}
|
|
465
|
+
} else if (dependents) {
|
|
466
|
+
if (dependents.size === 0)
|
|
467
|
+
throw new Error("Should not happen");
|
|
468
|
+
const valueUpdated = revalidate(selector, data);
|
|
469
|
+
if (valueUpdated) {
|
|
470
|
+
recursivlyResetSelectorTree(dependents, data, clearedSelectors);
|
|
471
|
+
}
|
|
472
|
+
} else if (subscribers) {
|
|
473
|
+
if (subscribers.size === 0)
|
|
474
|
+
throw new Error("Should not happen");
|
|
475
|
+
const isValueUpdated = revalidate(selector, data);
|
|
476
|
+
if (isValueUpdated) {
|
|
477
|
+
updateSelectorSubscribers(selector, data);
|
|
478
|
+
}
|
|
450
479
|
}
|
|
451
480
|
}
|
|
452
481
|
}
|
|
@@ -454,21 +483,20 @@ var recursivlyResetSelectorTree = (selectors, data, clearedSelectors) => {
|
|
|
454
483
|
var propagateUpdatedAtoms = (atoms, data) => {
|
|
455
484
|
const clearedSelectors = new Set;
|
|
456
485
|
for (const atom of atoms) {
|
|
457
|
-
const
|
|
458
|
-
if (
|
|
459
|
-
recursivlyResetSelectorTree(
|
|
486
|
+
const dependents = data.stateDependents.get(atom);
|
|
487
|
+
if (dependents && dependents.size) {
|
|
488
|
+
recursivlyResetSelectorTree(dependents, data, clearedSelectors);
|
|
460
489
|
}
|
|
461
490
|
if (isFamilyAtom(atom)) {
|
|
462
|
-
const consumersFamily = data.
|
|
491
|
+
const consumersFamily = data.stateDependents.get(atom.family);
|
|
463
492
|
if (consumersFamily?.size) {
|
|
464
493
|
recursivlyResetSelectorTree(consumersFamily, data, clearedSelectors);
|
|
465
494
|
}
|
|
466
495
|
}
|
|
467
496
|
}
|
|
468
|
-
for (const selector of clearedSelectors) {
|
|
469
|
-
updateSelectorSubscribers(selector, data);
|
|
470
|
-
}
|
|
471
497
|
for (const atom of atoms) {
|
|
498
|
+
if (isAtomFamily(atom))
|
|
499
|
+
continue;
|
|
472
500
|
updateStateSubscribers(atom, data);
|
|
473
501
|
}
|
|
474
502
|
};
|
|
@@ -482,7 +510,7 @@ var generateStoreData = (id = generateId()) => {
|
|
|
482
510
|
expiredValues: new WeakMap,
|
|
483
511
|
subscriptions: new WeakMap,
|
|
484
512
|
subscriptionsRequireEqualCheck: new WeakMap,
|
|
485
|
-
|
|
513
|
+
stateDependents: new WeakMap,
|
|
486
514
|
stateDependencies: new WeakMap,
|
|
487
515
|
scopes: {}
|
|
488
516
|
};
|
|
@@ -499,6 +527,20 @@ function createStoreData(id, parent) {
|
|
|
499
527
|
}
|
|
500
528
|
}
|
|
501
529
|
|
|
530
|
+
// src/lib/deleteFamilyAtom.ts
|
|
531
|
+
var deleteFamilyAtom = (atom, data) => {
|
|
532
|
+
const array = data.values.get(atom.family);
|
|
533
|
+
const index = array.indexOf(atom);
|
|
534
|
+
const newArray = [
|
|
535
|
+
...array.slice(0, index),
|
|
536
|
+
...array.slice(index + 1)
|
|
537
|
+
];
|
|
538
|
+
data.values.delete(atom);
|
|
539
|
+
propagateUpdatedAtoms([atom], data);
|
|
540
|
+
setValueInData(atom.family, newArray, data);
|
|
541
|
+
propagateUpdatedAtoms([atom.family], data);
|
|
542
|
+
};
|
|
543
|
+
|
|
502
544
|
// src/lib/resetAtom.ts
|
|
503
545
|
var resetAtom = (atom, data) => {
|
|
504
546
|
let value = getAtomInitValue(atom, data);
|
|
@@ -652,17 +694,18 @@ var setAtoms = (pairs, data) => {
|
|
|
652
694
|
|
|
653
695
|
// src/lib/transaction.ts
|
|
654
696
|
var findDependencies = (state, data, result = new Set) => {
|
|
655
|
-
const
|
|
656
|
-
if (
|
|
657
|
-
for (const
|
|
658
|
-
if (!result.has(
|
|
659
|
-
result.add(
|
|
660
|
-
findDependencies(
|
|
697
|
+
const dependents = data.stateDependents.get(state);
|
|
698
|
+
if (dependents?.size) {
|
|
699
|
+
for (const dependent of dependents) {
|
|
700
|
+
if (!result.has(dependent)) {
|
|
701
|
+
result.add(dependent);
|
|
702
|
+
findDependencies(dependent, data, result);
|
|
661
703
|
}
|
|
662
704
|
}
|
|
663
705
|
}
|
|
664
706
|
return result;
|
|
665
707
|
};
|
|
708
|
+
var DELETE_SYMBOL = Symbol("DELETE_SYMBOL");
|
|
666
709
|
var recursivlyResetTxnSelectorCache = (state, txnSubscribers, txnSelectorCache) => {
|
|
667
710
|
for (const dep of txnSubscribers.get(state)) {
|
|
668
711
|
txnSelectorCache.delete(dep);
|
|
@@ -671,33 +714,39 @@ var recursivlyResetTxnSelectorCache = (state, txnSubscribers, txnSelectorCache)
|
|
|
671
714
|
}
|
|
672
715
|
}
|
|
673
716
|
};
|
|
674
|
-
var captureScopedTransaction = (scopedData,
|
|
717
|
+
var captureScopedTransaction = (scopedData, parentGetInTxnOrData) => {
|
|
675
718
|
let txn;
|
|
676
719
|
transaction((scopedTxn) => {
|
|
677
720
|
txn = scopedTxn;
|
|
678
|
-
}, scopedData, false,
|
|
721
|
+
}, scopedData, false, parentGetInTxnOrData);
|
|
679
722
|
return txn;
|
|
680
723
|
};
|
|
681
|
-
var
|
|
724
|
+
var deleteAtomFamilyAtoms = (set, data) => {
|
|
725
|
+
set.forEach((atom) => {
|
|
726
|
+
data.values.delete(atom);
|
|
727
|
+
});
|
|
728
|
+
};
|
|
729
|
+
var transaction = (callback, data, autoCommit = true, parentGetInTxnOrData) => {
|
|
682
730
|
const txnAtomMap = new Map;
|
|
731
|
+
const txnAtomDeleteSet = new Set;
|
|
683
732
|
const txnSelectorCache = new Map;
|
|
684
733
|
const txnSubscribers = new Map;
|
|
685
734
|
const dirtySelectors = new Set;
|
|
686
735
|
let scopedTransactions;
|
|
687
|
-
const
|
|
736
|
+
const getInTxnOrData = (state) => {
|
|
688
737
|
if (txnAtomMap.has(state)) {
|
|
689
738
|
return txnAtomMap.get(state);
|
|
690
739
|
}
|
|
691
740
|
if (data.values.has(state)) {
|
|
692
741
|
return data.values.get(state);
|
|
693
742
|
}
|
|
694
|
-
if (
|
|
695
|
-
return
|
|
743
|
+
if (parentGetInTxnOrData) {
|
|
744
|
+
return parentGetInTxnOrData(state);
|
|
696
745
|
}
|
|
697
746
|
};
|
|
698
747
|
const txnGet = (state) => {
|
|
699
748
|
if (isAtom(state)) {
|
|
700
|
-
const value =
|
|
749
|
+
const value = getInTxnOrData(state);
|
|
701
750
|
if (value)
|
|
702
751
|
return value;
|
|
703
752
|
return getState(state, data);
|
|
@@ -719,7 +768,10 @@ var transaction = (callback, data, autoCommit = true, parentGetFromTxnOrData) =>
|
|
|
719
768
|
txnSelectorCache.set(state, res);
|
|
720
769
|
return res;
|
|
721
770
|
} else if (isAtomFamily(state)) {
|
|
722
|
-
|
|
771
|
+
const value = getInTxnOrData(state);
|
|
772
|
+
if (value)
|
|
773
|
+
return value;
|
|
774
|
+
return getState(state, data);
|
|
723
775
|
} else {
|
|
724
776
|
throw new Error("Unsupported state");
|
|
725
777
|
}
|
|
@@ -744,11 +796,10 @@ var transaction = (callback, data, autoCommit = true, parentGetFromTxnOrData) =>
|
|
|
744
796
|
txnAtomMap.set(atom, deepFreeze(value));
|
|
745
797
|
}
|
|
746
798
|
if (isFamilyAtom(atom)) {
|
|
747
|
-
const
|
|
748
|
-
if (!
|
|
749
|
-
const
|
|
750
|
-
|
|
751
|
-
txnSet(atom.family.__keysAtom, newSet);
|
|
799
|
+
const currentFamilyList = txnGet(atom.family);
|
|
800
|
+
if (!currentFamilyList.includes(atom)) {
|
|
801
|
+
const newArr = [...currentFamilyList, atom];
|
|
802
|
+
txnAtomMap.set(atom.family, newArr);
|
|
752
803
|
}
|
|
753
804
|
}
|
|
754
805
|
return value;
|
|
@@ -758,8 +809,26 @@ var transaction = (callback, data, autoCommit = true, parentGetFromTxnOrData) =>
|
|
|
758
809
|
txnAtomMap.set(atom, value);
|
|
759
810
|
return value;
|
|
760
811
|
};
|
|
812
|
+
const txnDel = (atom) => {
|
|
813
|
+
const array = txnGet(atom.family);
|
|
814
|
+
const index = array.indexOf(atom);
|
|
815
|
+
const newArr = [
|
|
816
|
+
...array.slice(0, index),
|
|
817
|
+
...array.slice(index + 1)
|
|
818
|
+
];
|
|
819
|
+
txnAtomMap.set(atom.family, newArr);
|
|
820
|
+
if (data.values.has(atom)) {
|
|
821
|
+
txnAtomDeleteSet.add(atom);
|
|
822
|
+
}
|
|
823
|
+
if (txnAtomMap.has(atom)) {
|
|
824
|
+
txnAtomMap.delete(atom);
|
|
825
|
+
}
|
|
826
|
+
};
|
|
761
827
|
const commit = () => {
|
|
762
828
|
setAtoms(txnAtomMap, data);
|
|
829
|
+
if (txnAtomDeleteSet.size) {
|
|
830
|
+
deleteAtomFamilyAtoms(txnAtomDeleteSet, data);
|
|
831
|
+
}
|
|
763
832
|
dirtySelectors.clear();
|
|
764
833
|
if (scopedTransactions) {
|
|
765
834
|
for (const scopedTxn of Object.values(scopedTransactions)) {
|
|
@@ -770,6 +839,7 @@ var transaction = (callback, data, autoCommit = true, parentGetFromTxnOrData) =>
|
|
|
770
839
|
const result = callback({
|
|
771
840
|
set: txnSet,
|
|
772
841
|
get: txnGet,
|
|
842
|
+
del: txnDel,
|
|
773
843
|
reset: txnReset,
|
|
774
844
|
commit,
|
|
775
845
|
scope: (scopeId, callback2) => {
|
|
@@ -779,7 +849,7 @@ var transaction = (callback, data, autoCommit = true, parentGetFromTxnOrData) =>
|
|
|
779
849
|
scopedTransactions = {};
|
|
780
850
|
}
|
|
781
851
|
if (scopedTransactions[scopeId] === undefined) {
|
|
782
|
-
scopedTransactions[scopeId] = captureScopedTransaction(scopedData,
|
|
852
|
+
scopedTransactions[scopeId] = captureScopedTransaction(scopedData, getInTxnOrData);
|
|
783
853
|
}
|
|
784
854
|
return callback2(scopedTransactions[scopeId]);
|
|
785
855
|
} else {
|
|
@@ -811,6 +881,7 @@ function storeFromStoreData(data, detach) {
|
|
|
811
881
|
throw new Error(InvalidStateSetError);
|
|
812
882
|
};
|
|
813
883
|
const reset = (atom) => resetAtom(atom, data);
|
|
884
|
+
const deleteFn = (atom) => deleteFamilyAtom(atom, data);
|
|
814
885
|
const sub = (state, callback, deepEqualCheckBeforeCallback = true) => subscribe(state, callback, deepEqualCheckBeforeCallback, data);
|
|
815
886
|
const txn = (callback) => transaction(callback, data);
|
|
816
887
|
const scope = (scopeId) => {
|
|
@@ -838,6 +909,7 @@ function storeFromStoreData(data, detach) {
|
|
|
838
909
|
sub,
|
|
839
910
|
txn,
|
|
840
911
|
reset,
|
|
912
|
+
delete: deleteFn,
|
|
841
913
|
data,
|
|
842
914
|
scope,
|
|
843
915
|
detach
|
|
@@ -849,6 +921,7 @@ function storeFromStoreData(data, detach) {
|
|
|
849
921
|
sub,
|
|
850
922
|
txn,
|
|
851
923
|
reset,
|
|
924
|
+
delete: deleteFn,
|
|
852
925
|
data,
|
|
853
926
|
scope
|
|
854
927
|
};
|
|
@@ -942,13 +1015,6 @@ function atom(defaultValue, options) {
|
|
|
942
1015
|
...options
|
|
943
1016
|
};
|
|
944
1017
|
}
|
|
945
|
-
// src/selector.ts
|
|
946
|
-
var selector = (get, options) => {
|
|
947
|
-
if (!options)
|
|
948
|
-
return { equal, get };
|
|
949
|
-
return { equal, ...options, get };
|
|
950
|
-
};
|
|
951
|
-
|
|
952
1018
|
// src/lib/atomFamilyAtom.ts
|
|
953
1019
|
function atomFamilyAtom(defaultValue, options) {
|
|
954
1020
|
if (options.global) {
|
|
@@ -1014,43 +1080,47 @@ var stableStringify = (x) => {
|
|
|
1014
1080
|
return stableStringifyRecurse(x);
|
|
1015
1081
|
};
|
|
1016
1082
|
|
|
1083
|
+
// src/lib/stringifyFamilyArgs.ts
|
|
1084
|
+
var stringifyFamilyArgs = (args) => {
|
|
1085
|
+
return args.length === 1 ? stableStringify(args[0]) : stableStringify(args);
|
|
1086
|
+
};
|
|
1087
|
+
|
|
1017
1088
|
// src/lib/createAtomFamily.ts
|
|
1018
|
-
var createOptions = (options = {}, family,
|
|
1089
|
+
var createOptions = (options = {}, family, familyArgs, familyArgsStringified) => {
|
|
1019
1090
|
if (options.name) {
|
|
1020
1091
|
return {
|
|
1021
1092
|
equal,
|
|
1022
1093
|
...options,
|
|
1023
|
-
name: options?.name + "_" +
|
|
1094
|
+
name: options?.name + "_" + familyArgsStringified,
|
|
1024
1095
|
family,
|
|
1025
|
-
|
|
1096
|
+
familyArgs,
|
|
1097
|
+
familyArgsStringified
|
|
1026
1098
|
};
|
|
1027
1099
|
} else {
|
|
1028
|
-
return { equal, ...options, family,
|
|
1100
|
+
return { equal, ...options, family, familyArgs, familyArgsStringified };
|
|
1029
1101
|
}
|
|
1030
1102
|
};
|
|
1031
|
-
var handleDefaultValue = (defaultValue,
|
|
1103
|
+
var handleDefaultValue = (defaultValue, ...args) => {
|
|
1032
1104
|
if (isSelectorFamily(defaultValue))
|
|
1033
|
-
return defaultValue(
|
|
1105
|
+
return defaultValue(...args);
|
|
1034
1106
|
if (typeof defaultValue === "function")
|
|
1035
|
-
return () => defaultValue(
|
|
1107
|
+
return () => defaultValue(...args);
|
|
1036
1108
|
return defaultValue;
|
|
1037
1109
|
};
|
|
1038
1110
|
var createAtomFamily = (defaultValue, options) => {
|
|
1039
1111
|
const map = new Map;
|
|
1040
|
-
const
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
return map.get(keyStringified);
|
|
1112
|
+
const atomFamily = Object.assign((...args) => {
|
|
1113
|
+
const argsStringified = stringifyFamilyArgs(args);
|
|
1114
|
+
if (map.has(argsStringified)) {
|
|
1115
|
+
return map.get(argsStringified);
|
|
1045
1116
|
}
|
|
1046
|
-
const familyAtom = atomFamilyAtom(handleDefaultValue(defaultValue,
|
|
1047
|
-
map.set(
|
|
1117
|
+
const familyAtom = atomFamilyAtom(handleDefaultValue(defaultValue, ...args), createOptions(options, atomFamily, args, argsStringified));
|
|
1118
|
+
map.set(argsStringified, familyAtom);
|
|
1048
1119
|
return familyAtom;
|
|
1049
1120
|
}, {
|
|
1050
1121
|
__valdresAtomFamilyMap: map,
|
|
1051
|
-
release: (
|
|
1052
|
-
|
|
1053
|
-
__keysSelector: selector((get) => Array.from(get(keysAtom)))
|
|
1122
|
+
release: (...args) => map.delete(stringifyFamilyArgs(args)),
|
|
1123
|
+
equal
|
|
1054
1124
|
});
|
|
1055
1125
|
if (options?.name)
|
|
1056
1126
|
Object.defineProperty(atomFamily, "name", {
|
|
@@ -1079,8 +1149,8 @@ function atomFamily(defaultValue, options) {
|
|
|
1079
1149
|
return createAtomFamily(defaultValue, options);
|
|
1080
1150
|
}
|
|
1081
1151
|
// src/createStoreWithSelectorSet.ts
|
|
1082
|
-
var setSelector = (
|
|
1083
|
-
return
|
|
1152
|
+
var setSelector = (selector, values, store2) => {
|
|
1153
|
+
return selector.set(store2.set, store2.get, store2.reset, ...values);
|
|
1084
1154
|
};
|
|
1085
1155
|
var createStoreWithSelectorSet = (id) => {
|
|
1086
1156
|
const data = createStoreData(id);
|
|
@@ -1095,59 +1165,82 @@ var createStoreWithSelectorSet = (id) => {
|
|
|
1095
1165
|
store2.kind = "storeWithSelectorSet";
|
|
1096
1166
|
return store2;
|
|
1097
1167
|
};
|
|
1168
|
+
// src/selector.ts
|
|
1169
|
+
var selector = (get, options) => {
|
|
1170
|
+
if (!options)
|
|
1171
|
+
return { equal, get };
|
|
1172
|
+
return { equal, ...options, get };
|
|
1173
|
+
};
|
|
1174
|
+
|
|
1098
1175
|
// src/indexConstructor.ts
|
|
1099
|
-
var index = (family, callback) => {
|
|
1176
|
+
var index = (family, callback, options) => {
|
|
1100
1177
|
const map = new Map;
|
|
1101
|
-
|
|
1178
|
+
const indexFn = (term) => {
|
|
1102
1179
|
const termKey = stableStringify(term);
|
|
1103
1180
|
if (map.has(termKey))
|
|
1104
1181
|
return map.get(termKey);
|
|
1105
|
-
const
|
|
1106
|
-
const
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1182
|
+
const termIndexSelectorSet = new Set;
|
|
1183
|
+
const termIndexSelectorMap = new Map;
|
|
1184
|
+
const termIndexSelector = selector((get) => {
|
|
1185
|
+
const allFamilyAtoms = new Set(get(family));
|
|
1186
|
+
const deletedAtoms = termIndexSelectorSet.symmetricDifference(allFamilyAtoms);
|
|
1187
|
+
const addedAtoms = allFamilyAtoms.difference(termIndexSelectorSet);
|
|
1188
|
+
if (deletedAtoms.size || addedAtoms.size) {
|
|
1189
|
+
deletedAtoms.forEach((atom2) => {
|
|
1190
|
+
termIndexSelectorSet.delete(atom2);
|
|
1191
|
+
termIndexSelectorMap.delete(atom2);
|
|
1192
|
+
});
|
|
1193
|
+
addedAtoms.forEach((atom2) => {
|
|
1194
|
+
termIndexSelectorSet.add(atom2);
|
|
1195
|
+
termIndexSelectorMap.set(atom2, selector((get2) => callback(get2(atom2), term), {
|
|
1196
|
+
name: `index:callback:selector:${atom2.name}`
|
|
1197
|
+
}));
|
|
1198
|
+
});
|
|
1199
|
+
}
|
|
1200
|
+
return termIndexSelectorSet;
|
|
1201
|
+
}, { name: `index:${options?.name}:${termKey}` });
|
|
1115
1202
|
const filteredSelector = selector((get) => {
|
|
1116
|
-
const
|
|
1203
|
+
const set = get(termIndexSelector);
|
|
1117
1204
|
const res = [];
|
|
1118
|
-
|
|
1119
|
-
if (get(
|
|
1120
|
-
res.push(
|
|
1205
|
+
set.forEach((atom2) => {
|
|
1206
|
+
if (get(termIndexSelectorMap.get(atom2))) {
|
|
1207
|
+
res.push(atom2);
|
|
1121
1208
|
}
|
|
1122
1209
|
});
|
|
1123
1210
|
return res;
|
|
1211
|
+
}, {
|
|
1212
|
+
name: `index:${options?.name}:${termKey}:termSelector`
|
|
1124
1213
|
});
|
|
1125
1214
|
map.set(termKey, filteredSelector);
|
|
1126
1215
|
return filteredSelector;
|
|
1127
1216
|
};
|
|
1217
|
+
return Object.assign(indexFn, {
|
|
1218
|
+
map
|
|
1219
|
+
});
|
|
1128
1220
|
};
|
|
1129
1221
|
// src/selectorFamily.ts
|
|
1130
|
-
var createOptions2 = (options = {}, family,
|
|
1222
|
+
var createOptions2 = (options = {}, family, familyArgs, familyArgsStringified) => {
|
|
1131
1223
|
if (options.name) {
|
|
1132
1224
|
return {
|
|
1133
1225
|
equal,
|
|
1134
1226
|
...options,
|
|
1135
|
-
name: options?.name + "_" +
|
|
1227
|
+
name: options?.name + "_" + familyArgsStringified,
|
|
1136
1228
|
family,
|
|
1137
|
-
|
|
1229
|
+
familyArgs,
|
|
1230
|
+
familyArgsStringified
|
|
1138
1231
|
};
|
|
1139
1232
|
} else {
|
|
1140
|
-
return { equal, ...options, family,
|
|
1233
|
+
return { equal, ...options, family, familyArgs, familyArgsStringified };
|
|
1141
1234
|
}
|
|
1142
1235
|
};
|
|
1143
|
-
var selectorFamily = (
|
|
1236
|
+
var selectorFamily = (callback, options) => {
|
|
1144
1237
|
const map = new Map;
|
|
1145
|
-
const selectorFamily2 = (
|
|
1146
|
-
const
|
|
1147
|
-
if (map.has(
|
|
1148
|
-
return map.get(
|
|
1149
|
-
const newSelector = selector((selectorArgs) =>
|
|
1150
|
-
map.set(
|
|
1238
|
+
const selectorFamily2 = (...args) => {
|
|
1239
|
+
const argsStringified = stringifyFamilyArgs(args);
|
|
1240
|
+
if (map.has(argsStringified))
|
|
1241
|
+
return map.get(argsStringified);
|
|
1242
|
+
const newSelector = selector((selectorArgs) => callback(...args)(selectorArgs), createOptions2(options, selectorFamily2, args, argsStringified));
|
|
1243
|
+
map.set(argsStringified, newSelector);
|
|
1151
1244
|
return newSelector;
|
|
1152
1245
|
};
|
|
1153
1246
|
selectorFamily2.__valdresSelectorFamilyMap = map;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { AtomOptions } from "./types/AtomOptions";
|
|
2
|
-
import type { FamilyKey } from "./types/FamilyKey";
|
|
3
1
|
import type { AtomFamilyDefaultValue } from "./types/AtomFamilyDefaultValue";
|
|
4
|
-
|
|
2
|
+
import type { AtomOptions } from "./types/AtomOptions";
|
|
3
|
+
export declare function atomFamily<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue?: AtomFamilyDefaultValue<Value, Args>, options?: AtomOptions<Value>): import(".").AtomFamily<Value, Args>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AtomFamily } from "./types/AtomFamily";
|
|
2
|
-
import type { FamilyKey } from "./types/FamilyKey";
|
|
3
2
|
import type { Selector } from "./types/Selector";
|
|
4
|
-
export declare const index: <
|
|
3
|
+
export declare const index: <Term, Value extends unknown, FamilyArgs extends [any, ...any[]] = [any, ...any[]]>(family: AtomFamily<Value, FamilyArgs>, callback: (value: Value, term: Term) => boolean, options?: {
|
|
4
|
+
name?: string;
|
|
5
|
+
}) => ((term: Term) => Selector<Term[]>);
|
|
@@ -2,7 +2,7 @@ import type { AtomDefaultValue } from "../types/AtomDefaultValue";
|
|
|
2
2
|
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
3
3
|
import type { AtomFamilyGlobalAtom } from "../types/AtomFamilyGlobalAtom";
|
|
4
4
|
import type { AtomOptions } from "../types/AtomOptions";
|
|
5
|
-
export declare function atomFamilyAtom<
|
|
5
|
+
export declare function atomFamilyAtom<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue: AtomDefaultValue<Value>, options: AtomOptions<Value> & {
|
|
6
6
|
global: true;
|
|
7
|
-
}): AtomFamilyGlobalAtom<
|
|
8
|
-
export declare function atomFamilyAtom<
|
|
7
|
+
}): AtomFamilyGlobalAtom<Value, Args>;
|
|
8
|
+
export declare function atomFamilyAtom<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue: AtomDefaultValue<Value>, options: AtomOptions<Value>): AtomFamilyAtom<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 createAtomFamily: <
|
|
4
|
+
export declare const createAtomFamily: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue: AtomFamilyDefaultValue<Value, Args>, options?: AtomOptions<Value>) => AtomFamily<Value, Args>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { AtomOptions } from "../types/AtomOptions";
|
|
2
|
-
import type { FamilyKey } from "../types/FamilyKey";
|
|
3
|
-
import type { AtomFamilyDefaultValue } from "../types/AtomFamilyDefaultValue";
|
|
4
1
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
5
|
-
|
|
2
|
+
import type { AtomFamilyDefaultValue } from "../types/AtomFamilyDefaultValue";
|
|
3
|
+
import type { AtomOptions } from "../types/AtomOptions";
|
|
4
|
+
export declare const createGlobalAtomFamily: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(defaultValue: AtomFamilyDefaultValue<Value, Args>, options: AtomOptions<Value>) => AtomFamily<Value, Args>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
2
|
+
import type { StoreData } from "../types/StoreData";
|
|
3
|
+
export declare const deleteFamilyAtom: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(atom: AtomFamilyAtom<Value, Args>, data: StoreData) => void;
|
|
@@ -2,6 +2,7 @@ import type { Atom } from "../types/Atom";
|
|
|
2
2
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
3
3
|
import type { Selector } from "../types/Selector";
|
|
4
4
|
import type { StoreData } from "../types/StoreData";
|
|
5
|
-
|
|
6
|
-
export declare function getState<
|
|
7
|
-
export declare function getState<
|
|
5
|
+
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
6
|
+
export declare function getState<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(atom: Atom<Value>, data: StoreData, circularDependencySet?: WeakSet<Selector>): Value;
|
|
7
|
+
export declare function getState<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(selector: Selector<Value>, data: StoreData, circularDependencySet?: WeakSet<Selector>): Value;
|
|
8
|
+
export declare function getState<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(family: AtomFamily<Value, Args>, data: StoreData, 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) => any;
|
|
5
|
-
export declare const initAtom: <
|
|
5
|
+
export declare const initAtom: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(atom: Atom<Value> | AtomFamilyAtom<Value, Args>, data: StoreData) => any;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { StoreData } from "../types/StoreData";
|
|
2
2
|
import type { Selector } from "../types/Selector";
|
|
3
|
-
export declare const initSelector: <V>(selector: Selector<V>, data: StoreData, circularDependencySet?: WeakSet<WeakKey>) =>
|
|
3
|
+
export declare const initSelector: <V>(selector: Selector<V>, data: StoreData, circularDependencySet?: WeakSet<WeakKey>) => boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Atom } from "../types/Atom";
|
|
2
|
-
import type {
|
|
2
|
+
import type { AtomFamily } from "../types/AtomFamily";
|
|
3
3
|
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
4
|
-
|
|
4
|
+
import type { StoreData } from "../types/StoreData";
|
|
5
|
+
export declare const propagateUpdatedAtoms: (atoms: (Atom<any> | AtomFamilyAtom<any, any> | AtomFamily<any, any>)[], data: StoreData) => void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Atom } from "../types/Atom";
|
|
2
|
+
import type { AtomFamily } from "../types/AtomFamily";
|
|
2
3
|
import type { StoreData } from "../types/StoreData";
|
|
3
|
-
export declare const setValueInData: <Value
|
|
4
|
+
export declare const setValueInData: <Value extends unknown>(atom: Atom<Value> | AtomFamily<any, any>, value: Value, data: StoreData) => Value;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const stringifyFamilyArgs: (args: any[]) => string | number | boolean;
|
|
@@ -4,5 +4,5 @@ import type { TransactionFn } from "../types/TransactionFn";
|
|
|
4
4
|
type GetAtomValue = {
|
|
5
5
|
<V>(atom: Atom<V>): V;
|
|
6
6
|
};
|
|
7
|
-
export declare const transaction: (callback: TransactionFn, data: StoreData, autoCommit?: boolean,
|
|
7
|
+
export declare const transaction: (callback: TransactionFn, data: StoreData, autoCommit?: boolean, parentGetInTxnOrData?: GetAtomValue) => any;
|
|
8
8
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { State } from "../types/State";
|
|
2
2
|
import type { StoreData } from "../types/StoreData";
|
|
3
|
-
export declare const updateStateSubscribers:
|
|
3
|
+
export declare const updateStateSubscribers: (state: State, data: StoreData) => void;
|
|
@@ -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,
|
|
4
|
+
export declare const selector: <Value extends unknown, 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
|
+
import type { GetValue } from "./types/GetValue";
|
|
1
2
|
import type { SelectorFamily } from "./types/SelectorFamily";
|
|
2
3
|
import type { SelectorOptions } from "./types/SelectorOptions";
|
|
3
|
-
|
|
4
|
-
export declare const selectorFamily: <Key, Value>(get: (key: Key) => (get: GetValue) => Value, options?: SelectorOptions<Value>) => SelectorFamily<Key, Value>;
|
|
4
|
+
export declare const selectorFamily: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(callback: (...args: Args) => (get: GetValue) => Value | Promise<Value>, options?: SelectorOptions<Value>) => SelectorFamily<Value, Args>;
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import type { Atom } from "./Atom";
|
|
2
1
|
import type { AtomFamilyAtom } from "./AtomFamilyAtom";
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
(
|
|
7
|
-
|
|
2
|
+
import type { EqualFunc } from "./EqualFunc";
|
|
3
|
+
export type AtomFamily<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]> = {
|
|
4
|
+
(...args: Args): AtomFamilyAtom<Value, Args>;
|
|
5
|
+
release: (...args: Args) => void;
|
|
6
|
+
equal: EqualFunc<Value>;
|
|
8
7
|
name?: string;
|
|
9
|
-
__valdresAtomFamilyMap: Map<
|
|
10
|
-
__keysAtom: Atom<Set<Key>>;
|
|
11
|
-
__keysSelector: Selector<Key[]>;
|
|
8
|
+
__valdresAtomFamilyMap: Map<Value, AtomFamilyAtom<Value, Args>>;
|
|
12
9
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Atom } from "./Atom";
|
|
2
2
|
import type { AtomFamily } from "./AtomFamily";
|
|
3
|
-
export type AtomFamilyAtom<
|
|
4
|
-
family: AtomFamily<
|
|
5
|
-
|
|
3
|
+
export type AtomFamilyAtom<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]> = Atom<Value> & {
|
|
4
|
+
family: AtomFamily<Value, Args>;
|
|
5
|
+
familyArgs: Args;
|
|
6
|
+
familyArgsStringified: string;
|
|
6
7
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Selector } from "./Selector";
|
|
2
2
|
import type { SelectorFamily } from "./SelectorFamily";
|
|
3
|
-
type DefaultValueCallback<
|
|
4
|
-
export type AtomFamilyDefaultValue<
|
|
3
|
+
type DefaultValueCallback<Value extends any, Args extends [any, ...any[]]> = (...args: Args) => Value | Promise<Value>;
|
|
4
|
+
export type AtomFamilyDefaultValue<Value extends any, Args extends [any, ...any[]]> = undefined | Value | DefaultValueCallback<Value, Args> | Selector<Value, Args> | SelectorFamily<Value, Args>;
|
|
5
5
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { AtomFamilyAtom } from "./AtomFamilyAtom";
|
|
2
2
|
import type { GlobalAtom } from "./GlobalAtom";
|
|
3
|
-
export type AtomFamilyGlobalAtom<
|
|
3
|
+
export type AtomFamilyGlobalAtom<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]> = AtomFamilyAtom<Value, Args> & GlobalAtom<Value>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Selector } from "./Selector";
|
|
2
2
|
import type { SelectorFamily } from "./SelectorFamily";
|
|
3
|
-
export type AtomFamilySelector<Value
|
|
4
|
-
family: SelectorFamily<
|
|
5
|
-
|
|
3
|
+
export type AtomFamilySelector<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]> = Selector<Value> & {
|
|
4
|
+
family: SelectorFamily<Value, Args>;
|
|
5
|
+
familyArgs: Args;
|
|
6
6
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export type EqualFunc<Value
|
|
1
|
+
export type EqualFunc<Value extends any> = (a: Value, b: Value) => boolean;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { SelectorFamily } from "./SelectorFamily";
|
|
2
2
|
import type { AtomFamily } from "./AtomFamily";
|
|
3
|
-
export type Family<
|
|
3
|
+
export type Family<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]> = AtomFamily<Value, Args> | SelectorFamily<Value, Args>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { Atom } from "./Atom";
|
|
2
2
|
import type { AtomFamily } from "./AtomFamily";
|
|
3
|
+
import type { AtomFamilyAtom } from "./AtomFamilyAtom";
|
|
3
4
|
import type { Selector } from "./Selector";
|
|
4
5
|
export type GetValue = {
|
|
5
|
-
<
|
|
6
|
-
<
|
|
7
|
-
<
|
|
6
|
+
<Value extends any>(atom: Atom<Value>): Value;
|
|
7
|
+
<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(selector: Selector<Value, Args>): Value;
|
|
8
|
+
<Value extends any, Args extends [any, ...any[]]>(family: AtomFamily<Value, Args>): AtomFamilyAtom<Value, Args>[];
|
|
8
9
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { EqualFunc } from "./EqualFunc";
|
|
2
2
|
import type { GetValue } from "./GetValue";
|
|
3
3
|
import type { SelectorFamily } from "./SelectorFamily";
|
|
4
|
-
export type Selector<Value =
|
|
5
|
-
get: (get: GetValue, storeId: string) => Value
|
|
4
|
+
export type Selector<Value extends any = any, FamilyArgs extends [any, ...any[]] = [any, ...any[]]> = {
|
|
5
|
+
get: (get: GetValue, storeId: string) => Value | Promise<Value>;
|
|
6
6
|
equal: EqualFunc<Value>;
|
|
7
7
|
name?: string;
|
|
8
|
-
family?: SelectorFamily<
|
|
9
|
-
|
|
8
|
+
family?: SelectorFamily<Value, FamilyArgs>;
|
|
9
|
+
familyArgs?: FamilyArgs;
|
|
10
10
|
onMount?: () => void | (() => void);
|
|
11
11
|
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { FamilyKey } from "./FamilyKey";
|
|
2
1
|
import type { Selector } from "./Selector";
|
|
3
|
-
export type SelectorFamily<
|
|
4
|
-
(
|
|
5
|
-
__valdresSelectorFamilyMap: Map<
|
|
2
|
+
export type SelectorFamily<Value extends any, Args extends [any, ...any[]]> = {
|
|
3
|
+
(...args: Args): Selector<Value, Args>;
|
|
4
|
+
__valdresSelectorFamilyMap: Map<Args, Selector<Value, Args>>;
|
|
6
5
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Atom } from "./Atom";
|
|
2
2
|
import type { AtomFamily } from "./AtomFamily";
|
|
3
3
|
import type { Selector } from "./Selector";
|
|
4
|
-
export type State<
|
|
4
|
+
export type State<Value extends any = any, Args extends [any, ...any[]] = [any, ...any[]]> = Atom<Value> | Selector<Value> | AtomFamily<Value, Args>;
|
|
@@ -6,15 +6,17 @@ import type { ScopedStoreData, StoreData } from "./StoreData";
|
|
|
6
6
|
import type { SubscribeFn } from "./SubscribeFn";
|
|
7
7
|
import type { TransactionFn } from "./TransactionFn";
|
|
8
8
|
type SetAtom = {
|
|
9
|
-
<
|
|
10
|
-
<
|
|
9
|
+
<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(atom: AtomFamilyAtom<Value, Args>, value: Value): void;
|
|
10
|
+
<Value extends any>(atom: Atom<Value>, value: Value): void;
|
|
11
11
|
};
|
|
12
|
+
type DeleteAtom = <Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(atom: AtomFamilyAtom<Value, Args>) => void;
|
|
12
13
|
export type Store<T = StoreData> = {
|
|
13
14
|
data: T;
|
|
14
15
|
get: GetValue;
|
|
15
16
|
set: SetAtom;
|
|
16
17
|
sub: SubscribeFn;
|
|
17
18
|
reset: ResetAtom;
|
|
19
|
+
delete: DeleteAtom;
|
|
18
20
|
txn: (callback: TransactionFn) => void;
|
|
19
21
|
scope: (scopeId: string) => ScopedStore;
|
|
20
22
|
};
|
|
@@ -4,7 +4,7 @@ export type RootStoreData = {
|
|
|
4
4
|
expiredValues: WeakMap<WeakKey, any>;
|
|
5
5
|
subscriptions: WeakMap<WeakKey, Set<any>>;
|
|
6
6
|
subscriptionsRequireEqualCheck: WeakMap<WeakKey, boolean>;
|
|
7
|
-
|
|
7
|
+
stateDependents: WeakMap<WeakKey, any>;
|
|
8
8
|
stateDependencies: WeakMap<WeakKey, any>;
|
|
9
9
|
scopes: {
|
|
10
10
|
[scopeId: string]: ScopedStoreData;
|
|
@@ -3,7 +3,7 @@ import type { Family } from "./Family";
|
|
|
3
3
|
import type { Selector } from "./Selector";
|
|
4
4
|
type UnsuscribeFn = () => void;
|
|
5
5
|
export type SubscribeFn = {
|
|
6
|
-
<
|
|
7
|
-
<
|
|
6
|
+
<Value extends any, Args extends [any, ...any[]] = [any, ...any[]]>(state: Family<Value, Args>, callback: (...args: Args) => void, requireDeepEqualCheckBeforeCallback?: boolean): UnsuscribeFn;
|
|
7
|
+
<Value extends any>(state: Atom<Value> | Selector<Value>, callback: () => void, requireDeepEqualCheckBeforeCallback?: boolean): UnsuscribeFn;
|
|
8
8
|
};
|
|
9
9
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Atom } from "./Atom";
|
|
2
|
+
import type { AtomFamilyAtom } from "./AtomFamilyAtom";
|
|
2
3
|
import type { GetValue } from "./GetValue";
|
|
3
4
|
import type { ResetAtom } from "./ResetAtom";
|
|
4
5
|
import type { SetAtom } from "./SetAtom";
|
|
@@ -10,6 +11,7 @@ export type SetAtom2 = {
|
|
|
10
11
|
export type TransactionInterface = {
|
|
11
12
|
set: SetAtom;
|
|
12
13
|
get: GetValue;
|
|
14
|
+
del: (atom: AtomFamilyAtom<any, any>) => void;
|
|
13
15
|
reset: ResetAtom;
|
|
14
16
|
commit: () => void;
|
|
15
17
|
scope: <Callback extends TransactionFn>(scopeId: string, callback: Callback) => ReturnType<Callback>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AtomFamily } from "../types/AtomFamily";
|
|
2
|
-
export declare const isAtomFamily: <
|
|
2
|
+
export declare const isAtomFamily: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is AtomFamily<Value, Args>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const isFamily: (state: any) => state is import("..").SelectorFamily<unknown,
|
|
1
|
+
export declare const isFamily: (state: any) => state is import("..").SelectorFamily<unknown, [any, ...any[]]> | import("..").AtomFamily<unknown, [any, ...any[]]>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
|
|
2
|
-
export declare const isFamilyAtom: <
|
|
2
|
+
export declare const isFamilyAtom: <Value extends unknown, 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: <
|
|
2
|
+
export declare const isFamilySelector: <Value extends unknown, 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: <
|
|
3
|
+
export declare const isFamilyState: <Value extends unknown, 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: <
|
|
2
|
+
export declare const isSelectorFamily: <Value extends unknown, Args extends [any, ...any[]] = [any, ...any[]]>(state: any) => state is SelectorFamily<Value, Args>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valdres",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.76",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Eigil Sagafos"
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"access": "public",
|
|
37
37
|
"registry": "https://registry.npmjs.org/"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "184b86a8548d25cb8df609184718cf62de9d97c8"
|
|
40
40
|
}
|