valdres 0.2.0-alpha.4 → 0.2.0-alpha.5
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 +28 -8
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -182,7 +182,6 @@ var handleSelectorResult = (value, selector, data) => {
|
|
|
182
182
|
value.then((resolved) => {
|
|
183
183
|
data.values.set(selector, resolved);
|
|
184
184
|
updateStateSubscribers(selector, data);
|
|
185
|
-
console.log(`TODO: Should we check if other selectors are using this?`);
|
|
186
185
|
});
|
|
187
186
|
return value;
|
|
188
187
|
} else {
|
|
@@ -446,23 +445,41 @@ var findDependencies = (state, data, result = new Set) => {
|
|
|
446
445
|
}
|
|
447
446
|
return result;
|
|
448
447
|
};
|
|
448
|
+
var recursivlyResetTxnSelectorCache = (state, txnSubscribers, txnSelectorCache) => {
|
|
449
|
+
for (const dep of txnSubscribers.get(state)) {
|
|
450
|
+
txnSelectorCache.delete(dep);
|
|
451
|
+
if (txnSubscribers.get(dep)?.size) {
|
|
452
|
+
recursivlyResetTxnSelectorCache(dep, txnSubscribers, txnSelectorCache);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
};
|
|
449
456
|
var transaction = (callback, data) => {
|
|
450
457
|
let txnAtomMap = new Map;
|
|
451
458
|
let txnSelectorCache = new Map;
|
|
459
|
+
let txnSubscribers = new Map;
|
|
452
460
|
let dirtySelectors = new Set;
|
|
453
461
|
const txnGet = (state) => {
|
|
454
462
|
if (isAtom(state)) {
|
|
455
463
|
return txnAtomMap.has(state) ? txnAtomMap.get(state) : getState2(state, data);
|
|
456
|
-
} else {
|
|
464
|
+
} else if (isSelector(state)) {
|
|
457
465
|
if (txnSelectorCache.has(state)) {
|
|
458
466
|
return txnSelectorCache.get(state);
|
|
459
|
-
} else if (dirtySelectors.has(state)) {
|
|
460
|
-
const res = state.get(txnGet);
|
|
461
|
-
txnSelectorCache.set(state, res);
|
|
462
|
-
return res;
|
|
463
|
-
} else {
|
|
464
|
-
return getState2(state, data);
|
|
465
467
|
}
|
|
468
|
+
const deps = new Set;
|
|
469
|
+
const res = state.get((s) => {
|
|
470
|
+
deps.add(s);
|
|
471
|
+
return txnGet(s);
|
|
472
|
+
});
|
|
473
|
+
for (const dep of deps) {
|
|
474
|
+
if (!txnSubscribers.has(dep)) {
|
|
475
|
+
txnSubscribers.set(dep, new Set);
|
|
476
|
+
}
|
|
477
|
+
txnSubscribers.get(dep).add(state);
|
|
478
|
+
}
|
|
479
|
+
txnSelectorCache.set(state, res);
|
|
480
|
+
return res;
|
|
481
|
+
} else {
|
|
482
|
+
throw new Error("Unsupported state");
|
|
466
483
|
}
|
|
467
484
|
};
|
|
468
485
|
const txnSet = (atom3, value) => {
|
|
@@ -476,6 +493,9 @@ var transaction = (callback, data) => {
|
|
|
476
493
|
dirtySelectors.add(selector);
|
|
477
494
|
txnSelectorCache.delete(selector);
|
|
478
495
|
}
|
|
496
|
+
if (txnSubscribers.get(atom3)?.size) {
|
|
497
|
+
recursivlyResetTxnSelectorCache(atom3, txnSubscribers, txnSelectorCache);
|
|
498
|
+
}
|
|
479
499
|
txnAtomMap.set(atom3, value);
|
|
480
500
|
};
|
|
481
501
|
const txnReset = (atom3) => {
|
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.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Eigil Sagafos"
|
|
@@ -34,5 +34,5 @@
|
|
|
34
34
|
"access": "public",
|
|
35
35
|
"registry": "https://registry.npmjs.org/"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "75721256957ea160c2a82ac4ebb5a12e4c447f1f"
|
|
38
38
|
}
|