valdres 0.2.0-alpha.40 → 0.2.0-alpha.42
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 +61 -61
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -132,7 +132,7 @@ var isSelectorFamily = (state) => state && Object.hasOwn(state, "__valdresSelect
|
|
|
132
132
|
|
|
133
133
|
// src/lib/setAtom.ts
|
|
134
134
|
var setAtom = (atom, newValue, data, skipOnSet = false) => {
|
|
135
|
-
const currentValue =
|
|
135
|
+
const currentValue = getState(atom, data);
|
|
136
136
|
if (typeof newValue === "function") {
|
|
137
137
|
newValue = newValue(currentValue);
|
|
138
138
|
if (isPromiseLike(newValue) || isPromiseLike(currentValue))
|
|
@@ -146,7 +146,7 @@ var setAtom = (atom, newValue, data, skipOnSet = false) => {
|
|
|
146
146
|
if (currentValue?.__isEmptyAtomPromise__) {
|
|
147
147
|
currentValue.__resolveEmptyAtomPromise__(newValue);
|
|
148
148
|
}
|
|
149
|
-
|
|
149
|
+
propagateUpdatedAtoms([atom], data);
|
|
150
150
|
};
|
|
151
151
|
|
|
152
152
|
// src/lib/initAtom.ts
|
|
@@ -164,12 +164,12 @@ var getAtomInitValue = (atom, data) => {
|
|
|
164
164
|
if (isPromiseLike(value)) {
|
|
165
165
|
value.then((resolvedValue) => {
|
|
166
166
|
data.values.set(atom, resolvedValue);
|
|
167
|
-
|
|
167
|
+
propagateUpdatedAtoms([atom], data);
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
170
|
return value;
|
|
171
171
|
} else if (isSelector(atom.defaultValue)) {
|
|
172
|
-
return
|
|
172
|
+
return getState(atom.defaultValue, data);
|
|
173
173
|
} else {
|
|
174
174
|
return atom.defaultValue;
|
|
175
175
|
}
|
|
@@ -178,7 +178,7 @@ var initAtom = (atom, data) => {
|
|
|
178
178
|
let value = getAtomInitValue(atom, data);
|
|
179
179
|
data.values.set(atom, value);
|
|
180
180
|
if (isFamilyAtom(atom)) {
|
|
181
|
-
const currentKeySet =
|
|
181
|
+
const currentKeySet = getState(atom.family.__keysAtom, data);
|
|
182
182
|
if (!currentKeySet.has(atom.familyKey)) {
|
|
183
183
|
const newSet = new Set(currentKeySet);
|
|
184
184
|
newSet.add(atom.familyKey);
|
|
@@ -194,22 +194,22 @@ var initAtom = (atom, data) => {
|
|
|
194
194
|
};
|
|
195
195
|
|
|
196
196
|
// src/lib/getState.ts
|
|
197
|
-
function
|
|
197
|
+
function getState(state, data) {
|
|
198
198
|
if (data.values.has(state))
|
|
199
199
|
return data.values.get(state);
|
|
200
200
|
if (isAtom(state)) {
|
|
201
201
|
if ("parent" in data)
|
|
202
|
-
return
|
|
202
|
+
return getState(state, data.parent);
|
|
203
203
|
return initAtom(state, data);
|
|
204
204
|
}
|
|
205
205
|
if (isSelector(state))
|
|
206
|
-
return
|
|
206
|
+
return initSelector(state, data);
|
|
207
207
|
if (isAtomFamily(state)) {
|
|
208
208
|
if ("parent" in data) {
|
|
209
209
|
const closestData = findClosestStoreWithAtomInitialized(state.__keysAtom, data);
|
|
210
|
-
return
|
|
210
|
+
return getState(state.__keysSelector, closestData);
|
|
211
211
|
}
|
|
212
|
-
return
|
|
212
|
+
return getState(state.__keysSelector, data);
|
|
213
213
|
}
|
|
214
214
|
if (isSelectorFamily(state)) {
|
|
215
215
|
const array = Array.from(state.__valdresSelectorFamilyMap.keys());
|
|
@@ -249,7 +249,7 @@ var evaluateSelector = (selector, data) => {
|
|
|
249
249
|
let result;
|
|
250
250
|
try {
|
|
251
251
|
result = selector.get((state) => {
|
|
252
|
-
const value =
|
|
252
|
+
const value = getState(state, data);
|
|
253
253
|
updatedDependencies.add(state);
|
|
254
254
|
if (isPromiseLike(value))
|
|
255
255
|
throw new SuspendAndWaitForResolveError(value);
|
|
@@ -278,7 +278,7 @@ var evaluateSelector = (selector, data) => {
|
|
|
278
278
|
};
|
|
279
279
|
var handleSelectorResult = (value, selector, data) => {
|
|
280
280
|
if (value instanceof SuspendAndWaitForResolveError) {
|
|
281
|
-
value.promise.then(() =>
|
|
281
|
+
value.promise.then(() => initSelector(selector, data));
|
|
282
282
|
return value.promise;
|
|
283
283
|
} else if (isPromiseLike(value)) {
|
|
284
284
|
value.then((resolved) => {
|
|
@@ -291,7 +291,7 @@ var handleSelectorResult = (value, selector, data) => {
|
|
|
291
291
|
return value;
|
|
292
292
|
}
|
|
293
293
|
};
|
|
294
|
-
var
|
|
294
|
+
var initSelector = (selector, data) => {
|
|
295
295
|
const tmpValue = evaluateSelector(selector, data);
|
|
296
296
|
const value = handleSelectorResult(tmpValue, selector, data);
|
|
297
297
|
if (data.expiredValues.has(selector)) {
|
|
@@ -314,7 +314,7 @@ var updateSelectorSubscribers = (selector, data) => {
|
|
|
314
314
|
if (subscribtions?.size && data.subscriptionsRequireEqualCheck.get(selector) || familySubscriptions?.size && selector.family && data.subscriptionsRequireEqualCheck.get(selector.family)) {
|
|
315
315
|
try {
|
|
316
316
|
const oldValue = data.expiredValues.get(selector);
|
|
317
|
-
const newValue =
|
|
317
|
+
const newValue = initSelector(selector, data);
|
|
318
318
|
if (selector.equal(newValue, oldValue))
|
|
319
319
|
return;
|
|
320
320
|
} catch (e) {
|
|
@@ -346,7 +346,7 @@ var recursivlyResetSelectorTree = (selectors, data, clearedSelectors) => {
|
|
|
346
346
|
}
|
|
347
347
|
}
|
|
348
348
|
};
|
|
349
|
-
var
|
|
349
|
+
var propagateUpdatedAtoms = (atoms, data) => {
|
|
350
350
|
const clearedSelectors = new Set;
|
|
351
351
|
for (const atom of atoms) {
|
|
352
352
|
const consumers = data.stateConsumers.get(atom);
|
|
@@ -369,17 +369,6 @@ var propagateUpdatedAtoms2 = (atoms, data) => {
|
|
|
369
369
|
};
|
|
370
370
|
|
|
371
371
|
// src/lib/createStoreData.ts
|
|
372
|
-
function createStoreData(id, parent) {
|
|
373
|
-
if (parent) {
|
|
374
|
-
return {
|
|
375
|
-
...generateStoreData(id),
|
|
376
|
-
parent,
|
|
377
|
-
scopeConsumers: parent ? new Set : undefined
|
|
378
|
-
};
|
|
379
|
-
} else {
|
|
380
|
-
return generateStoreData(id);
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
372
|
var generateId = () => (Math.random() + 1).toString(36).substring(7);
|
|
384
373
|
var generateStoreData = (id = generateId()) => {
|
|
385
374
|
return {
|
|
@@ -393,13 +382,24 @@ var generateStoreData = (id = generateId()) => {
|
|
|
393
382
|
scopes: {}
|
|
394
383
|
};
|
|
395
384
|
};
|
|
385
|
+
function createStoreData(id, parent) {
|
|
386
|
+
if (parent) {
|
|
387
|
+
return {
|
|
388
|
+
...generateStoreData(id),
|
|
389
|
+
parent,
|
|
390
|
+
scopeConsumers: parent ? new Set : undefined
|
|
391
|
+
};
|
|
392
|
+
} else {
|
|
393
|
+
return generateStoreData(id);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
396
|
|
|
397
397
|
// src/lib/resetAtom.ts
|
|
398
398
|
var resetAtom = (atom, data) => {
|
|
399
399
|
let value = getAtomInitValue(atom, data);
|
|
400
400
|
data.values.set(atom, value);
|
|
401
401
|
if (!isPromiseLike(value)) {
|
|
402
|
-
|
|
402
|
+
propagateUpdatedAtoms([atom], data);
|
|
403
403
|
}
|
|
404
404
|
return value;
|
|
405
405
|
};
|
|
@@ -461,7 +461,7 @@ var subscribe = (state, callback, requireDeepEqualCheckBeforeCallback, data) =>
|
|
|
461
461
|
initAtom(state, data);
|
|
462
462
|
}
|
|
463
463
|
if (isSelector(state) && !data.values.has(state)) {
|
|
464
|
-
|
|
464
|
+
initSelector(state, data);
|
|
465
465
|
}
|
|
466
466
|
const subscribers = data.subscriptions.get(state) || initSubscribers(state, data);
|
|
467
467
|
let subscription;
|
|
@@ -496,7 +496,7 @@ var subscribe = (state, callback, requireDeepEqualCheckBeforeCallback, data) =>
|
|
|
496
496
|
}
|
|
497
497
|
} else {
|
|
498
498
|
data.values.set(state, value);
|
|
499
|
-
|
|
499
|
+
propagateUpdatedAtoms([state], data);
|
|
500
500
|
}
|
|
501
501
|
}, state.maxAge);
|
|
502
502
|
maxAgeCleanup = () => {
|
|
@@ -506,7 +506,7 @@ var subscribe = (state, callback, requireDeepEqualCheckBeforeCallback, data) =>
|
|
|
506
506
|
};
|
|
507
507
|
}
|
|
508
508
|
if (state.onMount) {
|
|
509
|
-
const store =
|
|
509
|
+
const store = storeFromStoreData(data);
|
|
510
510
|
const mountSubscriptions = new Set;
|
|
511
511
|
const originalSub = store.sub;
|
|
512
512
|
store.sub = (state2, callback2) => {
|
|
@@ -534,7 +534,7 @@ var subscribe = (state, callback, requireDeepEqualCheckBeforeCallback, data) =>
|
|
|
534
534
|
var setAtoms = (pairs, data) => {
|
|
535
535
|
const updatedAtoms = [];
|
|
536
536
|
for (let [atom, value] of pairs) {
|
|
537
|
-
const currentValue =
|
|
537
|
+
const currentValue = getState(atom, data);
|
|
538
538
|
if (!atom.equal(currentValue, value)) {
|
|
539
539
|
updatedAtoms.push(atom);
|
|
540
540
|
if (atom.onSet)
|
|
@@ -542,7 +542,7 @@ var setAtoms = (pairs, data) => {
|
|
|
542
542
|
data.values.set(atom, value);
|
|
543
543
|
}
|
|
544
544
|
}
|
|
545
|
-
|
|
545
|
+
propagateUpdatedAtoms(updatedAtoms, data);
|
|
546
546
|
};
|
|
547
547
|
|
|
548
548
|
// src/lib/transaction.ts
|
|
@@ -573,7 +573,7 @@ var transaction = (callback, data) => {
|
|
|
573
573
|
let dirtySelectors = new Set;
|
|
574
574
|
const txnGet = (state) => {
|
|
575
575
|
if (isAtom(state)) {
|
|
576
|
-
return txnAtomMap.has(state) ? txnAtomMap.get(state) :
|
|
576
|
+
return txnAtomMap.has(state) ? txnAtomMap.get(state) : getState(state, data);
|
|
577
577
|
} else if (isSelector(state)) {
|
|
578
578
|
if (txnSelectorCache.has(state)) {
|
|
579
579
|
return txnSelectorCache.get(state);
|
|
@@ -626,8 +626,15 @@ var transaction = (callback, data) => {
|
|
|
626
626
|
};
|
|
627
627
|
|
|
628
628
|
// src/lib/storeFromStoreData.ts
|
|
629
|
-
|
|
630
|
-
|
|
629
|
+
var SelectorProvidedToSetError = `Invalid state object passed to set().
|
|
630
|
+
You provided a \`selector\`.
|
|
631
|
+
Only \`atom\` cam be set.
|
|
632
|
+
`;
|
|
633
|
+
var InvalidStateSetError = `Invalid state object passed to set().
|
|
634
|
+
Only \`atom\` can be set.
|
|
635
|
+
`;
|
|
636
|
+
function storeFromStoreData(data, detach) {
|
|
637
|
+
const get = (state) => getState(state, data);
|
|
631
638
|
const set = (state, value) => {
|
|
632
639
|
if (isAtom(state))
|
|
633
640
|
return setAtom(state, value, data);
|
|
@@ -653,7 +660,7 @@ function storeFromStoreData2(data, detach) {
|
|
|
653
660
|
}
|
|
654
661
|
};
|
|
655
662
|
scopedStoreData.scopeConsumers.add(detach2);
|
|
656
|
-
const newStore =
|
|
663
|
+
const newStore = storeFromStoreData(data.scopes[scopeId], detach2);
|
|
657
664
|
return newStore;
|
|
658
665
|
};
|
|
659
666
|
if (detach) {
|
|
@@ -679,21 +686,14 @@ function storeFromStoreData2(data, detach) {
|
|
|
679
686
|
};
|
|
680
687
|
}
|
|
681
688
|
}
|
|
682
|
-
var SelectorProvidedToSetError = `Invalid state object passed to set().
|
|
683
|
-
You provided a \`selector\`.
|
|
684
|
-
Only \`atom\` cam be set.
|
|
685
|
-
`;
|
|
686
|
-
var InvalidStateSetError = `Invalid state object passed to set().
|
|
687
|
-
Only \`atom\` can be set.
|
|
688
|
-
`;
|
|
689
689
|
|
|
690
690
|
// src/store.ts
|
|
691
691
|
var store = (id) => {
|
|
692
692
|
const data = createStoreData(id);
|
|
693
|
-
return
|
|
693
|
+
return storeFromStoreData(data);
|
|
694
694
|
};
|
|
695
695
|
// package.json
|
|
696
|
-
var version = "0.2.0-alpha.
|
|
696
|
+
var version = "0.2.0-alpha.42";
|
|
697
697
|
|
|
698
698
|
// src/globalStore.ts
|
|
699
699
|
if (globalThis.__valdres__) {
|
|
@@ -728,9 +728,9 @@ var globalAtom = (defaultValue, options) => {
|
|
|
728
728
|
const onSet = (newValue, currentStore) => {
|
|
729
729
|
value = newValue;
|
|
730
730
|
if (stores.size > 1) {
|
|
731
|
-
for (const
|
|
732
|
-
if (
|
|
733
|
-
setAtom(atom, value,
|
|
731
|
+
for (const store2 of stores) {
|
|
732
|
+
if (store2.id !== currentStore.id) {
|
|
733
|
+
setAtom(atom, value, store2, true);
|
|
734
734
|
}
|
|
735
735
|
}
|
|
736
736
|
}
|
|
@@ -740,14 +740,14 @@ var globalAtom = (defaultValue, options) => {
|
|
|
740
740
|
const resetSelf = () => {
|
|
741
741
|
value = undefined;
|
|
742
742
|
initialized = false;
|
|
743
|
-
for (const
|
|
744
|
-
if (
|
|
743
|
+
for (const store2 of stores) {
|
|
744
|
+
if (store2.stateDependencies.has(atom)) {
|
|
745
745
|
throw new Error("TODO: Reset support for stateDependencies");
|
|
746
746
|
}
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
stores.delete(
|
|
747
|
+
store2.values.delete(atom);
|
|
748
|
+
store2.expiredValues.delete(atom);
|
|
749
|
+
propagateUpdatedAtoms([atom], store2);
|
|
750
|
+
stores.delete(store2);
|
|
751
751
|
onReset?.();
|
|
752
752
|
}
|
|
753
753
|
};
|
|
@@ -918,21 +918,21 @@ function atomFamily(defaultValue, options) {
|
|
|
918
918
|
return createAtomFamily(defaultValue, options);
|
|
919
919
|
}
|
|
920
920
|
// src/createStoreWithSelectorSet.ts
|
|
921
|
-
var setSelector = (
|
|
922
|
-
return
|
|
921
|
+
var setSelector = (selector2, values, store2) => {
|
|
922
|
+
return selector2.set(store2.set, store2.get, store2.reset, ...values);
|
|
923
923
|
};
|
|
924
924
|
var createStoreWithSelectorSet = (id) => {
|
|
925
925
|
const data = createStoreData(id);
|
|
926
|
-
const
|
|
927
|
-
|
|
926
|
+
const store2 = storeFromStoreData(data);
|
|
927
|
+
store2.set = (state, value, ...rest) => {
|
|
928
928
|
if (isAtom(state))
|
|
929
929
|
return setAtom(state, value, data);
|
|
930
930
|
if (isSelector(state))
|
|
931
|
-
return setSelector(state, [value, ...rest],
|
|
931
|
+
return setSelector(state, [value, ...rest], store2);
|
|
932
932
|
throw new Error("Invalid state object");
|
|
933
933
|
};
|
|
934
|
-
|
|
935
|
-
return
|
|
934
|
+
store2.kind = "storeWithSelectorSet";
|
|
935
|
+
return store2;
|
|
936
936
|
};
|
|
937
937
|
// src/selectorFamily.ts
|
|
938
938
|
var createOptions2 = (options = {}, family, familyKey, keyStringified) => {
|
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.42",
|
|
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": "b4c3c333ef7903df31f8ef7cedd40b23e56e5dc4"
|
|
40
40
|
}
|