jotai-solid-api 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/doeixd/jotai-solid-api)
2
+
1
3
  # jotai-solid-api
2
4
 
3
5
  Solid-style reactive primitives on top of `jotai/vanilla`, plus a React component wrapper so app code can stay hook-free.
@@ -12,14 +14,19 @@ npm install jotai-solid-api jotai react
12
14
 
13
15
  - `component(setup, { memo?, displayName? })`
14
16
  - `createSignal(initial)`
17
+ - `createDeferred(source, options?)`
18
+ - `createUniqueId(prefix?)`
15
19
  - `fromSolidSignal(signal)` / `toSolidSignal(signal)`
16
20
  - `fromSignal(signal)` / `toSignal(signal)`
17
21
  - `createMemo(compute)`
18
22
  - `createEffect(effect)`
19
23
  - `createLayoutEffect(effect)`
20
24
  - `createComputed(compute)`
25
+ - `createReaction(onInvalidate)`
26
+ - `on(deps, fn, { defer? })`
21
27
  - `onMount(callback)`
22
28
  - `onCleanup(cleanup)` / `cleanup(cleanup)`
29
+ - `createRoot(init)`
23
30
  - `batch(fn)`
24
31
  - `createSelector(source, equals?)`
25
32
  - `resolveMaybeAccessor(value)` / `toValue(value)`
@@ -29,6 +36,8 @@ npm install jotai-solid-api jotai react
29
36
  - `createAsync(compute)`
30
37
  - `use(accessorOrPromise)`
31
38
  - `createStore(initial)` / `setStore(next)`
39
+ - `produce(recipe)`
40
+ - `reconcile(value, options?)`
32
41
  - `createMutable(initial)` / `createMutableStore(initial)`
33
42
  - `createReactiveArray(initial)` / `createArrayStore(initial)`
34
43
  - `createProjection(source, initialize, mutate)`
@@ -37,6 +46,7 @@ npm install jotai-solid-api jotai react
37
46
  - `lazy(loader)` / `Suspense`
38
47
  - `untrack(fn)`
39
48
  - control flow: `Show`, `For`, `Index`, `Switch`, `Match`
49
+ - props helpers: `mergeProps`, `splitProps`, `children`
40
50
 
41
51
  ### Aliases
42
52
 
@@ -144,6 +154,9 @@ export const App = component(() => {
144
154
  ## Notes
145
155
 
146
156
  - `setup` runs once per component instance, and should return a render function (`() => ReactNode`).
157
+ - Primitives also work outside components using a default global reactive scope.
158
+ - Use `createRoot(...)` when you need an isolated disposable non-React scope.
159
+ - For SSR, avoid implicit globals: create primitives inside components or inside `createRoot(...)` per request.
147
160
  - Reads inside the render function are tracked and trigger rerenders.
148
161
  - Reads inside `createMemo` and effects are tracked and rerun when dependencies change.
149
162
  - `createStore` is immutable-by-default (`setStore` updates), while `createMutable` and `createReactiveArray` allow direct mutation.
package/dist/index.d.ts CHANGED
@@ -38,6 +38,19 @@ export type SolidSetter<T> = (nextValue: T | ((prev: T) => T)) => unknown;
38
38
  * ```
39
39
  */
40
40
  export type SolidSignal<T> = readonly [Accessor<T>, SolidSetter<T>];
41
+ /**
42
+ * Falsy values in JavaScript conditional checks.
43
+ */
44
+ export type Falsy = false | 0 | 0n | "" | null | undefined;
45
+ /**
46
+ * Removes JavaScript-falsy values from a type.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * type T = Truthy<string | null | ""> // string
51
+ * ```
52
+ */
53
+ export type Truthy<T> = Exclude<T, Falsy>;
41
54
  /**
42
55
  * Async resource lifecycle states.
43
56
  *
@@ -156,6 +169,34 @@ export declare const toSignal: typeof toSolidSignal;
156
169
  * ```
157
170
  */
158
171
  export declare function createMemo<T>(compute: () => T): Accessor<T>;
172
+ /**
173
+ * Defers propagation of a source accessor value.
174
+ *
175
+ * @param source Source accessor to defer.
176
+ * @param options Optional deferral settings.
177
+ * @returns Accessor containing the deferred value.
178
+ *
179
+ * @example
180
+ * ```ts
181
+ * const deferredQuery = createDeferred(query, { timeoutMs: 50 })
182
+ * ```
183
+ */
184
+ export declare function createDeferred<T>(source: Accessor<T>, options?: {
185
+ timeoutMs?: number;
186
+ equals?: (left: T, right: T) => boolean;
187
+ }): Accessor<T>;
188
+ /**
189
+ * Creates a unique id string for the current scope.
190
+ *
191
+ * @param prefix Prefix for the generated id.
192
+ * @returns Unique id string.
193
+ *
194
+ * @example
195
+ * ```ts
196
+ * const inputId = createUniqueId("field-")
197
+ * ```
198
+ */
199
+ export declare function createUniqueId(prefix?: string): string;
159
200
  /**
160
201
  * Alias for {@link createMemo}.
161
202
  *
@@ -256,7 +297,7 @@ export declare function onMount(callback: () => void | Cleanup): void;
256
297
  */
257
298
  export declare const mount: typeof onMount;
258
299
  /**
259
- * Registers cleanup in setup scope or currently running effect.
300
+ * Registers cleanup in the current effect, active setup scope, or default global scope.
260
301
  *
261
302
  * @param cleanup Cleanup callback invoked on re-run or scope disposal.
262
303
  *
@@ -278,6 +319,21 @@ export declare function onCleanup(cleanup: Cleanup): void;
278
319
  * ```
279
320
  */
280
321
  export declare const cleanup: typeof onCleanup;
322
+ /**
323
+ * Creates an isolated reactive scope and returns a disposal handle.
324
+ *
325
+ * @param init Initializer executed inside the new scope.
326
+ * @returns Return value of `init`.
327
+ *
328
+ * @example
329
+ * ```ts
330
+ * const value = createRoot((dispose) => {
331
+ * const [count, setCount] = createSignal(0)
332
+ * return { count, setCount, dispose }
333
+ * })
334
+ * ```
335
+ */
336
+ export declare function createRoot<T>(init: (dispose: () => void) => T): T;
281
337
  /**
282
338
  * Batches reactive notifications and flushes once at the end.
283
339
  *
@@ -293,6 +349,31 @@ export declare const cleanup: typeof onCleanup;
293
349
  * ```
294
350
  */
295
351
  export declare function batch<T>(fn: () => T): T;
352
+ /**
353
+ * Dependency helper for effects. Runs `fn` only when provided dependencies change.
354
+ *
355
+ * @param deps Dependency accessor or accessor list.
356
+ * @param fn Callback receiving current dependency values and previous values.
357
+ * @param options Optional behavior (`defer` skips the first invocation).
358
+ * @returns Effect callback compatible with `createEffect`.
359
+ *
360
+ * @example
361
+ * ```ts
362
+ * createEffect(
363
+ * on([userId, locale], ([id, nextLocale], prev) => {
364
+ * refetchUser(id, nextLocale)
365
+ * }, { defer: true }),
366
+ * )
367
+ * ```
368
+ */
369
+ export declare function on<T>(deps: Accessor<T>, fn: (input: T, prevInput: T | undefined, prevValue: undefined) => void, options?: {
370
+ defer?: boolean;
371
+ }): () => void;
372
+ export declare function on<T extends readonly unknown[]>(deps: {
373
+ [K in keyof T]: Accessor<T[K]>;
374
+ }, fn: (input: T, prevInput: T | undefined, prevValue: undefined) => void, options?: {
375
+ defer?: boolean;
376
+ }): () => void;
296
377
  /**
297
378
  * Executes a function without dependency tracking.
298
379
  *
@@ -305,6 +386,23 @@ export declare function batch<T>(fn: () => T): T;
305
386
  * ```
306
387
  */
307
388
  export declare function untrack<T>(fn: () => T): T;
389
+ /**
390
+ * Creates a manually armed reaction.
391
+ *
392
+ * The returned `track` function subscribes to dependencies read inside `trackFn`.
393
+ * When any dependency changes, `onInvalidate` runs once and the reaction disarms
394
+ * until `track(...)` is called again.
395
+ *
396
+ * @param onInvalidate Callback invoked when tracked dependencies change.
397
+ * @returns Track function used to arm the reaction.
398
+ *
399
+ * @example
400
+ * ```ts
401
+ * const track = createReaction(() => console.log("changed"))
402
+ * track(() => state.userId)
403
+ * ```
404
+ */
405
+ export declare function createReaction(onInvalidate: () => void): (trackFn: () => unknown) => void;
308
406
  /**
309
407
  * Creates an async resource from a fetcher.
310
408
  *
@@ -397,6 +495,34 @@ export declare function use<T>(value: PromiseLike<T>): T;
397
495
  * ```
398
496
  */
399
497
  export type SetStore<T> = (next: T | Partial<T> | ((prev: T) => T | Partial<T>)) => T;
498
+ /**
499
+ * Produces immutable updates using a mutable draft callback.
500
+ *
501
+ * @param recipe Draft mutator callback.
502
+ * @returns Updater function suitable for `setStore` or signal setters.
503
+ *
504
+ * @example
505
+ * ```ts
506
+ * setStore(produce((draft) => { draft.user.name = "Ada" }))
507
+ * ```
508
+ */
509
+ export declare function produce<T>(recipe: (draft: T) => void): (previous: T) => T;
510
+ /**
511
+ * Reconciles structural updates while preserving matching nested references.
512
+ *
513
+ * @param value Next value to reconcile into current state.
514
+ * @param options Reconciliation behavior.
515
+ * @returns Updater function suitable for `setStore` or signal setters.
516
+ *
517
+ * @example
518
+ * ```ts
519
+ * setStore(reconcile(nextData, { key: "id", merge: true }))
520
+ * ```
521
+ */
522
+ export declare function reconcile<T>(value: T, options?: {
523
+ key?: string | number;
524
+ merge?: boolean;
525
+ }): (previous: T) => T;
400
526
  /**
401
527
  * Creates an immutable reactive object store.
402
528
  *
@@ -675,6 +801,51 @@ export declare const defineComponent: typeof component;
675
801
  * ```
676
802
  */
677
803
  export type MaybeAccessor<T> = T | Accessor<T>;
804
+ type UnionToIntersection<T> = (T extends unknown ? (arg: T) => void : never) extends (arg: infer R) => void ? R : never;
805
+ /**
806
+ * Merges multiple props objects with lazy property resolution.
807
+ * Later sources take precedence.
808
+ *
809
+ * @param sources Props sources to merge.
810
+ * @returns Merged props proxy.
811
+ *
812
+ * @example
813
+ * ```ts
814
+ * const props = mergeProps({ a: 1 }, defaults, incoming)
815
+ * ```
816
+ */
817
+ export declare function mergeProps<TSources extends readonly object[]>(...sources: TSources): UnionToIntersection<TSources[number]>;
818
+ type SplitGroups<T extends object, Groups extends readonly (readonly (keyof T)[])[]> = {
819
+ [I in keyof Groups]: Pick<T, Groups[I][number]>;
820
+ };
821
+ /**
822
+ * Splits props into picked groups plus a remainder object.
823
+ *
824
+ * @param props Source props object.
825
+ * @param groups Key groups to pick.
826
+ * @returns Tuple of picked groups followed by remainder props.
827
+ *
828
+ * @example
829
+ * ```ts
830
+ * const [local, others] = splitProps(props, ["id", "name"])
831
+ * ```
832
+ */
833
+ export declare function splitProps<T extends object, Groups extends readonly (readonly (keyof T)[])[]>(props: T, ...groups: Groups): [...SplitGroups<T, Groups>, Omit<T, Groups[number][number]>];
834
+ /**
835
+ * Resolves and memoizes children access.
836
+ *
837
+ * @param fn Accessor returning children nodes.
838
+ * @returns Accessor with `toArray()` helper.
839
+ *
840
+ * @example
841
+ * ```ts
842
+ * const resolved = children(() => props().children)
843
+ * const list = resolved.toArray()
844
+ * ```
845
+ */
846
+ export declare function children(fn: Accessor<React.ReactNode>): Accessor<React.ReactNode> & {
847
+ toArray: () => React.ReactNode[];
848
+ };
678
849
  /**
679
850
  * Props for {@link Show}.
680
851
  *
@@ -685,13 +856,13 @@ export type MaybeAccessor<T> = T | Accessor<T>;
685
856
  */
686
857
  export type ShowProps<T> = {
687
858
  /** Condition value (or accessor). Truthy renders children, falsy renders fallback. */
688
- when: MaybeAccessor<T | null | undefined | false>;
859
+ when: MaybeAccessor<T | Falsy>;
689
860
  /** Content rendered when `when` is falsy. */
690
861
  fallback?: React.ReactNode;
691
862
  /** Reserved compatibility flag for Solid-style signatures. */
692
863
  keyed?: boolean;
693
864
  /** Render content or render function receiving narrowed truthy value. */
694
- children: React.ReactNode | ((value: NonNullable<T>) => React.ReactNode);
865
+ children: React.ReactNode | ((value: Truthy<T>) => React.ReactNode);
695
866
  };
696
867
  /**
697
868
  * Conditionally renders content when `when` is truthy.
@@ -771,9 +942,9 @@ export declare function Index<T>(props: IndexProps<T>): React.ReactNode;
771
942
  */
772
943
  export type MatchProps<T> = {
773
944
  /** Match condition (or accessor). First truthy Match is selected by Switch. */
774
- when: MaybeAccessor<T | null | undefined | false>;
945
+ when: MaybeAccessor<T | Falsy>;
775
946
  /** Render content or render function receiving narrowed truthy match value. */
776
- children: React.ReactNode | ((value: NonNullable<T>) => React.ReactNode);
947
+ children: React.ReactNode | ((value: Truthy<T>) => React.ReactNode);
777
948
  };
778
949
  /**
779
950
  * Switch branch marker consumed by {@link Switch}.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AA4W1B;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,OAAO,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG;IAC1D,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;IAChC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,YAAY,CAAC,EAAE,CAAC,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAOzE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,qBAAe,CAAC;AAEnC;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAOxF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAChD,WAAW,CAAC,CAAC,CAAC,CAMhB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,wBAAkB,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,QAAQ,sBAAgB,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAK3D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,mBAAa,CAAC;AAE/B;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAO/D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,qBAAe,CAAC;AAEnC;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAOrE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,2BAAqB,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAElE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,uBAAiB,CAAC;AAEvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAO5D;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,gBAAU,CAAC;AAE7B;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAahD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,kBAAY,CAAC;AAEjC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAUvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CASzC;AA8BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B;IACD,gBAAgB,CAAC,CAAC,CAAC;IACnB,gBAAgB,CAAC,CAAC,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EACjC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC3F,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B;IACD,gBAAgB,CAAC,CAAC,CAAC;IACnB,gBAAgB,CAAC,CAAC,CAAC;CACpB,CAAC;AA2GF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,uBAAiB,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAC7B,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,gBAAgB,CAAC,CAAC,CAAC,CAGrB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,oBAAc,CAAC;AAQvC;;;;;;;;;;;GAWG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9C,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAuPjD;;;;;;;;GAQG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEtF;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAgB/E;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,oBAAc,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,oBAAc,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAIlE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,sBAAgB,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAEvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,YAAY,GAAE,CAAC,EAAO,GAAG,CAAC,EAAE,CAElE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,GAAE,CAAC,EAAO,GAAG,CAAC,EAAE,CAE/D;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,OAAO,IAAI;IAC7E,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IAC/C,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9E,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,GAAG,OAAO,EAC5E,MAAM,EAAE,QAAQ,CAAC,SAAS,UAAU,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,EAC1D,OAAO,EAAE,sBAAsB,CAAC,UAAU,EAAE,aAAa,EAAE,GAAG,CAAC,GAC9D,aAAa,EAAE,CA0DjB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,8BAAwB,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CA2B3E;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,2BAAqB,CAAC;AAE/C,KAAK,iBAAiB,CAAC,MAAM,EAAE,MAAM,IAAI,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,KACnB,IAAI,CAAC;AAEV;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,SAAS,MAAM,EAC5D,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,EACtC,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,GACxC,MAAM,CAcR;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,yBAAmB,CAAC;AAE3C;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,4CAAiB,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,KAAK,EACxB,MAAM,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;CAAE,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAC1F,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAQvD;AAED,KAAK,WAAW,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;AAE7D,KAAK,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,WAAW,CAAC;AACxE,KAAK,cAAc,GAAG,MAAM,WAAW,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,CAAC,KAAK,IAAI;IACpC,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AA+D/D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAChD,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACzC,wBAAgB,SAAS,CAAC,KAAK,EAC7B,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,EACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAChC,cAAc,CAAC,KAAK,CAAC,CAAC;AA6DzB;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,kBAAY,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAM/C;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,sFAAsF;IACtF,IAAI,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;IAClD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAa5D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IACxB,4CAA4C;IAC5C,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACrD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CACjE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAe1D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,4CAA4C;IAC5C,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACrD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CAC3E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAe9D;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,+EAA+E;IAC/E,IAAI,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC;IAClD,+EAA+E;IAC/E,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;CAC1E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAEzE;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAE5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAElE;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,6BAAuB,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,MAAM,GAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAmB,GACjD,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAErB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAAC,SAAS,CAsB1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -74,14 +74,19 @@ class DependencyTracker {
74
74
  }
75
75
  }
76
76
  class Scope {
77
- constructor() {
77
+ constructor(options = {}) {
78
78
  this.store = createJotaiStore();
79
79
  this.disposables = new Set();
80
80
  this.scopeCleanups = new Set();
81
81
  this.layoutStarters = [];
82
82
  this.effectStarters = [];
83
- this.layoutStarted = false;
84
- this.effectsStarted = false;
83
+ this.uniqueIdCounter = 0;
84
+ this.layoutStarted = Boolean(options.autoStart);
85
+ this.effectsStarted = Boolean(options.autoStart);
86
+ }
87
+ nextUniqueId(prefix) {
88
+ this.uniqueIdCounter += 1;
89
+ return `${prefix}${this.uniqueIdCounter}`;
85
90
  }
86
91
  register(disposable) {
87
92
  this.disposables.add(disposable);
@@ -135,6 +140,16 @@ class Scope {
135
140
  }
136
141
  }
137
142
  const scopeStack = [];
143
+ let globalScope = null;
144
+ function isServerRuntime() {
145
+ return typeof window === "undefined";
146
+ }
147
+ function getGlobalScope() {
148
+ if (!globalScope) {
149
+ globalScope = new Scope({ autoStart: true });
150
+ }
151
+ return globalScope;
152
+ }
138
153
  function withScope(scope, fn) {
139
154
  scopeStack.push(scope);
140
155
  try {
@@ -146,10 +161,13 @@ function withScope(scope, fn) {
146
161
  }
147
162
  function activeScope() {
148
163
  const scope = scopeStack[scopeStack.length - 1];
149
- if (!scope) {
150
- throw new Error("No active reactive scope. Wrap your component with component(...) before calling reactive APIs.");
164
+ if (scope) {
165
+ return scope;
166
+ }
167
+ if (isServerRuntime()) {
168
+ throw new Error("No active reactive scope in SSR context. Wrap primitive creation in createRoot(...) per request to avoid cross-request global state leaks.");
151
169
  }
152
- return scope;
170
+ return getGlobalScope();
153
171
  }
154
172
  class SignalSource {
155
173
  constructor(store, initialValue) {
@@ -394,6 +412,55 @@ export function createMemo(compute) {
394
412
  scope.register(source);
395
413
  return () => source.get();
396
414
  }
415
+ /**
416
+ * Defers propagation of a source accessor value.
417
+ *
418
+ * @param source Source accessor to defer.
419
+ * @param options Optional deferral settings.
420
+ * @returns Accessor containing the deferred value.
421
+ *
422
+ * @example
423
+ * ```ts
424
+ * const deferredQuery = createDeferred(query, { timeoutMs: 50 })
425
+ * ```
426
+ */
427
+ export function createDeferred(source, options = {}) {
428
+ const equals = options.equals ?? Object.is;
429
+ const [deferred, setDeferred] = createSignal(source());
430
+ createEffect(() => {
431
+ const nextValue = source();
432
+ if (equals(deferred(), nextValue)) {
433
+ return;
434
+ }
435
+ if (options.timeoutMs === undefined || options.timeoutMs <= 0) {
436
+ queueMicrotask(() => {
437
+ setDeferred(nextValue);
438
+ });
439
+ return;
440
+ }
441
+ const timer = setTimeout(() => {
442
+ setDeferred(nextValue);
443
+ }, options.timeoutMs);
444
+ onCleanup(() => {
445
+ clearTimeout(timer);
446
+ });
447
+ });
448
+ return deferred;
449
+ }
450
+ /**
451
+ * Creates a unique id string for the current scope.
452
+ *
453
+ * @param prefix Prefix for the generated id.
454
+ * @returns Unique id string.
455
+ *
456
+ * @example
457
+ * ```ts
458
+ * const inputId = createUniqueId("field-")
459
+ * ```
460
+ */
461
+ export function createUniqueId(prefix = "uid-") {
462
+ return activeScope().nextUniqueId(prefix);
463
+ }
397
464
  /**
398
465
  * Alias for {@link createMemo}.
399
466
  *
@@ -517,7 +584,7 @@ export function onMount(callback) {
517
584
  */
518
585
  export const mount = onMount;
519
586
  /**
520
- * Registers cleanup in setup scope or currently running effect.
587
+ * Registers cleanup in the current effect, active setup scope, or default global scope.
521
588
  *
522
589
  * @param cleanup Cleanup callback invoked on re-run or scope disposal.
523
590
  *
@@ -534,12 +601,7 @@ export function onCleanup(cleanup) {
534
601
  activeEffect.registerCleanup(cleanup);
535
602
  return;
536
603
  }
537
- const scope = scopeStack[scopeStack.length - 1];
538
- if (scope) {
539
- scope.registerCleanup(cleanup);
540
- return;
541
- }
542
- throw new Error("onCleanup must run inside component setup or an effect.");
604
+ activeScope().registerCleanup(cleanup);
543
605
  }
544
606
  /**
545
607
  * Alias for {@link onCleanup}.
@@ -550,6 +612,32 @@ export function onCleanup(cleanup) {
550
612
  * ```
551
613
  */
552
614
  export const cleanup = onCleanup;
615
+ /**
616
+ * Creates an isolated reactive scope and returns a disposal handle.
617
+ *
618
+ * @param init Initializer executed inside the new scope.
619
+ * @returns Return value of `init`.
620
+ *
621
+ * @example
622
+ * ```ts
623
+ * const value = createRoot((dispose) => {
624
+ * const [count, setCount] = createSignal(0)
625
+ * return { count, setCount, dispose }
626
+ * })
627
+ * ```
628
+ */
629
+ export function createRoot(init) {
630
+ const scope = new Scope({ autoStart: true });
631
+ let disposed = false;
632
+ const dispose = () => {
633
+ if (disposed) {
634
+ return;
635
+ }
636
+ disposed = true;
637
+ scope.dispose();
638
+ };
639
+ return withScope(scope, () => init(dispose));
640
+ }
553
641
  /**
554
642
  * Batches reactive notifications and flushes once at the end.
555
643
  *
@@ -576,6 +664,28 @@ export function batch(fn) {
576
664
  }
577
665
  }
578
666
  }
667
+ export function on(deps, fn, options = {}) {
668
+ let initialized = false;
669
+ let previousInput;
670
+ const readInput = () => {
671
+ if (Array.isArray(deps)) {
672
+ return deps.map((dep) => dep());
673
+ }
674
+ return deps();
675
+ };
676
+ return () => {
677
+ const input = readInput();
678
+ if (!initialized) {
679
+ initialized = true;
680
+ if (options.defer) {
681
+ previousInput = input;
682
+ return;
683
+ }
684
+ }
685
+ fn(input, previousInput, undefined);
686
+ previousInput = input;
687
+ };
688
+ }
579
689
  /**
580
690
  * Executes a function without dependency tracking.
581
691
  *
@@ -598,6 +708,54 @@ export function untrack(fn) {
598
708
  }
599
709
  }
600
710
  }
711
+ /**
712
+ * Creates a manually armed reaction.
713
+ *
714
+ * The returned `track` function subscribes to dependencies read inside `trackFn`.
715
+ * When any dependency changes, `onInvalidate` runs once and the reaction disarms
716
+ * until `track(...)` is called again.
717
+ *
718
+ * @param onInvalidate Callback invoked when tracked dependencies change.
719
+ * @returns Track function used to arm the reaction.
720
+ *
721
+ * @example
722
+ * ```ts
723
+ * const track = createReaction(() => console.log("changed"))
724
+ * track(() => state.userId)
725
+ * ```
726
+ */
727
+ export function createReaction(onInvalidate) {
728
+ const scope = activeScope();
729
+ let tracker = null;
730
+ let armed = false;
731
+ const disposeTracker = () => {
732
+ if (!tracker) {
733
+ return;
734
+ }
735
+ tracker.dispose();
736
+ tracker = null;
737
+ };
738
+ const track = (trackFn) => {
739
+ armed = true;
740
+ disposeTracker();
741
+ tracker = new DependencyTracker(() => {
742
+ if (!armed) {
743
+ return;
744
+ }
745
+ armed = false;
746
+ disposeTracker();
747
+ onInvalidate();
748
+ });
749
+ tracker.collect(trackFn);
750
+ };
751
+ scope.register({
752
+ dispose: () => {
753
+ armed = false;
754
+ disposeTracker();
755
+ },
756
+ });
757
+ return track;
758
+ }
601
759
  function resolveResourceArgs(sourceOrFetcher, maybeFetcher, maybeOptions) {
602
760
  if (maybeFetcher) {
603
761
  return {
@@ -775,6 +933,65 @@ function shallowClone(value) {
775
933
  }
776
934
  return value;
777
935
  }
936
+ function deepClone(value) {
937
+ if (typeof globalThis.structuredClone === "function") {
938
+ return globalThis.structuredClone(value);
939
+ }
940
+ if (Array.isArray(value)) {
941
+ return value.map((item) => deepClone(item));
942
+ }
943
+ if (isObjectLike(value)) {
944
+ const clone = {};
945
+ for (const key of Reflect.ownKeys(value)) {
946
+ clone[key] = deepClone(value[key]);
947
+ }
948
+ return clone;
949
+ }
950
+ return value;
951
+ }
952
+ function reconcileValue(previous, next, options) {
953
+ if (Object.is(previous, next)) {
954
+ return previous;
955
+ }
956
+ if (Array.isArray(previous) && Array.isArray(next)) {
957
+ if (options.key) {
958
+ const keyField = options.key;
959
+ const keyed = new Map();
960
+ for (const item of previous) {
961
+ if (isObjectLike(item) && keyField in item) {
962
+ keyed.set(item[keyField], item);
963
+ }
964
+ }
965
+ return next.map((item) => {
966
+ if (!isObjectLike(item) || !(keyField in item)) {
967
+ return deepClone(item);
968
+ }
969
+ const keyValue = item[keyField];
970
+ const existing = keyed.get(keyValue);
971
+ if (existing && isObjectLike(existing)) {
972
+ return reconcileValue(existing, item, options);
973
+ }
974
+ return deepClone(item);
975
+ });
976
+ }
977
+ return next.map((item, index) => {
978
+ const previousItem = previous[index];
979
+ return reconcileValue(previousItem, item, options);
980
+ });
981
+ }
982
+ if (isObjectLike(previous) && isObjectLike(next)) {
983
+ const out = options.merge
984
+ ? { ...previous }
985
+ : {};
986
+ for (const key of Reflect.ownKeys(next)) {
987
+ const previousValue = previous[key];
988
+ const nextValue = next[key];
989
+ out[key] = reconcileValue(previousValue, nextValue, options);
990
+ }
991
+ return out;
992
+ }
993
+ return deepClone(next);
994
+ }
778
995
  function getAtPath(root, path) {
779
996
  let cursor = root;
780
997
  for (const segment of path) {
@@ -921,6 +1138,39 @@ function createReactiveProxy(source, mutable) {
921
1138
  };
922
1139
  return createAtPath([]);
923
1140
  }
1141
+ /**
1142
+ * Produces immutable updates using a mutable draft callback.
1143
+ *
1144
+ * @param recipe Draft mutator callback.
1145
+ * @returns Updater function suitable for `setStore` or signal setters.
1146
+ *
1147
+ * @example
1148
+ * ```ts
1149
+ * setStore(produce((draft) => { draft.user.name = "Ada" }))
1150
+ * ```
1151
+ */
1152
+ export function produce(recipe) {
1153
+ return (previous) => {
1154
+ const draft = deepClone(previous);
1155
+ recipe(draft);
1156
+ return draft;
1157
+ };
1158
+ }
1159
+ /**
1160
+ * Reconciles structural updates while preserving matching nested references.
1161
+ *
1162
+ * @param value Next value to reconcile into current state.
1163
+ * @param options Reconciliation behavior.
1164
+ * @returns Updater function suitable for `setStore` or signal setters.
1165
+ *
1166
+ * @example
1167
+ * ```ts
1168
+ * setStore(reconcile(nextData, { key: "id", merge: true }))
1169
+ * ```
1170
+ */
1171
+ export function reconcile(value, options = {}) {
1172
+ return (previous) => reconcileValue(previous, value, options);
1173
+ }
924
1174
  /**
925
1175
  * Creates an immutable reactive object store.
926
1176
  *
@@ -1315,6 +1565,161 @@ export function component(setup, options = {}) {
1315
1565
  * ```
1316
1566
  */
1317
1567
  export const defineComponent = component;
1568
+ /**
1569
+ * Merges multiple props objects with lazy property resolution.
1570
+ * Later sources take precedence.
1571
+ *
1572
+ * @param sources Props sources to merge.
1573
+ * @returns Merged props proxy.
1574
+ *
1575
+ * @example
1576
+ * ```ts
1577
+ * const props = mergeProps({ a: 1 }, defaults, incoming)
1578
+ * ```
1579
+ */
1580
+ export function mergeProps(...sources) {
1581
+ const readSource = (index) => sources[index] ?? {};
1582
+ return new Proxy({}, {
1583
+ get(_target, prop) {
1584
+ for (let index = sources.length - 1; index >= 0; index -= 1) {
1585
+ const source = readSource(index);
1586
+ if (prop in source) {
1587
+ return source[prop];
1588
+ }
1589
+ }
1590
+ return undefined;
1591
+ },
1592
+ has(_target, prop) {
1593
+ for (let index = sources.length - 1; index >= 0; index -= 1) {
1594
+ const source = readSource(index);
1595
+ if (prop in source) {
1596
+ return true;
1597
+ }
1598
+ }
1599
+ return false;
1600
+ },
1601
+ ownKeys() {
1602
+ const keys = new Set();
1603
+ for (const source of sources) {
1604
+ for (const key of Reflect.ownKeys(source)) {
1605
+ keys.add(typeof key === "number" ? String(key) : key);
1606
+ }
1607
+ }
1608
+ return [...keys];
1609
+ },
1610
+ getOwnPropertyDescriptor(_target, prop) {
1611
+ return {
1612
+ configurable: true,
1613
+ enumerable: true,
1614
+ get() {
1615
+ for (let index = sources.length - 1; index >= 0; index -= 1) {
1616
+ const source = readSource(index);
1617
+ if (prop in source) {
1618
+ return source[prop];
1619
+ }
1620
+ }
1621
+ return undefined;
1622
+ },
1623
+ };
1624
+ },
1625
+ });
1626
+ }
1627
+ /**
1628
+ * Splits props into picked groups plus a remainder object.
1629
+ *
1630
+ * @param props Source props object.
1631
+ * @param groups Key groups to pick.
1632
+ * @returns Tuple of picked groups followed by remainder props.
1633
+ *
1634
+ * @example
1635
+ * ```ts
1636
+ * const [local, others] = splitProps(props, ["id", "name"])
1637
+ * ```
1638
+ */
1639
+ export function splitProps(props, ...groups) {
1640
+ const picked = groups.map((group) => {
1641
+ const keySet = new Set(group);
1642
+ return new Proxy({}, {
1643
+ get(_target, prop) {
1644
+ if (!keySet.has(prop)) {
1645
+ return undefined;
1646
+ }
1647
+ return props[prop];
1648
+ },
1649
+ has(_target, prop) {
1650
+ return keySet.has(prop);
1651
+ },
1652
+ ownKeys() {
1653
+ return [...keySet].map((key) => (typeof key === "number" ? String(key) : key));
1654
+ },
1655
+ getOwnPropertyDescriptor(_target, prop) {
1656
+ if (!keySet.has(prop)) {
1657
+ return undefined;
1658
+ }
1659
+ return {
1660
+ configurable: true,
1661
+ enumerable: true,
1662
+ writable: false,
1663
+ value: props[prop],
1664
+ };
1665
+ },
1666
+ });
1667
+ });
1668
+ const blocked = new Set();
1669
+ for (const group of groups) {
1670
+ for (const key of group) {
1671
+ blocked.add(key);
1672
+ }
1673
+ }
1674
+ const rest = new Proxy({}, {
1675
+ get(_target, prop) {
1676
+ if (blocked.has(prop)) {
1677
+ return undefined;
1678
+ }
1679
+ return props[prop];
1680
+ },
1681
+ has(_target, prop) {
1682
+ return !blocked.has(prop) && prop in props;
1683
+ },
1684
+ ownKeys() {
1685
+ return Reflect.ownKeys(props)
1686
+ .filter((key) => !blocked.has(key))
1687
+ .map((key) => (typeof key === "number" ? String(key) : key));
1688
+ },
1689
+ getOwnPropertyDescriptor(_target, prop) {
1690
+ if (blocked.has(prop)) {
1691
+ return undefined;
1692
+ }
1693
+ const descriptor = Object.getOwnPropertyDescriptor(props, prop);
1694
+ if (!descriptor) {
1695
+ return undefined;
1696
+ }
1697
+ return {
1698
+ ...descriptor,
1699
+ configurable: true,
1700
+ };
1701
+ },
1702
+ });
1703
+ return [...picked, rest];
1704
+ }
1705
+ /**
1706
+ * Resolves and memoizes children access.
1707
+ *
1708
+ * @param fn Accessor returning children nodes.
1709
+ * @returns Accessor with `toArray()` helper.
1710
+ *
1711
+ * @example
1712
+ * ```ts
1713
+ * const resolved = children(() => props().children)
1714
+ * const list = resolved.toArray()
1715
+ * ```
1716
+ */
1717
+ export function children(fn) {
1718
+ const resolved = createMemo(() => fn());
1719
+ const accessor = (() => resolved());
1720
+ accessor.toArray = () => React.Children.toArray(resolved());
1721
+ return accessor;
1722
+ }
1318
1723
  function readMaybeAccessor(value) {
1319
1724
  return resolveMaybeAccessor(value);
1320
1725
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jotai-solid-api",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Solid-style reactive API on top of Jotai for React component wrappers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",