@depup/jotai 2.18.1-depup.0 → 2.19.0-depup.0
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/README.md +2 -2
- package/changes.json +1 -1
- package/esm/react/useAtomValue.d.mts +1 -0
- package/esm/react.mjs +22 -0
- package/esm/vanilla/internals.d.mts +5 -1
- package/esm/vanilla/internals.mjs +19 -2
- package/package.json +12 -9
- package/react/useAtomValue.d.ts +1 -0
- package/react.js +1 -0
- package/system/react.development.js +22 -0
- package/system/react.production.js +22 -1
- package/system/vanilla/internals.development.js +19 -2
- package/system/vanilla/internals.production.js +1 -1
- package/ts3.8/esm/react/useAtomValue.d.ts +1 -0
- package/ts3.8/esm/vanilla/internals.d.ts +7 -1
- package/ts3.8/react/useAtomValue.d.ts +1 -0
- package/ts3.8/vanilla/internals.d.ts +7 -1
- package/umd/react.development.js +1 -0
- package/umd/react.production.js +1 -1
- package/umd/vanilla/internals.development.js +14 -6
- package/umd/vanilla/internals.production.js +1 -1
- package/vanilla/internals.d.ts +5 -1
- package/vanilla/internals.js +14 -6
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ npm install @depup/jotai
|
|
|
13
13
|
|
|
14
14
|
| Field | Value |
|
|
15
15
|
|-------|-------|
|
|
16
|
-
| Original | [jotai](https://www.npmjs.com/package/jotai) @ 2.
|
|
17
|
-
| Processed | 2026-03-
|
|
16
|
+
| Original | [jotai](https://www.npmjs.com/package/jotai) @ 2.19.0 |
|
|
17
|
+
| Processed | 2026-03-24 |
|
|
18
18
|
| Smoke test | failed |
|
|
19
19
|
| Deps updated | 0 |
|
|
20
20
|
|
package/changes.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Atom, ExtractAtomValue } from 'jotai/vanilla';
|
|
2
2
|
import { useStore } from './Provider.mjs';
|
|
3
3
|
type Options = Parameters<typeof useStore>[0] & {
|
|
4
|
+
/** @deprecated delay option is deprecated and will be removed in v3. https://github.com/pmndrs/jotai/pull/3264 */
|
|
4
5
|
delay?: number;
|
|
5
6
|
unstable_promiseStatus?: boolean;
|
|
6
7
|
};
|
package/esm/react.mjs
CHANGED
|
@@ -134,6 +134,28 @@ function useAtomValue(atom, options) {
|
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
if (typeof delay === "number") {
|
|
137
|
+
console.warn(`[DEPRECATED] delay option is deprecated and will be removed in v3.
|
|
138
|
+
|
|
139
|
+
Migration guide:
|
|
140
|
+
|
|
141
|
+
Create a custom hook like the following.
|
|
142
|
+
|
|
143
|
+
function useAtomValueWithDelay<Value>(
|
|
144
|
+
atom: Atom<Value>,
|
|
145
|
+
options: { delay: number },
|
|
146
|
+
): Value {
|
|
147
|
+
const { delay } = options
|
|
148
|
+
const store = useStore(options)
|
|
149
|
+
const [value, setValue] = useState(() => store.get(atom))
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
const unsub = store.sub(atom, () => {
|
|
152
|
+
setTimeout(() => setValue(store.get(atom)), delay)
|
|
153
|
+
})
|
|
154
|
+
return unsub
|
|
155
|
+
}, [store, atom, delay])
|
|
156
|
+
return value
|
|
157
|
+
}
|
|
158
|
+
`);
|
|
137
159
|
setTimeout(rerender, delay);
|
|
138
160
|
return;
|
|
139
161
|
}
|
|
@@ -27,6 +27,8 @@ type AtomState<Value = AnyValue> = {
|
|
|
27
27
|
readonly p: Set<AnyAtom>;
|
|
28
28
|
/** The epoch number of the atom. */
|
|
29
29
|
n: EpochNumber;
|
|
30
|
+
/** The store epoch number that last validated the atom. */
|
|
31
|
+
m?: EpochNumber;
|
|
30
32
|
/** Atom value */
|
|
31
33
|
v?: Value;
|
|
32
34
|
/** Atom error */
|
|
@@ -89,6 +91,7 @@ type EnhanceBuildingBlocks = (buildingBlocks: Readonly<BuildingBlocks>) => Reado
|
|
|
89
91
|
type AbortHandlersMap = WeakMapLike<PromiseLike<unknown>, Set<() => void>>;
|
|
90
92
|
type RegisterAbortHandler = <T>(store: Store, promise: PromiseLike<T>, abortHandler: () => void) => void;
|
|
91
93
|
type AbortPromise = <T>(store: Store, promise: PromiseLike<T>) => void;
|
|
94
|
+
type StoreEpochHolder = [n: EpochNumber];
|
|
92
95
|
type Store = {
|
|
93
96
|
get: <Value>(atom: Atom<Value>) => Value;
|
|
94
97
|
set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
@@ -122,7 +125,8 @@ type BuildingBlocks = [
|
|
|
122
125
|
enhanceBuildingBlocks: EnhanceBuildingBlocks | undefined,
|
|
123
126
|
abortHandlersMap: AbortHandlersMap,
|
|
124
127
|
registerAbortHandler: RegisterAbortHandler,
|
|
125
|
-
abortPromise: AbortPromise
|
|
128
|
+
abortPromise: AbortPromise,
|
|
129
|
+
storeEpochHolder: StoreEpochHolder
|
|
126
130
|
];
|
|
127
131
|
export type { AtomState as INTERNAL_AtomState, Mounted as INTERNAL_Mounted, AtomStateMap as INTERNAL_AtomStateMap, MountedMap as INTERNAL_MountedMap, InvalidatedAtoms as INTERNAL_InvalidatedAtoms, ChangedAtoms as INTERNAL_ChangedAtoms, Callbacks as INTERNAL_Callbacks, AtomRead as INTERNAL_AtomRead, AtomWrite as INTERNAL_AtomWrite, AtomOnInit as INTERNAL_AtomOnInit, AtomOnMount as INTERNAL_AtomOnMount, EnsureAtomState as INTERNAL_EnsureAtomState, FlushCallbacks as INTERNAL_FlushCallbacks, RecomputeInvalidatedAtoms as INTERNAL_RecomputeInvalidatedAtoms, ReadAtomState as INTERNAL_ReadAtomState, InvalidateDependents as INTERNAL_InvalidateDependents, WriteAtomState as INTERNAL_WriteAtomState, MountDependencies as INTERNAL_MountDependencies, MountAtom as INTERNAL_MountAtom, UnmountAtom as INTERNAL_UnmountAtom, Store as INTERNAL_Store, BuildingBlocks as INTERNAL_BuildingBlocks, StoreHooks as INTERNAL_StoreHooks, };
|
|
128
132
|
declare function hasInitialValue<T extends Atom<AnyValue>>(atom: T): atom is T & (T extends Atom<infer Value> ? {
|
|
@@ -218,9 +218,19 @@ const BUILDING_BLOCK_readAtomState = (store, atom) => {
|
|
|
218
218
|
const mountDependencies = buildingBlocks[17];
|
|
219
219
|
const setAtomStateValueOrPromise = buildingBlocks[20];
|
|
220
220
|
const registerAbortHandler = buildingBlocks[26];
|
|
221
|
+
const storeEpochHolder = buildingBlocks[28];
|
|
221
222
|
const atomState = ensureAtomState(store, atom);
|
|
223
|
+
const storeEpochNumber = storeEpochHolder[0];
|
|
222
224
|
if (isAtomStateInitialized(atomState)) {
|
|
223
|
-
if (
|
|
225
|
+
if (
|
|
226
|
+
// If the atom is mounted, we can use cached atom state,
|
|
227
|
+
// because it should have been updated by dependencies.
|
|
228
|
+
// We can't use the cache if the atom is invalidated.
|
|
229
|
+
mountedMap.has(atom) && invalidatedAtoms.get(atom) !== atomState.n || // If atom is not mounted, we can use cached atom state,
|
|
230
|
+
// only if store hasn't been mutated.
|
|
231
|
+
atomState.m === storeEpochNumber
|
|
232
|
+
) {
|
|
233
|
+
atomState.m = storeEpochNumber;
|
|
224
234
|
return atomState;
|
|
225
235
|
}
|
|
226
236
|
let hasChangedDeps = false;
|
|
@@ -231,6 +241,7 @@ const BUILDING_BLOCK_readAtomState = (store, atom) => {
|
|
|
231
241
|
}
|
|
232
242
|
}
|
|
233
243
|
if (!hasChangedDeps) {
|
|
244
|
+
atomState.m = storeEpochNumber;
|
|
234
245
|
return atomState;
|
|
235
246
|
}
|
|
236
247
|
}
|
|
@@ -344,11 +355,13 @@ const BUILDING_BLOCK_readAtomState = (store, atom) => {
|
|
|
344
355
|
pruneDependencies();
|
|
345
356
|
}
|
|
346
357
|
(_a = storeHooks.r) == null ? void 0 : _a.call(storeHooks, atom);
|
|
358
|
+
atomState.m = storeEpochNumber;
|
|
347
359
|
return atomState;
|
|
348
360
|
} catch (error) {
|
|
349
361
|
delete atomState.v;
|
|
350
362
|
atomState.e = error;
|
|
351
363
|
++atomState.n;
|
|
364
|
+
atomState.m = storeEpochNumber;
|
|
352
365
|
return atomState;
|
|
353
366
|
} finally {
|
|
354
367
|
isSync = false;
|
|
@@ -390,6 +403,7 @@ const BUILDING_BLOCK_writeAtomState = (store, atom, ...args) => {
|
|
|
390
403
|
const writeAtomState = buildingBlocks[16];
|
|
391
404
|
const mountDependencies = buildingBlocks[17];
|
|
392
405
|
const setAtomStateValueOrPromise = buildingBlocks[20];
|
|
406
|
+
const storeEpochHolder = buildingBlocks[28];
|
|
393
407
|
let isSync = true;
|
|
394
408
|
const getter = (a) => returnAtomValue(readAtomState(store, a));
|
|
395
409
|
const setter = (a, ...args2) => {
|
|
@@ -408,6 +422,7 @@ const BUILDING_BLOCK_writeAtomState = (store, atom, ...args) => {
|
|
|
408
422
|
setAtomStateValueOrPromise(store, a, v);
|
|
409
423
|
mountDependencies(store, a);
|
|
410
424
|
if (prevEpochNumber !== aState.n) {
|
|
425
|
+
++storeEpochHolder[0];
|
|
411
426
|
changedAtoms.add(a);
|
|
412
427
|
invalidateDependents(store, a);
|
|
413
428
|
(_a = storeHooks.c) == null ? void 0 : _a.call(storeHooks, a);
|
|
@@ -712,7 +727,9 @@ function buildStore(...buildArgs) {
|
|
|
712
727
|
/* @__PURE__ */ new WeakMap(),
|
|
713
728
|
// abortHandlersMap
|
|
714
729
|
BUILDING_BLOCK_registerAbortHandler,
|
|
715
|
-
BUILDING_BLOCK_abortPromise
|
|
730
|
+
BUILDING_BLOCK_abortPromise,
|
|
731
|
+
// store epoch
|
|
732
|
+
[0]
|
|
716
733
|
].map((fn, i) => buildArgs[i] || fn);
|
|
717
734
|
buildingBlockMap.set(store, Object.freeze(buildingBlocks));
|
|
718
735
|
return store;
|
package/package.json
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@depup/jotai",
|
|
3
|
-
"description": "
|
|
4
|
-
"private": false,
|
|
3
|
+
"description": "👻 Primitive and flexible state management for React (with updated dependencies)",
|
|
5
4
|
"type": "commonjs",
|
|
6
|
-
"version": "2.
|
|
5
|
+
"version": "2.19.0-depup.0",
|
|
7
6
|
"main": "./index.js",
|
|
8
7
|
"types": "./index.d.ts",
|
|
9
8
|
"typesVersions": {
|
|
@@ -64,7 +63,9 @@
|
|
|
64
63
|
}
|
|
65
64
|
},
|
|
66
65
|
"files": [
|
|
67
|
-
"**"
|
|
66
|
+
"**",
|
|
67
|
+
"changes.json",
|
|
68
|
+
"README.md"
|
|
68
69
|
],
|
|
69
70
|
"sideEffects": false,
|
|
70
71
|
"engines": {
|
|
@@ -75,10 +76,12 @@
|
|
|
75
76
|
"url": "git+https://github.com/pmndrs/jotai.git"
|
|
76
77
|
},
|
|
77
78
|
"keywords": [
|
|
78
|
-
"depup",
|
|
79
|
-
"dependency-bumped",
|
|
80
|
-
"updated-deps",
|
|
81
79
|
"jotai",
|
|
80
|
+
"depup",
|
|
81
|
+
"updated-dependencies",
|
|
82
|
+
"security",
|
|
83
|
+
"latest",
|
|
84
|
+
"patched",
|
|
82
85
|
"react",
|
|
83
86
|
"state",
|
|
84
87
|
"manager",
|
|
@@ -118,8 +121,8 @@
|
|
|
118
121
|
"changes": {},
|
|
119
122
|
"depsUpdated": 0,
|
|
120
123
|
"originalPackage": "jotai",
|
|
121
|
-
"originalVersion": "2.
|
|
122
|
-
"processedAt": "2026-03-
|
|
124
|
+
"originalVersion": "2.19.0",
|
|
125
|
+
"processedAt": "2026-03-24T08:21:54.402Z",
|
|
123
126
|
"smokeTest": "failed"
|
|
124
127
|
}
|
|
125
128
|
}
|
package/react/useAtomValue.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Atom, ExtractAtomValue } from 'jotai/vanilla';
|
|
2
2
|
import { useStore } from './Provider';
|
|
3
3
|
type Options = Parameters<typeof useStore>[0] & {
|
|
4
|
+
/** @deprecated delay option is deprecated and will be removed in v3. https://github.com/pmndrs/jotai/pull/3264 */
|
|
4
5
|
delay?: number;
|
|
5
6
|
unstable_promiseStatus?: boolean;
|
|
6
7
|
};
|
package/react.js
CHANGED
|
@@ -136,6 +136,7 @@ function useAtomValue(atom, options) {
|
|
|
136
136
|
} catch (_unused) {}
|
|
137
137
|
}
|
|
138
138
|
if (typeof delay === 'number') {
|
|
139
|
+
console.warn("[DEPRECATED] delay option is deprecated and will be removed in v3.\n\nMigration guide:\n\nCreate a custom hook like the following.\n\nfunction useAtomValueWithDelay<Value>(\n atom: Atom<Value>,\n options: { delay: number },\n): Value {\n const { delay } = options\n const store = useStore(options)\n const [value, setValue] = useState(() => store.get(atom))\n useEffect(() => {\n const unsub = store.sub(atom, () => {\n setTimeout(() => setValue(store.get(atom)), delay)\n })\n return unsub\n }, [store, atom, delay])\n return value\n}\n");
|
|
139
140
|
setTimeout(rerender, delay);
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
@@ -160,6 +160,28 @@ System.register(['react', 'jotai/vanilla', 'jotai/vanilla/internals'], (function
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
if (typeof delay === "number") {
|
|
163
|
+
console.warn(`[DEPRECATED] delay option is deprecated and will be removed in v3.
|
|
164
|
+
|
|
165
|
+
Migration guide:
|
|
166
|
+
|
|
167
|
+
Create a custom hook like the following.
|
|
168
|
+
|
|
169
|
+
function useAtomValueWithDelay<Value>(
|
|
170
|
+
atom: Atom<Value>,
|
|
171
|
+
options: { delay: number },
|
|
172
|
+
): Value {
|
|
173
|
+
const { delay } = options
|
|
174
|
+
const store = useStore(options)
|
|
175
|
+
const [value, setValue] = useState(() => store.get(atom))
|
|
176
|
+
useEffect(() => {
|
|
177
|
+
const unsub = store.sub(atom, () => {
|
|
178
|
+
setTimeout(() => setValue(store.get(atom)), delay)
|
|
179
|
+
})
|
|
180
|
+
return unsub
|
|
181
|
+
}, [store, atom, delay])
|
|
182
|
+
return value
|
|
183
|
+
}
|
|
184
|
+
`);
|
|
163
185
|
setTimeout(rerender, delay);
|
|
164
186
|
return;
|
|
165
187
|
}
|
|
@@ -1,2 +1,23 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
System.register(["react","jotai/vanilla","jotai/vanilla/internals"],(function(
|
|
2
|
+
System.register(["react","jotai/vanilla","jotai/vanilla/internals"],(function(B){"use strict";var S,p,E,d,v,V,R,k,C,w,D,P;return{setters:[function(n){S=n.createContext,p=n.useContext,E=n.useRef,d=n.createElement,v=n.default,V=n.useReducer,R=n.useEffect,k=n.useDebugValue,C=n.useCallback},function(n){w=n.getDefaultStore,D=n.createStore},function(n){P=n.INTERNAL_getBuildingBlocksRev2}],execute:(function(){B({Provider:N,useAtom:I,useAtomValue:j,useSetAtom:x,useStore:m});const n=S(void 0);function m(t){const e=p(n);return(t==null?void 0:t.store)||e||w()}function N({children:t,store:e}){const o=E(null);return e?d(n.Provider,{value:e},t):(o.current===null&&(o.current=D()),d(n.Provider,{value:o.current},t))}const b=t=>typeof(t==null?void 0:t.then)=="function",h=t=>{t.status||(t.status="pending",t.then(e=>{t.status="fulfilled",t.value=e},e=>{t.status="rejected",t.reason=e}))},_=v.use||(t=>{if(t.status==="pending")throw t;if(t.status==="fulfilled")return t.value;throw t.status==="rejected"?t.reason:(h(t),t)}),y=new WeakMap,T=(t,e,o)=>{const a=P(t)[26];let u=y.get(e);return u||(u=new Promise((f,g)=>{let l=e;const i=s=>A=>{l===s&&f(A)},c=s=>A=>{l===s&&g(A)},r=()=>{try{const s=o();b(s)?(y.set(s,u),l=s,s.then(i(s),c(s)),a(t,s,r)):f(s)}catch(s){g(s)}};e.then(i(e),c(e)),a(t,e,r)}),y.set(e,u)),u};function j(t,e){const{delay:o,unstable_promiseStatus:a=!v.use}=e||{},u=m(e),[[f,g,l],i]=V(r=>{const s=u.get(t);return Object.is(r[0],s)&&r[1]===u&&r[2]===t?r:[s,u,t]},void 0,()=>[u.get(t),u,t]);let c=f;if((g!==u||l!==t)&&(i(),c=u.get(t)),R(()=>{const r=u.sub(t,()=>{if(a)try{const s=u.get(t);b(s)&&h(T(u,s,()=>u.get(t)))}catch(s){}if(typeof o=="number"){console.warn(`[DEPRECATED] delay option is deprecated and will be removed in v3.
|
|
3
|
+
|
|
4
|
+
Migration guide:
|
|
5
|
+
|
|
6
|
+
Create a custom hook like the following.
|
|
7
|
+
|
|
8
|
+
function useAtomValueWithDelay<Value>(
|
|
9
|
+
atom: Atom<Value>,
|
|
10
|
+
options: { delay: number },
|
|
11
|
+
): Value {
|
|
12
|
+
const { delay } = options
|
|
13
|
+
const store = useStore(options)
|
|
14
|
+
const [value, setValue] = useState(() => store.get(atom))
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const unsub = store.sub(atom, () => {
|
|
17
|
+
setTimeout(() => setValue(store.get(atom)), delay)
|
|
18
|
+
})
|
|
19
|
+
return unsub
|
|
20
|
+
}, [store, atom, delay])
|
|
21
|
+
return value
|
|
22
|
+
}
|
|
23
|
+
`),setTimeout(i,o);return}i()});return i(),r},[u,t,o,a]),k(c),b(c)){const r=T(u,c,()=>u.get(t));return a&&h(r),_(r)}return c}function x(t,e){const o=m(e);return C((...a)=>o.set(t,...a),[o,t])}function I(t,e){return[j(t,e),x(t,e)]}})}}));
|
|
@@ -236,9 +236,19 @@ System.register([], (function (exports) {
|
|
|
236
236
|
const mountDependencies = buildingBlocks[17];
|
|
237
237
|
const setAtomStateValueOrPromise = buildingBlocks[20];
|
|
238
238
|
const registerAbortHandler = buildingBlocks[26];
|
|
239
|
+
const storeEpochHolder = buildingBlocks[28];
|
|
239
240
|
const atomState = ensureAtomState(store, atom);
|
|
241
|
+
const storeEpochNumber = storeEpochHolder[0];
|
|
240
242
|
if (isAtomStateInitialized(atomState)) {
|
|
241
|
-
if (
|
|
243
|
+
if (
|
|
244
|
+
// If the atom is mounted, we can use cached atom state,
|
|
245
|
+
// because it should have been updated by dependencies.
|
|
246
|
+
// We can't use the cache if the atom is invalidated.
|
|
247
|
+
mountedMap.has(atom) && invalidatedAtoms.get(atom) !== atomState.n || // If atom is not mounted, we can use cached atom state,
|
|
248
|
+
// only if store hasn't been mutated.
|
|
249
|
+
atomState.m === storeEpochNumber
|
|
250
|
+
) {
|
|
251
|
+
atomState.m = storeEpochNumber;
|
|
242
252
|
return atomState;
|
|
243
253
|
}
|
|
244
254
|
let hasChangedDeps = false;
|
|
@@ -249,6 +259,7 @@ System.register([], (function (exports) {
|
|
|
249
259
|
}
|
|
250
260
|
}
|
|
251
261
|
if (!hasChangedDeps) {
|
|
262
|
+
atomState.m = storeEpochNumber;
|
|
252
263
|
return atomState;
|
|
253
264
|
}
|
|
254
265
|
}
|
|
@@ -362,11 +373,13 @@ System.register([], (function (exports) {
|
|
|
362
373
|
pruneDependencies();
|
|
363
374
|
}
|
|
364
375
|
(_a = storeHooks.r) == null ? void 0 : _a.call(storeHooks, atom);
|
|
376
|
+
atomState.m = storeEpochNumber;
|
|
365
377
|
return atomState;
|
|
366
378
|
} catch (error) {
|
|
367
379
|
delete atomState.v;
|
|
368
380
|
atomState.e = error;
|
|
369
381
|
++atomState.n;
|
|
382
|
+
atomState.m = storeEpochNumber;
|
|
370
383
|
return atomState;
|
|
371
384
|
} finally {
|
|
372
385
|
isSync = false;
|
|
@@ -408,6 +421,7 @@ System.register([], (function (exports) {
|
|
|
408
421
|
const writeAtomState = buildingBlocks[16];
|
|
409
422
|
const mountDependencies = buildingBlocks[17];
|
|
410
423
|
const setAtomStateValueOrPromise = buildingBlocks[20];
|
|
424
|
+
const storeEpochHolder = buildingBlocks[28];
|
|
411
425
|
let isSync = true;
|
|
412
426
|
const getter = (a) => returnAtomValue(readAtomState(store, a));
|
|
413
427
|
const setter = (a, ...args2) => {
|
|
@@ -426,6 +440,7 @@ System.register([], (function (exports) {
|
|
|
426
440
|
setAtomStateValueOrPromise(store, a, v);
|
|
427
441
|
mountDependencies(store, a);
|
|
428
442
|
if (prevEpochNumber !== aState.n) {
|
|
443
|
+
++storeEpochHolder[0];
|
|
429
444
|
changedAtoms.add(a);
|
|
430
445
|
invalidateDependents(store, a);
|
|
431
446
|
(_a = storeHooks.c) == null ? void 0 : _a.call(storeHooks, a);
|
|
@@ -730,7 +745,9 @@ System.register([], (function (exports) {
|
|
|
730
745
|
/* @__PURE__ */ new WeakMap(),
|
|
731
746
|
// abortHandlersMap
|
|
732
747
|
BUILDING_BLOCK_registerAbortHandler,
|
|
733
|
-
BUILDING_BLOCK_abortPromise
|
|
748
|
+
BUILDING_BLOCK_abortPromise,
|
|
749
|
+
// store epoch
|
|
750
|
+
[0]
|
|
734
751
|
].map((fn, i) => buildArgs[i] || fn);
|
|
735
752
|
buildingBlockMap.set(store, Object.freeze(buildingBlocks));
|
|
736
753
|
return store;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
System.register([],(function(
|
|
1
|
+
System.register([],(function(q){"use strict";return{execute:(function(){q({INTERNAL_addPendingPromiseToDependency:O,INTERNAL_buildStoreRev2:hn,INTERNAL_getBuildingBlocksRev2:dn,INTERNAL_getMountedOrPendingDependents:V,INTERNAL_hasInitialValue:W,INTERNAL_initializeStoreHooksRev2:G,INTERNAL_isActuallyWritableAtom:P,INTERNAL_isAtomStateInitialized:B,INTERNAL_isPromiseLike:R,INTERNAL_returnAtomValue:I});function W(n){return"init"in n}function P(n){return!!n.write}function B(n){return"v"in n||"e"in n}function I(n){if("e"in n)throw n.e;return n.v}function R(n){return typeof(n==null?void 0:n.then)=="function"}function O(n,e,o){if(!o.p.has(n)){o.p.add(n);const t=()=>o.p.delete(n);e.then(t,t)}}function V(n,e,o){var t;const r=new Set;for(const l of((t=o.get(n))==null?void 0:t.t)||[])r.add(l);for(const l of e.p)r.add(l);return r}const F=()=>{const n=new Set,e=()=>n.forEach(o=>o());return e.add=o=>(n.add(o),()=>n.delete(o)),e},b=()=>{const n={},e=new WeakMap,o=t=>{var r,l;(r=e.get(n))==null||r.forEach(s=>s(t)),(l=e.get(t))==null||l.forEach(s=>s())};return o.add=(t,r)=>{const l=t||n;let s=e.get(l);return s||(s=new Set,e.set(l,s)),s.add(r),()=>{s.delete(r),s.size||e.delete(l)}},o};function G(n){return n.i||(n.i=b()),n.r||(n.r=b()),n.c||(n.c=b()),n.m||(n.m=b()),n.u||(n.u=b()),n.f||(n.f=F()),n}const J=(n,e,...o)=>e.read(...o),K=(n,e,...o)=>e.write(...o),Q=(n,e)=>{var o;return(o=e.INTERNAL_onInit)==null?void 0:o.call(e,n)},U=(n,e,o)=>{var t;return(t=e.onMount)==null?void 0:t.call(e,o)},X=(n,e)=>{var o;const t=v(n),r=t[0],l=t[6],s=t[9];let c=r.get(e);return c||(c={d:new Map,p:new Set,n:0},r.set(e,c),(o=l.i)==null||o.call(l,e),s==null||s(n,e)),c},Y=n=>{const e=v(n),o=e[1],t=e[3],r=e[4],l=e[5],s=e[6],c=e[13],d=[],g=p=>{try{p()}catch(u){d.push(u)}};do{s.f&&g(s.f);const p=new Set,u=p.add.bind(p);t.forEach(f=>{var i;return(i=o.get(f))==null?void 0:i.l.forEach(u)}),t.clear(),l.forEach(u),l.clear(),r.forEach(u),r.clear(),p.forEach(g),t.size&&c(n)}while(t.size||l.size||r.size);if(d.length)throw new AggregateError(d)},Z=n=>{const e=v(n),o=e[1],t=e[2],r=e[3],l=e[11],s=e[14],c=e[17],d=[],g=new WeakSet,p=new WeakSet,u=Array.from(r);for(;u.length;){const f=u[u.length-1],i=l(n,f);if(p.has(f)){u.pop();continue}if(g.has(f)){t.get(f)===i.n&&d.push([f,i]),p.add(f),u.pop();continue}g.add(f);for(const w of V(f,i,o))g.has(w)||u.push(w)}for(let f=d.length-1;f>=0;--f){const[i,w]=d[f];let m=!1;for(const A of w.d.keys())if(A!==i&&r.has(A)){m=!0;break}m&&(t.set(i,w.n),s(n,i),c(n,i)),t.delete(i)}},$=(n,e)=>{var o,t;const r=v(n),l=r[1],s=r[2],c=r[3],d=r[6],g=r[7],p=r[11],u=r[12],f=r[13],i=r[14],w=r[16],m=r[17],A=r[20],k=r[26],z=r[28],a=p(n,e),y=z[0];if(B(a)){if(l.has(e)&&s.get(e)!==a.n||a.m===y)return a.m=y,a;let h=!1;for(const[N,S]of a.d)if(i(n,N).n!==S){h=!0;break}if(!h)return a.m=y,a}let E=!0;const T=new Set(a.d.keys()),_=new Map,M=()=>{for(const h of T)_.has(h)||a.d.delete(h)},x=()=>{if(l.has(e)){const h=!c.size;m(n,e),h&&(f(n),u(n))}},gn=h=>{var N;if(h===e){const H=p(n,h);if(!B(H))if(W(h))A(n,h,h.init);else throw new Error("no atom init");return I(H)}const S=i(n,h);try{return I(S)}finally{_.set(h,S.n),a.d.set(h,S.n),R(a.v)&&O(e,a.v,S),l.has(e)&&((N=l.get(h))==null||N.t.add(e)),E||x()}};let L,j;const pn={get signal(){return L||(L=new AbortController),L.signal},get setSelf(){return!j&&P(e)&&(j=(...h)=>{if(!E)try{return w(n,e,...h)}finally{f(n),u(n)}}),j}},C=a.n,wn=s.get(e)===C;try{const h=g(n,e,gn,pn);if(A(n,e,h),R(h)){k(n,h,()=>L==null?void 0:L.abort());const N=()=>{M(),x()};h.then(N,N)}else M();return(o=d.r)==null||o.call(d,e),a.m=y,a}catch(h){return delete a.v,a.e=h,++a.n,a.m=y,a}finally{E=!1,a.n!==C&&wn&&(s.set(e,a.n),c.add(e),(t=d.c)==null||t.call(d,e))}},nn=(n,e)=>{const o=v(n),t=o[1],r=o[2],l=o[11],s=[e];for(;s.length;){const c=s.pop(),d=l(n,c);for(const g of V(c,d,t)){const p=l(n,g);r.get(g)!==p.n&&(r.set(g,p.n),s.push(g))}}},en=(n,e,...o)=>{const t=v(n),r=t[3],l=t[6],s=t[8],c=t[11],d=t[12],g=t[13],p=t[14],u=t[15],f=t[16],i=t[17],w=t[20],m=t[28];let A=!0;const k=a=>I(p(n,a)),z=(a,...y)=>{var E;const T=c(n,a);try{if(a===e){if(!W(a))throw new Error("atom not writable");const _=T.n,M=y[0];w(n,a,M),i(n,a),_!==T.n&&(++m[0],r.add(a),u(n,a),(E=l.c)==null||E.call(l,a));return}else return f(n,a,...y)}finally{A||(g(n),d(n))}};try{return s(n,e,k,z,...o)}finally{A=!1}},tn=(n,e)=>{var o;const t=v(n),r=t[1],l=t[3],s=t[6],c=t[11],d=t[15],g=t[18],p=t[19],u=c(n,e),f=r.get(e);if(f){for(const[i,w]of u.d)if(!f.d.has(i)){const m=c(n,i);g(n,i).t.add(e),f.d.add(i),w!==m.n&&(l.add(i),d(n,i),(o=s.c)==null||o.call(s,i))}for(const i of f.d)if(!u.d.has(i)){f.d.delete(i);const w=p(n,i);w==null||w.t.delete(e)}}},rn=(n,e)=>{var o;const t=v(n),r=t[1],l=t[4],s=t[6],c=t[10],d=t[11],g=t[12],p=t[13],u=t[14],f=t[16],i=t[18],w=d(n,e);let m=r.get(e);if(!m){u(n,e);for(const A of w.d.keys())i(n,A).t.add(e);if(m={l:new Set,d:new Set(w.d.keys()),t:new Set},r.set(e,m),P(e)){const A=()=>{let k=!0;const z=(...a)=>{try{return f(n,e,...a)}finally{k||(p(n),g(n))}};try{const a=c(n,e,z);a&&(m.u=()=>{k=!0;try{a()}finally{k=!1}})}finally{k=!1}};l.add(A)}(o=s.m)==null||o.call(s,e)}return m},on=(n,e)=>{var o,t;const r=v(n),l=r[1],s=r[5],c=r[6],d=r[11],g=r[19],p=d(n,e);let u=l.get(e);if(!u||u.l.size)return u;let f=!1;for(const i of u.t)if((o=l.get(i))!=null&&o.d.has(e)){f=!0;break}if(!f){u.u&&s.add(u.u),u=void 0,l.delete(e);for(const i of p.d.keys()){const w=g(n,i);w==null||w.t.delete(e)}(t=c.u)==null||t.call(c,e);return}return u},ln=(n,e,o)=>{const t=v(n),r=t[11],l=t[27],s=r(n,e),c="v"in s,d=s.v;if(R(o))for(const g of s.d.keys())O(e,o,r(n,g));s.v=o,delete s.e,(!c||!Object.is(d,s.v))&&(++s.n,R(d)&&l(n,d))},sn=(n,e)=>{const o=v(n)[14];return I(o(n,e))},an=(n,e,...o)=>{const t=v(n),r=t[3],l=t[12],s=t[13],c=t[16],d=r.size;try{return c(n,e,...o)}finally{r.size!==d&&(s(n),l(n))}},cn=(n,e,o)=>{const t=v(n),r=t[12],l=t[18],s=t[19],c=l(n,e).l;return c.add(o),r(n),()=>{c.delete(o),s(n,e),r(n)}},un=(n,e,o)=>{const t=v(n)[25];let r=t.get(e);if(!r){r=new Set,t.set(e,r);const l=()=>t.delete(e);e.then(l,l)}r.add(o)},fn=(n,e)=>{const o=v(n)[25].get(e);o==null||o.forEach(t=>t())},D=new WeakMap,v=n=>D.get(n);function dn(n){const e=v(n),o=e[24];return o?o(e):e}function hn(...n){const e={get(t){const r=v(e)[21];return r(e,t)},set(t,...r){const l=v(e)[22];return l(e,t,...r)},sub(t,r){const l=v(e)[23];return l(e,t,r)}},o=[new WeakMap,new WeakMap,new WeakMap,new Set,new Set,new Set,{},J,K,Q,U,X,Y,Z,$,nn,en,tn,rn,on,ln,sn,an,cn,void 0,new WeakMap,un,fn,[0]].map((t,r)=>n[r]||t);return D.set(e,Object.freeze(o)),e}})}}));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Atom, ExtractAtomValue } from 'jotai/vanilla';
|
|
2
2
|
import { useStore } from './Provider';
|
|
3
3
|
type Options = Parameters<typeof useStore>[0] & {
|
|
4
|
+
/** @deprecated delay option is deprecated and will be removed in v3. https://github.com/pmndrs/jotai/pull/3264 */
|
|
4
5
|
delay?: number;
|
|
5
6
|
unstable_promiseStatus?: boolean;
|
|
6
7
|
};
|
|
@@ -27,6 +27,8 @@ type AtomState<Value = AnyValue> = {
|
|
|
27
27
|
readonly p: Set<AnyAtom>;
|
|
28
28
|
/** The epoch number of the atom. */
|
|
29
29
|
n: EpochNumber;
|
|
30
|
+
/** The store epoch number that last validated the atom. */
|
|
31
|
+
m?: EpochNumber;
|
|
30
32
|
/** Atom value */
|
|
31
33
|
v?: Value;
|
|
32
34
|
/** Atom error */
|
|
@@ -89,6 +91,9 @@ type EnhanceBuildingBlocks = (buildingBlocks: Readonly<BuildingBlocks>) => Reado
|
|
|
89
91
|
type AbortHandlersMap = WeakMapLike<PromiseLike<unknown>, Set<() => void>>;
|
|
90
92
|
type RegisterAbortHandler = <T>(store: Store, promise: PromiseLike<T>, abortHandler: () => void) => void;
|
|
91
93
|
type AbortPromise = <T>(store: Store, promise: PromiseLike<T>) => void;
|
|
94
|
+
type StoreEpochHolder = [
|
|
95
|
+
/*n*/ EpochNumber
|
|
96
|
+
];
|
|
92
97
|
type Store = {
|
|
93
98
|
get: <Value>(atom: Atom<Value>) => Value;
|
|
94
99
|
set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
@@ -122,7 +127,8 @@ type BuildingBlocks = [
|
|
|
122
127
|
/*enhanceBuildingBlocks*/ EnhanceBuildingBlocks | undefined,
|
|
123
128
|
/*abortHandlersMap*/ AbortHandlersMap,
|
|
124
129
|
/*registerAbortHandler*/ RegisterAbortHandler,
|
|
125
|
-
/*abortPromise*/ AbortPromise
|
|
130
|
+
/*abortPromise*/ AbortPromise,
|
|
131
|
+
/*storeEpochHolder*/ StoreEpochHolder
|
|
126
132
|
];
|
|
127
133
|
export type { AtomState as INTERNAL_AtomState, Mounted as INTERNAL_Mounted, AtomStateMap as INTERNAL_AtomStateMap, MountedMap as INTERNAL_MountedMap, InvalidatedAtoms as INTERNAL_InvalidatedAtoms, ChangedAtoms as INTERNAL_ChangedAtoms, Callbacks as INTERNAL_Callbacks, AtomRead as INTERNAL_AtomRead, AtomWrite as INTERNAL_AtomWrite, AtomOnInit as INTERNAL_AtomOnInit, AtomOnMount as INTERNAL_AtomOnMount, EnsureAtomState as INTERNAL_EnsureAtomState, FlushCallbacks as INTERNAL_FlushCallbacks, RecomputeInvalidatedAtoms as INTERNAL_RecomputeInvalidatedAtoms, ReadAtomState as INTERNAL_ReadAtomState, InvalidateDependents as INTERNAL_InvalidateDependents, WriteAtomState as INTERNAL_WriteAtomState, MountDependencies as INTERNAL_MountDependencies, MountAtom as INTERNAL_MountAtom, UnmountAtom as INTERNAL_UnmountAtom, Store as INTERNAL_Store, BuildingBlocks as INTERNAL_BuildingBlocks, StoreHooks as INTERNAL_StoreHooks, };
|
|
128
134
|
declare function hasInitialValue<T extends Atom<AnyValue>>(atom: T): atom is T & (T extends Atom<infer Value> ? {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Atom, ExtractAtomValue } from 'jotai/vanilla';
|
|
2
2
|
import { useStore } from './Provider';
|
|
3
3
|
type Options = Parameters<typeof useStore>[0] & {
|
|
4
|
+
/** @deprecated delay option is deprecated and will be removed in v3. https://github.com/pmndrs/jotai/pull/3264 */
|
|
4
5
|
delay?: number;
|
|
5
6
|
unstable_promiseStatus?: boolean;
|
|
6
7
|
};
|
|
@@ -27,6 +27,8 @@ type AtomState<Value = AnyValue> = {
|
|
|
27
27
|
readonly p: Set<AnyAtom>;
|
|
28
28
|
/** The epoch number of the atom. */
|
|
29
29
|
n: EpochNumber;
|
|
30
|
+
/** The store epoch number that last validated the atom. */
|
|
31
|
+
m?: EpochNumber;
|
|
30
32
|
/** Atom value */
|
|
31
33
|
v?: Value;
|
|
32
34
|
/** Atom error */
|
|
@@ -89,6 +91,9 @@ type EnhanceBuildingBlocks = (buildingBlocks: Readonly<BuildingBlocks>) => Reado
|
|
|
89
91
|
type AbortHandlersMap = WeakMapLike<PromiseLike<unknown>, Set<() => void>>;
|
|
90
92
|
type RegisterAbortHandler = <T>(store: Store, promise: PromiseLike<T>, abortHandler: () => void) => void;
|
|
91
93
|
type AbortPromise = <T>(store: Store, promise: PromiseLike<T>) => void;
|
|
94
|
+
type StoreEpochHolder = [
|
|
95
|
+
/*n*/ EpochNumber
|
|
96
|
+
];
|
|
92
97
|
type Store = {
|
|
93
98
|
get: <Value>(atom: Atom<Value>) => Value;
|
|
94
99
|
set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
@@ -122,7 +127,8 @@ type BuildingBlocks = [
|
|
|
122
127
|
/*enhanceBuildingBlocks*/ EnhanceBuildingBlocks | undefined,
|
|
123
128
|
/*abortHandlersMap*/ AbortHandlersMap,
|
|
124
129
|
/*registerAbortHandler*/ RegisterAbortHandler,
|
|
125
|
-
/*abortPromise*/ AbortPromise
|
|
130
|
+
/*abortPromise*/ AbortPromise,
|
|
131
|
+
/*storeEpochHolder*/ StoreEpochHolder
|
|
126
132
|
];
|
|
127
133
|
export type { AtomState as INTERNAL_AtomState, Mounted as INTERNAL_Mounted, AtomStateMap as INTERNAL_AtomStateMap, MountedMap as INTERNAL_MountedMap, InvalidatedAtoms as INTERNAL_InvalidatedAtoms, ChangedAtoms as INTERNAL_ChangedAtoms, Callbacks as INTERNAL_Callbacks, AtomRead as INTERNAL_AtomRead, AtomWrite as INTERNAL_AtomWrite, AtomOnInit as INTERNAL_AtomOnInit, AtomOnMount as INTERNAL_AtomOnMount, EnsureAtomState as INTERNAL_EnsureAtomState, FlushCallbacks as INTERNAL_FlushCallbacks, RecomputeInvalidatedAtoms as INTERNAL_RecomputeInvalidatedAtoms, ReadAtomState as INTERNAL_ReadAtomState, InvalidateDependents as INTERNAL_InvalidateDependents, WriteAtomState as INTERNAL_WriteAtomState, MountDependencies as INTERNAL_MountDependencies, MountAtom as INTERNAL_MountAtom, UnmountAtom as INTERNAL_UnmountAtom, Store as INTERNAL_Store, BuildingBlocks as INTERNAL_BuildingBlocks, StoreHooks as INTERNAL_StoreHooks, };
|
|
128
134
|
declare function hasInitialValue<T extends Atom<AnyValue>>(atom: T): atom is T & (T extends Atom<infer Value> ? {
|
package/umd/react.development.js
CHANGED
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
} catch (_unused) {}
|
|
137
137
|
}
|
|
138
138
|
if (typeof delay === 'number') {
|
|
139
|
+
console.warn("[DEPRECATED] delay option is deprecated and will be removed in v3.\n\nMigration guide:\n\nCreate a custom hook like the following.\n\nfunction useAtomValueWithDelay<Value>(\n atom: Atom<Value>,\n options: { delay: number },\n): Value {\n const { delay } = options\n const store = useStore(options)\n const [value, setValue] = useState(() => store.get(atom))\n useEffect(() => {\n const unsub = store.sub(atom, () => {\n setTimeout(() => setValue(store.get(atom)), delay)\n })\n return unsub\n }, [store, atom, delay])\n return value\n}\n");
|
|
139
140
|
setTimeout(rerender, delay);
|
|
140
141
|
return;
|
|
141
142
|
}
|
package/umd/react.production.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("jotai/vanilla"),require("jotai/vanilla/internals")):"function"==typeof define&&define.amd?define(["exports","react","jotai/vanilla","jotai/vanilla/internals"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jotaiReact={},e.React,e.jotaiVanilla,e.jotaiVanillaInternals)}(this,function(e,t,n,
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("jotai/vanilla"),require("jotai/vanilla/internals")):"function"==typeof define&&define.amd?define(["exports","react","jotai/vanilla","jotai/vanilla/internals"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jotaiReact={},e.React,e.jotaiVanilla,e.jotaiVanillaInternals)}(this,function(e,t,n,u){"use strict";var r=t.createContext(void 0);function o(e){var u=t.useContext(r);return(null==e?void 0:e.store)||u||n.getDefaultStore()}var a=function(e){return"function"==typeof(null==e?void 0:e.then)},i=function(e){e.status||(e.status="pending",e.then(function(t){e.status="fulfilled",e.value=t},function(t){e.status="rejected",e.reason=t}))},s=t.use||function(e){if("pending"===e.status)throw e;if("fulfilled"===e.status)return e.value;throw"rejected"===e.status?e.reason:(i(e),e)},l=new WeakMap,c=function(e,t,n){var r=u.INTERNAL_getBuildingBlocksRev2(e)[26],o=l.get(t);return o||(o=new Promise(function(u,i){var s=t,c=function(e){return function(t){s===e&&u(t)}},f=function(e){return function(t){s===e&&i(t)}},d=function(){try{var t=n();a(t)?(l.set(t,o),s=t,t.then(c(t),f(t)),r(e,t,d)):u(t)}catch(e){i(e)}};t.then(c(t),f(t)),r(e,t,d)}),l.set(t,o)),o};function f(e,n){var u=n||{},r=u.delay,l=u.unstable_promiseStatus,f=void 0===l?!t.use:l,d=o(n),v=t.useReducer(function(t){var n=d.get(e);return Object.is(t[0],n)&&t[1]===d&&t[2]===e?t:[n,d,e]},void 0,function(){return[d.get(e),d,e]}),m=v[0],g=m[0],p=m[1],y=m[2],h=v[1],b=g;if(p===d&&y===e||(h(),b=d.get(e)),t.useEffect(function(){var t=d.sub(e,function(){if(f)try{var t=d.get(e);a(t)&&i(c(d,t,function(){return d.get(e)}))}catch(e){}if("number"==typeof r)return console.warn("[DEPRECATED] delay option is deprecated and will be removed in v3.\n\nMigration guide:\n\nCreate a custom hook like the following.\n\nfunction useAtomValueWithDelay<Value>(\n atom: Atom<Value>,\n options: { delay: number },\n): Value {\n const { delay } = options\n const store = useStore(options)\n const [value, setValue] = useState(() => store.get(atom))\n useEffect(() => {\n const unsub = store.sub(atom, () => {\n setTimeout(() => setValue(store.get(atom)), delay)\n })\n return unsub\n }, [store, atom, delay])\n return value\n}\n"),void setTimeout(h,r);h()});return h(),t},[d,e,r,f]),t.useDebugValue(b),a(b)){var j=c(d,b,function(){return d.get(e)});return f&&i(j),s(j)}return b}function d(e,n){var u=o(n),r=t.useCallback(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return u.set.apply(u,[e].concat(n))},[u,e]);return r}e.Provider=function(e){var u=e.children,o=e.store,a=t.useRef(null);return o?t.createElement(r.Provider,{value:o},u):(null===a.current&&(a.current=n.createStore()),t.createElement(r.Provider,{value:a.current},u))},e.useAtom=function(e,t){return[f(e,t),d(e,t)]},e.useAtomValue=f,e.useSetAtom=d,e.useStore=o});
|
|
@@ -286,22 +286,26 @@
|
|
|
286
286
|
var mountDependencies = buildingBlocks[17];
|
|
287
287
|
var setAtomStateValueOrPromise = buildingBlocks[20];
|
|
288
288
|
var registerAbortHandler = buildingBlocks[26];
|
|
289
|
+
var storeEpochHolder = buildingBlocks[28];
|
|
289
290
|
var atomState = ensureAtomState(store, atom);
|
|
291
|
+
var storeEpochNumber = storeEpochHolder[0];
|
|
290
292
|
if (isAtomStateInitialized(atomState)) {
|
|
291
|
-
if (mountedMap.has(atom) && invalidatedAtoms.get(atom) !== atomState.n) {
|
|
293
|
+
if (mountedMap.has(atom) && invalidatedAtoms.get(atom) !== atomState.n || atomState.m === storeEpochNumber) {
|
|
294
|
+
atomState.m = storeEpochNumber;
|
|
292
295
|
return atomState;
|
|
293
296
|
}
|
|
294
297
|
var hasChangedDeps = false;
|
|
295
298
|
for (var _iterator5 = _createForOfIteratorHelperLoose(atomState.d), _step5; !(_step5 = _iterator5()).done;) {
|
|
296
299
|
var _step5$value = _step5.value,
|
|
297
300
|
a = _step5$value[0],
|
|
298
|
-
|
|
299
|
-
if (readAtomState(store, a).n !==
|
|
301
|
+
_n = _step5$value[1];
|
|
302
|
+
if (readAtomState(store, a).n !== _n) {
|
|
300
303
|
hasChangedDeps = true;
|
|
301
304
|
break;
|
|
302
305
|
}
|
|
303
306
|
}
|
|
304
307
|
if (!hasChangedDeps) {
|
|
308
|
+
atomState.m = storeEpochNumber;
|
|
305
309
|
return atomState;
|
|
306
310
|
}
|
|
307
311
|
}
|
|
@@ -418,11 +422,13 @@
|
|
|
418
422
|
pruneDependencies();
|
|
419
423
|
}
|
|
420
424
|
storeHooks.r == null || storeHooks.r(atom);
|
|
425
|
+
atomState.m = storeEpochNumber;
|
|
421
426
|
return atomState;
|
|
422
427
|
} catch (error) {
|
|
423
428
|
delete atomState.v;
|
|
424
429
|
atomState.e = error;
|
|
425
430
|
++atomState.n;
|
|
431
|
+
atomState.m = storeEpochNumber;
|
|
426
432
|
return atomState;
|
|
427
433
|
} finally {
|
|
428
434
|
isSync = false;
|
|
@@ -465,6 +471,7 @@
|
|
|
465
471
|
var writeAtomState = buildingBlocks[16];
|
|
466
472
|
var mountDependencies = buildingBlocks[17];
|
|
467
473
|
var setAtomStateValueOrPromise = buildingBlocks[20];
|
|
474
|
+
var storeEpochHolder = buildingBlocks[28];
|
|
468
475
|
var isSync = true;
|
|
469
476
|
var getter = function getter(a) {
|
|
470
477
|
return returnAtomValue(readAtomState(store, a));
|
|
@@ -487,6 +494,7 @@
|
|
|
487
494
|
setAtomStateValueOrPromise(store, a, v);
|
|
488
495
|
mountDependencies(store, a);
|
|
489
496
|
if (prevEpochNumber !== aState.n) {
|
|
497
|
+
++storeEpochHolder[0];
|
|
490
498
|
changedAtoms.add(a);
|
|
491
499
|
invalidateDependents(store, a);
|
|
492
500
|
storeHooks.c == null || storeHooks.c(a);
|
|
@@ -526,13 +534,13 @@
|
|
|
526
534
|
for (var _iterator8 = _createForOfIteratorHelperLoose(atomState.d), _step8; !(_step8 = _iterator8()).done;) {
|
|
527
535
|
var _step8$value = _step8.value,
|
|
528
536
|
a = _step8$value[0],
|
|
529
|
-
|
|
537
|
+
_n2 = _step8$value[1];
|
|
530
538
|
if (!mounted.d.has(a)) {
|
|
531
539
|
var aState = ensureAtomState(store, a);
|
|
532
540
|
var aMounted = mountAtom(store, a);
|
|
533
541
|
aMounted.t.add(atom);
|
|
534
542
|
mounted.d.add(a);
|
|
535
|
-
if (
|
|
543
|
+
if (_n2 !== aState.n) {
|
|
536
544
|
changedAtoms.add(a);
|
|
537
545
|
invalidateDependents(store, a);
|
|
538
546
|
storeHooks.c == null || storeHooks.c(a);
|
|
@@ -770,7 +778,7 @@
|
|
|
770
778
|
return storeSub(store, atom, listener);
|
|
771
779
|
}
|
|
772
780
|
};
|
|
773
|
-
var buildingBlocks = [new WeakMap(), new WeakMap(), new WeakMap(), new Set(), new Set(), new Set(), {}, BUILDING_BLOCK_atomRead, BUILDING_BLOCK_atomWrite, BUILDING_BLOCK_atomOnInit, BUILDING_BLOCK_atomOnMount, BUILDING_BLOCK_ensureAtomState, BUILDING_BLOCK_flushCallbacks, BUILDING_BLOCK_recomputeInvalidatedAtoms, BUILDING_BLOCK_readAtomState, BUILDING_BLOCK_invalidateDependents, BUILDING_BLOCK_writeAtomState, BUILDING_BLOCK_mountDependencies, BUILDING_BLOCK_mountAtom, BUILDING_BLOCK_unmountAtom, BUILDING_BLOCK_setAtomStateValueOrPromise, BUILDING_BLOCK_storeGet, BUILDING_BLOCK_storeSet, BUILDING_BLOCK_storeSub, undefined, new WeakMap(), BUILDING_BLOCK_registerAbortHandler, BUILDING_BLOCK_abortPromise].map(function (fn, i) {
|
|
781
|
+
var buildingBlocks = [new WeakMap(), new WeakMap(), new WeakMap(), new Set(), new Set(), new Set(), {}, BUILDING_BLOCK_atomRead, BUILDING_BLOCK_atomWrite, BUILDING_BLOCK_atomOnInit, BUILDING_BLOCK_atomOnMount, BUILDING_BLOCK_ensureAtomState, BUILDING_BLOCK_flushCallbacks, BUILDING_BLOCK_recomputeInvalidatedAtoms, BUILDING_BLOCK_readAtomState, BUILDING_BLOCK_invalidateDependents, BUILDING_BLOCK_writeAtomState, BUILDING_BLOCK_mountDependencies, BUILDING_BLOCK_mountAtom, BUILDING_BLOCK_unmountAtom, BUILDING_BLOCK_setAtomStateValueOrPromise, BUILDING_BLOCK_storeGet, BUILDING_BLOCK_storeSet, BUILDING_BLOCK_storeSub, undefined, new WeakMap(), BUILDING_BLOCK_registerAbortHandler, BUILDING_BLOCK_abortPromise, [0]].map(function (fn, i) {
|
|
774
782
|
return buildArgs[i] || fn;
|
|
775
783
|
});
|
|
776
784
|
buildingBlockMap.set(store, Object.freeze(buildingBlocks));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).jotaiVanillaInternals={})}(this,function(n){"use strict";function e(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,t=Array(e);r<e;r++)t[r]=n[r];return t}function r(n,r){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(t)return(t=t.call(n)).next.bind(t);if(Array.isArray(n)||(t=function(n,r){if(n){if("string"==typeof n)return e(n,r);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(n,r):void 0}}(n))||r){t&&(n=t);var a=0;return function(){return a>=n.length?{done:!0}:{done:!1,value:n[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function t(n){return"init"in n}function a(n){return!!n.write}function o(n){return"v"in n||"e"in n}function i(n){if("e"in n)throw n.e;return n.v}function u(n){return"function"==typeof(null==n?void 0:n.then)}function f(n,e,r){if(!r.p.has(n)){r.p.add(n);var t=function(){return r.p.delete(n)};e.then(t,t)}}function l(n,e,t){for(var a,o=new Set,i=r((null==(u=t.get(n))?void 0:u.t)||[]);!(a=i()).done;){var u,f=a.value;o.add(f)}for(var l,d=r(e.p);!(l=d()).done;){var v=l.value;o.add(v)}return o}var d=function(){var n={},e=new WeakMap,r=function(r){var t,a;null==(t=e.get(n))||t.forEach(function(n){return n(r)}),null==(a=e.get(r))||a.forEach(function(n){return n()})};return r.add=function(r,t){var a=r||n,o=e.get(a);return o||(o=new Set,e.set(a,o)),o.add(t),function(){o.delete(t),o.size||e.delete(a)}},r};var v=function(n,e){for(var r=arguments.length,t=new Array(r>2?r-2:0),a=2;a<r;a++)t[a-2]=arguments[a];return e.read.apply(e,t)},c=function(n,e){for(var r=arguments.length,t=new Array(r>2?r-2:0),a=2;a<r;a++)t[a-2]=arguments[a];return e.write.apply(e,t)},s=function(n,e){return null==e.INTERNAL_onInit?void 0:e.INTERNAL_onInit(n)},y=function(n,e,r){return null==e.onMount?void 0:e.onMount(r)},h=function(n,e){var r=M(n),t=r[0],a=r[6],o=r[9],i=t.get(e);return i||(i={d:new Map,p:new Set,n:0},t.set(e,i),null==a.i||a.i(e),null==o||o(n,e)),i},p=function(n){var e=M(n),r=e[1],t=e[3],a=e[4],o=e[5],i=e[6],u=e[13],f=[],l=function(n){try{n()}catch(n){f.push(n)}},d=function(){i.f&&l(i.f);var e=new Set,f=e.add.bind(e);t.forEach(function(n){var e;return null==(e=r.get(n))?void 0:e.l.forEach(f)}),t.clear(),o.forEach(f),o.clear(),a.forEach(f),a.clear(),e.forEach(l),t.size&&u(n)};do{d()}while(t.size||o.size||a.size);if(f.length)throw new AggregateError(f)},g=function(n){for(var e=M(n),t=e[1],a=e[2],o=e[3],i=e[11],u=e[14],f=e[17],d=[],v=new WeakSet,c=new WeakSet,s=Array.from(o);s.length;){var y=s[s.length-1],h=i(n,y);if(c.has(y))s.pop();else if(v.has(y))a.get(y)===h.n&&d.push([y,h]),c.add(y),s.pop();else{v.add(y);for(var p,g=r(l(y,h,t));!(p=g()).done;){var w=p.value;v.has(w)||s.push(w)}}}for(var A=d.length-1;A>=0;--A){for(var m,E=d[A],S=E[0],b=E[1],N=!1,k=r(b.d.keys());!(m=k()).done;){var I=m.value;if(I!==S&&o.has(I)){N=!0;break}}N&&(a.set(S,b.n),u(n,S),f(n,S)),a.delete(S)}},w=(new WeakSet,function(n,e){var l=M(n),d=l[1],v=l[2],c=l[3],s=l[6],y=l[7],h=l[11],p=l[12],g=l[13],w=l[14],A=l[16],m=l[17],E=l[20],S=l[26],b=h(n,e);if(o(
|
|
1
|
+
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).jotaiVanillaInternals={})}(this,function(n){"use strict";function e(n,e){(null==e||e>n.length)&&(e=n.length);for(var r=0,t=Array(e);r<e;r++)t[r]=n[r];return t}function r(n,r){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(t)return(t=t.call(n)).next.bind(t);if(Array.isArray(n)||(t=function(n,r){if(n){if("string"==typeof n)return e(n,r);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?e(n,r):void 0}}(n))||r){t&&(n=t);var a=0;return function(){return a>=n.length?{done:!0}:{done:!1,value:n[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function t(n){return"init"in n}function a(n){return!!n.write}function o(n){return"v"in n||"e"in n}function i(n){if("e"in n)throw n.e;return n.v}function u(n){return"function"==typeof(null==n?void 0:n.then)}function f(n,e,r){if(!r.p.has(n)){r.p.add(n);var t=function(){return r.p.delete(n)};e.then(t,t)}}function l(n,e,t){for(var a,o=new Set,i=r((null==(u=t.get(n))?void 0:u.t)||[]);!(a=i()).done;){var u,f=a.value;o.add(f)}for(var l,d=r(e.p);!(l=d()).done;){var v=l.value;o.add(v)}return o}var d=function(){var n={},e=new WeakMap,r=function(r){var t,a;null==(t=e.get(n))||t.forEach(function(n){return n(r)}),null==(a=e.get(r))||a.forEach(function(n){return n()})};return r.add=function(r,t){var a=r||n,o=e.get(a);return o||(o=new Set,e.set(a,o)),o.add(t),function(){o.delete(t),o.size||e.delete(a)}},r};var v=function(n,e){for(var r=arguments.length,t=new Array(r>2?r-2:0),a=2;a<r;a++)t[a-2]=arguments[a];return e.read.apply(e,t)},c=function(n,e){for(var r=arguments.length,t=new Array(r>2?r-2:0),a=2;a<r;a++)t[a-2]=arguments[a];return e.write.apply(e,t)},s=function(n,e){return null==e.INTERNAL_onInit?void 0:e.INTERNAL_onInit(n)},y=function(n,e,r){return null==e.onMount?void 0:e.onMount(r)},h=function(n,e){var r=M(n),t=r[0],a=r[6],o=r[9],i=t.get(e);return i||(i={d:new Map,p:new Set,n:0},t.set(e,i),null==a.i||a.i(e),null==o||o(n,e)),i},p=function(n){var e=M(n),r=e[1],t=e[3],a=e[4],o=e[5],i=e[6],u=e[13],f=[],l=function(n){try{n()}catch(n){f.push(n)}},d=function(){i.f&&l(i.f);var e=new Set,f=e.add.bind(e);t.forEach(function(n){var e;return null==(e=r.get(n))?void 0:e.l.forEach(f)}),t.clear(),o.forEach(f),o.clear(),a.forEach(f),a.clear(),e.forEach(l),t.size&&u(n)};do{d()}while(t.size||o.size||a.size);if(f.length)throw new AggregateError(f)},g=function(n){for(var e=M(n),t=e[1],a=e[2],o=e[3],i=e[11],u=e[14],f=e[17],d=[],v=new WeakSet,c=new WeakSet,s=Array.from(o);s.length;){var y=s[s.length-1],h=i(n,y);if(c.has(y))s.pop();else if(v.has(y))a.get(y)===h.n&&d.push([y,h]),c.add(y),s.pop();else{v.add(y);for(var p,g=r(l(y,h,t));!(p=g()).done;){var w=p.value;v.has(w)||s.push(w)}}}for(var A=d.length-1;A>=0;--A){for(var m,E=d[A],S=E[0],b=E[1],N=!1,k=r(b.d.keys());!(m=k()).done;){var I=m.value;if(I!==S&&o.has(I)){N=!0;break}}N&&(a.set(S,b.n),u(n,S),f(n,S)),a.delete(S)}},w=(new WeakSet,function(n,e){var l=M(n),d=l[1],v=l[2],c=l[3],s=l[6],y=l[7],h=l[11],p=l[12],g=l[13],w=l[14],A=l[16],m=l[17],E=l[20],S=l[26],b=l[28],N=h(n,e),k=b[0];if(o(N)){if(d.has(e)&&v.get(e)!==N.n||N.m===k)return N.m=k,N;for(var I,T=!1,R=r(N.d);!(I=R()).done;){var L=I.value,z=L[0],_=L[1];if(w(n,z).n!==_){T=!0;break}}if(!T)return N.m=k,N}var W,j,x=!0,O=new Set(N.d.keys()),P=new Map,V=function(){for(var n,e=r(O);!(n=e()).done;){var t=n.value;P.has(t)||N.d.delete(t)}},B=function(){if(d.has(e)){var r=!c.size;m(n,e),r&&(g(n),p(n))}},C={get signal(){return W||(W=new AbortController),W.signal},get setSelf(){return!j&&a(e)&&(j=function(){if(!x)try{for(var r=arguments.length,t=new Array(r),a=0;a<r;a++)t[a]=arguments[a];return A.apply(void 0,[n,e].concat(t))}finally{g(n),p(n)}}),j}},D=N.n,H=v.get(e)===D;try{0;var U=y(n,e,function(r){if(r===e){var a=h(n,r);if(!o(a)){if(!t(r))throw new Error("no atom init");E(n,r,r.init)}return i(a)}var l=w(n,r);try{return i(l)}finally{var v;P.set(r,l.n),N.d.set(r,l.n),u(N.v)&&f(e,N.v,l),d.has(e)&&(null==(v=d.get(r))||v.t.add(e)),x||B()}},C);if(E(n,e,U),u(U)){S(n,U,function(){var n;return null==(n=W)?void 0:n.abort()});var $=function(){V(),B()};U.then($,$)}else V();return null==s.r||s.r(e),N.m=k,N}catch(n){return delete N.v,N.e=n,++N.n,N.m=k,N}finally{x=!1,N.n!==D&&H&&(v.set(e,N.n),c.add(e),null==s.c||s.c(e))}}),A=function(n,e){for(var t=M(n),a=t[1],o=t[2],i=t[11],u=[e];u.length;)for(var f,d=u.pop(),v=r(l(d,i(n,d),a));!(f=v()).done;){var c=f.value,s=i(n,c);o.get(c)!==s.n&&(o.set(c,s.n),u.push(c))}},m=function(n,e){var r=M(n),a=r[3],o=r[6],u=r[8],f=r[11],l=r[12],d=r[13],v=r[14],c=r[15],s=r[16],y=r[17],h=r[20],p=r[28],g=!0;try{for(var w=arguments.length,A=new Array(w>2?w-2:0),m=2;m<w;m++)A[m-2]=arguments[m];return u.apply(void 0,[n,e,function(e){return i(v(n,e))},function(r){var i=f(n,r);try{for(var u=arguments.length,v=new Array(u>1?u-1:0),w=1;w<u;w++)v[w-1]=arguments[w];if(r===e){if(!t(r))throw new Error("atom not writable");var A=i.n,m=v[0];return h(n,r,m),y(n,r),void(A!==i.n&&(++p[0],a.add(r),c(n,r),null==o.c||o.c(r)))}return s.apply(void 0,[n,r].concat(v))}finally{g||(d(n),l(n))}}].concat(A))}finally{g=!1}},E=function(n,e){var t=M(n),a=t[1],o=t[3],i=t[6],u=t[11],f=t[15],l=t[18],d=t[19],v=u(n,e),c=a.get(e);if(c){for(var s,y=r(v.d);!(s=y()).done;){var h=s.value,p=h[0],g=h[1];if(!c.d.has(p)){var w=u(n,p);l(n,p).t.add(e),c.d.add(p),g!==w.n&&(o.add(p),f(n,p),null==i.c||i.c(p))}}for(var A,m=r(c.d);!(A=m()).done;){var E=A.value;if(!v.d.has(E)){c.d.delete(E);var S=d(n,E);null==S||S.t.delete(e)}}}},S=function(n,e){var t=M(n),o=t[1],i=t[4],u=t[6],f=t[10],l=t[11],d=t[12],v=t[13],c=t[14],s=t[16],y=t[18],h=l(n,e),p=o.get(e);if(!p){c(n,e);for(var g,w=r(h.d.keys());!(g=w()).done;){var A=g.value;y(n,A).t.add(e)}if(p={l:new Set,d:new Set(h.d.keys()),t:new Set},o.set(e,p),a(e)){i.add(function(){var r=!0;try{var t=f(n,e,function(){try{for(var t=arguments.length,a=new Array(t),o=0;o<t;o++)a[o]=arguments[o];return s.apply(void 0,[n,e].concat(a))}finally{r||(v(n),d(n))}});t&&(p.u=function(){r=!0;try{t()}finally{r=!1}})}finally{r=!1}})}null==u.m||u.m(e)}return p},b=function(n,e){var t=M(n),a=t[1],o=t[5],i=t[6],u=t[11],f=t[19],l=u(n,e),d=a.get(e);if(!d||d.l.size)return d;for(var v,c=!1,s=r(d.t);!(v=s()).done;){var y,h=v.value;if(null!=(y=a.get(h))&&y.d.has(e)){c=!0;break}}if(c)return d;d.u&&o.add(d.u),d=void 0,a.delete(e);for(var p,g=r(l.d.keys());!(p=g()).done;){var w=f(n,p.value);null==w||w.t.delete(e)}null==i.u||i.u(e)},N=function(n,e,t){var a=M(n),o=a[11],i=a[27],l=o(n,e),d="v"in l,v=l.v;if(u(t))for(var c,s=r(l.d.keys());!(c=s()).done;){f(e,t,o(n,c.value))}l.v=t,delete l.e,d&&Object.is(v,l.v)||(++l.n,u(v)&&i(n,v))},k=function(n,e){return i((0,M(n)[14])(n,e))},I=function(n,e){var r=M(n),t=r[3],a=r[12],o=r[13],i=r[16],u=t.size;try{for(var f=arguments.length,l=new Array(f>2?f-2:0),d=2;d<f;d++)l[d-2]=arguments[d];return i.apply(void 0,[n,e].concat(l))}finally{t.size!==u&&(o(n),a(n))}},T=function(n,e,r){var t=M(n),a=t[12],o=t[18],i=t[19],u=o(n,e).l;return u.add(r),a(n),function(){u.delete(r),i(n,e),a(n)}},R=function(n,e,r){var t=M(n)[25],a=t.get(e);if(!a){a=new Set,t.set(e,a);var o=function(){return t.delete(e)};e.then(o,o)}a.add(r)},L=function(n,e){var r=M(n)[25].get(e);null==r||r.forEach(function(n){return n()})},z=new WeakMap,M=function(n){return z.get(n)};n.INTERNAL_addPendingPromiseToDependency=f,n.INTERNAL_buildStoreRev2=function(){for(var n=arguments.length,e=new Array(n),r=0;r<n;r++)e[r]=arguments[r];var t={get:function(n){return(0,M(t)[21])(t,n)},set:function(n){for(var e=M(t)[22],r=arguments.length,a=new Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return e.apply(void 0,[t,n].concat(a))},sub:function(n,e){return(0,M(t)[23])(t,n,e)}},a=[new WeakMap,new WeakMap,new WeakMap,new Set,new Set,new Set,{},v,c,s,y,h,p,g,w,A,m,E,S,b,N,k,I,T,void 0,new WeakMap,R,L,[0]].map(function(n,r){return e[r]||n});return z.set(t,Object.freeze(a)),t},n.INTERNAL_getBuildingBlocksRev2=function(n){var e=M(n),r=e[24];return r?r(e):e},n.INTERNAL_getMountedOrPendingDependents=l,n.INTERNAL_hasInitialValue=t,n.INTERNAL_initializeStoreHooksRev2=function(n){var e,r,t,a,o,i,u,f;return(e=n).i||(e.i=d()),(r=n).r||(r.r=d()),(t=n).c||(t.c=d()),(a=n).m||(a.m=d()),(o=n).u||(o.u=d()),(i=n).f||(i.f=(u=new Set,(f=function(){return u.forEach(function(n){return n()})}).add=function(n){return u.add(n),function(){return u.delete(n)}},f)),n},n.INTERNAL_isActuallyWritableAtom=a,n.INTERNAL_isAtomStateInitialized=o,n.INTERNAL_isPromiseLike=u,n.INTERNAL_returnAtomValue=i});
|
package/vanilla/internals.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ type AtomState<Value = AnyValue> = {
|
|
|
27
27
|
readonly p: Set<AnyAtom>;
|
|
28
28
|
/** The epoch number of the atom. */
|
|
29
29
|
n: EpochNumber;
|
|
30
|
+
/** The store epoch number that last validated the atom. */
|
|
31
|
+
m?: EpochNumber;
|
|
30
32
|
/** Atom value */
|
|
31
33
|
v?: Value;
|
|
32
34
|
/** Atom error */
|
|
@@ -89,6 +91,7 @@ type EnhanceBuildingBlocks = (buildingBlocks: Readonly<BuildingBlocks>) => Reado
|
|
|
89
91
|
type AbortHandlersMap = WeakMapLike<PromiseLike<unknown>, Set<() => void>>;
|
|
90
92
|
type RegisterAbortHandler = <T>(store: Store, promise: PromiseLike<T>, abortHandler: () => void) => void;
|
|
91
93
|
type AbortPromise = <T>(store: Store, promise: PromiseLike<T>) => void;
|
|
94
|
+
type StoreEpochHolder = [n: EpochNumber];
|
|
92
95
|
type Store = {
|
|
93
96
|
get: <Value>(atom: Atom<Value>) => Value;
|
|
94
97
|
set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
@@ -122,7 +125,8 @@ type BuildingBlocks = [
|
|
|
122
125
|
enhanceBuildingBlocks: EnhanceBuildingBlocks | undefined,
|
|
123
126
|
abortHandlersMap: AbortHandlersMap,
|
|
124
127
|
registerAbortHandler: RegisterAbortHandler,
|
|
125
|
-
abortPromise: AbortPromise
|
|
128
|
+
abortPromise: AbortPromise,
|
|
129
|
+
storeEpochHolder: StoreEpochHolder
|
|
126
130
|
];
|
|
127
131
|
export type { AtomState as INTERNAL_AtomState, Mounted as INTERNAL_Mounted, AtomStateMap as INTERNAL_AtomStateMap, MountedMap as INTERNAL_MountedMap, InvalidatedAtoms as INTERNAL_InvalidatedAtoms, ChangedAtoms as INTERNAL_ChangedAtoms, Callbacks as INTERNAL_Callbacks, AtomRead as INTERNAL_AtomRead, AtomWrite as INTERNAL_AtomWrite, AtomOnInit as INTERNAL_AtomOnInit, AtomOnMount as INTERNAL_AtomOnMount, EnsureAtomState as INTERNAL_EnsureAtomState, FlushCallbacks as INTERNAL_FlushCallbacks, RecomputeInvalidatedAtoms as INTERNAL_RecomputeInvalidatedAtoms, ReadAtomState as INTERNAL_ReadAtomState, InvalidateDependents as INTERNAL_InvalidateDependents, WriteAtomState as INTERNAL_WriteAtomState, MountDependencies as INTERNAL_MountDependencies, MountAtom as INTERNAL_MountAtom, UnmountAtom as INTERNAL_UnmountAtom, Store as INTERNAL_Store, BuildingBlocks as INTERNAL_BuildingBlocks, StoreHooks as INTERNAL_StoreHooks, };
|
|
128
132
|
declare function hasInitialValue<T extends Atom<AnyValue>>(atom: T): atom is T & (T extends Atom<infer Value> ? {
|
package/vanilla/internals.js
CHANGED
|
@@ -282,22 +282,26 @@ var BUILDING_BLOCK_readAtomState = function BUILDING_BLOCK_readAtomState(store,
|
|
|
282
282
|
var mountDependencies = buildingBlocks[17];
|
|
283
283
|
var setAtomStateValueOrPromise = buildingBlocks[20];
|
|
284
284
|
var registerAbortHandler = buildingBlocks[26];
|
|
285
|
+
var storeEpochHolder = buildingBlocks[28];
|
|
285
286
|
var atomState = ensureAtomState(store, atom);
|
|
287
|
+
var storeEpochNumber = storeEpochHolder[0];
|
|
286
288
|
if (isAtomStateInitialized(atomState)) {
|
|
287
|
-
if (mountedMap.has(atom) && invalidatedAtoms.get(atom) !== atomState.n) {
|
|
289
|
+
if (mountedMap.has(atom) && invalidatedAtoms.get(atom) !== atomState.n || atomState.m === storeEpochNumber) {
|
|
290
|
+
atomState.m = storeEpochNumber;
|
|
288
291
|
return atomState;
|
|
289
292
|
}
|
|
290
293
|
var hasChangedDeps = false;
|
|
291
294
|
for (var _iterator5 = _createForOfIteratorHelperLoose(atomState.d), _step5; !(_step5 = _iterator5()).done;) {
|
|
292
295
|
var _step5$value = _step5.value,
|
|
293
296
|
a = _step5$value[0],
|
|
294
|
-
|
|
295
|
-
if (readAtomState(store, a).n !==
|
|
297
|
+
_n = _step5$value[1];
|
|
298
|
+
if (readAtomState(store, a).n !== _n) {
|
|
296
299
|
hasChangedDeps = true;
|
|
297
300
|
break;
|
|
298
301
|
}
|
|
299
302
|
}
|
|
300
303
|
if (!hasChangedDeps) {
|
|
304
|
+
atomState.m = storeEpochNumber;
|
|
301
305
|
return atomState;
|
|
302
306
|
}
|
|
303
307
|
}
|
|
@@ -414,11 +418,13 @@ var BUILDING_BLOCK_readAtomState = function BUILDING_BLOCK_readAtomState(store,
|
|
|
414
418
|
pruneDependencies();
|
|
415
419
|
}
|
|
416
420
|
storeHooks.r == null || storeHooks.r(atom);
|
|
421
|
+
atomState.m = storeEpochNumber;
|
|
417
422
|
return atomState;
|
|
418
423
|
} catch (error) {
|
|
419
424
|
delete atomState.v;
|
|
420
425
|
atomState.e = error;
|
|
421
426
|
++atomState.n;
|
|
427
|
+
atomState.m = storeEpochNumber;
|
|
422
428
|
return atomState;
|
|
423
429
|
} finally {
|
|
424
430
|
isSync = false;
|
|
@@ -461,6 +467,7 @@ var BUILDING_BLOCK_writeAtomState = function BUILDING_BLOCK_writeAtomState(store
|
|
|
461
467
|
var writeAtomState = buildingBlocks[16];
|
|
462
468
|
var mountDependencies = buildingBlocks[17];
|
|
463
469
|
var setAtomStateValueOrPromise = buildingBlocks[20];
|
|
470
|
+
var storeEpochHolder = buildingBlocks[28];
|
|
464
471
|
var isSync = true;
|
|
465
472
|
var getter = function getter(a) {
|
|
466
473
|
return returnAtomValue(readAtomState(store, a));
|
|
@@ -483,6 +490,7 @@ var BUILDING_BLOCK_writeAtomState = function BUILDING_BLOCK_writeAtomState(store
|
|
|
483
490
|
setAtomStateValueOrPromise(store, a, v);
|
|
484
491
|
mountDependencies(store, a);
|
|
485
492
|
if (prevEpochNumber !== aState.n) {
|
|
493
|
+
++storeEpochHolder[0];
|
|
486
494
|
changedAtoms.add(a);
|
|
487
495
|
invalidateDependents(store, a);
|
|
488
496
|
storeHooks.c == null || storeHooks.c(a);
|
|
@@ -522,13 +530,13 @@ var BUILDING_BLOCK_mountDependencies = function BUILDING_BLOCK_mountDependencies
|
|
|
522
530
|
for (var _iterator8 = _createForOfIteratorHelperLoose(atomState.d), _step8; !(_step8 = _iterator8()).done;) {
|
|
523
531
|
var _step8$value = _step8.value,
|
|
524
532
|
a = _step8$value[0],
|
|
525
|
-
|
|
533
|
+
_n2 = _step8$value[1];
|
|
526
534
|
if (!mounted.d.has(a)) {
|
|
527
535
|
var aState = ensureAtomState(store, a);
|
|
528
536
|
var aMounted = mountAtom(store, a);
|
|
529
537
|
aMounted.t.add(atom);
|
|
530
538
|
mounted.d.add(a);
|
|
531
|
-
if (
|
|
539
|
+
if (_n2 !== aState.n) {
|
|
532
540
|
changedAtoms.add(a);
|
|
533
541
|
invalidateDependents(store, a);
|
|
534
542
|
storeHooks.c == null || storeHooks.c(a);
|
|
@@ -766,7 +774,7 @@ function buildStore() {
|
|
|
766
774
|
return storeSub(store, atom, listener);
|
|
767
775
|
}
|
|
768
776
|
};
|
|
769
|
-
var buildingBlocks = [new WeakMap(), new WeakMap(), new WeakMap(), new Set(), new Set(), new Set(), {}, BUILDING_BLOCK_atomRead, BUILDING_BLOCK_atomWrite, BUILDING_BLOCK_atomOnInit, BUILDING_BLOCK_atomOnMount, BUILDING_BLOCK_ensureAtomState, BUILDING_BLOCK_flushCallbacks, BUILDING_BLOCK_recomputeInvalidatedAtoms, BUILDING_BLOCK_readAtomState, BUILDING_BLOCK_invalidateDependents, BUILDING_BLOCK_writeAtomState, BUILDING_BLOCK_mountDependencies, BUILDING_BLOCK_mountAtom, BUILDING_BLOCK_unmountAtom, BUILDING_BLOCK_setAtomStateValueOrPromise, BUILDING_BLOCK_storeGet, BUILDING_BLOCK_storeSet, BUILDING_BLOCK_storeSub, undefined, new WeakMap(), BUILDING_BLOCK_registerAbortHandler, BUILDING_BLOCK_abortPromise].map(function (fn, i) {
|
|
777
|
+
var buildingBlocks = [new WeakMap(), new WeakMap(), new WeakMap(), new Set(), new Set(), new Set(), {}, BUILDING_BLOCK_atomRead, BUILDING_BLOCK_atomWrite, BUILDING_BLOCK_atomOnInit, BUILDING_BLOCK_atomOnMount, BUILDING_BLOCK_ensureAtomState, BUILDING_BLOCK_flushCallbacks, BUILDING_BLOCK_recomputeInvalidatedAtoms, BUILDING_BLOCK_readAtomState, BUILDING_BLOCK_invalidateDependents, BUILDING_BLOCK_writeAtomState, BUILDING_BLOCK_mountDependencies, BUILDING_BLOCK_mountAtom, BUILDING_BLOCK_unmountAtom, BUILDING_BLOCK_setAtomStateValueOrPromise, BUILDING_BLOCK_storeGet, BUILDING_BLOCK_storeSet, BUILDING_BLOCK_storeSub, undefined, new WeakMap(), BUILDING_BLOCK_registerAbortHandler, BUILDING_BLOCK_abortPromise, [0]].map(function (fn, i) {
|
|
770
778
|
return buildArgs[i] || fn;
|
|
771
779
|
});
|
|
772
780
|
buildingBlockMap.set(store, Object.freeze(buildingBlocks));
|