solid-js 1.3.0 → 1.3.4

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.
@@ -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: T extends NotWrappable ? T : Store<T>) => void;
49
- export declare function produce<T>(fn: (state: T) => void): (state: T extends NotWrappable ? T : Store<T>) => T extends NotWrappable ? T : Store<T>;
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 {};
@@ -1,72 +1,44 @@
1
- import { $PROXY, Accessor } from "../..";
1
+ import { Accessor } from "../..";
2
2
  export declare const $RAW: unique symbol, $NODE: unique symbol, $NAME: unique symbol;
3
- export declare type StoreNode = {
4
- [$NODE]?: any;
5
- [$PROXY]?: any;
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: string | number | symbol): PropertyDescriptor | undefined;
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: string | number, value: any): void;
45
- export declare function updatePath(current: StoreNode, path: any[], traversed?: (number | string)[]): void;
46
- export declare type Readonly<T> = {
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 DeepReadonly<T> = T extends [infer A] ? Readonly<[A]> : T extends [infer A, infer B] ? Readonly<[A, B]> : T extends [infer A, infer B, infer C] ? Readonly<[A, B, C]> : T extends [infer A, infer B, infer C, infer D] ? Readonly<[A, B, C, D]> : T extends [infer A, infer B, infer C, infer D, infer E] ? Readonly<[A, B, C, D, E]> : T extends [infer A, infer B, infer C, infer D, infer E, infer F] ? Readonly<[A, B, C, D, E, F]> : T extends [infer A, infer B, infer C, infer D, infer E, infer F, infer G] ? Readonly<[A, B, C, D, E, F, G]> : T extends [infer A, infer B, infer C, infer D, infer E, infer F, infer G, infer H] ? Readonly<[A, B, C, D, E, F, G, H]> : T extends object ? Readonly<T> : T;
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 extends any[] ? T[number] : never, index: number) => boolean;
57
- export declare type Part<T> = T extends any[] ? keyof T | Array<keyof T> | ArrayFilterFn<T> | StorePathRange : T extends object ? keyof T | Array<keyof T> : never;
58
- export declare type NullableNext<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;
59
- export declare type Next<T, K> = NonNullable<NullableNext<T, K>>;
60
- export interface SetStoreFunction<T> {
61
- <Setter extends StoreSetter<T>>(...args: [Setter]): void;
62
- <K1 extends Part<T>, Setter extends StoreSetter<NullableNext<T, K1>>>(...args: [K1, Setter]): void;
63
- <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, Setter extends StoreSetter<NullableNext<Next<T, K1>, K2>>>(...args: [K1, K2, Setter]): void;
64
- <K1 extends Part<T>, K2 extends Part<Next<T, K1>>, K3 extends Part<Next<Next<T, K1>, K2>>, Setter extends StoreSetter<NullableNext<Next<Next<T, K1>, K2>, K3>>>(...args: [K1, K2, K3, Setter]): void;
65
- <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<NullableNext<Next<Next<Next<T, K1>, K2>, K3>, K4>>>(...args: [K1, K2, K3, K4, Setter]): void;
66
- <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<NullableNext<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>>>(...args: [K1, K2, K3, K4, K5, Setter]): void;
67
- <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<NullableNext<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>>>(...args: [K1, K2, K3, K4, K5, K6, Setter]): void;
68
- <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<NullableNext<Next<Next<Next<Next<Next<Next<T, K1>, K2>, K3>, K4>, K5>, K6>, K7>>>(...args: [K1, K2, K3, K4, K5, K6, K7, Setter]): void;
69
- <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;
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,5 +1,5 @@
1
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
- export type { Accessor, Setter, Resource, ResourceReturn, ResourceFetcher, ResourceFetcherInfo, Context, ReturnTypes } from "./reactive/signal";
2
+ export type { Accessor, Setter, Signal, Resource, ResourceReturn, ResourceFetcher, ResourceFetcherInfo, Context, ReturnTypes } from "./reactive/signal";
3
3
  export * from "./reactive/observable";
4
4
  export * from "./reactive/scheduler";
5
5
  export * from "./reactive/array";
@@ -204,13 +204,13 @@ export declare type ResourceActions<T> = {
204
204
  refetch: (info?: unknown) => void;
205
205
  };
206
206
  export declare type ResourceReturn<T> = [Resource<T>, ResourceActions<T>];
207
- export declare type ResourceSource<S> = S | false | null | (() => S | false | null);
207
+ export declare type ResourceSource<S> = S | false | null | undefined | (() => S | false | null | undefined);
208
208
  export declare type ResourceFetcher<S, T> = (k: S, info: ResourceFetcherInfo<T>) => T | Promise<T>;
209
209
  export declare type ResourceFetcherInfo<T> = {
210
210
  value: T | undefined;
211
211
  refetching?: unknown;
212
212
  };
213
- export declare type ResourceOptions<T> = T extends undefined ? {
213
+ export declare type ResourceOptions<T> = undefined extends T ? {
214
214
  initialValue?: T;
215
215
  name?: string;
216
216
  globalRefetch?: boolean;
@@ -13,8 +13,9 @@ export declare type Component<P = {}> = (props: PropsWithChildren<P>) => JSX.Ele
13
13
  */
14
14
  export declare type ComponentProps<T extends keyof JSX.IntrinsicElements | Component<any>> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : {};
15
15
  export declare function createComponent<T>(Comp: (props: T) => JSX.Element, props: T): JSX.Element;
16
+ declare type UnboxLazy<T> = T extends () => infer U ? U : T;
16
17
  declare type BoxedTupleTypes<T extends any[]> = {
17
- [P in keyof T]: [T[P]];
18
+ [P in keyof T]: [UnboxLazy<T[P]>];
18
19
  }[Exclude<keyof T, keyof any[]>];
19
20
  declare type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
20
21
  declare type UnboxIntersection<T> = T extends {
@@ -77,6 +77,7 @@ export declare type MatchProps<T> = {
77
77
  * @description https://www.solidjs.com/docs/latest/api#%3Cswitch%3E%2F%3Cmatch%3E
78
78
  */
79
79
  export declare function Match<T>(props: MatchProps<T>): JSX.Element;
80
+ export declare function resetErrorBoundaries(): void;
80
81
  /**
81
82
  * catches uncaught errors inside components and renders a fallback content
82
83
  *
@@ -55,6 +55,7 @@ declare type MatchProps<T> = {
55
55
  children: string | ((item: T) => string);
56
56
  };
57
57
  export declare function Match<T>(props: MatchProps<T>): MatchProps<T>;
58
+ export declare function resetErrorBoundaries(): void;
58
59
  export declare function ErrorBoundary(props: {
59
60
  fallback: string | ((err: any, reset: () => void) => string);
60
61
  children: string;
@@ -62,10 +63,12 @@ export declare function ErrorBoundary(props: {
62
63
  export interface Resource<T> {
63
64
  (): T | undefined;
64
65
  loading: boolean;
66
+ error: any;
65
67
  }
66
68
  declare type SuspenseContextType = {
67
69
  resources: Map<string, {
68
70
  loading: boolean;
71
+ error: any;
69
72
  }>;
70
73
  completed: () => void;
71
74
  };
@@ -4,5 +4,15 @@
4
4
  "module": "./dist/universal.js",
5
5
  "types": "./types/index.d.ts",
6
6
  "type": "module",
7
- "sideEffects": false
7
+ "sideEffects": false,
8
+ "exports": {
9
+ ".": {
10
+ "development": {
11
+ "import": "./dist/dev.js",
12
+ "require": "./dist/dev.cjs"
13
+ },
14
+ "import": "./dist/universal.js",
15
+ "require": "./dist/universal.cjs"
16
+ }
17
+ }
8
18
  }
package/web/dist/dev.cjs CHANGED
@@ -59,7 +59,7 @@ function reconcileArrays(parentNode, a, b) {
59
59
  while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);
60
60
  } else if (bEnd === bStart) {
61
61
  while (aStart < aEnd) {
62
- if (!map || !map.has(a[aStart])) parentNode.removeChild(a[aStart]);
62
+ if (!map || !map.has(a[aStart])) a[aStart].remove();
63
63
  aStart++;
64
64
  }
65
65
  } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
@@ -88,7 +88,7 @@ function reconcileArrays(parentNode, a, b) {
88
88
  while (bStart < index) parentNode.insertBefore(b[bStart++], node);
89
89
  } else parentNode.replaceChild(b[bStart++], a[aStart++]);
90
90
  } else aStart++;
91
- } else parentNode.removeChild(a[aStart++]);
91
+ } else a[aStart++].remove();
92
92
  }
93
93
  }
94
94
  }
@@ -347,6 +347,7 @@ function spreadExpression(node, props, prevProps = {}, isSVG, skipChildren) {
347
347
  return prevProps;
348
348
  }
349
349
  function insertExpression(parent, value, current, marker, unwrapArray) {
350
+ if (solidJs.sharedConfig.context && !current) current = [...parent.childNodes];
350
351
  while (typeof current === "function") current = current();
351
352
  if (value === current) return current;
352
353
  const t = typeof value,
@@ -403,13 +404,13 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
403
404
  }
404
405
  current = array;
405
406
  } else if (value instanceof Node) {
406
- if (solidJs.sharedConfig.context) return current = value.parentNode ? value : current;
407
+ if (solidJs.sharedConfig.context) return current = value.parentNode ? multi ? [value] : value : current;
407
408
  if (Array.isArray(current)) {
408
409
  if (multi) return current = cleanChildren(parent, current, marker, value);
409
410
  cleanChildren(parent, current, null, value);
410
411
  } else if (current == null || current === "" || !parent.firstChild) {
411
412
  parent.appendChild(value);
412
- } else parent.replaceChild(value, multi ? current : parent.firstChild);
413
+ } else parent.replaceChild(value, parent.firstChild);
413
414
  current = value;
414
415
  } else console.warn(`Unrecognized value. Skipped inserting`, value);
415
416
  return current;
@@ -449,7 +450,7 @@ function cleanChildren(parent, current, marker, replacement) {
449
450
  const el = current[i];
450
451
  if (node !== el) {
451
452
  const isParent = el.parentNode === parent;
452
- if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && parent.removeChild(el);
453
+ if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();
453
454
  } else inserted = true;
454
455
  }
455
456
  } else parent.insertBefore(node, marker);
@@ -539,6 +540,9 @@ function Dynamic(props) {
539
540
  const component = p.component;
540
541
  switch (typeof component) {
541
542
  case "function":
543
+ Object.assign(component, {
544
+ [solidJs.$DEVCOMP]: true
545
+ });
542
546
  return solidJs.untrack(() => component(others));
543
547
  case "string":
544
548
  const isSvg = SVGElements.has(component);
package/web/dist/dev.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createMemo, createRoot, createRenderEffect, sharedConfig, enableHydration, createSignal, onCleanup, splitProps, untrack } from 'solid-js';
1
+ import { createMemo, createRoot, createRenderEffect, sharedConfig, enableHydration, createSignal, onCleanup, splitProps, $DEVCOMP, untrack } from 'solid-js';
2
2
  export { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps } from 'solid-js';
3
3
 
4
4
  const booleans = ["allowfullscreen", "async", "autofocus", "autoplay", "checked", "controls", "default", "disabled", "formnovalidate", "hidden", "indeterminate", "ismap", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "seamless", "selected"];
@@ -56,7 +56,7 @@ function reconcileArrays(parentNode, a, b) {
56
56
  while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);
57
57
  } else if (bEnd === bStart) {
58
58
  while (aStart < aEnd) {
59
- if (!map || !map.has(a[aStart])) parentNode.removeChild(a[aStart]);
59
+ if (!map || !map.has(a[aStart])) a[aStart].remove();
60
60
  aStart++;
61
61
  }
62
62
  } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
@@ -85,7 +85,7 @@ function reconcileArrays(parentNode, a, b) {
85
85
  while (bStart < index) parentNode.insertBefore(b[bStart++], node);
86
86
  } else parentNode.replaceChild(b[bStart++], a[aStart++]);
87
87
  } else aStart++;
88
- } else parentNode.removeChild(a[aStart++]);
88
+ } else a[aStart++].remove();
89
89
  }
90
90
  }
91
91
  }
@@ -344,6 +344,7 @@ function spreadExpression(node, props, prevProps = {}, isSVG, skipChildren) {
344
344
  return prevProps;
345
345
  }
346
346
  function insertExpression(parent, value, current, marker, unwrapArray) {
347
+ if (sharedConfig.context && !current) current = [...parent.childNodes];
347
348
  while (typeof current === "function") current = current();
348
349
  if (value === current) return current;
349
350
  const t = typeof value,
@@ -400,13 +401,13 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
400
401
  }
401
402
  current = array;
402
403
  } else if (value instanceof Node) {
403
- if (sharedConfig.context) return current = value.parentNode ? value : current;
404
+ if (sharedConfig.context) return current = value.parentNode ? multi ? [value] : value : current;
404
405
  if (Array.isArray(current)) {
405
406
  if (multi) return current = cleanChildren(parent, current, marker, value);
406
407
  cleanChildren(parent, current, null, value);
407
408
  } else if (current == null || current === "" || !parent.firstChild) {
408
409
  parent.appendChild(value);
409
- } else parent.replaceChild(value, multi ? current : parent.firstChild);
410
+ } else parent.replaceChild(value, parent.firstChild);
410
411
  current = value;
411
412
  } else console.warn(`Unrecognized value. Skipped inserting`, value);
412
413
  return current;
@@ -446,7 +447,7 @@ function cleanChildren(parent, current, marker, replacement) {
446
447
  const el = current[i];
447
448
  if (node !== el) {
448
449
  const isParent = el.parentNode === parent;
449
- if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && parent.removeChild(el);
450
+ if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();
450
451
  } else inserted = true;
451
452
  }
452
453
  } else parent.insertBefore(node, marker);
@@ -536,6 +537,9 @@ function Dynamic(props) {
536
537
  const component = p.component;
537
538
  switch (typeof component) {
538
539
  case "function":
540
+ Object.assign(component, {
541
+ [$DEVCOMP]: true
542
+ });
539
543
  return untrack(() => component(others));
540
544
  case "string":
541
545
  const isSvg = SVGElements.has(component);
@@ -322,12 +322,13 @@ function renderToStream(code, options = {}) {
322
322
  const dedupe = new WeakMap();
323
323
  const checkEnd = () => {
324
324
  if (!registry.size && !completed) {
325
+ writeTasks();
325
326
  onCompleteAll && onCompleteAll(result);
326
327
  writable && writable.end();
327
328
  completed = true;
328
329
  }
329
330
  };
330
- const writeInitialScript = () => {
331
+ const writeTasks = () => {
331
332
  if (tasks.length && !completed) {
332
333
  buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${tasks.join(";")}</script>`);
333
334
  tasks.length = 0;
@@ -354,7 +355,7 @@ function renderToStream(code, options = {}) {
354
355
  nonce,
355
356
  writeResource(id, p, error) {
356
357
  if (!scheduled) {
357
- Promise.resolve().then(writeInitialScript);
358
+ Promise.resolve().then(writeTasks);
358
359
  scheduled = true;
359
360
  }
360
361
  if (error) return tasks.push(`_$HY.set("${id}", ${serializeError(p)})`);
@@ -369,7 +370,7 @@ function renderToStream(code, options = {}) {
369
370
  registerFragment(key) {
370
371
  registry.set(key, []);
371
372
  if (!scheduled) {
372
- Promise.resolve().then(writeInitialScript);
373
+ Promise.resolve().then(writeTasks);
373
374
  scheduled = true;
374
375
  }
375
376
  tasks.push(`_$HY.init("${key}")`);
@@ -575,8 +576,8 @@ function getHydrationKey() {
575
576
  function generateHydrationScript({
576
577
  eventNames = ["click", "input"],
577
578
  nonce
578
- }) {
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>`;
579
+ } = {}) {
580
+ 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-->`;
580
581
  }
581
582
  function injectAssets(assets, html) {
582
583
  for (let i = 0; i < assets.length; i++) {
@@ -586,7 +587,7 @@ function injectAssets(assets, html) {
586
587
  }
587
588
  function injectScripts(html, scripts, nonce) {
588
589
  const tag = `<script${nonce ? ` nonce="${nonce}"` : ""}>${scripts}</script>`;
589
- const index = html.indexOf("<!xs>");
590
+ const index = html.indexOf("<!--xs-->");
590
591
  if (index > -1) {
591
592
  return html.slice(0, index) + tag + html.slice(index);
592
593
  }
@@ -607,7 +608,7 @@ function waitForFragments(registry, key) {
607
608
  function serializeSet(registry, key, value) {
608
609
  const exist = registry.get(value);
609
610
  if (exist) return `_$HY.set("${key}", _$HY.r["${exist}"][0]);`;
610
- registry.set(value, key);
611
+ value !== null && typeof value === "object" && registry.set(value, key);
611
612
  return `_$HY.set("${key}", ${devalue(value)});`;
612
613
  }
613
614
  function pipeToNodeWritable(code, writable, options = {}) {
@@ -319,12 +319,13 @@ function renderToStream(code, options = {}) {
319
319
  const dedupe = new WeakMap();
320
320
  const checkEnd = () => {
321
321
  if (!registry.size && !completed) {
322
+ writeTasks();
322
323
  onCompleteAll && onCompleteAll(result);
323
324
  writable && writable.end();
324
325
  completed = true;
325
326
  }
326
327
  };
327
- const writeInitialScript = () => {
328
+ const writeTasks = () => {
328
329
  if (tasks.length && !completed) {
329
330
  buffer.write(`<script${nonce ? ` nonce="${nonce}"` : ""}>${tasks.join(";")}</script>`);
330
331
  tasks.length = 0;
@@ -351,7 +352,7 @@ function renderToStream(code, options = {}) {
351
352
  nonce,
352
353
  writeResource(id, p, error) {
353
354
  if (!scheduled) {
354
- Promise.resolve().then(writeInitialScript);
355
+ Promise.resolve().then(writeTasks);
355
356
  scheduled = true;
356
357
  }
357
358
  if (error) return tasks.push(`_$HY.set("${id}", ${serializeError(p)})`);
@@ -366,7 +367,7 @@ function renderToStream(code, options = {}) {
366
367
  registerFragment(key) {
367
368
  registry.set(key, []);
368
369
  if (!scheduled) {
369
- Promise.resolve().then(writeInitialScript);
370
+ Promise.resolve().then(writeTasks);
370
371
  scheduled = true;
371
372
  }
372
373
  tasks.push(`_$HY.init("${key}")`);
@@ -572,8 +573,8 @@ function getHydrationKey() {
572
573
  function generateHydrationScript({
573
574
  eventNames = ["click", "input"],
574
575
  nonce
575
- }) {
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>`;
576
+ } = {}) {
577
+ 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-->`;
577
578
  }
578
579
  function injectAssets(assets, html) {
579
580
  for (let i = 0; i < assets.length; i++) {
@@ -583,7 +584,7 @@ function injectAssets(assets, html) {
583
584
  }
584
585
  function injectScripts(html, scripts, nonce) {
585
586
  const tag = `<script${nonce ? ` nonce="${nonce}"` : ""}>${scripts}</script>`;
586
- const index = html.indexOf("<!xs>");
587
+ const index = html.indexOf("<!--xs-->");
587
588
  if (index > -1) {
588
589
  return html.slice(0, index) + tag + html.slice(index);
589
590
  }
@@ -604,7 +605,7 @@ function waitForFragments(registry, key) {
604
605
  function serializeSet(registry, key, value) {
605
606
  const exist = registry.get(value);
606
607
  if (exist) return `_$HY.set("${key}", _$HY.r["${exist}"][0]);`;
607
- registry.set(value, key);
608
+ value !== null && typeof value === "object" && registry.set(value, key);
608
609
  return `_$HY.set("${key}", ${devalue(value)});`;
609
610
  }
610
611
  function pipeToNodeWritable(code, writable, options = {}) {
package/web/dist/web.cjs CHANGED
@@ -59,7 +59,7 @@ function reconcileArrays(parentNode, a, b) {
59
59
  while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);
60
60
  } else if (bEnd === bStart) {
61
61
  while (aStart < aEnd) {
62
- if (!map || !map.has(a[aStart])) parentNode.removeChild(a[aStart]);
62
+ if (!map || !map.has(a[aStart])) a[aStart].remove();
63
63
  aStart++;
64
64
  }
65
65
  } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
@@ -88,7 +88,7 @@ function reconcileArrays(parentNode, a, b) {
88
88
  while (bStart < index) parentNode.insertBefore(b[bStart++], node);
89
89
  } else parentNode.replaceChild(b[bStart++], a[aStart++]);
90
90
  } else aStart++;
91
- } else parentNode.removeChild(a[aStart++]);
91
+ } else a[aStart++].remove();
92
92
  }
93
93
  }
94
94
  }
@@ -346,6 +346,7 @@ function spreadExpression(node, props, prevProps = {}, isSVG, skipChildren) {
346
346
  return prevProps;
347
347
  }
348
348
  function insertExpression(parent, value, current, marker, unwrapArray) {
349
+ if (solidJs.sharedConfig.context && !current) current = [...parent.childNodes];
349
350
  while (typeof current === "function") current = current();
350
351
  if (value === current) return current;
351
352
  const t = typeof value,
@@ -402,13 +403,13 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
402
403
  }
403
404
  current = array;
404
405
  } else if (value instanceof Node) {
405
- if (solidJs.sharedConfig.context) return current = value.parentNode ? value : current;
406
+ if (solidJs.sharedConfig.context) return current = value.parentNode ? multi ? [value] : value : current;
406
407
  if (Array.isArray(current)) {
407
408
  if (multi) return current = cleanChildren(parent, current, marker, value);
408
409
  cleanChildren(parent, current, null, value);
409
410
  } else if (current == null || current === "" || !parent.firstChild) {
410
411
  parent.appendChild(value);
411
- } else parent.replaceChild(value, multi ? current : parent.firstChild);
412
+ } else parent.replaceChild(value, parent.firstChild);
412
413
  current = value;
413
414
  } else ;
414
415
  return current;
@@ -448,7 +449,7 @@ function cleanChildren(parent, current, marker, replacement) {
448
449
  const el = current[i];
449
450
  if (node !== el) {
450
451
  const isParent = el.parentNode === parent;
451
- if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && parent.removeChild(el);
452
+ if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();
452
453
  } else inserted = true;
453
454
  }
454
455
  } else parent.insertBefore(node, marker);
package/web/dist/web.js CHANGED
@@ -56,7 +56,7 @@ function reconcileArrays(parentNode, a, b) {
56
56
  while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);
57
57
  } else if (bEnd === bStart) {
58
58
  while (aStart < aEnd) {
59
- if (!map || !map.has(a[aStart])) parentNode.removeChild(a[aStart]);
59
+ if (!map || !map.has(a[aStart])) a[aStart].remove();
60
60
  aStart++;
61
61
  }
62
62
  } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
@@ -85,7 +85,7 @@ function reconcileArrays(parentNode, a, b) {
85
85
  while (bStart < index) parentNode.insertBefore(b[bStart++], node);
86
86
  } else parentNode.replaceChild(b[bStart++], a[aStart++]);
87
87
  } else aStart++;
88
- } else parentNode.removeChild(a[aStart++]);
88
+ } else a[aStart++].remove();
89
89
  }
90
90
  }
91
91
  }
@@ -343,6 +343,7 @@ function spreadExpression(node, props, prevProps = {}, isSVG, skipChildren) {
343
343
  return prevProps;
344
344
  }
345
345
  function insertExpression(parent, value, current, marker, unwrapArray) {
346
+ if (sharedConfig.context && !current) current = [...parent.childNodes];
346
347
  while (typeof current === "function") current = current();
347
348
  if (value === current) return current;
348
349
  const t = typeof value,
@@ -399,13 +400,13 @@ function insertExpression(parent, value, current, marker, unwrapArray) {
399
400
  }
400
401
  current = array;
401
402
  } else if (value instanceof Node) {
402
- if (sharedConfig.context) return current = value.parentNode ? value : current;
403
+ if (sharedConfig.context) return current = value.parentNode ? multi ? [value] : value : current;
403
404
  if (Array.isArray(current)) {
404
405
  if (multi) return current = cleanChildren(parent, current, marker, value);
405
406
  cleanChildren(parent, current, null, value);
406
407
  } else if (current == null || current === "" || !parent.firstChild) {
407
408
  parent.appendChild(value);
408
- } else parent.replaceChild(value, multi ? current : parent.firstChild);
409
+ } else parent.replaceChild(value, parent.firstChild);
409
410
  current = value;
410
411
  } else ;
411
412
  return current;
@@ -445,7 +446,7 @@ function cleanChildren(parent, current, marker, replacement) {
445
446
  const el = current[i];
446
447
  if (node !== el) {
447
448
  const isParent = el.parentNode === parent;
448
- if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && parent.removeChild(el);
449
+ if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();
449
450
  } else inserted = true;
450
451
  }
451
452
  } else parent.insertBefore(node, marker);