New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

jotai

Package Overview
Dependencies
Maintainers
0
Versions
186
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jotai - npm Package Compare versions

Comparing version 2.10.4 to 2.11.0

7

package.json

@@ -6,3 +6,3 @@ {

"type": "commonjs",
"version": "2.10.4",
"version": "2.11.0",
"main": "./index.js",

@@ -97,8 +97,3 @@ "types": "./index.d.ts",

}
},
"pnpm": {
"patchedDependencies": {
"@testing-library/react@16.1.0": "patches/@testing-library__react@16.1.0.patch"
}
}
}

322

system/vanilla.development.js

@@ -93,3 +93,3 @@ System.register([], (function (exports) {

};
const addDependency = (pending, atom, atomState, a, aState) => {
const addDependency = (batch, atom, atomState, a, aState) => {
var _a;

@@ -104,15 +104,26 @@ if (a === atom) {

(_a = aState.m) == null ? void 0 : _a.t.add(atom);
if (pending) {
addPendingDependent(pending, a, atom);
if (batch) {
addBatchAtomDependent(batch, a, atom);
}
};
const createPending = () => [/* @__PURE__ */ new Map(), /* @__PURE__ */ new Map(), /* @__PURE__ */ new Set()];
const addPendingAtom = (pending, atom, atomState) => {
if (!pending[0].has(atom)) {
pending[0].set(atom, /* @__PURE__ */ new Set());
const createBatch = () => ({
D: /* @__PURE__ */ new Map(),
H: /* @__PURE__ */ new Set(),
M: /* @__PURE__ */ new Set(),
L: /* @__PURE__ */ new Set()
});
const addBatchFunc = (batch, priority, fn) => {
batch[priority].add(fn);
};
const registerBatchAtom = (batch, atom, atomState) => {
if (!batch.D.has(atom)) {
batch.D.set(atom, /* @__PURE__ */ new Set());
addBatchFunc(batch, "M", () => {
var _a;
(_a = atomState.m) == null ? void 0 : _a.l.forEach((listener) => addBatchFunc(batch, "M", listener));
});
}
pending[1].set(atom, atomState);
};
const addPendingDependent = (pending, atom, dependent) => {
const dependents = pending[0].get(atom);
const addBatchAtomDependent = (batch, atom, dependent) => {
const dependents = batch.D.get(atom);
if (dependents) {

@@ -122,7 +133,4 @@ dependents.add(dependent);

};
const getPendingDependents = (pending, atom) => pending[0].get(atom);
const addPendingFunction = (pending, fn) => {
pending[2].add(fn);
};
const flushPending = (pending) => {
const getBatchAtomDependents = (batch, atom) => batch.D.get(atom);
const flushBatch = (batch) => {
let error;

@@ -140,13 +148,10 @@ let hasError = false;

};
while (pending[1].size || pending[2].size) {
pending[0].clear();
const atomStates = new Set(pending[1].values());
pending[1].clear();
const functions = new Set(pending[2]);
pending[2].clear();
atomStates.forEach((atomState) => {
var _a;
return (_a = atomState.m) == null ? void 0 : _a.l.forEach(call);
});
functions.forEach(call);
while (batch.H.size || batch.M.size || batch.L.size) {
batch.D.clear();
batch.H.forEach(call);
batch.H.clear();
batch.M.forEach(call);
batch.M.clear();
batch.L.forEach(call);
batch.L.clear();
}

@@ -158,6 +163,2 @@ if (hasError) {

const buildStore = (...[getAtomState, atomRead, atomWrite, atomOnMount]) => {
let debugMountedAtoms;
{
debugMountedAtoms = /* @__PURE__ */ new Set();
}
const setAtomStateValueOrPromise = (atom, atomState, valueOrPromise) => {

@@ -173,7 +174,7 @@ const hasPrevValue = "v" in atomState;

atomState.v = valueOrPromise;
delete atomState.e;
} else {
atomState.v = valueOrPromise;
delete atomState.e;
}
delete atomState.e;
delete atomState.x;
if (!hasPrevValue || !Object.is(prevValue, atomState.v)) {

@@ -186,7 +187,7 @@ ++atomState.n;

};
const readAtomState = (pending, atom, dirtyAtoms) => {
const readAtomState = (batch, atom) => {
var _a;
const atomState = getAtomState(atom);
if (isAtomStateInitialized(atomState)) {
if (atomState.m && !(dirtyAtoms == null ? void 0 : dirtyAtoms.has(atom))) {
if (atomState.m && !atomState.x) {
return atomState;

@@ -198,3 +199,3 @@ }

// check if the atom epoch number is unchanged
readAtomState(pending, a, dirtyAtoms).n === n
readAtomState(batch, a).n === n
)

@@ -219,3 +220,3 @@ )) {

}
const aState = readAtomState(pending, a, dirtyAtoms);
const aState = readAtomState(batch, a);
try {

@@ -225,8 +226,8 @@ return returnAtomValue(aState);

if (isSync) {
addDependency(pending, atom, atomState, a, aState);
addDependency(batch, atom, atomState, a, aState);
} else {
const pending2 = createPending();
addDependency(pending2, atom, atomState, a, aState);
mountDependencies(pending2, atom, atomState);
flushPending(pending2);
const batch2 = createBatch();
addDependency(batch2, atom, atomState, a, aState);
mountDependencies(batch2, atom, atomState);
flushBatch(batch2);
}

@@ -268,5 +269,5 @@ }

if (atomState.m) {
const pending2 = createPending();
mountDependencies(pending2, atom, atomState);
flushPending(pending2);
const batch2 = createBatch();
mountDependencies(batch2, atom, atomState);
flushBatch(batch2);
}

@@ -280,2 +281,3 @@ };

atomState.e = error;
delete atomState.x;
++atomState.n;

@@ -288,3 +290,3 @@ return atomState;

const readAtom = (atom) => returnAtomValue(readAtomState(void 0, atom));
const getMountedOrPendingDependents = (pending, atom, atomState) => {
const getMountedOrBatchDependents = (batch, atom, atomState) => {
var _a, _b;

@@ -304,3 +306,3 @@ const dependents = /* @__PURE__ */ new Map();

}
(_b = getPendingDependents(pending, atom)) == null ? void 0 : _b.forEach((dependent) => {
(_b = getBatchAtomDependents(batch, atom)) == null ? void 0 : _b.forEach((dependent) => {
dependents.set(dependent, getAtomState(dependent));

@@ -310,7 +312,7 @@ });

};
function getSortedDependents(pending, rootAtom, rootAtomState) {
const sorted = [];
const recomputeDependents = (batch, atom, atomState) => {
const topSortedReversed = [];
const visiting = /* @__PURE__ */ new Set();
const visited = /* @__PURE__ */ new Set();
const stack = [[rootAtom, rootAtomState]];
const stack = [[atom, atomState]];
while (stack.length > 0) {

@@ -323,4 +325,5 @@ const [a, aState] = stack[stack.length - 1];

if (visiting.has(a)) {
sorted.push([a, aState, aState.n]);
topSortedReversed.push([a, aState, aState.n]);
visited.add(a);
aState.x = true;
stack.pop();

@@ -330,3 +333,3 @@ continue;

visiting.add(a);
for (const [d, s] of getMountedOrPendingDependents(pending, a, aState)) {
for (const [d, s] of getMountedOrBatchDependents(batch, a, aState)) {
if (a !== d && !visiting.has(d)) {

@@ -337,34 +340,28 @@ stack.push([d, s]);

}
return [sorted, visited];
}
const recomputeDependents = (pending, atom, atomState) => {
const [topsortedAtoms, markedAtoms] = getSortedDependents(
pending,
atom,
atomState
);
const changedAtoms = /* @__PURE__ */ new Set([atom]);
for (let i = topsortedAtoms.length - 1; i >= 0; --i) {
const [a, aState, prevEpochNumber] = topsortedAtoms[i];
let hasChangedDeps = false;
for (const dep of aState.d.keys()) {
if (dep !== a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
addBatchFunc(batch, "H", () => {
const changedAtoms = /* @__PURE__ */ new Set([atom]);
for (let i = topSortedReversed.length - 1; i >= 0; --i) {
const [a, aState, prevEpochNumber] = topSortedReversed[i];
let hasChangedDeps = false;
for (const dep of aState.d.keys()) {
if (dep !== a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
}
}
}
if (hasChangedDeps) {
readAtomState(pending, a, markedAtoms);
mountDependencies(pending, a, aState);
if (prevEpochNumber !== aState.n) {
addPendingAtom(pending, a, aState);
changedAtoms.add(a);
if (hasChangedDeps) {
readAtomState(batch, a);
mountDependencies(batch, a, aState);
if (prevEpochNumber !== aState.n) {
registerBatchAtom(batch, a, aState);
changedAtoms.add(a);
}
}
delete aState.x;
}
markedAtoms.delete(a);
}
});
};
const writeAtomState = (pending, atom, ...args) => {
const writeAtomState = (batch, atom, ...args) => {
let isSync = true;
const getter = (a) => returnAtomValue(readAtomState(pending, a));
const getter = (a) => returnAtomValue(readAtomState(batch, a));
const setter = (a, ...args2) => {

@@ -380,14 +377,14 @@ const aState = getAtomState(a);

setAtomStateValueOrPromise(a, aState, v);
mountDependencies(pending, a, aState);
mountDependencies(batch, a, aState);
if (prevEpochNumber !== aState.n) {
addPendingAtom(pending, a, aState);
recomputeDependents(pending, a, aState);
registerBatchAtom(batch, a, aState);
recomputeDependents(batch, a, aState);
}
return void 0;
} else {
return writeAtomState(pending, a, ...args2);
return writeAtomState(batch, a, ...args2);
}
} finally {
if (!isSync) {
flushPending(pending);
flushBatch(batch);
}

@@ -403,14 +400,14 @@ }

const writeAtom = (atom, ...args) => {
const pending = createPending();
const batch = createBatch();
try {
return writeAtomState(pending, atom, ...args);
return writeAtomState(batch, atom, ...args);
} finally {
flushPending(pending);
flushBatch(batch);
}
};
const mountDependencies = (pending, atom, atomState) => {
const mountDependencies = (batch, atom, atomState) => {
if (atomState.m && !isPendingPromise(atomState.v)) {
for (const a of atomState.d.keys()) {
if (!atomState.m.d.has(a)) {
const aMounted = mountAtom(pending, a, getAtomState(a));
const aMounted = mountAtom(batch, a, getAtomState(a));
aMounted.t.add(atom);

@@ -423,3 +420,3 @@ atomState.m.d.add(a);

atomState.m.d.delete(a);
const aMounted = unmountAtom(pending, a, getAtomState(a));
const aMounted = unmountAtom(batch, a, getAtomState(a));
aMounted == null ? void 0 : aMounted.t.delete(atom);

@@ -430,7 +427,7 @@ }

};
const mountAtom = (pending, atom, atomState) => {
const mountAtom = (batch, atom, atomState) => {
if (!atomState.m) {
readAtomState(pending, atom);
readAtomState(batch, atom);
for (const a of atomState.d.keys()) {
const aMounted = mountAtom(pending, a, getAtomState(a));
const aMounted = mountAtom(batch, a, getAtomState(a));
aMounted.t.add(atom);

@@ -443,16 +440,13 @@ }

};
{
debugMountedAtoms.add(atom);
}
if (isActuallyWritableAtom(atom)) {
const mounted = atomState.m;
let setAtom;
const createInvocationContext = (pending2, fn) => {
const createInvocationContext = (batch2, fn) => {
let isSync = true;
setAtom = (...args) => {
try {
return writeAtomState(pending2, atom, ...args);
return writeAtomState(batch2, atom, ...args);
} finally {
if (!isSync) {
flushPending(pending2);
flushBatch(batch2);
}

@@ -467,9 +461,9 @@ }

};
addPendingFunction(pending, () => {
addBatchFunc(batch, "L", () => {
const onUnmount = createInvocationContext(
pending,
batch,
() => atomOnMount(atom, (...args) => setAtom(...args))
);
if (onUnmount) {
mounted.u = (pending2) => createInvocationContext(pending2, onUnmount);
mounted.u = (batch2) => createInvocationContext(batch2, onUnmount);
}

@@ -481,3 +475,3 @@ });

};
const unmountAtom = (pending, atom, atomState) => {
const unmountAtom = (batch, atom, atomState) => {
if (atomState.m && !atomState.m.l.size && !Array.from(atomState.m.t).some((a) => {

@@ -489,10 +483,7 @@ var _a;

if (onUnmount) {
addPendingFunction(pending, () => onUnmount(pending));
addBatchFunc(batch, "L", () => onUnmount(batch));
}
delete atomState.m;
{
debugMountedAtoms.delete(atom);
}
for (const a of atomState.d.keys()) {
const aMounted = unmountAtom(pending, a, getAtomState(a));
const aMounted = unmountAtom(batch, a, getAtomState(a));
aMounted == null ? void 0 : aMounted.t.delete(atom);

@@ -505,13 +496,13 @@ }

const subscribeAtom = (atom, listener) => {
const pending = createPending();
const batch = createBatch();
const atomState = getAtomState(atom);
const mounted = mountAtom(pending, atom, atomState);
const mounted = mountAtom(batch, atom, atomState);
const listeners = mounted.l;
listeners.add(listener);
flushPending(pending);
flushBatch(batch);
return () => {
listeners.delete(listener);
const pending2 = createPending();
unmountAtom(pending2, atom, atomState);
flushPending(pending2);
const batch2 = createBatch();
unmountAtom(batch2, atom, atomState);
flushBatch(batch2);
};

@@ -526,35 +517,79 @@ };

};
{
const devStore = {
// store dev methods (these are tentative and subject to change without notice)
dev4_get_internal_weak_map: () => ({
get: (atom) => {
const atomState = getAtomState(atom);
if (atomState.n === 0) {
return void 0;
return store;
};
const deriveDevStoreRev4 = (store) => {
const proxyAtomStateMap = /* @__PURE__ */ new WeakMap();
const debugMountedAtoms = /* @__PURE__ */ new Set();
let savedGetAtomState;
let inRestoreAtom = 0;
const derivedStore = store.unstable_derive(
(getAtomState, atomRead, atomWrite, atomOnMount) => {
savedGetAtomState = getAtomState;
return [
(atom) => {
let proxyAtomState = proxyAtomStateMap.get(atom);
if (!proxyAtomState) {
const atomState = getAtomState(atom);
proxyAtomState = new Proxy(atomState, {
set(target, prop, value) {
if (prop === "m") {
debugMountedAtoms.add(atom);
}
return Reflect.set(target, prop, value);
},
deleteProperty(target, prop) {
if (prop === "m") {
debugMountedAtoms.delete(atom);
}
return Reflect.deleteProperty(target, prop);
}
});
proxyAtomStateMap.set(atom, proxyAtomState);
}
return atomState;
return proxyAtomState;
},
atomRead,
(atom, getter, setter, ...args) => {
if (inRestoreAtom) {
return setter(atom, ...args);
}
return atomWrite(atom, getter, setter, ...args);
},
atomOnMount
];
}
);
const savedStoreSet = derivedStore.set;
const devStore = {
// store dev methods (these are tentative and subject to change without notice)
dev4_get_internal_weak_map: () => ({
get: (atom) => {
const atomState = savedGetAtomState(atom);
if (atomState.n === 0) {
return void 0;
}
}),
dev4_get_mounted_atoms: () => debugMountedAtoms,
dev4_restore_atoms: (values) => {
const pending = createPending();
for (const [atom, value] of values) {
if (hasInitialValue(atom)) {
const atomState = getAtomState(atom);
const prevEpochNumber = atomState.n;
setAtomStateValueOrPromise(atom, atomState, value);
mountDependencies(pending, atom, atomState);
if (prevEpochNumber !== atomState.n) {
addPendingAtom(pending, atom, atomState);
recomputeDependents(pending, atom, atomState);
return atomState;
}
}),
dev4_get_mounted_atoms: () => debugMountedAtoms,
dev4_restore_atoms: (values) => {
const restoreAtom = {
read: () => null,
write: (_get, set) => {
++inRestoreAtom;
try {
for (const [atom, value] of values) {
if (hasInitialValue(atom)) {
set(atom, value);
}
}
} finally {
--inRestoreAtom;
}
}
flushPending(pending);
}
};
Object.assign(store, devStore);
}
return store;
};
savedStoreSet(restoreAtom);
}
};
return Object.assign(derivedStore, devStore);
};

@@ -574,3 +609,3 @@ const createStore = exports("createStore", () => {

};
return buildStore(
const store = buildStore(
getAtomState,

@@ -584,2 +619,5 @@ (atom, ...params) => atom.read(...params),

);
{
return deriveDevStoreRev4(store);
}
});

@@ -586,0 +624,0 @@ let defaultStore;

@@ -1,1 +0,1 @@

System.register([],function(z){"use strict";return{execute:function(){z("atom",R);let P=0;function R(t,r){const o=`atom${++P}`,d={toString(){return o}};return typeof t=="function"?d.read=t:(d.init=t,d.read=T,d.write=U),r&&(d.write=r),d}function T(t){return t(this)}function U(t,r,o){return r(this,typeof o=="function"?o(t(this)):o)}const q=(t,r)=>t.unstable_is?t.unstable_is(r):r===t,B=t=>"init"in t,F=t=>!!t.write,b=new WeakMap,A=t=>{var r;return C(t)&&!((r=b.get(t))!=null&&r[1])},V=(t,r)=>{const o=b.get(t);o&&(o[1]=!0,o[0].forEach(d=>d(r)))},$=t=>{if(b.has(t))return;const r=[new Set,!1];b.set(t,r);const o=()=>{r[1]=!0};t.then(o,o),t.onCancel=d=>{r[0].add(d)}},C=t=>typeof(t==null?void 0:t.then)=="function",G=t=>"v"in t||"e"in t,k=t=>{if("e"in t)throw t.e;return t.v},H=(t,r,o)=>{o.p.has(t)||(o.p.add(t),r.then(()=>{o.p.delete(t)},()=>{o.p.delete(t)}))},I=(t,r,o,d,v)=>{var m;o.d.set(d,v.n),A(o.v)&&H(r,o.v,v),(m=v.m)==null||m.t.add(r),t&&x(t,d,r)},g=()=>[new Map,new Map,new Set],J=(t,r,o)=>{t[0].has(r)||t[0].set(r,new Set),t[1].set(r,o)},x=(t,r,o)=>{const d=t[0].get(r);d&&d.add(o)},Q=(t,r)=>t[0].get(r),K=(t,r)=>{t[2].add(r)},p=t=>{let r,o=!1;const d=v=>{try{v()}catch(m){o||(r=m,o=!0)}};for(;t[1].size||t[2].size;){t[0].clear();const v=new Set(t[1].values());t[1].clear();const m=new Set(t[2]);t[2].clear(),v.forEach(D=>{var E;return(E=D.m)==null?void 0:E.l.forEach(d)}),m.forEach(d)}if(o)throw r},L=(...[t,r,o,d])=>{const v=(c,e,n)=>{const u="v"in e,l=e.v,i=A(e.v)?e.v:null;if(C(n)){$(n);for(const s of e.d.keys())H(c,n,t(s));e.v=n,delete e.e}else e.v=n,delete e.e;(!u||!Object.is(l,e.v))&&(++e.n,i&&V(i,n))},m=(c,e,n)=>{var u;const l=t(e);if(G(l)&&(l.m&&!(n!=null&&n.has(e))||Array.from(l.d).every(([f,y])=>m(c,f,n).n===y)))return l;l.d.clear();let i=!0;const s=f=>{if(q(e,f)){const S=t(f);if(!G(S))if(B(f))v(f,S,f.init);else throw new Error("no atom init");return k(S)}const y=m(c,f,n);try{return k(y)}finally{if(i)I(c,e,l,f,y);else{const S=g();I(S,e,l,f,y),M(S,e,l),p(S)}}};let a,h;const w={get signal(){return a||(a=new AbortController),a.signal},get setSelf(){return!h&&F(e)&&(h=(...f)=>{if(!i)return N(e,...f)}),h}};try{const f=r(e,s,w);if(v(e,l,f),C(f)){(u=f.onCancel)==null||u.call(f,()=>a==null?void 0:a.abort());const y=()=>{if(l.m){const S=g();M(S,e,l),p(S)}};f.then(y,y)}return l}catch(f){return delete l.v,l.e=f,++l.n,l}finally{i=!1}},D=c=>k(m(void 0,c)),E=(c,e,n)=>{var u,l;const i=new Map;for(const s of((u=n.m)==null?void 0:u.t)||[]){const a=t(s);a.m&&i.set(s,a)}for(const s of n.p)i.set(s,t(s));return(l=Q(c,e))==null||l.forEach(s=>{i.set(s,t(s))}),i};function Y(c,e,n){const u=[],l=new Set,i=new Set,s=[[e,n]];for(;s.length>0;){const[a,h]=s[s.length-1];if(i.has(a)){s.pop();continue}if(l.has(a)){u.push([a,h,h.n]),i.add(a),s.pop();continue}l.add(a);for(const[w,f]of E(c,a,h))a!==w&&!l.has(w)&&s.push([w,f])}return[u,i]}const Z=(c,e,n)=>{const[u,l]=Y(c,e,n),i=new Set([e]);for(let s=u.length-1;s>=0;--s){const[a,h,w]=u[s];let f=!1;for(const y of h.d.keys())if(y!==a&&i.has(y)){f=!0;break}f&&(m(c,a,l),M(c,a,h),w!==h.n&&(J(c,a,h),i.add(a))),l.delete(a)}},W=(c,e,...n)=>{let u=!0;const l=s=>k(m(c,s)),i=(s,...a)=>{const h=t(s);try{if(q(e,s)){if(!B(s))throw new Error("atom not writable");const w=h.n,f=a[0];v(s,h,f),M(c,s,h),w!==h.n&&(J(c,s,h),Z(c,s,h));return}else return W(c,s,...a)}finally{u||p(c)}};try{return o(e,l,i,...n)}finally{u=!1}},N=(c,...e)=>{const n=g();try{return W(n,c,...e)}finally{p(n)}},M=(c,e,n)=>{if(n.m&&!A(n.v)){for(const u of n.d.keys())n.m.d.has(u)||(j(c,u,t(u)).t.add(e),n.m.d.add(u));for(const u of n.m.d||[])if(!n.d.has(u)){n.m.d.delete(u);const l=O(c,u,t(u));l==null||l.t.delete(e)}}},j=(c,e,n)=>{if(!n.m){m(c,e);for(const u of n.d.keys())j(c,u,t(u)).t.add(e);if(n.m={l:new Set,d:new Set(n.d.keys()),t:new Set},F(e)){const u=n.m;let l;const i=(s,a)=>{let h=!0;l=(...w)=>{try{return W(s,e,...w)}finally{h||p(s)}};try{return a()}finally{h=!1}};K(c,()=>{const s=i(c,()=>d(e,(...a)=>l(...a)));s&&(u.u=a=>i(a,s))})}}return n.m},O=(c,e,n)=>{if(n.m&&!n.m.l.size&&!Array.from(n.m.t).some(u=>{var l;return(l=t(u).m)==null?void 0:l.d.has(e)})){const u=n.m.u;u&&K(c,()=>u(c)),delete n.m;for(const l of n.d.keys()){const i=O(c,l,t(l));i==null||i.t.delete(e)}return}return n.m};return{get:D,set:N,sub:(c,e)=>{const n=g(),u=t(c),l=j(n,c,u).l;return l.add(e),p(n),()=>{l.delete(e);const i=g();O(i,c,u),p(i)}},unstable_derive:c=>L(...c(t,r,o,d))}},X=z("createStore",()=>{const t=new WeakMap;return L(r=>{let o=t.get(r);return o||(o={d:new Map,p:new Set,n:0},t.set(r,o)),o},(r,...o)=>r.read(...o),(r,...o)=>r.write(...o),(r,...o)=>{var d;return(d=r.onMount)==null?void 0:d.call(r,...o)})});let _;const tt=z("getDefaultStore",()=>(_||(_=X()),_))}}});
System.register([],function(D){"use strict";return{execute:function(){D("atom",N);let K=0;function N(t,n){const o=`atom${++K}`,i={toString(){return o}};return typeof t=="function"?i.read=t:(i.init=t,i.read=P,i.write=Q),n&&(i.write=n),i}function P(t){return t(this)}function Q(t,n,o){return n(this,typeof o=="function"?o(t(this)):o)}const _=(t,n)=>t.unstable_is?t.unstable_is(n):n===t,A=t=>"init"in t,W=t=>!!t.write,M=new WeakMap,E=t=>{var n;return L(t)&&!((n=M.get(t))!=null&&n[1])},T=(t,n)=>{const o=M.get(t);o&&(o[1]=!0,o[0].forEach(i=>i(n)))},U=t=>{if(M.has(t))return;const n=[new Set,!1];M.set(t,n);const o=()=>{n[1]=!0};t.then(o,o),t.onCancel=i=>{n[0].add(i)}},L=t=>typeof(t==null?void 0:t.then)=="function",j=t=>"v"in t||"e"in t,b=t=>{if("e"in t)throw t.e;return t.v},O=(t,n,o)=>{o.p.has(t)||(o.p.add(t),n.then(()=>{o.p.delete(t)},()=>{o.p.delete(t)}))},q=(t,n,o,i,w)=>{var v;o.d.set(i,w.n),E(o.v)&&O(n,o.v,w),(v=w.m)==null||v.t.add(n),t&&V(t,i,n)},p=()=>({D:new Map,H:new Set,M:new Set,L:new Set}),g=(t,n,o)=>{t[n].add(o)},B=(t,n,o)=>{t.D.has(n)||(t.D.set(n,new Set),g(t,"M",()=>{var i;(i=o.m)==null||i.l.forEach(w=>g(t,"M",w))}))},V=(t,n,o)=>{const i=t.D.get(n);i&&i.add(o)},X=(t,n)=>t.D.get(n),S=t=>{let n,o=!1;const i=w=>{try{w()}catch(v){o||(n=v,o=!0)}};for(;t.H.size||t.M.size||t.L.size;)t.D.clear(),t.H.forEach(i),t.H.clear(),t.M.forEach(i),t.M.clear(),t.L.forEach(i),t.L.clear();if(o)throw n},F=(...[t,n,o,i])=>{const w=(l,r,s)=>{const e="v"in r,f=r.v,u=E(r.v)?r.v:null;if(L(s)){U(s);for(const c of r.d.keys())O(l,s,t(c));r.v=s}else r.v=s;delete r.e,delete r.x,(!e||!Object.is(f,r.v))&&(++r.n,u&&T(u,s))},v=(l,r)=>{var s;const e=t(r);if(j(e)&&(e.m&&!e.x||Array.from(e.d).every(([a,h])=>v(l,a).n===h)))return e;e.d.clear();let f=!0;const u=a=>{if(_(r,a)){const y=t(a);if(!j(y))if(A(a))w(a,y,a.init);else throw new Error("no atom init");return b(y)}const h=v(l,a);try{return b(h)}finally{if(f)q(l,r,e,a,h);else{const y=p();q(y,r,e,a,h),k(y,r,e),S(y)}}};let c,d;const m={get signal(){return c||(c=new AbortController),c.signal},get setSelf(){return!d&&W(r)&&(d=(...a)=>{if(!f)return G(r,...a)}),d}};try{const a=n(r,u,m);if(w(r,e,a),L(a)){(s=a.onCancel)==null||s.call(a,()=>c==null?void 0:c.abort());const h=()=>{if(e.m){const y=p();k(y,r,e),S(y)}};a.then(h,h)}return e}catch(a){return delete e.v,e.e=a,delete e.x,++e.n,e}finally{f=!1}},R=l=>b(v(void 0,l)),Y=(l,r,s)=>{var e,f;const u=new Map;for(const c of((e=s.m)==null?void 0:e.t)||[]){const d=t(c);d.m&&u.set(c,d)}for(const c of s.p)u.set(c,t(c));return(f=X(l,r))==null||f.forEach(c=>{u.set(c,t(c))}),u},Z=(l,r,s)=>{const e=[],f=new Set,u=new Set,c=[[r,s]];for(;c.length>0;){const[d,m]=c[c.length-1];if(u.has(d)){c.pop();continue}if(f.has(d)){e.push([d,m,m.n]),u.add(d),m.x=!0,c.pop();continue}f.add(d);for(const[a,h]of Y(l,d,m))d!==a&&!f.has(a)&&c.push([a,h])}g(l,"H",()=>{const d=new Set([r]);for(let m=e.length-1;m>=0;--m){const[a,h,y]=e[m];let I=!1;for(const J of h.d.keys())if(J!==a&&d.has(J)){I=!0;break}I&&(v(l,a),k(l,a,h),y!==h.n&&(B(l,a,h),d.add(a))),delete h.x}})},x=(l,r,...s)=>{let e=!0;const f=c=>b(v(l,c)),u=(c,...d)=>{const m=t(c);try{if(_(r,c)){if(!A(c))throw new Error("atom not writable");const a=m.n,h=d[0];w(c,m,h),k(l,c,m),a!==m.n&&(B(l,c,m),Z(l,c,m));return}else return x(l,c,...d)}finally{e||S(l)}};try{return o(r,f,u,...s)}finally{e=!1}},G=(l,...r)=>{const s=p();try{return x(s,l,...r)}finally{S(s)}},k=(l,r,s)=>{if(s.m&&!E(s.v)){for(const e of s.d.keys())s.m.d.has(e)||(z(l,e,t(e)).t.add(r),s.m.d.add(e));for(const e of s.m.d||[])if(!s.d.has(e)){s.m.d.delete(e);const f=C(l,e,t(e));f==null||f.t.delete(r)}}},z=(l,r,s)=>{if(!s.m){v(l,r);for(const e of s.d.keys())z(l,e,t(e)).t.add(r);if(s.m={l:new Set,d:new Set(s.d.keys()),t:new Set},W(r)){const e=s.m;let f;const u=(c,d)=>{let m=!0;f=(...a)=>{try{return x(c,r,...a)}finally{m||S(c)}};try{return d()}finally{m=!1}};g(l,"L",()=>{const c=u(l,()=>i(r,(...d)=>f(...d)));c&&(e.u=d=>u(d,c))})}}return s.m},C=(l,r,s)=>{if(s.m&&!s.m.l.size&&!Array.from(s.m.t).some(e=>{var f;return(f=t(e).m)==null?void 0:f.d.has(r)})){const e=s.m.u;e&&g(l,"L",()=>e(l)),delete s.m;for(const f of s.d.keys()){const u=C(l,f,t(f));u==null||u.t.delete(r)}return}return s.m};return{get:R,set:G,sub:(l,r)=>{const s=p(),e=t(l),f=z(s,l,e).l;return f.add(r),S(s),()=>{f.delete(r);const u=p();C(u,l,e),S(u)}},unstable_derive:l=>F(...l(t,n,o,i))}},$=D("createStore",()=>{const t=new WeakMap;return F(n=>{let o=t.get(n);return o||(o={d:new Map,p:new Set,n:0},t.set(n,o)),o},(n,...o)=>n.read(...o),(n,...o)=>n.write(...o),(n,...o)=>{var i;return(i=n.onMount)==null?void 0:i.call(n,...o)})});let H;const tt=D("getDefaultStore",()=>(H||(H=$()),H))}}});

@@ -21,3 +21,3 @@ import type { Atom, WritableAtom } from './atom';

/** Function to run when the atom is unmounted. */
u?: (pending: Pending) => void;
u?: (batch: Batch) => void;
};

@@ -48,8 +48,15 @@ /**

e?: AnyError;
/** Indicates that the atom value has been changed */
x?: true;
};
type Pending = readonly [
/*dependents*/ Map<AnyAtom, Set<AnyAtom>>,
/*atomStates*/ Map<AnyAtom, AtomState>,
/*functions*/ Set<() => void>
];
type Batch = Readonly<{
/** Atom dependents map */
D: Map<AnyAtom, Set<AnyAtom>>;
/** High priority functions */
H: Set<() => void>;
/** Medium priority functions */
M: Set<() => void>;
/** Low priority functions */
L: Set<() => void>;
}>;
type StoreArgs = readonly [

@@ -71,3 +78,3 @@ /*getAtomState*/ <Value>(atom: Atom<Value>) => AtomState<Value>,

};
type PrdStore = {
type Store = {
get: <Value>(atom: Atom<Value>) => Value;

@@ -78,8 +85,8 @@ set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;

};
type Store = PrdStore | (PrdStore & DevStoreRev4);
export type INTERNAL_DevStoreRev4 = DevStoreRev4;
export type INTERNAL_PrdStore = PrdStore;
export declare const createStore: () => Store;
export declare const getDefaultStore: () => Store;
export type INTERNAL_PrdStore = Store;
type PrdOrDevStore = Store | (Store & DevStoreRev4);
export declare const createStore: () => PrdOrDevStore;
export declare const getDefaultStore: () => PrdOrDevStore;
export {};
declare type Awaited<T> = T extends Promise<infer V> ? V : T;

@@ -21,3 +21,3 @@ import type { Atom, WritableAtom } from './atom';

/** Function to run when the atom is unmounted. */
u?: (pending: Pending) => void;
u?: (batch: Batch) => void;
};

@@ -48,8 +48,15 @@ /**

e?: AnyError;
/** Indicates that the atom value has been changed */
x?: true;
};
type Pending = readonly [
/*dependents*/ Map<AnyAtom, Set<AnyAtom>>,
/*atomStates*/ Map<AnyAtom, AtomState>,
/*functions*/ Set<() => void>
];
type Batch = Readonly<{
/** Atom dependents map */
D: Map<AnyAtom, Set<AnyAtom>>;
/** High priority functions */
H: Set<() => void>;
/** Medium priority functions */
M: Set<() => void>;
/** Low priority functions */
L: Set<() => void>;
}>;
type StoreArgs = readonly [

@@ -71,3 +78,3 @@ /*getAtomState*/ <Value>(atom: Atom<Value>) => AtomState<Value>,

};
type PrdStore = {
type Store = {
get: <Value>(atom: Atom<Value>) => Value;

@@ -78,8 +85,8 @@ set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;

};
type Store = PrdStore | (PrdStore & DevStoreRev4);
export type INTERNAL_DevStoreRev4 = DevStoreRev4;
export type INTERNAL_PrdStore = PrdStore;
export declare const createStore: () => Store;
export declare const getDefaultStore: () => Store;
export type INTERNAL_PrdStore = Store;
type PrdOrDevStore = Store | (Store & DevStoreRev4);
export declare const createStore: () => PrdOrDevStore;
export declare const getDefaultStore: () => PrdOrDevStore;
export {};
declare type Awaited<T> = T extends Promise<infer V> ? V : T;

@@ -128,3 +128,3 @@ (function (global, factory) {

};
var addDependency = function addDependency(pending, atom, atomState, a, aState) {
var addDependency = function addDependency(batch, atom, atomState, a, aState) {
var _aState$m;

@@ -139,17 +139,30 @@ if (a === atom) {

(_aState$m = aState.m) == null || _aState$m.t.add(atom);
if (pending) {
addPendingDependent(pending, a, atom);
if (batch) {
addBatchAtomDependent(batch, a, atom);
}
};
var createPending = function createPending() {
return [new Map(), new Map(), new Set()];
var createBatch = function createBatch() {
return {
D: new Map(),
H: new Set(),
M: new Set(),
L: new Set()
};
};
var addPendingAtom = function addPendingAtom(pending, atom, atomState) {
if (!pending[0].has(atom)) {
pending[0].set(atom, new Set());
var addBatchFunc = function addBatchFunc(batch, priority, fn) {
batch[priority].add(fn);
};
var registerBatchAtom = function registerBatchAtom(batch, atom, atomState) {
if (!batch.D.has(atom)) {
batch.D.set(atom, new Set());
addBatchFunc(batch, 'M', function () {
var _atomState$m;
(_atomState$m = atomState.m) == null || _atomState$m.l.forEach(function (listener) {
return addBatchFunc(batch, 'M', listener);
});
});
}
pending[1].set(atom, atomState);
};
var addPendingDependent = function addPendingDependent(pending, atom, dependent) {
var dependents = pending[0].get(atom);
var addBatchAtomDependent = function addBatchAtomDependent(batch, atom, dependent) {
var dependents = batch.D.get(atom);
if (dependents) {

@@ -159,9 +172,6 @@ dependents.add(dependent);

};
var getPendingDependents = function getPendingDependents(pending, atom) {
return pending[0].get(atom);
var getBatchAtomDependents = function getBatchAtomDependents(batch, atom) {
return batch.D.get(atom);
};
var addPendingFunction = function addPendingFunction(pending, fn) {
pending[2].add(fn);
};
var flushPending = function flushPending(pending) {
var flushBatch = function flushBatch(batch) {
var error;

@@ -179,13 +189,10 @@ var hasError = false;

};
while (pending[1].size || pending[2].size) {
pending[0].clear();
var _atomStates = new Set(pending[1].values());
pending[1].clear();
var _functions = new Set(pending[2]);
pending[2].clear();
_atomStates.forEach(function (atomState) {
var _atomState$m;
return (_atomState$m = atomState.m) == null ? void 0 : _atomState$m.l.forEach(call);
});
_functions.forEach(call);
while (batch.H.size || batch.M.size || batch.L.size) {
batch.D.clear();
batch.H.forEach(call);
batch.H.clear();
batch.M.forEach(call);
batch.M.clear();
batch.L.forEach(call);
batch.L.clear();
}

@@ -204,6 +211,2 @@ if (hasError) {

atomOnMount = _ref[3];
var debugMountedAtoms;
{
debugMountedAtoms = new Set();
}
var setAtomStateValueOrPromise = function setAtomStateValueOrPromise(atom, atomState, valueOrPromise) {

@@ -220,7 +223,7 @@ var hasPrevValue = 'v' in atomState;

atomState.v = valueOrPromise;
delete atomState.e;
} else {
atomState.v = valueOrPromise;
delete atomState.e;
}
delete atomState.e;
delete atomState.x;
if (!hasPrevValue || !Object.is(prevValue, atomState.v)) {

@@ -233,6 +236,6 @@ ++atomState.n;

};
var _readAtomState = function readAtomState(pending, atom, dirtyAtoms) {
var _readAtomState = function readAtomState(batch, atom) {
var atomState = getAtomState(atom);
if (isAtomStateInitialized(atomState)) {
if (atomState.m && !(dirtyAtoms != null && dirtyAtoms.has(atom))) {
if (atomState.m && !atomState.x) {
return atomState;

@@ -243,3 +246,3 @@ }

n = _ref2[1];
return (_readAtomState(pending, a, dirtyAtoms).n === n
return (_readAtomState(batch, a).n === n
);

@@ -264,3 +267,3 @@ })) {

}
var aState = _readAtomState(pending, a, dirtyAtoms);
var aState = _readAtomState(batch, a);
try {

@@ -270,8 +273,8 @@ return returnAtomValue(aState);

if (isSync) {
addDependency(pending, atom, atomState, a, aState);
addDependency(batch, atom, atomState, a, aState);
} else {
var _pending = createPending();
addDependency(_pending, atom, atomState, a, aState);
mountDependencies(_pending, atom, atomState);
flushPending(_pending);
var _batch = createBatch();
addDependency(_batch, atom, atomState, a, aState);
mountDependencies(_batch, atom, atomState);
flushBatch(_batch);
}

@@ -319,5 +322,5 @@ }

if (atomState.m) {
var _pending2 = createPending();
mountDependencies(_pending2, atom, atomState);
flushPending(_pending2);
var _batch2 = createBatch();
mountDependencies(_batch2, atom, atomState);
flushBatch(_batch2);
}

@@ -331,2 +334,3 @@ };

atomState.e = error;
delete atomState.x;
++atomState.n;

@@ -341,4 +345,4 @@ return atomState;

};
var getMountedOrPendingDependents = function getMountedOrPendingDependents(pending, atom, atomState) {
var _getPendingDependents;
var getMountedOrBatchDependents = function getMountedOrBatchDependents(batch, atom, atomState) {
var _getBatchAtomDependen;
var dependents = new Map();

@@ -357,3 +361,3 @@ for (var _iterator2 = _createForOfIteratorHelperLoose(((_atomState$m2 = atomState.m) == null ? void 0 : _atomState$m2.t) || []), _step2; !(_step2 = _iterator2()).done;) {

}
(_getPendingDependents = getPendingDependents(pending, atom)) == null || _getPendingDependents.forEach(function (dependent) {
(_getBatchAtomDependen = getBatchAtomDependents(batch, atom)) == null || _getBatchAtomDependen.forEach(function (dependent) {
dependents.set(dependent, getAtomState(dependent));

@@ -363,7 +367,7 @@ });

};
function getSortedDependents(pending, rootAtom, rootAtomState) {
var sorted = [];
var recomputeDependents = function recomputeDependents(batch, atom, atomState) {
var topSortedReversed = [];
var visiting = new Set();
var visited = new Set();
var stack = [[rootAtom, rootAtomState]];
var stack = [[atom, atomState]];
while (stack.length > 0) {

@@ -378,4 +382,5 @@ var _ref3 = stack[stack.length - 1],

if (visiting.has(a)) {
sorted.push([a, aState, aState.n]);
topSortedReversed.push([a, aState, aState.n]);
visited.add(a);
aState.x = true;
stack.pop();

@@ -385,3 +390,3 @@ continue;

visiting.add(a);
for (var _iterator4 = _createForOfIteratorHelperLoose(getMountedOrPendingDependents(pending, a, aState)), _step4; !(_step4 = _iterator4()).done;) {
for (var _iterator4 = _createForOfIteratorHelperLoose(getMountedOrBatchDependents(batch, a, aState)), _step4; !(_step4 = _iterator4()).done;) {
var _step4$value = _step4.value,

@@ -395,37 +400,33 @@ d = _step4$value[0],

}
return [sorted, visited];
}
var recomputeDependents = function recomputeDependents(pending, atom, atomState) {
var _getSortedDependents = getSortedDependents(pending, atom, atomState),
topsortedAtoms = _getSortedDependents[0],
markedAtoms = _getSortedDependents[1];
var changedAtoms = new Set([atom]);
for (var i = topsortedAtoms.length - 1; i >= 0; --i) {
var _ref4 = topsortedAtoms[i],
a = _ref4[0],
aState = _ref4[1],
prevEpochNumber = _ref4[2];
var hasChangedDeps = false;
for (var _iterator5 = _createForOfIteratorHelperLoose(aState.d.keys()), _step5; !(_step5 = _iterator5()).done;) {
var dep = _step5.value;
if (dep !== a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
addBatchFunc(batch, 'H', function () {
var changedAtoms = new Set([atom]);
for (var i = topSortedReversed.length - 1; i >= 0; --i) {
var _ref4 = topSortedReversed[i],
_a = _ref4[0],
_aState2 = _ref4[1],
prevEpochNumber = _ref4[2];
var hasChangedDeps = false;
for (var _iterator5 = _createForOfIteratorHelperLoose(_aState2.d.keys()), _step5; !(_step5 = _iterator5()).done;) {
var dep = _step5.value;
if (dep !== _a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
}
}
}
if (hasChangedDeps) {
_readAtomState(pending, a, markedAtoms);
mountDependencies(pending, a, aState);
if (prevEpochNumber !== aState.n) {
addPendingAtom(pending, a, aState);
changedAtoms.add(a);
if (hasChangedDeps) {
_readAtomState(batch, _a);
mountDependencies(batch, _a, _aState2);
if (prevEpochNumber !== _aState2.n) {
registerBatchAtom(batch, _a, _aState2);
changedAtoms.add(_a);
}
}
delete _aState2.x;
}
markedAtoms.delete(a);
}
});
};
var _writeAtomState = function writeAtomState(pending, atom) {
var _writeAtomState = function writeAtomState(batch, atom) {
var isSync = true;
var getter = function getter(a) {
return returnAtomValue(_readAtomState(pending, a));
return returnAtomValue(_readAtomState(batch, a));
};

@@ -445,14 +446,14 @@ var setter = function setter(a) {

setAtomStateValueOrPromise(a, aState, v);
mountDependencies(pending, a, aState);
mountDependencies(batch, a, aState);
if (prevEpochNumber !== aState.n) {
addPendingAtom(pending, a, aState);
recomputeDependents(pending, a, aState);
registerBatchAtom(batch, a, aState);
recomputeDependents(batch, a, aState);
}
return undefined;
} else {
return _writeAtomState.apply(void 0, [pending, a].concat(args));
return _writeAtomState.apply(void 0, [batch, a].concat(args));
}
} finally {
if (!isSync) {
flushPending(pending);
flushBatch(batch);
}

@@ -471,3 +472,3 @@ }

var writeAtom = function writeAtom(atom) {
var pending = createPending();
var batch = createBatch();
try {

@@ -477,8 +478,8 @@ for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {

}
return _writeAtomState.apply(void 0, [pending, atom].concat(args));
return _writeAtomState.apply(void 0, [batch, atom].concat(args));
} finally {
flushPending(pending);
flushBatch(batch);
}
};
var mountDependencies = function mountDependencies(pending, atom, atomState) {
var mountDependencies = function mountDependencies(batch, atom, atomState) {
if (atomState.m && !isPendingPromise(atomState.v)) {

@@ -488,3 +489,3 @@ for (var _iterator6 = _createForOfIteratorHelperLoose(atomState.d.keys()), _step6; !(_step6 = _iterator6()).done;) {

if (!atomState.m.d.has(a)) {
var aMounted = _mountAtom(pending, a, getAtomState(a));
var aMounted = _mountAtom(batch, a, getAtomState(a));
aMounted.t.add(atom);

@@ -495,6 +496,6 @@ atomState.m.d.add(a);

for (var _iterator7 = _createForOfIteratorHelperLoose(atomState.m.d || []), _step7; !(_step7 = _iterator7()).done;) {
var _a = _step7.value;
if (!atomState.d.has(_a)) {
atomState.m.d.delete(_a);
var _aMounted = _unmountAtom(pending, _a, getAtomState(_a));
var _a2 = _step7.value;
if (!atomState.d.has(_a2)) {
atomState.m.d.delete(_a2);
var _aMounted = _unmountAtom(batch, _a2, getAtomState(_a2));
_aMounted == null || _aMounted.t.delete(atom);

@@ -505,8 +506,8 @@ }

};
var _mountAtom = function mountAtom(pending, atom, atomState) {
var _mountAtom = function mountAtom(batch, atom, atomState) {
if (!atomState.m) {
_readAtomState(pending, atom);
_readAtomState(batch, atom);
for (var _iterator8 = _createForOfIteratorHelperLoose(atomState.d.keys()), _step8; !(_step8 = _iterator8()).done;) {
var a = _step8.value;
var aMounted = _mountAtom(pending, a, getAtomState(a));
var aMounted = _mountAtom(batch, a, getAtomState(a));
aMounted.t.add(atom);

@@ -519,9 +520,6 @@ }

};
{
debugMountedAtoms.add(atom);
}
if (isActuallyWritableAtom(atom)) {
var mounted = atomState.m;
var _setAtom;
var createInvocationContext = function createInvocationContext(pending, fn) {
var createInvocationContext = function createInvocationContext(batch, fn) {
var isSync = true;

@@ -533,6 +531,6 @@ _setAtom = function _setAtom() {

}
return _writeAtomState.apply(void 0, [pending, atom].concat(args));
return _writeAtomState.apply(void 0, [batch, atom].concat(args));
} finally {
if (!isSync) {
flushPending(pending);
flushBatch(batch);
}

@@ -547,4 +545,4 @@ }

};
addPendingFunction(pending, function () {
var onUnmount = createInvocationContext(pending, function () {
addBatchFunc(batch, 'L', function () {
var onUnmount = createInvocationContext(batch, function () {
return atomOnMount(atom, function () {

@@ -555,4 +553,4 @@ return _setAtom.apply(void 0, arguments);

if (onUnmount) {
mounted.u = function (pending) {
return createInvocationContext(pending, onUnmount);
mounted.u = function (batch) {
return createInvocationContext(batch, onUnmount);
};

@@ -565,3 +563,3 @@ }

};
var _unmountAtom = function unmountAtom(pending, atom, atomState) {
var _unmountAtom = function unmountAtom(batch, atom, atomState) {
if (atomState.m && !atomState.m.l.size && !Array.from(atomState.m.t).some(function (a) {

@@ -573,13 +571,10 @@ var _getAtomState$m;

if (onUnmount) {
addPendingFunction(pending, function () {
return onUnmount(pending);
addBatchFunc(batch, 'L', function () {
return onUnmount(batch);
});
}
delete atomState.m;
{
debugMountedAtoms.delete(atom);
}
for (var _iterator9 = _createForOfIteratorHelperLoose(atomState.d.keys()), _step9; !(_step9 = _iterator9()).done;) {
var a = _step9.value;
var aMounted = _unmountAtom(pending, a, getAtomState(a));
var aMounted = _unmountAtom(batch, a, getAtomState(a));
aMounted == null || aMounted.t.delete(atom);

@@ -592,13 +587,13 @@ }

var subscribeAtom = function subscribeAtom(atom, listener) {
var pending = createPending();
var batch = createBatch();
var atomState = getAtomState(atom);
var mounted = _mountAtom(pending, atom, atomState);
var mounted = _mountAtom(batch, atom, atomState);
var listeners = mounted.l;
listeners.add(listener);
flushPending(pending);
flushBatch(batch);
return function () {
listeners.delete(listener);
var pending = createPending();
_unmountAtom(pending, atom, atomState);
flushPending(pending);
var batch = createBatch();
_unmountAtom(batch, atom, atomState);
flushBatch(batch);
};

@@ -615,41 +610,83 @@ };

};
{
var devStore = {
dev4_get_internal_weak_map: function dev4_get_internal_weak_map() {
return {
get: function get(atom) {
var atomState = getAtomState(atom);
if (atomState.n === 0) {
return undefined;
return store;
};
var deriveDevStoreRev4 = function deriveDevStoreRev4(store) {
var proxyAtomStateMap = new WeakMap();
var debugMountedAtoms = new Set();
var savedGetAtomState;
var inRestoreAtom = 0;
var derivedStore = store.unstable_derive(function (getAtomState, atomRead, atomWrite, atomOnMount) {
savedGetAtomState = getAtomState;
return [function (atom) {
var proxyAtomState = proxyAtomStateMap.get(atom);
if (!proxyAtomState) {
var atomState = getAtomState(atom);
proxyAtomState = new Proxy(atomState, {
set: function set(target, prop, value) {
if (prop === 'm') {
debugMountedAtoms.add(atom);
}
return atomState;
return Reflect.set(target, prop, value);
},
deleteProperty: function deleteProperty(target, prop) {
if (prop === 'm') {
debugMountedAtoms.delete(atom);
}
return Reflect.deleteProperty(target, prop);
}
};
},
dev4_get_mounted_atoms: function dev4_get_mounted_atoms() {
return debugMountedAtoms;
},
dev4_restore_atoms: function dev4_restore_atoms(values) {
var pending = createPending();
for (var _iterator10 = _createForOfIteratorHelperLoose(values), _step10; !(_step10 = _iterator10()).done;) {
var _step10$value = _step10.value,
_atom = _step10$value[0],
value = _step10$value[1];
if (hasInitialValue(_atom)) {
var atomState = getAtomState(_atom);
var prevEpochNumber = atomState.n;
setAtomStateValueOrPromise(_atom, atomState, value);
mountDependencies(pending, _atom, atomState);
if (prevEpochNumber !== atomState.n) {
addPendingAtom(pending, _atom, atomState);
recomputeDependents(pending, _atom, atomState);
});
proxyAtomStateMap.set(atom, proxyAtomState);
}
return proxyAtomState;
}, atomRead, function (atom, getter, setter) {
for (var _len7 = arguments.length, args = new Array(_len7 > 3 ? _len7 - 3 : 0), _key7 = 3; _key7 < _len7; _key7++) {
args[_key7 - 3] = arguments[_key7];
}
if (inRestoreAtom) {
return setter.apply(void 0, [atom].concat(args));
}
return atomWrite.apply(void 0, [atom, getter, setter].concat(args));
}, atomOnMount];
});
var savedStoreSet = derivedStore.set;
var devStore = {
dev4_get_internal_weak_map: function dev4_get_internal_weak_map() {
return {
get: function get(atom) {
var atomState = savedGetAtomState(atom);
if (atomState.n === 0) {
return undefined;
}
return atomState;
}
};
},
dev4_get_mounted_atoms: function dev4_get_mounted_atoms() {
return debugMountedAtoms;
},
dev4_restore_atoms: function dev4_restore_atoms(values) {
var restoreAtom = {
read: function read() {
return null;
},
write: function write(_get, set) {
++inRestoreAtom;
try {
for (var _iterator10 = _createForOfIteratorHelperLoose(values), _step10; !(_step10 = _iterator10()).done;) {
var _step10$value = _step10.value,
_atom = _step10$value[0],
value = _step10$value[1];
if (hasInitialValue(_atom)) {
set(_atom, value);
}
}
} finally {
--inRestoreAtom;
}
}
flushPending(pending);
}
};
Object.assign(store, devStore);
}
return store;
};
savedStoreSet(restoreAtom);
}
};
return Object.assign(derivedStore, devStore);
};

@@ -673,12 +710,7 @@ var createStore = function createStore() {

};
return _buildStore(getAtomState, function (atom) {
for (var _len7 = arguments.length, params = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
params[_key7 - 1] = arguments[_key7];
}
return atom.read.apply(atom, params);
}, function (atom) {
var store = _buildStore(getAtomState, function (atom) {
for (var _len8 = arguments.length, params = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
params[_key8 - 1] = arguments[_key8];
}
return atom.write.apply(atom, params);
return atom.read.apply(atom, params);
}, function (atom) {

@@ -688,4 +720,12 @@ for (var _len9 = arguments.length, params = new Array(_len9 > 1 ? _len9 - 1 : 0), _key9 = 1; _key9 < _len9; _key9++) {

}
return atom.write.apply(atom, params);
}, function (atom) {
for (var _len10 = arguments.length, params = new Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {
params[_key10 - 1] = arguments[_key10];
}
return atom.onMount == null ? void 0 : atom.onMount.apply(atom, params);
});
{
return deriveDevStoreRev4(store);
}
};

@@ -692,0 +732,0 @@ var defaultStore;

@@ -1,1 +0,1 @@

!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).jotaiVanilla={})}(this,(function(n){"use strict";var r=0;function e(n){return n(this)}function t(n,r,e){return r(this,"function"==typeof e?e(n(this)):e)}function a(n,r){(null==r||r>n.length)&&(r=n.length);for(var e=0,t=Array(r);e<r;e++)t[e]=n[e];return t}function o(n,r){var e="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(e)return(e=e.call(n)).next.bind(e);if(Array.isArray(n)||(e=function(n,r){if(n){if("string"==typeof n)return a(n,r);var e={}.toString.call(n).slice(8,-1);return"Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e?Array.from(n):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(n,r):void 0}}(n))||r){e&&(n=e);var t=0;return function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=function(n,r){return n.unstable_is?n.unstable_is(r):r===n},f=function(n){return"init"in n},l=function(n){return!!n.write},v=new WeakMap,c=function(n){var r;return d(n)&&!(null!=(r=v.get(n))&&r[1])},d=function(n){return"function"==typeof(null==n?void 0:n.then)},s=function(n){return"v"in n||"e"in n},y=function(n){if("e"in n)throw n.e;return n.v},p=function(n,r,e){e.p.has(n)||(e.p.add(n),r.then((function(){e.p.delete(n)}),(function(){e.p.delete(n)})))},h=function(n,r,e,t,a){var o;e.d.set(t,a.n),c(e.v)&&p(r,e.v,a),null==(o=a.m)||o.t.add(r),n&&g(n,t,r)},m=function(){return[new Map,new Map,new Set]},w=function(n,r,e){n[0].has(r)||n[0].set(r,new Set),n[1].set(r,e)},g=function(n,r,e){var t=n[0].get(r);t&&t.add(e)},b=function(n,r){n[2].add(r)},S=function(n){for(var r,e=!1,t=function(n){try{n()}catch(n){e||(r=n,e=!0)}};n[1].size||n[2].size;){n[0].clear();var a=new Set(n[1].values());n[1].clear();var o=new Set(n[2]);n[2].clear(),a.forEach((function(n){var r;return null==(r=n.m)?void 0:r.l.forEach(t)})),o.forEach(t)}if(e)throw r},A=function(){for(var n=arguments.length,r=new Array(n),e=0;e<n;e++)r[e]=arguments[e];var t=r[0],a=r[1],i=r[2],g=r[3],k=function(n,r,e){var a,i,u,f="v"in r,l=r.v,s=c(r.v)?r.v:null;if(d(e)){!function(n){if(!v.has(n)){var r=[new Set,!1];v.set(n,r);var e=function(){r[1]=!0};n.then(e,e),n.onCancel=function(n){r[0].add(n)}}}(e);for(var y,h=o(r.d.keys());!(y=h()).done;){var m=y.value;p(n,e,t(m))}r.v=e,delete r.e}else r.v=e,delete r.e;f&&Object.is(l,r.v)||(++r.n,s&&(a=s,i=e,(u=v.get(a))&&(u[1]=!0,u[0].forEach((function(n){return n(i)})))))},M=function(n,r,e){var o=t(r);if(s(o)){if(o.m&&(null==e||!e.has(r)))return o;if(Array.from(o.d).every((function(r){var t=r[0],a=r[1];return M(n,t,e).n===a})))return o}o.d.clear();var i,v,c=!0,p={get signal(){return i||(i=new AbortController),i.signal},get setSelf(){return!v&&l(r)&&(v=function(){if(!c){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return x.apply(void 0,[r].concat(e))}}),v}};try{var w=a(r,(function(a){if(u(r,a)){var i=t(a);if(!s(i)){if(!f(a))throw new Error("no atom init");k(a,i,a.init)}return y(i)}var l=M(n,a,e);try{return y(l)}finally{if(c)h(n,r,o,a,l);else{var v=m();h(v,r,o,a,l),z(v,r,o),S(v)}}}),p);if(k(r,o,w),d(w)){null==w.onCancel||w.onCancel((function(){var n;return null==(n=i)?void 0:n.abort()}));var g=function(){if(o.m){var n=m();z(n,r,o),S(n)}};w.then(g,g)}return o}catch(n){return delete o.v,o.e=n,++o.n,o}finally{c=!1}},E=function(n,r,e){for(var a,i,u=new Map,f=o((null==(l=e.m)?void 0:l.t)||[]);!(i=f()).done;){var l,v=i.value,c=t(v);c.m&&u.set(v,c)}for(var d,s=o(e.p);!(d=s()).done;){var y=d.value;u.set(y,t(y))}return null==(a=function(n,r){return n[0].get(r)}(n,r))||a.forEach((function(n){u.set(n,t(n))})),u};var j=function(n,r,e){for(var t=function(n,r,e){for(var t=[],a=new Set,i=new Set,u=[[r,e]];u.length>0;){var f=u[u.length-1],l=f[0],v=f[1];if(i.has(l))u.pop();else if(a.has(l))t.push([l,v,v.n]),i.add(l),u.pop();else{a.add(l);for(var c,d=o(E(n,l,v));!(c=d()).done;){var s=c.value,y=s[0],p=s[1];l===y||a.has(y)||u.push([y,p])}}}return[t,i]}(n,r,e),a=t[0],i=t[1],u=new Set([r]),f=a.length-1;f>=0;--f){for(var l,v=a[f],c=v[0],d=v[1],s=v[2],y=!1,p=o(d.d.keys());!(l=p()).done;){var h=l.value;if(h!==c&&u.has(h)){y=!0;break}}y&&(M(n,c,i),z(n,c,d),s!==d.n&&(w(n,c,d),u.add(c))),i.delete(c)}},C=function(n,r){var e=!0;try{for(var a=arguments.length,o=new Array(a>2?a-2:0),l=2;l<a;l++)o[l-2]=arguments[l];return i.apply(void 0,[r,function(r){return y(M(n,r))},function(a){var o=t(a);try{for(var i=arguments.length,l=new Array(i>1?i-1:0),v=1;v<i;v++)l[v-1]=arguments[v];if(u(r,a)){if(!f(a))throw new Error("atom not writable");var c=o.n,d=l[0];return k(a,o,d),z(n,a,o),void(c!==o.n&&(w(n,a,o),j(n,a,o)))}return C.apply(void 0,[n,a].concat(l))}finally{e||S(n)}}].concat(o))}finally{e=!1}},x=function(n){var r=m();try{for(var e=arguments.length,t=new Array(e>1?e-1:0),a=1;a<e;a++)t[a-1]=arguments[a];return C.apply(void 0,[r,n].concat(t))}finally{S(r)}},z=function(n,r,e){if(e.m&&!c(e.v)){for(var a,i=o(e.d.keys());!(a=i()).done;){var u=a.value;if(!e.m.d.has(u))I(n,u,t(u)).t.add(r),e.m.d.add(u)}for(var f,l=o(e.m.d||[]);!(f=l()).done;){var v=f.value;if(!e.d.has(v)){e.m.d.delete(v);var d=T(n,v,t(v));null==d||d.t.delete(r)}}}},I=function(n,r,e){if(!e.m){M(n,r);for(var a,i=o(e.d.keys());!(a=i()).done;){var u=a.value;I(n,u,t(u)).t.add(r)}if(e.m={l:new Set,d:new Set(e.d.keys()),t:new Set},l(r)){var f,v=e.m,c=function(n,e){var t=!0;f=function(){try{for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return C.apply(void 0,[n,r].concat(a))}finally{t||S(n)}};try{return e()}finally{t=!1}};b(n,(function(){var e=c(n,(function(){return g(r,(function(){return f.apply(void 0,arguments)}))}));e&&(v.u=function(n){return c(n,e)})}))}}return e.m},T=function(n,r,e){if(!e.m||e.m.l.size||Array.from(e.m.t).some((function(n){var e;return null==(e=t(n).m)?void 0:e.d.has(r)})))return e.m;var a=e.m.u;a&&b(n,(function(){return a(n)})),delete e.m;for(var i,u=o(e.d.keys());!(i=u()).done;){var f=i.value,l=T(n,f,t(f));null==l||l.t.delete(r)}},_={get:function(n){return y(M(void 0,n))},set:x,sub:function(n,r){var e=m(),a=t(n),o=I(e,n,a).l;return o.add(r),S(e),function(){o.delete(r);var e=m();T(e,n,a),S(e)}},unstable_derive:function(n){return A.apply(void 0,n(t,a,i,g))}};return _},k=function(){var n=new WeakMap;return A((function(r){var e=n.get(r);return e||(e={d:new Map,p:new Set,n:0},n.set(r,e)),e}),(function(n){for(var r=arguments.length,e=new Array(r>1?r-1:0),t=1;t<r;t++)e[t-1]=arguments[t];return n.read.apply(n,e)}),(function(n){for(var r=arguments.length,e=new Array(r>1?r-1:0),t=1;t<r;t++)e[t-1]=arguments[t];return n.write.apply(n,e)}),(function(n){for(var r=arguments.length,e=new Array(r>1?r-1:0),t=1;t<r;t++)e[t-1]=arguments[t];return null==n.onMount?void 0:n.onMount.apply(n,e)}))};n.atom=function(n,a){var o="atom"+ ++r,i={toString:function(){return o}};return"function"==typeof n?i.read=n:(i.init=n,i.read=e,i.write=t),a&&(i.write=a),i},n.createStore=k,n.getDefaultStore=function(){return i||(i=k()),i}}));
!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r((n="undefined"!=typeof globalThis?globalThis:n||self).jotaiVanilla={})}(this,(function(n){"use strict";var r=0;function e(n){return n(this)}function t(n,r,e){return r(this,"function"==typeof e?e(n(this)):e)}function a(n,r){(null==r||r>n.length)&&(r=n.length);for(var e=0,t=Array(r);e<r;e++)t[e]=n[e];return t}function o(n,r){var e="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(e)return(e=e.call(n)).next.bind(e);if(Array.isArray(n)||(e=function(n,r){if(n){if("string"==typeof n)return a(n,r);var e={}.toString.call(n).slice(8,-1);return"Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e?Array.from(n):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?a(n,r):void 0}}(n))||r){e&&(n=e);var t=0;return function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=function(n,r){return n.unstable_is?n.unstable_is(r):r===n},f=function(n){return"init"in n},l=function(n){return!!n.write},c=new WeakMap,v=function(n){var r;return d(n)&&!(null!=(r=c.get(n))&&r[1])},d=function(n){return"function"==typeof(null==n?void 0:n.then)},s=function(n){return"v"in n||"e"in n},y=function(n){if("e"in n)throw n.e;return n.v},p=function(n,r,e){e.p.has(n)||(e.p.add(n),r.then((function(){e.p.delete(n)}),(function(){e.p.delete(n)})))},h=function(n,r,e,t,a){var o;e.d.set(t,a.n),v(e.v)&&p(r,e.v,a),null==(o=a.m)||o.t.add(r),n&&b(n,t,r)},m=function(){return{D:new Map,H:new Set,M:new Set,L:new Set}},w=function(n,r,e){n[r].add(e)},g=function(n,r,e){n.D.has(r)||(n.D.set(r,new Set),w(n,"M",(function(){var r;null==(r=e.m)||r.l.forEach((function(r){return w(n,"M",r)}))})))},b=function(n,r,e){var t=n.D.get(r);t&&t.add(e)},S=function(n){for(var r,e=!1,t=function(n){try{n()}catch(n){e||(r=n,e=!0)}};n.H.size||n.M.size||n.L.size;)n.D.clear(),n.H.forEach(t),n.H.clear(),n.M.forEach(t),n.M.clear(),n.L.forEach(t),n.L.clear();if(e)throw r},A=function(){for(var n=arguments.length,r=new Array(n),e=0;e<n;e++)r[e]=arguments[e];var t=r[0],a=r[1],i=r[2],b=r[3],M=function(n,r,e){var a,i,u,f="v"in r,l=r.v,s=v(r.v)?r.v:null;if(d(e)){!function(n){if(!c.has(n)){var r=[new Set,!1];c.set(n,r);var e=function(){r[1]=!0};n.then(e,e),n.onCancel=function(n){r[0].add(n)}}}(e);for(var y,h=o(r.d.keys());!(y=h()).done;){var m=y.value;p(n,e,t(m))}r.v=e}else r.v=e;delete r.e,delete r.x,f&&Object.is(l,r.v)||(++r.n,s&&(a=s,i=e,(u=c.get(a))&&(u[1]=!0,u[0].forEach((function(n){return n(i)})))))},k=function(n,r){var e=t(r);if(s(e)){if(e.m&&!e.x)return e;if(Array.from(e.d).every((function(r){var e=r[0],t=r[1];return k(n,e).n===t})))return e}e.d.clear();var o,i,c=!0,v={get signal(){return o||(o=new AbortController),o.signal},get setSelf(){return!i&&l(r)&&(i=function(){if(!c){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return D.apply(void 0,[r].concat(e))}}),i}};try{var p=a(r,(function(a){if(u(r,a)){var o=t(a);if(!s(o)){if(!f(a))throw new Error("no atom init");M(a,o,a.init)}return y(o)}var i=k(n,a);try{return y(i)}finally{if(c)h(n,r,e,a,i);else{var l=m();h(l,r,e,a,i),L(l,r,e),S(l)}}}),v);if(M(r,e,p),d(p)){null==p.onCancel||p.onCancel((function(){var n;return null==(n=o)?void 0:n.abort()}));var w=function(){if(e.m){var n=m();L(n,r,e),S(n)}};p.then(w,w)}return e}catch(n){return delete e.v,e.e=n,delete e.x,++e.n,e}finally{c=!1}},x=function(n,r,e){for(var a,i,u=new Map,f=o((null==(l=e.m)?void 0:l.t)||[]);!(i=f()).done;){var l,c=i.value,v=t(c);v.m&&u.set(c,v)}for(var d,s=o(e.p);!(d=s()).done;){var y=d.value;u.set(y,t(y))}return null==(a=function(n,r){return n.D.get(r)}(n,r))||a.forEach((function(n){u.set(n,t(n))})),u},E=function(n,r){var e=!0;try{for(var a=arguments.length,l=new Array(a>2?a-2:0),c=2;c<a;c++)l[c-2]=arguments[c];return i.apply(void 0,[r,function(r){return y(k(n,r))},function(a){var i=t(a);try{for(var l=arguments.length,c=new Array(l>1?l-1:0),v=1;v<l;v++)c[v-1]=arguments[v];if(u(r,a)){if(!f(a))throw new Error("atom not writable");var d=i.n,s=c[0];return M(a,i,s),L(n,a,i),void(d!==i.n&&(g(n,a,i),function(n,r,e){for(var t=[],a=new Set,i=new Set,u=[[r,e]];u.length>0;){var f=u[u.length-1],l=f[0],c=f[1];if(i.has(l))u.pop();else if(a.has(l))t.push([l,c,c.n]),i.add(l),c.x=!0,u.pop();else{a.add(l);for(var v,d=o(x(n,l,c));!(v=d()).done;){var s=v.value,y=s[0],p=s[1];l===y||a.has(y)||u.push([y,p])}}}w(n,"H",(function(){for(var e=new Set([r]),a=t.length-1;a>=0;--a){for(var i,u=t[a],f=u[0],l=u[1],c=u[2],v=!1,d=o(l.d.keys());!(i=d()).done;){var s=i.value;if(s!==f&&e.has(s)){v=!0;break}}v&&(k(n,f),L(n,f,l),c!==l.n&&(g(n,f,l),e.add(f))),delete l.x}}))}(n,a,i)))}return E.apply(void 0,[n,a].concat(c))}finally{e||S(n)}}].concat(l))}finally{e=!1}},D=function(n){var r=m();try{for(var e=arguments.length,t=new Array(e>1?e-1:0),a=1;a<e;a++)t[a-1]=arguments[a];return E.apply(void 0,[r,n].concat(t))}finally{S(r)}},L=function(n,r,e){if(e.m&&!v(e.v)){for(var a,i=o(e.d.keys());!(a=i()).done;){var u=a.value;if(!e.m.d.has(u))j(n,u,t(u)).t.add(r),e.m.d.add(u)}for(var f,l=o(e.m.d||[]);!(f=l()).done;){var c=f.value;if(!e.d.has(c)){e.m.d.delete(c);var d=C(n,c,t(c));null==d||d.t.delete(r)}}}},j=function(n,r,e){if(!e.m){k(n,r);for(var a,i=o(e.d.keys());!(a=i()).done;){var u=a.value;j(n,u,t(u)).t.add(r)}if(e.m={l:new Set,d:new Set(e.d.keys()),t:new Set},l(r)){var f,c=e.m,v=function(n,e){var t=!0;f=function(){try{for(var e=arguments.length,a=new Array(e),o=0;o<e;o++)a[o]=arguments[o];return E.apply(void 0,[n,r].concat(a))}finally{t||S(n)}};try{return e()}finally{t=!1}};w(n,"L",(function(){var e=v(n,(function(){return b(r,(function(){return f.apply(void 0,arguments)}))}));e&&(c.u=function(n){return v(n,e)})}))}}return e.m},C=function(n,r,e){if(!e.m||e.m.l.size||Array.from(e.m.t).some((function(n){var e;return null==(e=t(n).m)?void 0:e.d.has(r)})))return e.m;var a=e.m.u;a&&w(n,"L",(function(){return a(n)})),delete e.m;for(var i,u=o(e.d.keys());!(i=u()).done;){var f=i.value,l=C(n,f,t(f));null==l||l.t.delete(r)}},H={get:function(n){return y(k(void 0,n))},set:D,sub:function(n,r){var e=m(),a=t(n),o=j(e,n,a).l;return o.add(r),S(e),function(){o.delete(r);var e=m();C(e,n,a),S(e)}},unstable_derive:function(n){return A.apply(void 0,n(t,a,i,b))}};return H},M=function(){var n=new WeakMap,r=A((function(r){var e=n.get(r);return e||(e={d:new Map,p:new Set,n:0},n.set(r,e)),e}),(function(n){for(var r=arguments.length,e=new Array(r>1?r-1:0),t=1;t<r;t++)e[t-1]=arguments[t];return n.read.apply(n,e)}),(function(n){for(var r=arguments.length,e=new Array(r>1?r-1:0),t=1;t<r;t++)e[t-1]=arguments[t];return n.write.apply(n,e)}),(function(n){for(var r=arguments.length,e=new Array(r>1?r-1:0),t=1;t<r;t++)e[t-1]=arguments[t];return null==n.onMount?void 0:n.onMount.apply(n,e)}));return r};n.atom=function(n,a){var o="atom"+ ++r,i={toString:function(){return o}};return"function"==typeof n?i.read=n:(i.init=n,i.read=e,i.write=t),a&&(i.write=a),i},n.createStore=M,n.getDefaultStore=function(){return i||(i=M()),i}}));

@@ -124,3 +124,3 @@ 'use strict';

};
var addDependency = function addDependency(pending, atom, atomState, a, aState) {
var addDependency = function addDependency(batch, atom, atomState, a, aState) {
var _aState$m;

@@ -135,17 +135,30 @@ if (process.env.NODE_ENV !== 'production' && a === atom) {

(_aState$m = aState.m) == null || _aState$m.t.add(atom);
if (pending) {
addPendingDependent(pending, a, atom);
if (batch) {
addBatchAtomDependent(batch, a, atom);
}
};
var createPending = function createPending() {
return [new Map(), new Map(), new Set()];
var createBatch = function createBatch() {
return {
D: new Map(),
H: new Set(),
M: new Set(),
L: new Set()
};
};
var addPendingAtom = function addPendingAtom(pending, atom, atomState) {
if (!pending[0].has(atom)) {
pending[0].set(atom, new Set());
var addBatchFunc = function addBatchFunc(batch, priority, fn) {
batch[priority].add(fn);
};
var registerBatchAtom = function registerBatchAtom(batch, atom, atomState) {
if (!batch.D.has(atom)) {
batch.D.set(atom, new Set());
addBatchFunc(batch, 'M', function () {
var _atomState$m;
(_atomState$m = atomState.m) == null || _atomState$m.l.forEach(function (listener) {
return addBatchFunc(batch, 'M', listener);
});
});
}
pending[1].set(atom, atomState);
};
var addPendingDependent = function addPendingDependent(pending, atom, dependent) {
var dependents = pending[0].get(atom);
var addBatchAtomDependent = function addBatchAtomDependent(batch, atom, dependent) {
var dependents = batch.D.get(atom);
if (dependents) {

@@ -155,9 +168,6 @@ dependents.add(dependent);

};
var getPendingDependents = function getPendingDependents(pending, atom) {
return pending[0].get(atom);
var getBatchAtomDependents = function getBatchAtomDependents(batch, atom) {
return batch.D.get(atom);
};
var addPendingFunction = function addPendingFunction(pending, fn) {
pending[2].add(fn);
};
var flushPending = function flushPending(pending) {
var flushBatch = function flushBatch(batch) {
var error;

@@ -175,13 +185,10 @@ var hasError = false;

};
while (pending[1].size || pending[2].size) {
pending[0].clear();
var _atomStates = new Set(pending[1].values());
pending[1].clear();
var _functions = new Set(pending[2]);
pending[2].clear();
_atomStates.forEach(function (atomState) {
var _atomState$m;
return (_atomState$m = atomState.m) == null ? void 0 : _atomState$m.l.forEach(call);
});
_functions.forEach(call);
while (batch.H.size || batch.M.size || batch.L.size) {
batch.D.clear();
batch.H.forEach(call);
batch.H.clear();
batch.M.forEach(call);
batch.M.clear();
batch.L.forEach(call);
batch.L.clear();
}

@@ -200,6 +207,2 @@ if (hasError) {

atomOnMount = _ref[3];
var debugMountedAtoms;
if (process.env.NODE_ENV !== 'production') {
debugMountedAtoms = new Set();
}
var setAtomStateValueOrPromise = function setAtomStateValueOrPromise(atom, atomState, valueOrPromise) {

@@ -216,7 +219,7 @@ var hasPrevValue = 'v' in atomState;

atomState.v = valueOrPromise;
delete atomState.e;
} else {
atomState.v = valueOrPromise;
delete atomState.e;
}
delete atomState.e;
delete atomState.x;
if (!hasPrevValue || !Object.is(prevValue, atomState.v)) {

@@ -229,6 +232,6 @@ ++atomState.n;

};
var _readAtomState = function readAtomState(pending, atom, dirtyAtoms) {
var _readAtomState = function readAtomState(batch, atom) {
var atomState = getAtomState(atom);
if (isAtomStateInitialized(atomState)) {
if (atomState.m && !(dirtyAtoms != null && dirtyAtoms.has(atom))) {
if (atomState.m && !atomState.x) {
return atomState;

@@ -239,3 +242,3 @@ }

n = _ref2[1];
return (_readAtomState(pending, a, dirtyAtoms).n === n
return (_readAtomState(batch, a).n === n
);

@@ -260,3 +263,3 @@ })) {

}
var aState = _readAtomState(pending, a, dirtyAtoms);
var aState = _readAtomState(batch, a);
try {

@@ -266,8 +269,8 @@ return returnAtomValue(aState);

if (isSync) {
addDependency(pending, atom, atomState, a, aState);
addDependency(batch, atom, atomState, a, aState);
} else {
var _pending = createPending();
addDependency(_pending, atom, atomState, a, aState);
mountDependencies(_pending, atom, atomState);
flushPending(_pending);
var _batch = createBatch();
addDependency(_batch, atom, atomState, a, aState);
mountDependencies(_batch, atom, atomState);
flushBatch(_batch);
}

@@ -315,5 +318,5 @@ }

if (atomState.m) {
var _pending2 = createPending();
mountDependencies(_pending2, atom, atomState);
flushPending(_pending2);
var _batch2 = createBatch();
mountDependencies(_batch2, atom, atomState);
flushBatch(_batch2);
}

@@ -327,2 +330,3 @@ };

atomState.e = error;
delete atomState.x;
++atomState.n;

@@ -337,4 +341,4 @@ return atomState;

};
var getMountedOrPendingDependents = function getMountedOrPendingDependents(pending, atom, atomState) {
var _getPendingDependents;
var getMountedOrBatchDependents = function getMountedOrBatchDependents(batch, atom, atomState) {
var _getBatchAtomDependen;
var dependents = new Map();

@@ -353,3 +357,3 @@ for (var _iterator2 = _createForOfIteratorHelperLoose(((_atomState$m2 = atomState.m) == null ? void 0 : _atomState$m2.t) || []), _step2; !(_step2 = _iterator2()).done;) {

}
(_getPendingDependents = getPendingDependents(pending, atom)) == null || _getPendingDependents.forEach(function (dependent) {
(_getBatchAtomDependen = getBatchAtomDependents(batch, atom)) == null || _getBatchAtomDependen.forEach(function (dependent) {
dependents.set(dependent, getAtomState(dependent));

@@ -359,7 +363,7 @@ });

};
function getSortedDependents(pending, rootAtom, rootAtomState) {
var sorted = [];
var recomputeDependents = function recomputeDependents(batch, atom, atomState) {
var topSortedReversed = [];
var visiting = new Set();
var visited = new Set();
var stack = [[rootAtom, rootAtomState]];
var stack = [[atom, atomState]];
while (stack.length > 0) {

@@ -374,4 +378,5 @@ var _ref3 = stack[stack.length - 1],

if (visiting.has(a)) {
sorted.push([a, aState, aState.n]);
topSortedReversed.push([a, aState, aState.n]);
visited.add(a);
aState.x = true;
stack.pop();

@@ -381,3 +386,3 @@ continue;

visiting.add(a);
for (var _iterator4 = _createForOfIteratorHelperLoose(getMountedOrPendingDependents(pending, a, aState)), _step4; !(_step4 = _iterator4()).done;) {
for (var _iterator4 = _createForOfIteratorHelperLoose(getMountedOrBatchDependents(batch, a, aState)), _step4; !(_step4 = _iterator4()).done;) {
var _step4$value = _step4.value,

@@ -391,37 +396,33 @@ d = _step4$value[0],

}
return [sorted, visited];
}
var recomputeDependents = function recomputeDependents(pending, atom, atomState) {
var _getSortedDependents = getSortedDependents(pending, atom, atomState),
topsortedAtoms = _getSortedDependents[0],
markedAtoms = _getSortedDependents[1];
var changedAtoms = new Set([atom]);
for (var i = topsortedAtoms.length - 1; i >= 0; --i) {
var _ref4 = topsortedAtoms[i],
a = _ref4[0],
aState = _ref4[1],
prevEpochNumber = _ref4[2];
var hasChangedDeps = false;
for (var _iterator5 = _createForOfIteratorHelperLoose(aState.d.keys()), _step5; !(_step5 = _iterator5()).done;) {
var dep = _step5.value;
if (dep !== a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
addBatchFunc(batch, 'H', function () {
var changedAtoms = new Set([atom]);
for (var i = topSortedReversed.length - 1; i >= 0; --i) {
var _ref4 = topSortedReversed[i],
_a = _ref4[0],
_aState2 = _ref4[1],
prevEpochNumber = _ref4[2];
var hasChangedDeps = false;
for (var _iterator5 = _createForOfIteratorHelperLoose(_aState2.d.keys()), _step5; !(_step5 = _iterator5()).done;) {
var dep = _step5.value;
if (dep !== _a && changedAtoms.has(dep)) {
hasChangedDeps = true;
break;
}
}
}
if (hasChangedDeps) {
_readAtomState(pending, a, markedAtoms);
mountDependencies(pending, a, aState);
if (prevEpochNumber !== aState.n) {
addPendingAtom(pending, a, aState);
changedAtoms.add(a);
if (hasChangedDeps) {
_readAtomState(batch, _a);
mountDependencies(batch, _a, _aState2);
if (prevEpochNumber !== _aState2.n) {
registerBatchAtom(batch, _a, _aState2);
changedAtoms.add(_a);
}
}
delete _aState2.x;
}
markedAtoms.delete(a);
}
});
};
var _writeAtomState = function writeAtomState(pending, atom) {
var _writeAtomState = function writeAtomState(batch, atom) {
var isSync = true;
var getter = function getter(a) {
return returnAtomValue(_readAtomState(pending, a));
return returnAtomValue(_readAtomState(batch, a));
};

@@ -441,14 +442,14 @@ var setter = function setter(a) {

setAtomStateValueOrPromise(a, aState, v);
mountDependencies(pending, a, aState);
mountDependencies(batch, a, aState);
if (prevEpochNumber !== aState.n) {
addPendingAtom(pending, a, aState);
recomputeDependents(pending, a, aState);
registerBatchAtom(batch, a, aState);
recomputeDependents(batch, a, aState);
}
return undefined;
} else {
return _writeAtomState.apply(void 0, [pending, a].concat(args));
return _writeAtomState.apply(void 0, [batch, a].concat(args));
}
} finally {
if (!isSync) {
flushPending(pending);
flushBatch(batch);
}

@@ -467,3 +468,3 @@ }

var writeAtom = function writeAtom(atom) {
var pending = createPending();
var batch = createBatch();
try {

@@ -473,8 +474,8 @@ for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {

}
return _writeAtomState.apply(void 0, [pending, atom].concat(args));
return _writeAtomState.apply(void 0, [batch, atom].concat(args));
} finally {
flushPending(pending);
flushBatch(batch);
}
};
var mountDependencies = function mountDependencies(pending, atom, atomState) {
var mountDependencies = function mountDependencies(batch, atom, atomState) {
if (atomState.m && !isPendingPromise(atomState.v)) {

@@ -484,3 +485,3 @@ for (var _iterator6 = _createForOfIteratorHelperLoose(atomState.d.keys()), _step6; !(_step6 = _iterator6()).done;) {

if (!atomState.m.d.has(a)) {
var aMounted = _mountAtom(pending, a, getAtomState(a));
var aMounted = _mountAtom(batch, a, getAtomState(a));
aMounted.t.add(atom);

@@ -491,6 +492,6 @@ atomState.m.d.add(a);

for (var _iterator7 = _createForOfIteratorHelperLoose(atomState.m.d || []), _step7; !(_step7 = _iterator7()).done;) {
var _a = _step7.value;
if (!atomState.d.has(_a)) {
atomState.m.d.delete(_a);
var _aMounted = _unmountAtom(pending, _a, getAtomState(_a));
var _a2 = _step7.value;
if (!atomState.d.has(_a2)) {
atomState.m.d.delete(_a2);
var _aMounted = _unmountAtom(batch, _a2, getAtomState(_a2));
_aMounted == null || _aMounted.t.delete(atom);

@@ -501,8 +502,8 @@ }

};
var _mountAtom = function mountAtom(pending, atom, atomState) {
var _mountAtom = function mountAtom(batch, atom, atomState) {
if (!atomState.m) {
_readAtomState(pending, atom);
_readAtomState(batch, atom);
for (var _iterator8 = _createForOfIteratorHelperLoose(atomState.d.keys()), _step8; !(_step8 = _iterator8()).done;) {
var a = _step8.value;
var aMounted = _mountAtom(pending, a, getAtomState(a));
var aMounted = _mountAtom(batch, a, getAtomState(a));
aMounted.t.add(atom);

@@ -515,9 +516,6 @@ }

};
if (process.env.NODE_ENV !== 'production') {
debugMountedAtoms.add(atom);
}
if (isActuallyWritableAtom(atom)) {
var mounted = atomState.m;
var _setAtom;
var createInvocationContext = function createInvocationContext(pending, fn) {
var createInvocationContext = function createInvocationContext(batch, fn) {
var isSync = true;

@@ -529,6 +527,6 @@ _setAtom = function _setAtom() {

}
return _writeAtomState.apply(void 0, [pending, atom].concat(args));
return _writeAtomState.apply(void 0, [batch, atom].concat(args));
} finally {
if (!isSync) {
flushPending(pending);
flushBatch(batch);
}

@@ -543,4 +541,4 @@ }

};
addPendingFunction(pending, function () {
var onUnmount = createInvocationContext(pending, function () {
addBatchFunc(batch, 'L', function () {
var onUnmount = createInvocationContext(batch, function () {
return atomOnMount(atom, function () {

@@ -551,4 +549,4 @@ return _setAtom.apply(void 0, arguments);

if (onUnmount) {
mounted.u = function (pending) {
return createInvocationContext(pending, onUnmount);
mounted.u = function (batch) {
return createInvocationContext(batch, onUnmount);
};

@@ -561,3 +559,3 @@ }

};
var _unmountAtom = function unmountAtom(pending, atom, atomState) {
var _unmountAtom = function unmountAtom(batch, atom, atomState) {
if (atomState.m && !atomState.m.l.size && !Array.from(atomState.m.t).some(function (a) {

@@ -569,13 +567,10 @@ var _getAtomState$m;

if (onUnmount) {
addPendingFunction(pending, function () {
return onUnmount(pending);
addBatchFunc(batch, 'L', function () {
return onUnmount(batch);
});
}
delete atomState.m;
if (process.env.NODE_ENV !== 'production') {
debugMountedAtoms.delete(atom);
}
for (var _iterator9 = _createForOfIteratorHelperLoose(atomState.d.keys()), _step9; !(_step9 = _iterator9()).done;) {
var a = _step9.value;
var aMounted = _unmountAtom(pending, a, getAtomState(a));
var aMounted = _unmountAtom(batch, a, getAtomState(a));
aMounted == null || aMounted.t.delete(atom);

@@ -588,13 +583,13 @@ }

var subscribeAtom = function subscribeAtom(atom, listener) {
var pending = createPending();
var batch = createBatch();
var atomState = getAtomState(atom);
var mounted = _mountAtom(pending, atom, atomState);
var mounted = _mountAtom(batch, atom, atomState);
var listeners = mounted.l;
listeners.add(listener);
flushPending(pending);
flushBatch(batch);
return function () {
listeners.delete(listener);
var pending = createPending();
_unmountAtom(pending, atom, atomState);
flushPending(pending);
var batch = createBatch();
_unmountAtom(batch, atom, atomState);
flushBatch(batch);
};

@@ -611,41 +606,83 @@ };

};
if (process.env.NODE_ENV !== 'production') {
var devStore = {
dev4_get_internal_weak_map: function dev4_get_internal_weak_map() {
return {
get: function get(atom) {
var atomState = getAtomState(atom);
if (atomState.n === 0) {
return undefined;
return store;
};
var deriveDevStoreRev4 = function deriveDevStoreRev4(store) {
var proxyAtomStateMap = new WeakMap();
var debugMountedAtoms = new Set();
var savedGetAtomState;
var inRestoreAtom = 0;
var derivedStore = store.unstable_derive(function (getAtomState, atomRead, atomWrite, atomOnMount) {
savedGetAtomState = getAtomState;
return [function (atom) {
var proxyAtomState = proxyAtomStateMap.get(atom);
if (!proxyAtomState) {
var atomState = getAtomState(atom);
proxyAtomState = new Proxy(atomState, {
set: function set(target, prop, value) {
if (prop === 'm') {
debugMountedAtoms.add(atom);
}
return atomState;
return Reflect.set(target, prop, value);
},
deleteProperty: function deleteProperty(target, prop) {
if (prop === 'm') {
debugMountedAtoms.delete(atom);
}
return Reflect.deleteProperty(target, prop);
}
};
},
dev4_get_mounted_atoms: function dev4_get_mounted_atoms() {
return debugMountedAtoms;
},
dev4_restore_atoms: function dev4_restore_atoms(values) {
var pending = createPending();
for (var _iterator10 = _createForOfIteratorHelperLoose(values), _step10; !(_step10 = _iterator10()).done;) {
var _step10$value = _step10.value,
_atom = _step10$value[0],
value = _step10$value[1];
if (hasInitialValue(_atom)) {
var atomState = getAtomState(_atom);
var prevEpochNumber = atomState.n;
setAtomStateValueOrPromise(_atom, atomState, value);
mountDependencies(pending, _atom, atomState);
if (prevEpochNumber !== atomState.n) {
addPendingAtom(pending, _atom, atomState);
recomputeDependents(pending, _atom, atomState);
});
proxyAtomStateMap.set(atom, proxyAtomState);
}
return proxyAtomState;
}, atomRead, function (atom, getter, setter) {
for (var _len7 = arguments.length, args = new Array(_len7 > 3 ? _len7 - 3 : 0), _key7 = 3; _key7 < _len7; _key7++) {
args[_key7 - 3] = arguments[_key7];
}
if (inRestoreAtom) {
return setter.apply(void 0, [atom].concat(args));
}
return atomWrite.apply(void 0, [atom, getter, setter].concat(args));
}, atomOnMount];
});
var savedStoreSet = derivedStore.set;
var devStore = {
dev4_get_internal_weak_map: function dev4_get_internal_weak_map() {
return {
get: function get(atom) {
var atomState = savedGetAtomState(atom);
if (atomState.n === 0) {
return undefined;
}
return atomState;
}
};
},
dev4_get_mounted_atoms: function dev4_get_mounted_atoms() {
return debugMountedAtoms;
},
dev4_restore_atoms: function dev4_restore_atoms(values) {
var restoreAtom = {
read: function read() {
return null;
},
write: function write(_get, set) {
++inRestoreAtom;
try {
for (var _iterator10 = _createForOfIteratorHelperLoose(values), _step10; !(_step10 = _iterator10()).done;) {
var _step10$value = _step10.value,
_atom = _step10$value[0],
value = _step10$value[1];
if (hasInitialValue(_atom)) {
set(_atom, value);
}
}
} finally {
--inRestoreAtom;
}
}
flushPending(pending);
}
};
Object.assign(store, devStore);
}
return store;
};
savedStoreSet(restoreAtom);
}
};
return Object.assign(derivedStore, devStore);
};

@@ -669,12 +706,7 @@ var createStore = function createStore() {

};
return _buildStore(getAtomState, function (atom) {
for (var _len7 = arguments.length, params = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
params[_key7 - 1] = arguments[_key7];
}
return atom.read.apply(atom, params);
}, function (atom) {
var store = _buildStore(getAtomState, function (atom) {
for (var _len8 = arguments.length, params = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
params[_key8 - 1] = arguments[_key8];
}
return atom.write.apply(atom, params);
return atom.read.apply(atom, params);
}, function (atom) {

@@ -684,4 +716,13 @@ for (var _len9 = arguments.length, params = new Array(_len9 > 1 ? _len9 - 1 : 0), _key9 = 1; _key9 < _len9; _key9++) {

}
return atom.write.apply(atom, params);
}, function (atom) {
for (var _len10 = arguments.length, params = new Array(_len10 > 1 ? _len10 - 1 : 0), _key10 = 1; _key10 < _len10; _key10++) {
params[_key10 - 1] = arguments[_key10];
}
return atom.onMount == null ? void 0 : atom.onMount.apply(atom, params);
});
if (process.env.NODE_ENV !== 'production') {
return deriveDevStoreRev4(store);
}
return store;
};

@@ -688,0 +729,0 @@ var defaultStore;

@@ -21,3 +21,3 @@ import type { Atom, WritableAtom } from './atom';

/** Function to run when the atom is unmounted. */
u?: (pending: Pending) => void;
u?: (batch: Batch) => void;
};

@@ -48,8 +48,15 @@ /**

e?: AnyError;
/** Indicates that the atom value has been changed */
x?: true;
};
type Pending = readonly [
dependents: Map<AnyAtom, Set<AnyAtom>>,
atomStates: Map<AnyAtom, AtomState>,
functions: Set<() => void>
];
type Batch = Readonly<{
/** Atom dependents map */
D: Map<AnyAtom, Set<AnyAtom>>;
/** High priority functions */
H: Set<() => void>;
/** Medium priority functions */
M: Set<() => void>;
/** Low priority functions */
L: Set<() => void>;
}>;
type StoreArgs = readonly [

@@ -68,3 +75,3 @@ getAtomState: <Value>(atom: Atom<Value>) => AtomState<Value>,

};
type PrdStore = {
type Store = {
get: <Value>(atom: Atom<Value>) => Value;

@@ -75,7 +82,7 @@ set: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;

};
type Store = PrdStore | (PrdStore & DevStoreRev4);
export type INTERNAL_DevStoreRev4 = DevStoreRev4;
export type INTERNAL_PrdStore = PrdStore;
export declare const createStore: () => Store;
export declare const getDefaultStore: () => Store;
export type INTERNAL_PrdStore = Store;
type PrdOrDevStore = Store | (Store & DevStoreRev4);
export declare const createStore: () => PrdOrDevStore;
export declare const getDefaultStore: () => PrdOrDevStore;
export {};

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc