solid-js 1.3.0-rc.2 → 1.3.1
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/dev.cjs +34 -10
- package/dist/dev.js +33 -11
- package/dist/server.cjs +9 -1
- package/dist/server.js +8 -2
- package/dist/solid.cjs +28 -9
- package/dist/solid.js +27 -10
- package/package.json +5 -5
- package/store/dist/dev.cjs +3 -5
- package/store/dist/dev.js +3 -5
- package/store/dist/store.cjs +2 -4
- package/store/dist/store.js +2 -4
- package/store/types/index.d.ts +1 -1
- package/store/types/modifiers.d.ts +3 -3
- package/store/types/mutable.d.ts +3 -3
- package/store/types/server.d.ts +3 -38
- package/store/types/store.d.ts +27 -55
- package/types/index.d.ts +1 -1
- package/types/jsx.d.ts +1 -0
- package/types/reactive/signal.d.ts +18 -3
- package/types/server/index.d.ts +1 -1
- package/types/server/reactive.d.ts +2 -0
- package/web/dist/dev.cjs +13 -37
- package/web/dist/dev.js +1 -1
- package/web/dist/server.cjs +24 -36
- package/web/dist/server.js +14 -6
- package/web/dist/web.cjs +13 -37
- package/web/dist/web.js +1 -1
- package/web/types/client.d.ts +1 -1
package/store/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { createStore, unwrap, $RAW } from "./store";
|
|
2
|
-
export type { Store, SetStoreFunction, NotWrappable, StoreNode, StoreSetter, StorePathRange, ArrayFilterFn, Part, Next,
|
|
2
|
+
export type { Store, SetStoreFunction, NotWrappable, StoreNode, StoreSetter, StorePathRange, ArrayFilterFn, Part, Next, WrappableNext, DeepReadonly } from "./store";
|
|
3
3
|
export * from "./mutable";
|
|
4
4
|
export * from "./modifiers";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Store
|
|
1
|
+
import { Store } from "./store";
|
|
2
2
|
export declare type ReconcileOptions = {
|
|
3
3
|
key?: string | null;
|
|
4
4
|
merge?: boolean;
|
|
5
5
|
};
|
|
6
|
-
export declare function reconcile<T>(value: T
|
|
7
|
-
export declare function produce<T>(fn: (state: T) => void): (state:
|
|
6
|
+
export declare function reconcile<T>(value: T, options?: ReconcileOptions): (state: unknown) => Store<T>;
|
|
7
|
+
export declare function produce<T>(fn: (state: T) => void): (state: Store<T>) => Store<T>;
|
package/store/types/mutable.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StoreNode
|
|
2
|
-
export declare function createMutable<T extends StoreNode>(state: T
|
|
1
|
+
import { StoreNode } from "./store";
|
|
2
|
+
export declare function createMutable<T extends StoreNode>(state: T, options?: {
|
|
3
3
|
name?: string;
|
|
4
|
-
}):
|
|
4
|
+
}): T;
|
package/store/types/server.d.ts
CHANGED
|
@@ -1,50 +1,15 @@
|
|
|
1
|
+
import { SetStoreFunction, Store } from "store";
|
|
1
2
|
export declare const $RAW: unique symbol;
|
|
2
|
-
declare type AddSymbolToPrimitive<T> = T extends {
|
|
3
|
-
[Symbol.toPrimitive]: infer V;
|
|
4
|
-
} ? {
|
|
5
|
-
[Symbol.toPrimitive]: V;
|
|
6
|
-
} : {};
|
|
7
|
-
declare type AddCallable<T> = T extends {
|
|
8
|
-
(...x: any[]): infer V;
|
|
9
|
-
} ? {
|
|
10
|
-
(...x: Parameters<T>): V;
|
|
11
|
-
} : {};
|
|
12
|
-
declare type NotWrappable = string | number | boolean | Function | null;
|
|
13
|
-
export declare type Store<T> = {
|
|
14
|
-
[P in keyof T]: T[P] extends object ? Store<T[P]> : T[P];
|
|
15
|
-
} & {
|
|
16
|
-
[$RAW]?: T;
|
|
17
|
-
} & AddSymbolToPrimitive<T> & AddCallable<T>;
|
|
18
3
|
export declare function isWrappable(obj: any): boolean;
|
|
19
4
|
export declare function unwrap<T>(item: any): T;
|
|
20
5
|
export declare function setProperty(state: any, property: string | number, value: any, force?: boolean): void;
|
|
21
6
|
export declare function updatePath(current: any, path: any[], traversed?: (number | string)[]): void;
|
|
22
|
-
declare type StoreSetter<T> = Partial<T> | ((prevState: T extends NotWrappable ? T : Store<T>, traversed?: (string | number)[]) => Partial<T> | void);
|
|
23
|
-
declare type StorePathRange = {
|
|
24
|
-
from?: number;
|
|
25
|
-
to?: number;
|
|
26
|
-
by?: number;
|
|
27
|
-
};
|
|
28
|
-
declare type ArrayFilterFn<T> = (item: T extends any[] ? T[number] : never, index: number) => boolean;
|
|
29
|
-
declare type Part<T> = keyof T | Array<keyof T> | StorePathRange | ArrayFilterFn<T>;
|
|
30
|
-
declare type Next<T, K> = K extends keyof T ? T[K] : K extends Array<keyof T> ? T[K[number]] : T extends any[] ? K extends StorePathRange ? T[number] : K extends ArrayFilterFn<T> ? T[number] : never : never;
|
|
31
|
-
export interface SetStoreFunction<T> {
|
|
32
|
-
<Setter extends StoreSetter<T>>(...args: [Setter]): void;
|
|
33
|
-
<K1 extends Part<T>, Setter extends StoreSetter<Next<T, K1>>>(...args: [K1, Setter]): void;
|
|
34
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, Setter extends StoreSetter<Next<Next<T, K1>, K2>>>(...args: [K1, K2, Setter]): void;
|
|
35
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, Setter extends StoreSetter<Next<Next<Next<T, K1>, K2>, K3>>>(...args: [K1, K2, K3, Setter]): void;
|
|
36
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, Setter extends StoreSetter<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>>(...args: [K1, K2, K3, K4, Setter]): void;
|
|
37
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>>(...args: [K1, K2, K3, K4, K5, Setter]): void;
|
|
38
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>>(...args: [K1, K2, K3, K4, K5, K6, Setter]): void;
|
|
39
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, Setter extends StoreSetter<Next<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, Setter]): void;
|
|
40
|
-
<K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, K4 extends Part<Next<Next<Next<T, K1>, K2>, K3>>, K5 extends Part<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>>, K6 extends Part<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>, K7 extends Part<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>, K8 extends Part<Next<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, K8, ...(Part<any> | StoreSetter<any>)[]]): void;
|
|
41
|
-
}
|
|
42
7
|
export declare function createStore<T>(state: T | Store<T>): [Store<T>, SetStoreFunction<T>];
|
|
43
8
|
export declare function createMutable<T>(state: T | Store<T>): Store<T>;
|
|
44
9
|
declare type ReconcileOptions = {
|
|
45
10
|
key?: string | null;
|
|
46
11
|
merge?: boolean;
|
|
47
12
|
};
|
|
48
|
-
export declare function reconcile<T>(value: T | Store<T>, options?: ReconcileOptions): (state:
|
|
49
|
-
export declare function produce<T>(fn: (state: T) => void): (state:
|
|
13
|
+
export declare function reconcile<T>(value: T | Store<T>, options?: ReconcileOptions): (state: Store<T>) => void;
|
|
14
|
+
export declare function produce<T>(fn: (state: T) => void): (state: Store<T>) => Store<T>;
|
|
50
15
|
export {};
|
package/store/types/store.d.ts
CHANGED
|
@@ -1,72 +1,44 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Accessor } from "../..";
|
|
2
2
|
export declare const $RAW: unique symbol, $NODE: unique symbol, $NAME: unique symbol;
|
|
3
|
-
export declare type StoreNode =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
[$NAME]?: string;
|
|
7
|
-
[k: string]: any;
|
|
8
|
-
[k: number]: any;
|
|
9
|
-
};
|
|
10
|
-
declare type AddSymbolToPrimitive<T> = T extends {
|
|
11
|
-
[Symbol.toPrimitive]: infer V;
|
|
12
|
-
} ? {
|
|
13
|
-
[Symbol.toPrimitive]: V;
|
|
14
|
-
} : {};
|
|
15
|
-
declare type AddSymbolIterator<T> = T extends {
|
|
16
|
-
[Symbol.iterator]: infer V;
|
|
17
|
-
} ? {
|
|
18
|
-
[Symbol.iterator]: V;
|
|
19
|
-
} : {};
|
|
20
|
-
declare type AddSymbolToStringTag<T> = T extends {
|
|
21
|
-
[Symbol.toStringTag]: infer V;
|
|
22
|
-
} ? {
|
|
23
|
-
[Symbol.toStringTag]: V;
|
|
24
|
-
} : {};
|
|
25
|
-
declare type AddCallable<T> = T extends {
|
|
26
|
-
(...x: any[]): infer V;
|
|
27
|
-
} ? {
|
|
28
|
-
(...x: Parameters<T>): V;
|
|
29
|
-
} : {};
|
|
30
|
-
export declare type NotWrappable = string | number | boolean | Function | null;
|
|
31
|
-
export declare type Store<T> = {
|
|
32
|
-
[P in keyof T]: T[P] extends object ? Store<T[P]> & T[P] : T[P];
|
|
33
|
-
} & {
|
|
34
|
-
[$RAW]?: T;
|
|
35
|
-
} & AddSymbolToPrimitive<T> & AddSymbolIterator<T> & AddSymbolToStringTag<T> & AddCallable<T>;
|
|
3
|
+
export declare type StoreNode = Record<keyof any, any>;
|
|
4
|
+
export declare type NotWrappable = string | number | bigint | symbol | boolean | Function | null | undefined;
|
|
5
|
+
export declare type Store<T> = DeepReadonly<T>;
|
|
36
6
|
export declare function isWrappable(obj: any): any;
|
|
37
7
|
export declare function unwrap<T extends StoreNode>(item: any, set?: Set<unknown>): T;
|
|
38
8
|
export declare function getDataNodes(target: StoreNode): any;
|
|
39
|
-
export declare function proxyDescriptor(target: StoreNode, property:
|
|
9
|
+
export declare function proxyDescriptor(target: StoreNode, property: keyof any): PropertyDescriptor | undefined;
|
|
40
10
|
export declare function ownKeys(target: StoreNode): (string | symbol)[];
|
|
41
11
|
export declare function createDataNode(): Accessor<void> & {
|
|
42
12
|
$: () => void;
|
|
43
13
|
};
|
|
44
|
-
export declare function setProperty(state: StoreNode, property:
|
|
45
|
-
export declare function updatePath(current: StoreNode, path: any[], traversed?: (
|
|
46
|
-
export declare type
|
|
47
|
-
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
14
|
+
export declare function setProperty(state: StoreNode, property: keyof any, value: any): void;
|
|
15
|
+
export declare function updatePath(current: StoreNode, path: any[], traversed?: (keyof any)[]): void;
|
|
16
|
+
export declare type DeepReadonly<T> = {
|
|
17
|
+
readonly [K in keyof T]: T[K] extends NotWrappable ? T[K] : DeepReadonly<T[K]>;
|
|
48
18
|
};
|
|
49
|
-
export declare type
|
|
50
|
-
export declare type StoreSetter<T> = Partial<T> | ((prevState: T extends NotWrappable ? T : Store<DeepReadonly<T>>, traversed?: (string | number)[]) => Partial<T | DeepReadonly<T>> | void);
|
|
19
|
+
export declare type StoreSetter<T> = T | Partial<T> | ((prevState: T, traversed?: (keyof any)[]) => Partial<T> | void);
|
|
51
20
|
export declare type StorePathRange = {
|
|
52
21
|
from?: number;
|
|
53
22
|
to?: number;
|
|
54
23
|
by?: number;
|
|
55
24
|
};
|
|
56
|
-
export declare type ArrayFilterFn<T> = (item: T
|
|
57
|
-
export declare type Part<T> = T extends
|
|
58
|
-
export declare type
|
|
59
|
-
export declare type
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<K1 extends Part<T>, K2 extends Part<
|
|
65
|
-
<K1 extends Part<T>, K2 extends Part<
|
|
66
|
-
<K1 extends Part<T>, K2 extends Part<
|
|
67
|
-
<K1 extends Part<T>, K2 extends Part<
|
|
68
|
-
<K1 extends Part<T>, K2 extends Part<
|
|
69
|
-
<K1 extends Part<T>, K2 extends Part<
|
|
25
|
+
export declare type ArrayFilterFn<T> = (item: T, index: number) => boolean;
|
|
26
|
+
export declare type Part<T> = [T] extends [never] ? never : [keyof T] extends [never] ? never : keyof T | (keyof T)[] | (number extends keyof T ? ArrayFilterFn<T[number]> | StorePathRange : never);
|
|
27
|
+
export declare type Next<T, K extends Part<T>> = [K] extends [never] ? never : K extends keyof T ? T[K] : K extends (keyof T)[] ? T[K[number]] : number extends keyof T ? T[number] : never;
|
|
28
|
+
export declare type WrappableNext<T, K extends Part<T>> = Exclude<Next<T, K>, NotWrappable>;
|
|
29
|
+
declare type DistributeRest<T, K extends Part<T>> = K extends K ? [K, ...Rest<Next<T, K>>] : never;
|
|
30
|
+
export declare type Rest<T> = 0 extends 1 & T ? [...(keyof any)[], any] : [StoreSetter<T>] | (T extends NotWrappable ? never : DistributeRest<T, Part<T>>);
|
|
31
|
+
export declare type SetStoreFunction<T> = _SetStoreFunction<Store<T>>;
|
|
32
|
+
interface _SetStoreFunction<T> {
|
|
33
|
+
<K1 extends Part<T>, K2 extends Part<T1>, K3 extends Part<T2>, K4 extends Part<T3>, K5 extends Part<T4>, K6 extends Part<T5>, K7 extends Part<T6>, T1 extends WrappableNext<T, K1>, T2 extends WrappableNext<T1, K2>, T3 extends WrappableNext<T2, K3>, T4 extends WrappableNext<T3, K4>, T5 extends WrappableNext<T4, K5>, T6 extends WrappableNext<T5, K6>>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6, k7: K7, ...rest: Rest<Next<T6, K7>>): void;
|
|
34
|
+
<K1 extends Part<T>, K2 extends Part<T1>, K3 extends Part<T2>, K4 extends Part<T3>, K5 extends Part<T4>, K6 extends Part<T5>, K7 extends Part<T6>, T1 extends WrappableNext<T, K1>, T2 extends WrappableNext<T1, K2>, T3 extends WrappableNext<T2, K3>, T4 extends WrappableNext<T3, K4>, T5 extends WrappableNext<T4, K5>, T6 extends WrappableNext<T5, K6>>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6, k7: K7, setter: StoreSetter<Next<T6, K7>>): void;
|
|
35
|
+
<K1 extends Part<T>, K2 extends Part<T1>, K3 extends Part<T2>, K4 extends Part<T3>, K5 extends Part<T4>, K6 extends Part<T5>, T1 extends WrappableNext<T, K1>, T2 extends WrappableNext<T1, K2>, T3 extends WrappableNext<T2, K3>, T4 extends WrappableNext<T3, K4>, T5 extends WrappableNext<T4, K5>>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6, setter: StoreSetter<Next<T5, K6>>): void;
|
|
36
|
+
<K1 extends Part<T>, K2 extends Part<T1>, K3 extends Part<T2>, K4 extends Part<T3>, K5 extends Part<T4>, T1 extends WrappableNext<T, K1>, T2 extends WrappableNext<T1, K2>, T3 extends WrappableNext<T2, K3>, T4 extends WrappableNext<T3, K4>>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, setter: StoreSetter<Next<T4, K5>>): void;
|
|
37
|
+
<K1 extends Part<T>, K2 extends Part<T1>, K3 extends Part<T2>, K4 extends Part<T3>, T1 extends WrappableNext<T, K1>, T2 extends WrappableNext<T1, K2>, T3 extends WrappableNext<T2, K3>>(k1: K1, k2: K2, k3: K3, k4: K4, setter: StoreSetter<Next<T3, K4>>): void;
|
|
38
|
+
<K1 extends Part<T>, K2 extends Part<T1>, K3 extends Part<T2>, T1 extends WrappableNext<T, K1>, T2 extends WrappableNext<T1, K2>>(k1: K1, k2: K2, k3: K3, setter: StoreSetter<Next<T2, K3>>): void;
|
|
39
|
+
<K1 extends Part<T>, K2 extends Part<T1>, T1 extends WrappableNext<T, K1>>(k1: K1, k2: K2, setter: StoreSetter<Next<T1, K2>>): void;
|
|
40
|
+
<K extends Part<T>>(k: K, setter: StoreSetter<Next<T, K>>): void;
|
|
41
|
+
(setter: StoreSetter<T>): void;
|
|
70
42
|
}
|
|
71
43
|
/**
|
|
72
44
|
* creates a reactive store that can be read through a proxy object and written with a setter function
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createRoot, createSignal, createEffect, createRenderEffect, createComputed, createDeferred, createSelector, createMemo, createResource, onMount, onCleanup, onError, untrack, batch, on, enableScheduling, enableExternalSource, startTransition, useTransition, refetchResources, createContext, useContext, children, getListener, getOwner, runWithOwner, equalFn, $PROXY } from "./reactive/signal";
|
|
1
|
+
export { createRoot, createSignal, createEffect, createRenderEffect, createComputed, createReaction, createDeferred, createSelector, createMemo, createResource, onMount, onCleanup, onError, untrack, batch, on, enableScheduling, enableExternalSource, startTransition, useTransition, refetchResources, createContext, useContext, children, getListener, getOwner, runWithOwner, equalFn, $DEVCOMP, $PROXY } from "./reactive/signal";
|
|
2
2
|
export type { Accessor, Setter, Resource, ResourceReturn, ResourceFetcher, ResourceFetcherInfo, Context, ReturnTypes } from "./reactive/signal";
|
|
3
3
|
export * from "./reactive/observable";
|
|
4
4
|
export * from "./reactive/scheduler";
|
package/types/jsx.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { requestCallback } from "./scheduler";
|
|
|
2
2
|
import type { JSX } from "../jsx";
|
|
3
3
|
export declare const equalFn: <T>(a: T, b: T) => boolean;
|
|
4
4
|
export declare const $PROXY: unique symbol;
|
|
5
|
+
export declare const $DEVCOMP: unique symbol;
|
|
5
6
|
export declare const NOTPENDING: {};
|
|
6
7
|
export declare var Owner: Owner | null;
|
|
7
8
|
export declare let Transition: TransitionState | null;
|
|
@@ -157,6 +158,20 @@ export declare function createRenderEffect<Next, Init = undefined>(..._: undefin
|
|
|
157
158
|
*/
|
|
158
159
|
export declare function createEffect<Next, Init = Next>(fn: EffectFunction<Init | Next, Next>, value: Init, options?: EffectOptions): void;
|
|
159
160
|
export declare function createEffect<Next, Init = undefined>(..._: undefined extends Init ? [fn: EffectFunction<Init | Next, Next>, value?: Init, options?: EffectOptions] : [fn: EffectFunction<Init | Next, Next>, value: Init, options?: EffectOptions]): void;
|
|
161
|
+
/**
|
|
162
|
+
* Creates a reactive computation that runs after the render phase with flexible tracking
|
|
163
|
+
* ```typescript
|
|
164
|
+
* export function createReaction(
|
|
165
|
+
* onInvalidate: () => void,
|
|
166
|
+
* options?: { name?: string }
|
|
167
|
+
* ): (fn: () => void) => void;
|
|
168
|
+
* ```
|
|
169
|
+
* @param invalidated a function that is called when tracked function is invalidated.
|
|
170
|
+
* @param options allows to set a name in dev mode for debugging purposes
|
|
171
|
+
*
|
|
172
|
+
* @description https://www.solidjs.com/docs/latest/api#createreaction
|
|
173
|
+
*/
|
|
174
|
+
export declare function createReaction(onInvalidate: () => void, options?: EffectOptions): (tracking: () => void) => void;
|
|
160
175
|
interface Memo<Prev, Next = Prev> extends SignalState<Next>, Computation<Next> {
|
|
161
176
|
tOwned?: Computation<Prev | Next, Next>[];
|
|
162
177
|
}
|
|
@@ -170,7 +185,7 @@ export interface MemoOptions<T> extends EffectOptions {
|
|
|
170
185
|
* fn: (v: T) => T,
|
|
171
186
|
* value?: T,
|
|
172
187
|
* options?: { name?: string, equals?: false | ((prev: T, next: T) => boolean) }
|
|
173
|
-
* ): T;
|
|
188
|
+
* ): () => T;
|
|
174
189
|
* ```
|
|
175
190
|
* @param fn a function that receives its previous or the initial value, if set, and returns a new value used to react on a computation
|
|
176
191
|
* @param value an optional initial value for the computation; if set, fn will never receive undefined as first argument
|
|
@@ -235,7 +250,7 @@ export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S,
|
|
|
235
250
|
export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
|
|
236
251
|
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
|
|
237
252
|
export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
|
|
238
|
-
export declare function refetchResources(info?: unknown):
|
|
253
|
+
export declare function refetchResources(info?: unknown): Promise<any[]>;
|
|
239
254
|
export interface DeferredOptions<T> {
|
|
240
255
|
equals?: false | ((prev: T, next: T) => boolean);
|
|
241
256
|
name?: string;
|
|
@@ -356,7 +371,7 @@ export declare function onCleanup(fn: () => void): () => void;
|
|
|
356
371
|
export declare function onError(fn: (err: any) => void): void;
|
|
357
372
|
export declare function getListener(): Computation<any, any> | null;
|
|
358
373
|
export declare function getOwner(): Owner | null;
|
|
359
|
-
export declare function runWithOwner(o: Owner, fn: () =>
|
|
374
|
+
export declare function runWithOwner<T>(o: Owner, fn: () => T): T;
|
|
360
375
|
export declare function enableScheduling(scheduler?: typeof requestCallback): void;
|
|
361
376
|
/**
|
|
362
377
|
* ```typescript
|
package/types/server/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createRoot, createSignal, createComputed, createRenderEffect, createEffect, createDeferred, createSelector, createMemo, getListener, onMount, onCleanup, onError, untrack, batch, on, children, createContext, useContext, getOwner, runWithOwner, equalFn, requestCallback, mapArray, observable, from, $PROXY, DEV, enableExternalSource } from "./reactive";
|
|
1
|
+
export { createRoot, createSignal, createComputed, createRenderEffect, createEffect, createReaction, createDeferred, createSelector, createMemo, getListener, onMount, onCleanup, onError, untrack, batch, on, children, createContext, useContext, getOwner, runWithOwner, equalFn, requestCallback, mapArray, observable, from, $PROXY, $DEVCOMP, DEV, enableExternalSource } from "./reactive";
|
|
2
2
|
export { mergeProps, splitProps, createComponent, For, Index, Show, Switch, Match, ErrorBoundary, Suspense, SuspenseList, createResource, enableScheduling, enableHydration, startTransition, useTransition, createUniqueId, lazy, sharedConfig } from "./rendering";
|
|
3
3
|
export type { Component, Resource } from "./rendering";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Accessor, Setter } from "../reactive/signal";
|
|
2
2
|
export declare const equalFn: <T>(a: T, b: T) => boolean;
|
|
3
3
|
export declare const $PROXY: unique symbol;
|
|
4
|
+
export declare const $DEVCOMP: unique symbol;
|
|
4
5
|
export declare const DEV: {};
|
|
5
6
|
export declare let Owner: Owner | null;
|
|
6
7
|
interface Owner {
|
|
@@ -15,6 +16,7 @@ export declare function createSignal<T>(value: T, options?: {
|
|
|
15
16
|
export declare function createComputed<T>(fn: (v?: T) => T, value?: T): void;
|
|
16
17
|
export declare const createRenderEffect: typeof createComputed;
|
|
17
18
|
export declare function createEffect<T>(fn: (v?: T) => T, value?: T): void;
|
|
19
|
+
export declare function createReaction(fn: () => void): (fn: () => void) => void;
|
|
18
20
|
export declare function createMemo<T>(fn: (v?: T) => T, value?: T): () => T;
|
|
19
21
|
export declare function createDeferred<T>(source: () => T): () => T;
|
|
20
22
|
export declare function createSelector<T>(source: () => T, fn: (k: T, value: T) => boolean): (k: T) => boolean;
|
package/web/dist/dev.cjs
CHANGED
|
@@ -452,7 +452,7 @@ function cleanChildren(parent, current, marker, replacement) {
|
|
|
452
452
|
if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && parent.removeChild(el);
|
|
453
453
|
} else inserted = true;
|
|
454
454
|
}
|
|
455
|
-
} else parent.insertBefore(node, marker);
|
|
455
|
+
} else if (current instanceof Node) parent.replaceChild(node, current);else parent.insertBefore(node, marker);
|
|
456
456
|
return [node];
|
|
457
457
|
}
|
|
458
458
|
function gatherHydratable(element, root) {
|
|
@@ -551,75 +551,51 @@ function Dynamic(props) {
|
|
|
551
551
|
|
|
552
552
|
Object.defineProperty(exports, 'ErrorBoundary', {
|
|
553
553
|
enumerable: true,
|
|
554
|
-
get: function () {
|
|
555
|
-
return solidJs.ErrorBoundary;
|
|
556
|
-
}
|
|
554
|
+
get: function () { return solidJs.ErrorBoundary; }
|
|
557
555
|
});
|
|
558
556
|
Object.defineProperty(exports, 'For', {
|
|
559
557
|
enumerable: true,
|
|
560
|
-
get: function () {
|
|
561
|
-
return solidJs.For;
|
|
562
|
-
}
|
|
558
|
+
get: function () { return solidJs.For; }
|
|
563
559
|
});
|
|
564
560
|
Object.defineProperty(exports, 'Index', {
|
|
565
561
|
enumerable: true,
|
|
566
|
-
get: function () {
|
|
567
|
-
return solidJs.Index;
|
|
568
|
-
}
|
|
562
|
+
get: function () { return solidJs.Index; }
|
|
569
563
|
});
|
|
570
564
|
Object.defineProperty(exports, 'Match', {
|
|
571
565
|
enumerable: true,
|
|
572
|
-
get: function () {
|
|
573
|
-
return solidJs.Match;
|
|
574
|
-
}
|
|
566
|
+
get: function () { return solidJs.Match; }
|
|
575
567
|
});
|
|
576
568
|
Object.defineProperty(exports, 'Show', {
|
|
577
569
|
enumerable: true,
|
|
578
|
-
get: function () {
|
|
579
|
-
return solidJs.Show;
|
|
580
|
-
}
|
|
570
|
+
get: function () { return solidJs.Show; }
|
|
581
571
|
});
|
|
582
572
|
Object.defineProperty(exports, 'Suspense', {
|
|
583
573
|
enumerable: true,
|
|
584
|
-
get: function () {
|
|
585
|
-
return solidJs.Suspense;
|
|
586
|
-
}
|
|
574
|
+
get: function () { return solidJs.Suspense; }
|
|
587
575
|
});
|
|
588
576
|
Object.defineProperty(exports, 'SuspenseList', {
|
|
589
577
|
enumerable: true,
|
|
590
|
-
get: function () {
|
|
591
|
-
return solidJs.SuspenseList;
|
|
592
|
-
}
|
|
578
|
+
get: function () { return solidJs.SuspenseList; }
|
|
593
579
|
});
|
|
594
580
|
Object.defineProperty(exports, 'Switch', {
|
|
595
581
|
enumerable: true,
|
|
596
|
-
get: function () {
|
|
597
|
-
return solidJs.Switch;
|
|
598
|
-
}
|
|
582
|
+
get: function () { return solidJs.Switch; }
|
|
599
583
|
});
|
|
600
584
|
Object.defineProperty(exports, 'createComponent', {
|
|
601
585
|
enumerable: true,
|
|
602
|
-
get: function () {
|
|
603
|
-
return solidJs.createComponent;
|
|
604
|
-
}
|
|
586
|
+
get: function () { return solidJs.createComponent; }
|
|
605
587
|
});
|
|
606
588
|
Object.defineProperty(exports, 'effect', {
|
|
607
589
|
enumerable: true,
|
|
608
|
-
get: function () {
|
|
609
|
-
return solidJs.createRenderEffect;
|
|
610
|
-
}
|
|
590
|
+
get: function () { return solidJs.createRenderEffect; }
|
|
611
591
|
});
|
|
612
592
|
Object.defineProperty(exports, 'getOwner', {
|
|
613
593
|
enumerable: true,
|
|
614
|
-
get: function () {
|
|
615
|
-
return solidJs.getOwner;
|
|
616
|
-
}
|
|
594
|
+
get: function () { return solidJs.getOwner; }
|
|
617
595
|
});
|
|
618
596
|
Object.defineProperty(exports, 'mergeProps', {
|
|
619
597
|
enumerable: true,
|
|
620
|
-
get: function () {
|
|
621
|
-
return solidJs.mergeProps;
|
|
622
|
-
}
|
|
598
|
+
get: function () { return solidJs.mergeProps; }
|
|
623
599
|
});
|
|
624
600
|
exports.Aliases = Aliases;
|
|
625
601
|
exports.Assets = Assets;
|
package/web/dist/dev.js
CHANGED
|
@@ -449,7 +449,7 @@ function cleanChildren(parent, current, marker, replacement) {
|
|
|
449
449
|
if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && parent.removeChild(el);
|
|
450
450
|
} else inserted = true;
|
|
451
451
|
}
|
|
452
|
-
} else parent.insertBefore(node, marker);
|
|
452
|
+
} else if (current instanceof Node) parent.replaceChild(node, current);else parent.insertBefore(node, marker);
|
|
453
453
|
return [node];
|
|
454
454
|
}
|
|
455
455
|
function gatherHydratable(element, root) {
|
package/web/dist/server.cjs
CHANGED
|
@@ -258,6 +258,7 @@ function renderToStringAsync(code, options = {}) {
|
|
|
258
258
|
renderId,
|
|
259
259
|
timeoutMs = 30000
|
|
260
260
|
} = options;
|
|
261
|
+
const dedupe = new WeakMap();
|
|
261
262
|
const context = solidJs.sharedConfig.context = {
|
|
262
263
|
id: renderId || "",
|
|
263
264
|
count: 0,
|
|
@@ -268,8 +269,8 @@ function renderToStringAsync(code, options = {}) {
|
|
|
268
269
|
nonce,
|
|
269
270
|
writeResource(id, p, error) {
|
|
270
271
|
if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
|
|
271
|
-
if (!p || typeof p !== "object" || !("then" in p)) return scripts +=
|
|
272
|
-
p.then(d => scripts +=
|
|
272
|
+
if (!p || typeof p !== "object" || !("then" in p)) return scripts += serializeSet(dedupe, id, p);
|
|
273
|
+
p.then(d => scripts += serializeSet(dedupe, id, d)).catch(() => scripts += `_$HY.set("${id}", {});`);
|
|
273
274
|
}
|
|
274
275
|
};
|
|
275
276
|
const timeout = new Promise((_, reject) => setTimeout(() => reject("renderToString timed out"), timeoutMs));
|
|
@@ -318,6 +319,7 @@ function renderToStream(code, options = {}) {
|
|
|
318
319
|
const tmp = [];
|
|
319
320
|
const tasks = [];
|
|
320
321
|
const registry = new Map();
|
|
322
|
+
const dedupe = new WeakMap();
|
|
321
323
|
const checkEnd = () => {
|
|
322
324
|
if (!registry.size && !completed) {
|
|
323
325
|
onCompleteAll && onCompleteAll(result);
|
|
@@ -356,11 +358,11 @@ function renderToStream(code, options = {}) {
|
|
|
356
358
|
scheduled = true;
|
|
357
359
|
}
|
|
358
360
|
if (error) return tasks.push(`_$HY.set("${id}", ${serializeError(p)})`);
|
|
359
|
-
if (!p || typeof p !== "object" || !("then" in p)) return tasks.push(
|
|
361
|
+
if (!p || typeof p !== "object" || !("then" in p)) return tasks.push(serializeSet(dedupe, id, p));
|
|
360
362
|
tasks.push(`_$HY.init("${id}")`);
|
|
361
363
|
p.then(d => {
|
|
362
|
-
!completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}
|
|
363
|
-
}).catch(
|
|
364
|
+
!completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${serializeSet(dedupe, id, d)}</script>`);
|
|
365
|
+
}).catch(() => {
|
|
364
366
|
!completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", {})</script>`);
|
|
365
367
|
});
|
|
366
368
|
},
|
|
@@ -574,7 +576,7 @@ function generateHydrationScript({
|
|
|
574
576
|
eventNames = ["click", "input"],
|
|
575
577
|
nonce
|
|
576
578
|
}) {
|
|
577
|
-
return `<script${nonce ? ` nonce="${nonce}"` : ""}>
|
|
579
|
+
return `<script${nonce ? ` nonce="${nonce}"` : ""}>var e,t;e=window._$HY||(_$HY={events:[],completed:new WeakSet,r:{}}),t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,a=t(s);a&&!e.completed.has(a)&&e.events.push([a,o])})))),e.init=(t,o)=>{e.r[t]=[new Promise(((e,t)=>o=e)),o]},e.set=(t,o,s)=>{(s=e.r[t])&&s[1](o),e.r[t]=[o]},e.unset=t=>{delete e.r[t]},e.load=(t,o)=>{if(o=e.r[t])return o[0]};</script><!xs>`;
|
|
578
580
|
}
|
|
579
581
|
function injectAssets(assets, html) {
|
|
580
582
|
for (let i = 0; i < assets.length; i++) {
|
|
@@ -602,6 +604,12 @@ function waitForFragments(registry, key) {
|
|
|
602
604
|
}
|
|
603
605
|
return false;
|
|
604
606
|
}
|
|
607
|
+
function serializeSet(registry, key, value) {
|
|
608
|
+
const exist = registry.get(value);
|
|
609
|
+
if (exist) return `_$HY.set("${key}", _$HY.r["${exist}"][0]);`;
|
|
610
|
+
value !== null && typeof value === "object" && registry.set(value, key);
|
|
611
|
+
return `_$HY.set("${key}", ${devalue(value)});`;
|
|
612
|
+
}
|
|
605
613
|
function pipeToNodeWritable(code, writable, options = {}) {
|
|
606
614
|
if (options.onReady) {
|
|
607
615
|
options.onCompleteShell = () => {
|
|
@@ -648,63 +656,43 @@ function Portal(props) {
|
|
|
648
656
|
|
|
649
657
|
Object.defineProperty(exports, 'ErrorBoundary', {
|
|
650
658
|
enumerable: true,
|
|
651
|
-
get: function () {
|
|
652
|
-
return solidJs.ErrorBoundary;
|
|
653
|
-
}
|
|
659
|
+
get: function () { return solidJs.ErrorBoundary; }
|
|
654
660
|
});
|
|
655
661
|
Object.defineProperty(exports, 'For', {
|
|
656
662
|
enumerable: true,
|
|
657
|
-
get: function () {
|
|
658
|
-
return solidJs.For;
|
|
659
|
-
}
|
|
663
|
+
get: function () { return solidJs.For; }
|
|
660
664
|
});
|
|
661
665
|
Object.defineProperty(exports, 'Index', {
|
|
662
666
|
enumerable: true,
|
|
663
|
-
get: function () {
|
|
664
|
-
return solidJs.Index;
|
|
665
|
-
}
|
|
667
|
+
get: function () { return solidJs.Index; }
|
|
666
668
|
});
|
|
667
669
|
Object.defineProperty(exports, 'Match', {
|
|
668
670
|
enumerable: true,
|
|
669
|
-
get: function () {
|
|
670
|
-
return solidJs.Match;
|
|
671
|
-
}
|
|
671
|
+
get: function () { return solidJs.Match; }
|
|
672
672
|
});
|
|
673
673
|
Object.defineProperty(exports, 'Show', {
|
|
674
674
|
enumerable: true,
|
|
675
|
-
get: function () {
|
|
676
|
-
return solidJs.Show;
|
|
677
|
-
}
|
|
675
|
+
get: function () { return solidJs.Show; }
|
|
678
676
|
});
|
|
679
677
|
Object.defineProperty(exports, 'Suspense', {
|
|
680
678
|
enumerable: true,
|
|
681
|
-
get: function () {
|
|
682
|
-
return solidJs.Suspense;
|
|
683
|
-
}
|
|
679
|
+
get: function () { return solidJs.Suspense; }
|
|
684
680
|
});
|
|
685
681
|
Object.defineProperty(exports, 'SuspenseList', {
|
|
686
682
|
enumerable: true,
|
|
687
|
-
get: function () {
|
|
688
|
-
return solidJs.SuspenseList;
|
|
689
|
-
}
|
|
683
|
+
get: function () { return solidJs.SuspenseList; }
|
|
690
684
|
});
|
|
691
685
|
Object.defineProperty(exports, 'Switch', {
|
|
692
686
|
enumerable: true,
|
|
693
|
-
get: function () {
|
|
694
|
-
return solidJs.Switch;
|
|
695
|
-
}
|
|
687
|
+
get: function () { return solidJs.Switch; }
|
|
696
688
|
});
|
|
697
689
|
Object.defineProperty(exports, 'createComponent', {
|
|
698
690
|
enumerable: true,
|
|
699
|
-
get: function () {
|
|
700
|
-
return solidJs.createComponent;
|
|
701
|
-
}
|
|
691
|
+
get: function () { return solidJs.createComponent; }
|
|
702
692
|
});
|
|
703
693
|
Object.defineProperty(exports, 'mergeProps', {
|
|
704
694
|
enumerable: true,
|
|
705
|
-
get: function () {
|
|
706
|
-
return solidJs.mergeProps;
|
|
707
|
-
}
|
|
695
|
+
get: function () { return solidJs.mergeProps; }
|
|
708
696
|
});
|
|
709
697
|
exports.Assets = Assets;
|
|
710
698
|
exports.Dynamic = Dynamic;
|
package/web/dist/server.js
CHANGED
|
@@ -255,6 +255,7 @@ function renderToStringAsync(code, options = {}) {
|
|
|
255
255
|
renderId,
|
|
256
256
|
timeoutMs = 30000
|
|
257
257
|
} = options;
|
|
258
|
+
const dedupe = new WeakMap();
|
|
258
259
|
const context = sharedConfig.context = {
|
|
259
260
|
id: renderId || "",
|
|
260
261
|
count: 0,
|
|
@@ -265,8 +266,8 @@ function renderToStringAsync(code, options = {}) {
|
|
|
265
266
|
nonce,
|
|
266
267
|
writeResource(id, p, error) {
|
|
267
268
|
if (error) return scripts += `_$HY.set("${id}", ${serializeError(p)});`;
|
|
268
|
-
if (!p || typeof p !== "object" || !("then" in p)) return scripts +=
|
|
269
|
-
p.then(d => scripts +=
|
|
269
|
+
if (!p || typeof p !== "object" || !("then" in p)) return scripts += serializeSet(dedupe, id, p);
|
|
270
|
+
p.then(d => scripts += serializeSet(dedupe, id, d)).catch(() => scripts += `_$HY.set("${id}", {});`);
|
|
270
271
|
}
|
|
271
272
|
};
|
|
272
273
|
const timeout = new Promise((_, reject) => setTimeout(() => reject("renderToString timed out"), timeoutMs));
|
|
@@ -315,6 +316,7 @@ function renderToStream(code, options = {}) {
|
|
|
315
316
|
const tmp = [];
|
|
316
317
|
const tasks = [];
|
|
317
318
|
const registry = new Map();
|
|
319
|
+
const dedupe = new WeakMap();
|
|
318
320
|
const checkEnd = () => {
|
|
319
321
|
if (!registry.size && !completed) {
|
|
320
322
|
onCompleteAll && onCompleteAll(result);
|
|
@@ -353,11 +355,11 @@ function renderToStream(code, options = {}) {
|
|
|
353
355
|
scheduled = true;
|
|
354
356
|
}
|
|
355
357
|
if (error) return tasks.push(`_$HY.set("${id}", ${serializeError(p)})`);
|
|
356
|
-
if (!p || typeof p !== "object" || !("then" in p)) return tasks.push(
|
|
358
|
+
if (!p || typeof p !== "object" || !("then" in p)) return tasks.push(serializeSet(dedupe, id, p));
|
|
357
359
|
tasks.push(`_$HY.init("${id}")`);
|
|
358
360
|
p.then(d => {
|
|
359
|
-
!completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}
|
|
360
|
-
}).catch(
|
|
361
|
+
!completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${serializeSet(dedupe, id, d)}</script>`);
|
|
362
|
+
}).catch(() => {
|
|
361
363
|
!completed && buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>_$HY.set("${id}", {})</script>`);
|
|
362
364
|
});
|
|
363
365
|
},
|
|
@@ -571,7 +573,7 @@ function generateHydrationScript({
|
|
|
571
573
|
eventNames = ["click", "input"],
|
|
572
574
|
nonce
|
|
573
575
|
}) {
|
|
574
|
-
return `<script${nonce ? ` nonce="${nonce}"` : ""}>
|
|
576
|
+
return `<script${nonce ? ` nonce="${nonce}"` : ""}>var e,t;e=window._$HY||(_$HY={events:[],completed:new WeakSet,r:{}}),t=e=>e&&e.hasAttribute&&(e.hasAttribute("data-hk")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),["${eventNames.join('","')}"].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,a=t(s);a&&!e.completed.has(a)&&e.events.push([a,o])})))),e.init=(t,o)=>{e.r[t]=[new Promise(((e,t)=>o=e)),o]},e.set=(t,o,s)=>{(s=e.r[t])&&s[1](o),e.r[t]=[o]},e.unset=t=>{delete e.r[t]},e.load=(t,o)=>{if(o=e.r[t])return o[0]};</script><!xs>`;
|
|
575
577
|
}
|
|
576
578
|
function injectAssets(assets, html) {
|
|
577
579
|
for (let i = 0; i < assets.length; i++) {
|
|
@@ -599,6 +601,12 @@ function waitForFragments(registry, key) {
|
|
|
599
601
|
}
|
|
600
602
|
return false;
|
|
601
603
|
}
|
|
604
|
+
function serializeSet(registry, key, value) {
|
|
605
|
+
const exist = registry.get(value);
|
|
606
|
+
if (exist) return `_$HY.set("${key}", _$HY.r["${exist}"][0]);`;
|
|
607
|
+
value !== null && typeof value === "object" && registry.set(value, key);
|
|
608
|
+
return `_$HY.set("${key}", ${devalue(value)});`;
|
|
609
|
+
}
|
|
602
610
|
function pipeToNodeWritable(code, writable, options = {}) {
|
|
603
611
|
if (options.onReady) {
|
|
604
612
|
options.onCompleteShell = () => {
|