valdres 0.2.0-alpha.69 → 0.2.0-alpha.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -136,6 +136,43 @@ var isSelectorFamily = (state) => state && Object.hasOwn(state, "__valdresSelect
136
136
  // src/lib/isFunction.ts
137
137
  var isFunction = (value) => typeof value === "function";
138
138
 
139
+ // src/utils/deepFreeze.ts
140
+ var deepFreeze = (obj, seen = new WeakSet) => {
141
+ if (seen.has(obj))
142
+ return obj;
143
+ if (obj && typeof obj === "object")
144
+ seen.add(obj);
145
+ if (Array.isArray(obj)) {
146
+ for (const item of obj) {
147
+ if (item && typeof item === "object") {
148
+ deepFreeze(item, seen);
149
+ }
150
+ }
151
+ } else {
152
+ const propNames = Object.getOwnPropertyNames(obj);
153
+ for (const name of propNames) {
154
+ const value = obj[name];
155
+ if (value && typeof value === "object") {
156
+ deepFreeze(value, seen);
157
+ }
158
+ }
159
+ }
160
+ return Object.freeze(obj);
161
+ };
162
+
163
+ // src/lib/setValueInData.ts
164
+ var isProd = true;
165
+ var setValueInData = (atom, value, data) => {
166
+ if (isProd) {
167
+ data.values.set(atom, value);
168
+ return value;
169
+ } else {
170
+ const frozenValue = deepFreeze(value);
171
+ data.values.set(atom, frozenValue);
172
+ return frozenValue;
173
+ }
174
+ };
175
+
139
176
  // src/lib/setAtom.ts
140
177
  var setAtom = (atom, newValue, data, skipOnSet = false) => {
141
178
  const currentValue = getState(atom, data);
@@ -146,15 +183,14 @@ var setAtom = (atom, newValue, data, skipOnSet = false) => {
146
183
  }
147
184
  if (atom.equal(currentValue, newValue))
148
185
  return newValue;
149
- const frozenNewValue = newValue;
150
- data.values.set(atom, frozenNewValue);
186
+ newValue = setValueInData(atom, newValue, data);
151
187
  if (atom.onSet && !skipOnSet)
152
- atom.onSet(frozenNewValue, data);
188
+ atom.onSet(newValue, data);
153
189
  if (currentValue?.__isEmptyAtomPromise__) {
154
- currentValue.__resolveEmptyAtomPromise__(frozenNewValue);
190
+ currentValue.__resolveEmptyAtomPromise__(newValue);
155
191
  }
156
192
  propagateUpdatedAtoms([atom], data);
157
- return frozenNewValue;
193
+ return newValue;
158
194
  };
159
195
 
160
196
  // src/lib/initAtom.ts
@@ -171,7 +207,7 @@ var getAtomInitValue = (atom, data) => {
171
207
  const value = atom.defaultValue();
172
208
  if (isPromiseLike(value)) {
173
209
  value.then((resolvedValue) => {
174
- data.values.set(atom, resolvedValue);
210
+ setValueInData(atom, resolvedValue, data);
175
211
  propagateUpdatedAtoms([atom], data);
176
212
  });
177
213
  }
@@ -183,8 +219,8 @@ var getAtomInitValue = (atom, data) => {
183
219
  }
184
220
  };
185
221
  var initAtom = (atom, data) => {
186
- let value = getAtomInitValue(atom, data);
187
- data.values.set(atom, value);
222
+ const tmpVal = getAtomInitValue(atom, data);
223
+ let value = setValueInData(atom, tmpVal, data);
188
224
  if (isFamilyAtom(atom)) {
189
225
  const currentKeySet = getState(atom.family.__keysAtom, data);
190
226
  if (!currentKeySet.has(atom.familyKey)) {
@@ -342,7 +378,7 @@ var handleSelectorResult = (value, selector, data) => {
342
378
  return value.promise;
343
379
  } else if (isPromiseLike(value)) {
344
380
  value.then((resolved) => {
345
- data.values.set(selector, resolved);
381
+ setValueInData(selector, resolved, data);
346
382
  updateStateSubscribers(selector, data);
347
383
  console.log("Should we reEvaluate?");
348
384
  });
@@ -364,12 +400,10 @@ var initSelector = (selector, data, circularDependencySet = new WeakSet) => {
364
400
  if (data.expiredValues.has(selector)) {
365
401
  const expiredValue = data.expiredValues.get(selector);
366
402
  if (selector.equal(expiredValue, value)) {
367
- data.values.set(selector, expiredValue);
368
- return expiredValue;
403
+ return setValueInData(selector, expiredValue, data);
369
404
  }
370
405
  }
371
- data.values.set(selector, value);
372
- return value;
406
+ return setValueInData(selector, value, data);
373
407
  };
374
408
 
375
409
  // src/lib/updateSelectorSubscribers.ts
@@ -464,7 +498,7 @@ function createStoreData(id, parent) {
464
498
  // src/lib/resetAtom.ts
465
499
  var resetAtom = (atom, data) => {
466
500
  let value = getAtomInitValue(atom, data);
467
- data.values.set(atom, value);
501
+ setValueInData(atom, value, data);
468
502
  if (!isPromiseLike(value)) {
469
503
  propagateUpdatedAtoms([atom], data);
470
504
  }
@@ -562,7 +596,7 @@ var subscribe = (state, callback, requireDeepEqualCheckBeforeCallback, data) =>
562
596
  value.then((res) => clearTimeout(timeout));
563
597
  }
564
598
  } else {
565
- data.values.set(state, value);
599
+ setValueInData(state, value, data);
566
600
  propagateUpdatedAtoms([state], data);
567
601
  }
568
602
  }, state.maxAge);
@@ -606,7 +640,7 @@ var setAtoms = (pairs, data) => {
606
640
  updatedAtoms.push(atom);
607
641
  if (atom.onSet)
608
642
  atom.onSet(value, data);
609
- data.values.set(atom, value);
643
+ setValueInData(atom, value, data);
610
644
  }
611
645
  }
612
646
  propagateUpdatedAtoms(updatedAtoms, data);
@@ -1140,6 +1174,7 @@ export {
1140
1174
  isAtom,
1141
1175
  index,
1142
1176
  globalStore,
1177
+ deepFreeze,
1143
1178
  createStoreWithSelectorSet,
1144
1179
  atomFamily,
1145
1180
  atom
@@ -9,6 +9,7 @@ export { index } from "./indexConstructor";
9
9
  export { selector } from "./selector";
10
10
  export { selectorFamily } from "./selectorFamily";
11
11
  export { store } from "./store";
12
+ export { deepFreeze } from "./utils/deepFreeze";
12
13
  export { isAtom } from "./utils/isAtom";
13
14
  export { isAtomFamily } from "./utils/isAtomFamily";
14
15
  export { isFamily } from "./utils/isFamily";
@@ -1,5 +1,5 @@
1
1
  import type { Atom } from "../types/Atom";
2
2
  import type { AtomFamilyAtom } from "../types/AtomFamilyAtom";
3
3
  import type { StoreData } from "../types/StoreData";
4
- export declare const getAtomInitValue: <V>(atom: Atom<V>, data: StoreData) => any;
5
- export declare const initAtom: <V, K>(atom: Atom<V> | AtomFamilyAtom<K, V>, data: StoreData) => any;
4
+ export declare const getAtomInitValue: <V = any>(atom: Atom<V>, data: StoreData) => any;
5
+ export declare const initAtom: <V, K>(atom: Atom<V> | AtomFamilyAtom<K, V>, data: StoreData) => V;
@@ -1,3 +1,3 @@
1
1
  import type { Atom } from "../types/Atom";
2
2
  import type { StoreData } from "../types/StoreData";
3
- export declare const setAtom: <Value = any>(atom: Atom<Value>, newValue: Value | ((currentValue: Value) => Value), data: StoreData, skipOnSet?: boolean) => any;
3
+ export declare const setAtom: <Value = any>(atom: Atom<Value>, newValue: Value | ((currentValue: Value) => Value), data: StoreData, skipOnSet?: boolean) => Value;
@@ -0,0 +1,3 @@
1
+ import type { Atom } from "../types/Atom";
2
+ import type { StoreData } from "../types/StoreData";
3
+ export declare const setValueInData: <Value = any>(atom: Atom<Value>, value: Value, data: StoreData) => Value;
@@ -0,0 +1 @@
1
+ export declare const deepFreeze: (obj: any, seen?: WeakSet<WeakKey>) => any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valdres",
3
- "version": "0.2.0-alpha.69",
3
+ "version": "0.2.0-alpha.70",
4
4
  "license": "MIT",
5
5
  "author": {
6
6
  "name": "Eigil Sagafos"
@@ -36,5 +36,5 @@
36
36
  "access": "public",
37
37
  "registry": "https://registry.npmjs.org/"
38
38
  },
39
- "gitHead": "302cb73fee8410a225d7c088211fc32520d79b3d"
39
+ "gitHead": "e30d9cd0edbaee91ec9f25f46f9e7a27baf52312"
40
40
  }