@solidjs/signals 0.9.2 → 0.9.3

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/prod.js CHANGED
@@ -32,6 +32,7 @@ const EFFECT_USER = 2;
32
32
  const NOT_PENDING = {};
33
33
  const SUPPORTS_PROXY = typeof Proxy === "function";
34
34
  const defaultContext = {};
35
+ const $REFRESH = Symbol("refresh");
35
36
  function actualInsertIntoHeap(e, t) {
36
37
  const n = (e.i?.t ? e.i.u?.o : e.i?.o) ?? -1;
37
38
  if (n >= e.o) e.o = n + 1;
@@ -138,7 +139,7 @@ let scheduled = false;
138
139
  function schedule() {
139
140
  if (scheduled) return;
140
141
  scheduled = true;
141
- if (!globalQueue.k) queueMicrotask(flush);
142
+ if (!globalQueue.k) Promise.resolve().then(() => queueMicrotask(flush));
142
143
  }
143
144
  class Queue {
144
145
  i = null;
@@ -223,6 +224,8 @@ class GlobalQueue extends Queue {
223
224
  return;
224
225
  }
225
226
  this.$.push(...activeTransition.pendingNodes);
227
+ this.L !== activeTransition.optimisticNodes &&
228
+ this.L.push(...activeTransition.optimisticNodes);
226
229
  this.restoreQueues(activeTransition.queueStash);
227
230
  transitions.delete(activeTransition);
228
231
  activeTransition = null;
@@ -252,11 +255,12 @@ class GlobalQueue extends Queue {
252
255
  initTransition(e) {
253
256
  if (activeTransition && activeTransition.time === clock) return;
254
257
  if (!activeTransition) {
255
- activeTransition = e.K ?? {
258
+ activeTransition = e?.K ?? {
256
259
  time: clock,
257
260
  pendingNodes: [],
258
261
  asyncNodes: [],
259
262
  optimisticNodes: [],
263
+ actions: [],
260
264
  queueStash: { G: [[], []], H: [] },
261
265
  done: false
262
266
  };
@@ -336,6 +340,7 @@ function runQueue(e, t) {
336
340
  }
337
341
  function transitionComplete(e) {
338
342
  if (e.done) return true;
343
+ if (e.actions.length) return false;
339
344
  let t = true;
340
345
  for (let n = 0; n < e.asyncNodes.length; n++) {
341
346
  if (e.asyncNodes[n].J & STATUS_PENDING) {
@@ -348,9 +353,38 @@ function transitionComplete(e) {
348
353
  }
349
354
  function runInTransition(e, t) {
350
355
  const n = activeTransition;
351
- activeTransition = e.K;
352
- t(e);
353
- activeTransition = n;
356
+ try {
357
+ activeTransition = e;
358
+ return t();
359
+ } finally {
360
+ activeTransition = n;
361
+ }
362
+ }
363
+ function action(e) {
364
+ return (...t) => {
365
+ const n = e(...t);
366
+ globalQueue.initTransition();
367
+ let i = activeTransition;
368
+ i.actions.push(n);
369
+ const step = e => {
370
+ let t = n.next(e);
371
+ if (t instanceof Promise) return t.then(process);
372
+ process(t);
373
+ };
374
+ const process = e => {
375
+ if (e.done) {
376
+ i.actions.splice(i.actions.indexOf(n), 1);
377
+ activeTransition = i;
378
+ schedule();
379
+ flush();
380
+ return;
381
+ }
382
+ const t = e.value;
383
+ if (t instanceof Promise) return t.then(step);
384
+ runInTransition(i, () => step(t));
385
+ };
386
+ runInTransition(i, () => step());
387
+ };
354
388
  }
355
389
  GlobalQueue.F = recompute;
356
390
  GlobalQueue.W = disposeChildren;
@@ -410,7 +444,7 @@ function recompute(e, t = false) {
410
444
  else e.D = null;
411
445
  }
412
446
  }
413
- const c = !e.ue || !e.ue(e.M === NOT_PENDING || e.oe || n ? e.Y : e.M, r);
447
+ const c = !e.ue || !e.ue(e.M === NOT_PENDING || (e.oe && e.K) || n ? e.Y : e.M, r);
414
448
  const a = e.J !== o || e.j !== u;
415
449
  e.le?.(a, o);
416
450
  if (c || a) {
@@ -427,7 +461,7 @@ function recompute(e, t = false) {
427
461
  }
428
462
  e.oe && !optimisticRun && globalQueue.L.push(e);
429
463
  (!t || e.J & STATUS_PENDING) && !e.K && globalQueue.$.push(e);
430
- e.K && n && runInTransition(e, recompute);
464
+ e.K && n && runInTransition(e.K, () => recompute(e));
431
465
  }
432
466
  function handleAsync(e, t, n) {
433
467
  const i = typeof t === "object" && t !== null;
@@ -725,17 +759,6 @@ function read(e) {
725
759
  }
726
760
  }
727
761
  }
728
- if (pendingCheck) {
729
- if (!e.q) {
730
- e.q = signal(false);
731
- e.q.oe = true;
732
- e.q.Z = t => setSignal(e.q, t);
733
- }
734
- const t = pendingCheck;
735
- pendingCheck = null;
736
- t.Y = read(e.q) || t.Y;
737
- pendingCheck = t;
738
- }
739
762
  if (pendingValueCheck) {
740
763
  if (!e.ce) {
741
764
  e.ce = signal(e.Y);
@@ -748,10 +771,22 @@ function read(e) {
748
771
  pendingValueCheck = true;
749
772
  }
750
773
  }
751
- if (e.J & STATUS_PENDING && !pendingCheck) {
752
- if ((t && !stale) || e.J & STATUS_UNINITIALIZED) throw e.j;
774
+ const n = e.m || e;
775
+ if (pendingCheck) {
776
+ if (!n.q) {
777
+ n.q = signal(false);
778
+ n.q.oe = true;
779
+ n.q.Z = e => setSignal(n.q, e);
780
+ }
781
+ const e = pendingCheck;
782
+ pendingCheck = null;
783
+ e.Y = read(n.q) || e.Y;
784
+ pendingCheck = e;
785
+ }
786
+ if (!pendingCheck && n.J & STATUS_PENDING) {
787
+ if ((t && !stale) || n.J & STATUS_UNINITIALIZED || e.m) throw n.j;
753
788
  else if (t && stale) {
754
- setStatusFlags(t, t.J | 1, e.j);
789
+ setStatusFlags(t, t.J | STATUS_PENDING, n.j);
755
790
  }
756
791
  }
757
792
  if (e.J & STATUS_ERROR) {
@@ -773,7 +808,7 @@ function setSignal(e, t) {
773
808
  if (typeof t === "function") {
774
809
  t = t(e.M === NOT_PENDING || (e.oe && e.K) ? e.Y : e.M);
775
810
  }
776
- const n = !e.ue || !e.ue(e.M === NOT_PENDING || e.oe ? e.Y : e.M, t);
811
+ const n = !e.ue || !e.ue(e.M === NOT_PENDING || (e.oe && e.K) ? e.Y : e.M, t);
777
812
  if (!n && !e.J) return t;
778
813
  if (n) {
779
814
  if (e.oe) e.Y = t;
@@ -885,6 +920,10 @@ function refresh(e) {
885
920
  let t = refreshing;
886
921
  refreshing = true;
887
922
  try {
923
+ if (typeof e !== "function") {
924
+ recompute(e[$REFRESH]);
925
+ return e;
926
+ }
888
927
  return untrack(e);
889
928
  } finally {
890
929
  refreshing = t;
@@ -1076,7 +1115,7 @@ function unwrap(e) {
1076
1115
  return e?.[$TARGET]?.[STORE_NODE] ?? e;
1077
1116
  }
1078
1117
  function getOverrideValue(e, t, n, i) {
1079
- return n && i in n ? read(n[i]) : t && i in t ? t[i] : e[i];
1118
+ return t && i in t ? t[i] : e[i];
1080
1119
  }
1081
1120
  function getAllKeys(e, t, n) {
1082
1121
  const i = getKeys(e, t);
@@ -1157,10 +1196,12 @@ function applyState(e, t, n, i) {
1157
1196
  } else r[STORE_NODE][a] && setSignal(r[STORE_NODE][a], wrap(e[a], r));
1158
1197
  }
1159
1198
  if (f < e.length) t = true;
1160
- } else if (l && e.length) {
1199
+ } else if (e.length) {
1161
1200
  for (let t = 0, l = e.length; t < l; t++) {
1162
1201
  const l = getOverrideValue(s, o, u, t);
1163
- isWrappable(l) && applyState(e[t], wrap(l, r), n, i);
1202
+ isWrappable(l)
1203
+ ? applyState(e[t], wrap(l, r), n, i)
1204
+ : r[STORE_NODE][t] && setSignal(r[STORE_NODE][t], e[t]);
1164
1205
  }
1165
1206
  }
1166
1207
  if (l !== e.length) {
@@ -1206,34 +1247,70 @@ function reconcile(e, t, n = false) {
1206
1247
  function createProjectionInternal(e, t = {}, n) {
1207
1248
  let i;
1208
1249
  const r = new WeakMap();
1250
+ const wrapper = e => {
1251
+ e[STORE_WRAP] = wrapProjection;
1252
+ e[STORE_LOOKUP] = r;
1253
+ Object.defineProperty(e, STORE_FIREWALL, {
1254
+ get() {
1255
+ return i;
1256
+ },
1257
+ configurable: true
1258
+ });
1259
+ };
1209
1260
  const wrapProjection = e => {
1210
1261
  if (r.has(e)) return r.get(e);
1211
1262
  if (e[$TARGET]?.[STORE_WRAP] === wrapProjection) return e;
1212
- const t = createStoreProxy(e, storeTraps, {
1213
- [STORE_WRAP]: wrapProjection,
1214
- [STORE_LOOKUP]: r,
1215
- [STORE_FIREWALL]() {
1216
- return i;
1217
- }
1218
- });
1263
+ const t = createStoreProxy(e, storeTraps, wrapper);
1219
1264
  r.set(e, t);
1220
1265
  return t;
1221
1266
  };
1222
1267
  const s = wrapProjection(t);
1223
1268
  i = computed(() => {
1224
1269
  const t = i || getOwner();
1225
- storeSetter(s, i => {
1226
- const r = handleAsync(t, e(i), e => {
1227
- e !== i && e !== undefined && storeSetter(s, reconcile(e, n?.key || "id", n?.all));
1270
+ storeSetter(new Proxy(s, writeTraps), r => {
1271
+ const o = handleAsync(t, e(r), e => {
1272
+ e !== s && e !== undefined && storeSetter(s, reconcile(e, n?.key || "id", n?.all));
1273
+ setSignal(i, undefined);
1228
1274
  });
1229
- r !== i && r !== undefined && reconcile(r, n?.key || "id", n?.all)(i);
1275
+ o !== s && o !== undefined && reconcile(o, n?.key || "id", n?.all)(s);
1230
1276
  });
1231
1277
  });
1278
+ i.Te = true;
1232
1279
  return { store: s, node: i };
1233
1280
  }
1234
1281
  function createProjection(e, t = {}, n) {
1235
1282
  return createProjectionInternal(e, t, n).store;
1236
1283
  }
1284
+ const writeTraps = {
1285
+ get(e, t) {
1286
+ let n;
1287
+ setWriteOverride(true);
1288
+ try {
1289
+ n = e[t];
1290
+ } finally {
1291
+ setWriteOverride(false);
1292
+ }
1293
+ return typeof n === "object" && n !== null ? new Proxy(n, writeTraps) : n;
1294
+ },
1295
+ set(e, t, n) {
1296
+ setWriteOverride(true);
1297
+ try {
1298
+ e[t] = n;
1299
+ } finally {
1300
+ setWriteOverride(false);
1301
+ }
1302
+ return true;
1303
+ },
1304
+ deleteProperty(e, t) {
1305
+ setWriteOverride(true);
1306
+ try {
1307
+ delete e[t];
1308
+ } finally {
1309
+ setWriteOverride(false);
1310
+ }
1311
+ return true;
1312
+ }
1313
+ };
1237
1314
  const $TRACK = Symbol(0),
1238
1315
  $DEEP = Symbol(0),
1239
1316
  $TARGET = Symbol(0),
@@ -1253,7 +1330,7 @@ function createStoreProxy(e, t = storeTraps, n) {
1253
1330
  i = [];
1254
1331
  i.v = e;
1255
1332
  } else i = { v: e };
1256
- n && Object.assign(i, n);
1333
+ n && n(i);
1257
1334
  return (i[$PROXY] = new Proxy(i, t));
1258
1335
  }
1259
1336
  const storeLookup = new WeakMap();
@@ -1266,6 +1343,13 @@ function wrap(e, t) {
1266
1343
  function isWrappable(e) {
1267
1344
  return e != null && typeof e === "object" && !Object.isFrozen(e);
1268
1345
  }
1346
+ let writeOverride = false;
1347
+ function setWriteOverride(e) {
1348
+ writeOverride = e;
1349
+ }
1350
+ function writeOnly(e) {
1351
+ return writeOverride || !!Writing?.has(e);
1352
+ }
1269
1353
  function getNodes(e, t) {
1270
1354
  let n = e[t];
1271
1355
  if (!n) e[t] = n = Object.create(null);
@@ -1285,8 +1369,7 @@ function getNode(e, t, n, i, r = isEqual) {
1285
1369
  ));
1286
1370
  }
1287
1371
  function trackSelf(e, t = $TRACK) {
1288
- getObserver() &&
1289
- read(getNode(getNodes(e, STORE_NODE), t, undefined, e[STORE_FIREWALL]?.(), false));
1372
+ getObserver() && read(getNode(getNodes(e, STORE_NODE), t, undefined, e[STORE_FIREWALL], false));
1290
1373
  }
1291
1374
  function getKeys(e, t, n = true) {
1292
1375
  const i = untrack(() => (n ? Object.keys(e) : Reflect.ownKeys(e)));
@@ -1312,6 +1395,7 @@ const storeTraps = {
1312
1395
  get(e, t, n) {
1313
1396
  if (t === $TARGET) return e;
1314
1397
  if (t === $PROXY) return n;
1398
+ if (t === $REFRESH) return e[STORE_FIREWALL];
1315
1399
  if (t === $TRACK || t === $DEEP) {
1316
1400
  trackSelf(e, t);
1317
1401
  return n;
@@ -1325,12 +1409,12 @@ const storeTraps = {
1325
1409
  const e = Object.getOwnPropertyDescriptor(u, t);
1326
1410
  if (e && e.get) return e.get.call(n);
1327
1411
  }
1328
- if (Writing?.has(n)) {
1412
+ if (writeOnly(n)) {
1329
1413
  let n = r && (s || !o) ? (r.M !== NOT_PENDING ? r.M : r.Y) : u[t];
1330
1414
  n === $DELETED && (n = undefined);
1331
1415
  if (!isWrappable(n)) return n;
1332
1416
  const i = wrap(n, e);
1333
- Writing.add(i);
1417
+ Writing?.add(i);
1334
1418
  return i;
1335
1419
  }
1336
1420
  let l = r ? (s || !o ? read(i[t]) : (read(i[t]), u[t])) : u[t];
@@ -1344,7 +1428,7 @@ const storeTraps = {
1344
1428
  ? l.bind(u)
1345
1429
  : l;
1346
1430
  } else if (getObserver()) {
1347
- return read(getNode(i, t, isWrappable(l) ? wrap(l, e) : l, e[STORE_FIREWALL]?.()));
1431
+ return read(getNode(i, t, isWrappable(l) ? wrap(l, e) : l, e[STORE_FIREWALL]));
1348
1432
  }
1349
1433
  }
1350
1434
  return isWrappable(l) ? wrap(l, e) : l;
@@ -1355,12 +1439,12 @@ const storeTraps = {
1355
1439
  e[STORE_OVERRIDE] && t in e[STORE_OVERRIDE]
1356
1440
  ? e[STORE_OVERRIDE][t] !== $DELETED
1357
1441
  : t in e[STORE_VALUE];
1358
- getObserver() && read(getNode(getNodes(e, STORE_HAS), t, n, e[STORE_FIREWALL]?.()));
1442
+ getObserver() && read(getNode(getNodes(e, STORE_HAS), t, n, e[STORE_FIREWALL]));
1359
1443
  return n;
1360
1444
  },
1361
1445
  set(e, t, n) {
1362
1446
  const i = e[$PROXY];
1363
- if (Writing?.has(e[$PROXY])) {
1447
+ if (writeOnly(i)) {
1364
1448
  untrack(() => {
1365
1449
  const r = e[STORE_VALUE];
1366
1450
  const s = r[t];
@@ -1389,7 +1473,7 @@ const storeTraps = {
1389
1473
  return true;
1390
1474
  },
1391
1475
  deleteProperty(e, t) {
1392
- if (Writing?.has(e[$PROXY]) && e[STORE_OVERRIDE]?.[t] !== $DELETED) {
1476
+ if (writeOnly(e[$PROXY]) && e[STORE_OVERRIDE]?.[t] !== $DELETED) {
1393
1477
  untrack(() => {
1394
1478
  const n =
1395
1479
  e[STORE_OVERRIDE] && t in e[STORE_OVERRIDE] ? e[STORE_OVERRIDE][t] : e[STORE_VALUE][t];
@@ -2088,6 +2172,7 @@ export {
2088
2172
  NoOwnerError,
2089
2173
  NotReadyError,
2090
2174
  SUPPORTS_PROXY,
2175
+ action,
2091
2176
  createBoundary,
2092
2177
  createContext,
2093
2178
  createEffect,
@@ -16,3 +16,4 @@ export declare const EFFECT_USER = 2;
16
16
  export declare const NOT_PENDING: {};
17
17
  export declare const SUPPORTS_PROXY: boolean;
18
18
  export declare const defaultContext: {};
19
+ export declare const $REFRESH: unique symbol;
@@ -1,4 +1,4 @@
1
- import { NOT_PENDING } from "./constants.js";
1
+ import { $REFRESH, NOT_PENDING } from "./constants.js";
2
2
  import { type IQueue, type Transition } from "./scheduler.js";
3
3
  export interface Disposable {
4
4
  (): void;
@@ -118,5 +118,7 @@ export declare function runWithOwner<T>(owner: Owner | null, fn: () => T): T;
118
118
  export declare function staleValues<T>(fn: () => T, set?: boolean): T;
119
119
  export declare function pending<T>(fn: () => T): T;
120
120
  export declare function isPending(fn: () => any): boolean;
121
- export declare function refresh<T>(fn: () => T): T;
121
+ export declare function refresh<T>(fn: (() => T) | (T & {
122
+ [$REFRESH]: any;
123
+ })): T;
122
124
  export declare function isRefreshing(): boolean;
@@ -2,5 +2,5 @@ export { ContextNotFoundError, NoOwnerError, NotReadyError } from "./error.js";
2
2
  export { createContext, getContext, setContext, type Context, type ContextRecord } from "./context.js";
3
3
  export { getObserver, isEqual, untrack, getOwner, runWithOwner, createOwner, createRoot, computed, dispose, signal, read, setSignal, onCleanup, getNextChildId, isPending, pending, refresh, isRefreshing, staleValues, handleAsync, type Owner, type Computed, type Root, type Signal, type SignalOptions } from "./core.js";
4
4
  export { effect, type Effect } from "./effect.js";
5
- export { flush, Queue, type IQueue, type QueueCallback } from "./scheduler.js";
5
+ export { action, flush, Queue, type IQueue, type QueueCallback } from "./scheduler.js";
6
6
  export * from "./constants.js";
@@ -15,8 +15,9 @@ export interface Transition {
15
15
  asyncNodes: Computed<any>[];
16
16
  pendingNodes: Signal<any>[];
17
17
  optimisticNodes: Signal<any>[];
18
+ actions: Array<Generator<any, any, any> | AsyncGenerator<any, any, any>>;
18
19
  queueStash: QueueStub;
19
- done: boolean;
20
+ done: boolean | Transition;
20
21
  }
21
22
  export declare function schedule(): void;
22
23
  export interface IQueue {
@@ -51,7 +52,7 @@ export declare class GlobalQueue extends Queue {
51
52
  static _dispose: (el: Computed<unknown>, self: boolean, zombie: boolean) => void;
52
53
  flush(): void;
53
54
  notify(node: Computed<any>, mask: number, flags: number): boolean;
54
- initTransition(node: Computed<any>): void;
55
+ initTransition(node?: Computed<any>): void;
55
56
  }
56
57
  export declare function notifySubs(node: Signal<any> | Computed<any>): void;
57
58
  export declare function runOptimistic(activeTransition?: Transition | null): void;
@@ -61,5 +62,6 @@ export declare const globalQueue: GlobalQueue;
61
62
  * the queue synchronously to get the latest updates by calling `flush()`.
62
63
  */
63
64
  export declare function flush(): void;
64
- export declare function runInTransition(el: Computed<unknown>, recompute: (el: Computed<unknown>) => void): void;
65
+ export declare function runInTransition<T>(transition: Transition, fn: () => T): T;
66
+ export declare function action<Args extends any[], Y, R>(genFn: (...args: Args) => Generator<Y, R, any> | AsyncGenerator<Y, R, any>): (...args: Args) => void;
65
67
  export {};
@@ -1,4 +1,4 @@
1
- export { ContextNotFoundError, NoOwnerError, NotReadyError, createContext, createRoot, runWithOwner, flush, getNextChildId, getContext, setContext, getOwner, onCleanup, getObserver, isEqual, untrack, isPending, pending, isRefreshing, refresh, SUPPORTS_PROXY } from "./core/index.js";
1
+ export { ContextNotFoundError, NoOwnerError, NotReadyError, action, createContext, createRoot, runWithOwner, flush, getNextChildId, getContext, setContext, getOwner, onCleanup, getObserver, isEqual, untrack, isPending, pending, isRefreshing, refresh, SUPPORTS_PROXY } from "./core/index.js";
2
2
  export type { Owner, SignalOptions, Context, ContextRecord, IQueue } from "./core/index.js";
3
3
  export * from "./signals.js";
4
4
  export { mapArray, repeat, type Maybe } from "./map.js";
@@ -1,11 +1,16 @@
1
+ import { $REFRESH, type Computed } from "../core/index.js";
1
2
  import { type Store, type StoreOptions } from "./store.js";
2
3
  export declare function createProjectionInternal<T extends object = {}>(fn: (draft: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, initialValue?: T, options?: StoreOptions): {
3
- store: Readonly<T>;
4
- node: any;
4
+ store: Store<T> & {
5
+ [$REFRESH]: any;
6
+ };
7
+ node: Computed<void | T>;
5
8
  };
6
9
  /**
7
10
  * Creates a mutable derived value
8
11
  *
9
12
  * @see {@link https://github.com/solidjs/x-reactivity#createprojection}
10
13
  */
11
- export declare function createProjection<T extends Object = {}>(fn: (draft: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, initialValue?: T, options?: StoreOptions): Store<T>;
14
+ export declare function createProjection<T extends object = {}>(fn: (draft: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, initialValue?: T, options?: StoreOptions): Store<T> & {
15
+ [$REFRESH]: any;
16
+ };
@@ -1,4 +1,4 @@
1
- import { type Computed, type Signal } from "../core/index.js";
1
+ import { $REFRESH, type Computed, type Signal } from "../core/index.js";
2
2
  export type Store<T> = Readonly<T>;
3
3
  export type StoreSetter<T> = (fn: (state: T) => T | void) => void;
4
4
  export type StoreOptions = {
@@ -17,22 +17,26 @@ export type StoreNode = {
17
17
  [STORE_HAS]?: DataNodes;
18
18
  [STORE_WRAP]?: (value: any, target?: StoreNode) => any;
19
19
  [STORE_LOOKUP]?: WeakMap<any, any>;
20
- [STORE_FIREWALL]?: () => Computed<any>;
20
+ [STORE_FIREWALL]?: Computed<any>;
21
21
  };
22
22
  export declare namespace SolidStore {
23
23
  interface Unwrappable {
24
24
  }
25
25
  }
26
26
  export type NotWrappable = string | number | bigint | symbol | boolean | Function | null | undefined | SolidStore.Unwrappable[keyof SolidStore.Unwrappable];
27
- export declare function createStoreProxy<T extends object>(value: T, traps?: ProxyHandler<StoreNode>, extend?: Record<PropertyKey, any>): any;
28
- export declare const storeLookup: WeakMap<object, any>;
27
+ export declare function createStoreProxy<T extends object>(value: T, traps?: ProxyHandler<StoreNode>, extend?: (target: StoreNode) => void): any;
28
+ export declare const storeLookup: WeakMap<WeakKey, any>;
29
29
  export declare function wrap<T extends Record<PropertyKey, any>>(value: T, target?: StoreNode): T;
30
30
  export declare function isWrappable<T>(obj: T | NotWrappable): obj is T;
31
+ export declare function setWriteOverride(value: boolean): void;
31
32
  export declare function getKeys(source: Record<PropertyKey, any>, override: Record<PropertyKey, any> | undefined, enumerable?: boolean): PropertyKey[];
32
33
  export declare function getPropertyDescriptor(source: Record<PropertyKey, any>, override: Record<PropertyKey, any> | undefined, property: PropertyKey): PropertyDescriptor | undefined;
33
34
  export declare const storeTraps: ProxyHandler<StoreNode>;
34
35
  export declare function storeSetter<T extends object>(store: Store<T>, fn: (draft: T) => T | void): void;
35
- export declare function createStore<T extends object = {}>(store: T | Store<T>): [get: Store<T>, set: StoreSetter<T>];
36
- export declare function createStore<T extends object = {}>(fn: (store: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, store: T | Store<T>, options?: StoreOptions): [get: Store<T>, set: StoreSetter<T>];
36
+ type NoFn<T> = T extends Function ? never : T;
37
+ export declare function createStore<T extends object = {}>(store: NoFn<T> | Store<NoFn<T>>): [get: Store<T>, set: StoreSetter<T>];
38
+ export declare function createStore<T extends object = {}>(fn: (store: T) => void | T | Promise<void | T> | AsyncIterable<void | T>, store?: NoFn<T> | Store<NoFn<T>>, options?: StoreOptions): [get: Store<T> & {
39
+ [$REFRESH]: any;
40
+ }, set: StoreSetter<T>];
37
41
  export declare function deep<T extends object>(store: Store<T>): Store<T>;
38
42
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidjs/signals",
3
- "version": "0.9.2",
3
+ "version": "0.9.3",
4
4
  "description": "",
5
5
  "author": "Ryan Carniato",
6
6
  "license": "MIT",
@@ -23,12 +23,12 @@
23
23
  "@rollup/plugin-replace": "^6.0.3",
24
24
  "@rollup/plugin-terser": "^0.4.4",
25
25
  "@rollup/plugin-typescript": "^12.3.0",
26
- "@types/node": "^20.5.1",
26
+ "@types/node": "^25.0.8",
27
27
  "rimraf": "^5.0.1",
28
28
  "rollup": "^4.53.4",
29
29
  "rollup-plugin-prettier": "^4.1.2",
30
30
  "tslib": "^2.8.1",
31
- "typescript": "5.1.6",
31
+ "typescript": "5.9.3",
32
32
  "vite": "^5.4.10",
33
33
  "vitest": "^2.0.0"
34
34
  },