solid-js 1.3.16 → 1.4.0-beta.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.
@@ -42,7 +42,7 @@ export declare function createContext<T>(defaultValue?: T): Context<T>;
42
42
  export declare function useContext<T>(context: Context<T>): T;
43
43
  export declare function getOwner(): Owner | null;
44
44
  export declare function children(fn: () => any): () => unknown;
45
- export declare function runWithOwner(o: Owner, fn: () => any): any;
45
+ export declare function runWithOwner<T>(o: Owner, fn: () => T): T;
46
46
  export declare function lookup(owner: Owner | null, key: symbol | string): any;
47
47
  export interface Task {
48
48
  id: number;
@@ -1,18 +1,26 @@
1
1
  import { Setter } from "./reactive";
2
2
  import type { JSX } from "../jsx";
3
- declare type PropsWithChildren<P> = P & {
3
+ export declare type Component<P = {}> = (props: P) => JSX.Element;
4
+ export declare type VoidProps<P = {}> = P & {
5
+ children?: never;
6
+ };
7
+ export declare type VoidComponent<P = {}> = Component<VoidProps<P>>;
8
+ export declare type ParentProps<P = {}> = P & {
4
9
  children?: JSX.Element;
5
10
  };
6
- export declare type Component<P = {}> = (props: PropsWithChildren<P>) => JSX.Element;
7
- declare type PossiblyWrapped<T> = {
8
- [P in keyof T]: T[P] | (() => T[P]);
11
+ export declare type ParentComponent<P = {}> = Component<ParentProps<P>>;
12
+ export declare type FlowProps<P = {}, C = JSX.Element> = P & {
13
+ children: C;
9
14
  };
15
+ export declare type FlowComponent<P = {}, C = JSX.Element> = Component<FlowProps<P, C>>;
16
+ export declare type Ref<T> = T | ((val: T) => void);
17
+ export declare type ComponentProps<T extends keyof JSX.IntrinsicElements | Component> = T extends Component<infer P> ? P : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T] : {};
10
18
  declare type SharedConfig = {
11
19
  context?: HydrationContext;
12
20
  };
13
21
  export declare const sharedConfig: SharedConfig;
14
22
  export declare function createUniqueId(): string;
15
- export declare function createComponent<T>(Comp: (props: T) => JSX.Element, props: PossiblyWrapped<T>): JSX.Element;
23
+ export declare function createComponent<T>(Comp: (props: T) => JSX.Element, props: T): JSX.Element;
16
24
  export declare function mergeProps<T, U>(source: T, source1: U): T & U;
17
25
  export declare function mergeProps<T, U, V>(source: T, source1: U, source2: V): T & U & V;
18
26
  export declare function mergeProps<T, U, V, W>(source: T, source1: U, source2: V, source3: W): T & U & V & W;
@@ -32,16 +40,12 @@ export declare function For<T>(props: {
32
40
  each: T[];
33
41
  fallback?: string;
34
42
  children: (item: T, index: () => number) => string;
35
- }): string | {
36
- t: string;
37
- };
43
+ }): string | any[] | undefined;
38
44
  export declare function Index<T>(props: {
39
45
  each: T[];
40
46
  fallback?: string;
41
47
  children: (item: () => T, index: number) => string;
42
- }): string | {
43
- t: string;
44
- };
48
+ }): string | any[] | undefined;
45
49
  export declare function Show<T>(props: {
46
50
  when: T | false;
47
51
  fallback?: string;
@@ -65,6 +69,7 @@ export interface Resource<T> {
65
69
  (): T | undefined;
66
70
  loading: boolean;
67
71
  error: any;
72
+ latest: T | undefined;
68
73
  }
69
74
  declare type SuspenseContextType = {
70
75
  resources: Map<string, {
@@ -87,22 +92,23 @@ export declare type ResourceFetcherInfo<T> = {
87
92
  export declare type ResourceOptions<T> = undefined extends T ? {
88
93
  initialValue?: T;
89
94
  name?: string;
90
- globalRefetch?: boolean;
91
95
  onHydrated?: <S, T>(k: S, info: ResourceFetcherInfo<T>) => void;
92
96
  } : {
93
97
  initialValue: T;
94
98
  name?: string;
95
- globalRefetch?: boolean;
96
99
  onHydrated?: <S, T>(k: S, info: ResourceFetcherInfo<T>) => void;
97
100
  };
98
101
  export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
99
102
  export declare function createResource<T, S = true>(fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
100
103
  export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options?: ResourceOptions<undefined>): ResourceReturn<T | undefined>;
101
104
  export declare function createResource<T, S>(source: ResourceSource<S>, fetcher: ResourceFetcher<S, T>, options: ResourceOptions<T>): ResourceReturn<T>;
102
- export declare function refetchResources(info?: unknown): void;
103
- export declare function lazy(fn: () => Promise<{
104
- default: any;
105
- }>): (props: any) => string;
105
+ export declare function lazy<T extends Component<any>>(fn: () => Promise<{
106
+ default: T;
107
+ }>): T & {
108
+ preload: () => Promise<{
109
+ default: T;
110
+ }>;
111
+ };
106
112
  export declare function enableScheduling(): void;
107
113
  export declare function enableHydration(): void;
108
114
  export declare function startTransition(fn: () => any): void;
@@ -126,5 +132,7 @@ export declare function SuspenseList(props: {
126
132
  export declare function Suspense(props: {
127
133
  fallback?: string;
128
134
  children: string;
129
- }): any;
135
+ }): string | number | boolean | Node | JSX.ArrayElement | JSX.FunctionElement | {
136
+ t: string;
137
+ } | null | undefined;
130
138
  export {};
package/web/dist/dev.cjs CHANGED
@@ -136,6 +136,9 @@ function setAttribute(node, name, value) {
136
136
  function setAttributeNS(node, namespace, name, value) {
137
137
  if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);
138
138
  }
139
+ function className(node, value) {
140
+ if (value == null) node.removeAttribute("class");else node.className = value;
141
+ }
139
142
  function addEventListener(node, name, handler, delegate) {
140
143
  if (delegate) {
141
144
  if (Array.isArray(handler)) {
@@ -316,7 +319,7 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
316
319
  addEventListener(node, name, value, delegate);
317
320
  delegate && delegateEvents([name]);
318
321
  } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
319
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
322
+ if (prop === "class" || prop === "className") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
320
323
  } else {
321
324
  const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
322
325
  if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
@@ -639,6 +642,7 @@ exports.SVGNamespace = SVGNamespace;
639
642
  exports.addEventListener = addEventListener;
640
643
  exports.assign = assign;
641
644
  exports.classList = classList;
645
+ exports.className = className;
642
646
  exports.clearDelegatedEvents = clearDelegatedEvents;
643
647
  exports.delegateEvents = delegateEvents;
644
648
  exports.dynamicProperty = dynamicProperty;
package/web/dist/dev.js CHANGED
@@ -133,6 +133,9 @@ function setAttribute(node, name, value) {
133
133
  function setAttributeNS(node, namespace, name, value) {
134
134
  if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);
135
135
  }
136
+ function className(node, value) {
137
+ if (value == null) node.removeAttribute("class");else node.className = value;
138
+ }
136
139
  function addEventListener(node, name, handler, delegate) {
137
140
  if (delegate) {
138
141
  if (Array.isArray(handler)) {
@@ -313,7 +316,7 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
313
316
  addEventListener(node, name, value, delegate);
314
317
  delegate && delegateEvents([name]);
315
318
  } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
316
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
319
+ if (prop === "class" || prop === "className") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
317
320
  } else {
318
321
  const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
319
322
  if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
@@ -572,4 +575,4 @@ function Dynamic(props) {
572
575
  });
573
576
  }
574
577
 
575
- export { Aliases, Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Assets as HydrationScript, NoHydration, Portal, PropAliases, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, generateHydrationScript, getHydrationKey, getNextElement, getNextMarker, getNextMatch, hydrate, innerHTML, insert, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrBoolean, ssrClassList, ssrHydrationKey, ssrSpread, ssrStyle, style, template };
578
+ export { Aliases, Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Assets as HydrationScript, NoHydration, Portal, PropAliases, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, generateHydrationScript, getHydrationKey, getNextElement, getNextMarker, getNextMatch, hydrate, innerHTML, insert, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrBoolean, ssrClassList, ssrHydrationKey, ssrSpread, ssrStyle, style, template };
@@ -496,9 +496,10 @@ function ssrStyle(value) {
496
496
  return result;
497
497
  }
498
498
  function ssrSpread(props, isSVG, skipChildren) {
499
+ let result = "";
500
+ if (props == null) return results;
499
501
  if (typeof props === "function") props = props();
500
502
  const keys = Object.keys(props);
501
- let result = "";
502
503
  let classResolved;
503
504
  for (let i = 0; i < keys.length; i++) {
504
505
  const prop = keys[i];
@@ -516,7 +517,7 @@ function ssrSpread(props, isSVG, skipChildren) {
516
517
  classResolved = true;
517
518
  } else if (BooleanAttributes.has(prop)) {
518
519
  if (value) result += prop;else continue;
519
- } else if (prop === "ref" || prop.slice(0, 2) === "on") {
520
+ } else if (value == undefined || prop === "ref" || prop.slice(0, 2) === "on") {
520
521
  continue;
521
522
  } else {
522
523
  result += `${Aliases[prop] || prop}="${escape(value, true)}"`;
@@ -525,8 +526,8 @@ function ssrSpread(props, isSVG, skipChildren) {
525
526
  }
526
527
  return result;
527
528
  }
528
- function ssrBoolean(key, value) {
529
- return value ? " " + key : "";
529
+ function ssrAttribute(key, value, isBoolean) {
530
+ return isBoolean ? value ? " " + key : "" : value != null ? ` ${key}="${value}"` : "";
530
531
  }
531
532
  function ssrHydrationKey() {
532
533
  const hk = getHydrationKey();
@@ -578,7 +579,11 @@ function resolveSSRNode(node) {
578
579
  const t = typeof node;
579
580
  if (t === "string") return node;
580
581
  if (node == null || t === "boolean") return "";
581
- if (Array.isArray(node)) return node.map(resolveSSRNode).join("");
582
+ if (Array.isArray(node)) {
583
+ let mapped = "";
584
+ for (let i = 0, len = node.length; i < len; i++) mapped += resolveSSRNode(node[i]);
585
+ return mapped;
586
+ }
582
587
  if (t === "object") return resolveSSRNode(node.t);
583
588
  if (t === "function") return resolveSSRNode(node());
584
589
  return String(node);
@@ -744,7 +749,7 @@ exports.renderToStringAsync = renderToStringAsync;
744
749
  exports.resolveSSRNode = resolveSSRNode;
745
750
  exports.spread = spread;
746
751
  exports.ssr = ssr;
747
- exports.ssrBoolean = ssrBoolean;
752
+ exports.ssrAttribute = ssrAttribute;
748
753
  exports.ssrClassList = ssrClassList;
749
754
  exports.ssrHydrationKey = ssrHydrationKey;
750
755
  exports.ssrSpread = ssrSpread;
@@ -493,9 +493,10 @@ function ssrStyle(value) {
493
493
  return result;
494
494
  }
495
495
  function ssrSpread(props, isSVG, skipChildren) {
496
+ let result = "";
497
+ if (props == null) return results;
496
498
  if (typeof props === "function") props = props();
497
499
  const keys = Object.keys(props);
498
- let result = "";
499
500
  let classResolved;
500
501
  for (let i = 0; i < keys.length; i++) {
501
502
  const prop = keys[i];
@@ -513,7 +514,7 @@ function ssrSpread(props, isSVG, skipChildren) {
513
514
  classResolved = true;
514
515
  } else if (BooleanAttributes.has(prop)) {
515
516
  if (value) result += prop;else continue;
516
- } else if (prop === "ref" || prop.slice(0, 2) === "on") {
517
+ } else if (value == undefined || prop === "ref" || prop.slice(0, 2) === "on") {
517
518
  continue;
518
519
  } else {
519
520
  result += `${Aliases[prop] || prop}="${escape(value, true)}"`;
@@ -522,8 +523,8 @@ function ssrSpread(props, isSVG, skipChildren) {
522
523
  }
523
524
  return result;
524
525
  }
525
- function ssrBoolean(key, value) {
526
- return value ? " " + key : "";
526
+ function ssrAttribute(key, value, isBoolean) {
527
+ return isBoolean ? value ? " " + key : "" : value != null ? ` ${key}="${value}"` : "";
527
528
  }
528
529
  function ssrHydrationKey() {
529
530
  const hk = getHydrationKey();
@@ -575,7 +576,11 @@ function resolveSSRNode(node) {
575
576
  const t = typeof node;
576
577
  if (t === "string") return node;
577
578
  if (node == null || t === "boolean") return "";
578
- if (Array.isArray(node)) return node.map(resolveSSRNode).join("");
579
+ if (Array.isArray(node)) {
580
+ let mapped = "";
581
+ for (let i = 0, len = node.length; i < len; i++) mapped += resolveSSRNode(node[i]);
582
+ return mapped;
583
+ }
579
584
  if (t === "object") return resolveSSRNode(node.t);
580
585
  if (t === "function") return resolveSSRNode(node());
581
586
  return String(node);
@@ -684,4 +689,4 @@ function Portal(props) {
684
689
  return "";
685
690
  }
686
691
 
687
- export { Assets, Dynamic, HydrationScript, NoHydration, Portal, escape, generateHydrationScript, getHydrationKey, isServer, pipeToNodeWritable, pipeToWritable, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, spread, ssr, ssrBoolean, ssrClassList, ssrHydrationKey, ssrSpread, ssrStyle };
692
+ export { Assets, Dynamic, HydrationScript, NoHydration, Portal, escape, generateHydrationScript, getHydrationKey, isServer, pipeToNodeWritable, pipeToWritable, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, spread, ssr, ssrAttribute, ssrClassList, ssrHydrationKey, ssrSpread, ssrStyle };
package/web/dist/web.cjs CHANGED
@@ -135,6 +135,9 @@ function setAttribute(node, name, value) {
135
135
  function setAttributeNS(node, namespace, name, value) {
136
136
  if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);
137
137
  }
138
+ function className(node, value) {
139
+ if (value == null) node.removeAttribute("class");else node.className = value;
140
+ }
138
141
  function addEventListener(node, name, handler, delegate) {
139
142
  if (delegate) {
140
143
  if (Array.isArray(handler)) {
@@ -315,7 +318,7 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
315
318
  addEventListener(node, name, value, delegate);
316
319
  delegate && delegateEvents([name]);
317
320
  } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
318
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
321
+ if (prop === "class" || prop === "className") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
319
322
  } else {
320
323
  const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
321
324
  if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
@@ -635,6 +638,7 @@ exports.SVGNamespace = SVGNamespace;
635
638
  exports.addEventListener = addEventListener;
636
639
  exports.assign = assign;
637
640
  exports.classList = classList;
641
+ exports.className = className;
638
642
  exports.clearDelegatedEvents = clearDelegatedEvents;
639
643
  exports.delegateEvents = delegateEvents;
640
644
  exports.dynamicProperty = dynamicProperty;
package/web/dist/web.js CHANGED
@@ -132,6 +132,9 @@ function setAttribute(node, name, value) {
132
132
  function setAttributeNS(node, namespace, name, value) {
133
133
  if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);
134
134
  }
135
+ function className(node, value) {
136
+ if (value == null) node.removeAttribute("class");else node.className = value;
137
+ }
135
138
  function addEventListener(node, name, handler, delegate) {
136
139
  if (delegate) {
137
140
  if (Array.isArray(handler)) {
@@ -312,7 +315,7 @@ function assignProp(node, prop, value, prev, isSVG, skipRef) {
312
315
  addEventListener(node, name, value, delegate);
313
316
  delegate && delegateEvents([name]);
314
317
  } else if ((isChildProp = ChildProperties.has(prop)) || !isSVG && (PropAliases[prop] || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes("-"))) {
315
- if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
318
+ if (prop === "class" || prop === "className") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[PropAliases[prop] || prop] = value;
316
319
  } else {
317
320
  const ns = isSVG && prop.indexOf(":") > -1 && SVGNamespace[prop.split(":")[0]];
318
321
  if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);
@@ -568,4 +571,4 @@ function Dynamic(props) {
568
571
  });
569
572
  }
570
573
 
571
- export { Aliases, Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Assets as HydrationScript, NoHydration, Portal, PropAliases, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, generateHydrationScript, getHydrationKey, getNextElement, getNextMarker, getNextMatch, hydrate, innerHTML, insert, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrBoolean, ssrClassList, ssrHydrationKey, ssrSpread, ssrStyle, style, template };
574
+ export { Aliases, Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Assets as HydrationScript, NoHydration, Portal, PropAliases, Properties, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, delegateEvents, dynamicProperty, escape, generateHydrationScript, getHydrationKey, getNextElement, getNextMarker, getNextMatch, hydrate, innerHTML, insert, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, spread, ssr, ssrBoolean, ssrClassList, ssrHydrationKey, ssrSpread, ssrStyle, style, template };
@@ -31,6 +31,7 @@ export function spread<T>(
31
31
  export function assign(node: Element, props: any, isSVG?: Boolean, skipChildren?: Boolean): void;
32
32
  export function setAttribute(node: Element, name: string, value: string): void;
33
33
  export function setAttributeNS(node: Element, namespace: string, name: string, value: string): void;
34
+ export function className(node: Element, value: string): void;
34
35
  export function innerHTML(node: Element, content: string): void;
35
36
  export function addEventListener(
36
37
  node: Element,