Skip to content

Commit 5cfb7db

Browse files
intellisense support for fragment and lazy fixed
1 parent d9074d0 commit 5cfb7db

File tree

10 files changed

+90
-32
lines changed

10 files changed

+90
-32
lines changed

build/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { JSXInternal } from './jsx';
77
export * from './jsx';
88
declare global {
99
export import JSX = JSXInternal;
10+
const FRAGMENT = "FRAGMENT";
1011
}
1112
export * from './types';
1213
export { cleanUp, createEffect, createSignal, render, createPromise, createRef, computed, createElement, lazy, ArraySignal, BaseSignal, ObjectSignal, PrimitiveSignal, PublicArraySignal, PublicObjectSignal, PublicSignal, Ref, };

build/jsx.d.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Ref } from './index';
2-
import { Fiber } from './types';
32
type Defaultize<Props, Defaults> = Props extends any ? Partial<Pick<Props, Extract<keyof Props, keyof Defaults>>> & // Include the remaining properties from Props
43
Pick<Props, Exclude<keyof Props, keyof Defaults>> : never;
54
type Booleanish = boolean | "true" | "false";
@@ -64,7 +63,7 @@ export declare namespace JSXInternal {
6463
export type ElementType<P = any> = {
6564
[K in keyof IntrinsicElements]: P extends IntrinsicElements[K] ? K : never;
6665
}[keyof IntrinsicElements] | ComponentType<P>;
67-
export type Element = Fiber;
66+
export type Element = ComponentChild;
6867
export type ElementClass = ComponentType<any>;
6968
export interface ElementAttributesProperty {
7069
props: any;
@@ -81,13 +80,7 @@ export declare namespace JSXInternal {
8180
export interface CSSProperties extends AllCSSProperties, DOMCSSProperties {
8281
cssText?: string | null;
8382
}
84-
export interface SignalLike<T> {
85-
value: T;
86-
peek(): T;
87-
subscribe(fn: (value: T) => void): () => void;
88-
}
89-
export type Signalish<T> = T | SignalLike<T>;
90-
export type UnpackSignal<T> = T extends SignalLike<infer V> ? V : T;
83+
export type Signalish<T> = T | (() => T);
9184
export interface SVGAttributes<Target extends EventTarget = SVGElement> extends HTMLAttributes<Target> {
9285
accentHeight?: Signalish<number | string | undefined>;
9386
accumulate?: Signalish<"none" | "sum" | undefined>;

build/lazy/Lazyloading.d.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import { ComponentChildren } from '../index';
12
type PropsOf<T extends (...args: any) => any> = Parameters<T> extends [] ? {} : Parameters<T>[0];
23
export declare function lazy<T extends (props: any) => any>(importFn: () => Promise<{
34
default: T;
45
}>): (props: PropsOf<T> & {
5-
fallback?: string | Node;
6-
errorFallback?: string | Node | ((error: Error) => Node);
6+
fallback?: ComponentChildren;
7+
errorFallback?: ComponentChildren | ((error: Error) => ComponentChildren);
78
}) => ReturnType<T>;
89
export {};

build/refract.es.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1208,7 +1208,10 @@ function ot(e) {
12081208
throw new Error(
12091209
"Invalid errorFallback: Expected a string, a valid JSX node, or a function returning a JSX node."
12101210
);
1211-
return /* @__PURE__ */ oe("FRAGMENT", null, () => o.value ? r.fallback : l.value !== null ? r.errorFallback ? typeof r.errorFallback == "function" ? r.errorFallback(l.value) : r.errorFallback : "Unknown error occurred while lazy loading component, use errorFallback prop to override" : t && /* @__PURE__ */ oe(t, { ...r }));
1211+
return /* @__PURE__ */ oe("FRAGMENT", null, () => o.value ? r.fallback : l.value !== null ? r.errorFallback ? typeof r.errorFallback == "function" ? r.errorFallback(l.value) : r.errorFallback : "Unknown error occurred while lazy loading component, use errorFallback prop to override" : (
1212+
// @ts-expect-error
1213+
t && /* @__PURE__ */ oe(t, { ...r })
1214+
));
12121215
};
12131216
}
12141217
export {

src/components/FC1.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@ const FC1 = () => {
2121
});
2222
// const compText = computed(() => "FC1" + str.value);
2323
return (
24-
<>
24+
<div>
2525
This is FC1 {() => textSignal.value + str.value}
2626
<h2>This is {() => str.value}</h2>
2727
<button
2828
onClick={() => {
29-
clicked.value = !clicked.value;
30-
str.value = clicked.value ? "FC1 Clicked" : "FC1";
29+
clicked.update((prev) => !prev);
30+
str.update(clicked.value ? "FC1 Clicked" : "FC1");
3131
}}
3232
className={() => (textSignal.value ? "clicked" : "")}
3333
>
3434
Click
3535
</button>
36-
</>
36+
</div>
3737
);
3838
};
3939
export default FC1;
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import {
2+
createSignal,
3+
createPromise,
4+
createRef,
5+
createEffect,
6+
cleanUp,
7+
computed,
8+
lazy,
9+
} from "../index";
10+
11+
const LazyFC = lazy(() => import("./FC1"));
12+
13+
const IntellisenseTest = () => {
14+
const count = createSignal<number>(0);
15+
const arr = createSignal<number[]>([1, 2]);
16+
const obj = createSignal({ a: 1, b: 2 });
17+
18+
createEffect(() => {
19+
count.update((prev) => prev + 1);
20+
arr.update((prev) => prev.push(1));
21+
obj.update((prev) => prev.a++);
22+
});
23+
const comp = computed(() => arr.value[0]);
24+
const promise = createPromise(async () => {
25+
return await fetch("fakeapi");
26+
});
27+
const ref = createRef<HTMLDivElement>();
28+
29+
cleanUp(() => {
30+
console.log("cleanup");
31+
});
32+
return (
33+
<div ref={ref}>
34+
IntellisenseTest
35+
<LazyFC
36+
fallback="hello"
37+
errorFallback={"error"}
38+
/>
39+
<LazyFC
40+
fallback={"hello"}
41+
errorFallback={(err) => "hello" + err.message}
42+
/>
43+
<LazyFC fallback={<div>hello</div>} />
44+
<LazyFC fallback={<Test />} />
45+
<LazyFC fallback={() => <Test />} />
46+
{() => {
47+
promise.value.status === "resolved"
48+
? promise.value.data
49+
: promise.value.error;
50+
}}
51+
<div
52+
className={() => count.value.toString()}
53+
data-test="test"
54+
></div>
55+
<>Fragment</>
56+
</div>
57+
);
58+
};
59+
60+
const Test = () => {
61+
return <div>test</div>;
62+
};
63+
export default IntellisenseTest;

src/components/Test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const Test = () => {
2323
setTimeout(() => {
2424
showTextSignal.update((prev) => !prev);
2525
}, 2000);
26-
const h1ref = createRef();
26+
const h1ref = createRef<HTMLHeadingElement>();
2727
// console.log("hello");
2828
return (
2929
<div>

src/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ import type {
2121
} from "./signals/signal";
2222

2323
export * from "./jsx";
24-
import { JSXInternal } from "./jsx";
24+
import { JSXInternal, FRAGMENT as Fragment } from "./jsx";
2525
declare global {
2626
// @ts-expect-error
2727
export import JSX = JSXInternal;
28+
// @ts-expect-error
29+
const FRAGMENT = "FRAGMENT";
2830
}
2931
export * from "./types";
3032
export {

src/jsx.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export namespace JSXInternal {
130130
: never;
131131
}[keyof IntrinsicElements]
132132
| ComponentType<P>;
133-
export type Element = Fiber;
133+
export type Element = ComponentChild;
134134
export type ElementClass = ComponentType<any>;
135135

136136
export interface ElementAttributesProperty {
@@ -158,15 +158,7 @@ export namespace JSXInternal {
158158
cssText?: string | null;
159159
}
160160

161-
export interface SignalLike<T> {
162-
value: T;
163-
peek(): T;
164-
subscribe(fn: (value: T) => void): () => void;
165-
}
166-
167-
export type Signalish<T> = T | SignalLike<T>;
168-
169-
export type UnpackSignal<T> = T extends SignalLike<infer V> ? V : T;
161+
export type Signalish<T> = T | (() => T);
170162

171163
export interface SVGAttributes<Target extends EventTarget = SVGElement>
172164
extends HTMLAttributes<Target> {

src/lazy/Lazyloading.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createSignal, PublicSignal } from "../index";
1+
import { ComponentChildren, createSignal, Fiber, PublicSignal } from "../index";
22

33
declare const FRAGMENT = "FRAGMENT";
44

@@ -11,8 +11,10 @@ export function lazy<T extends (props: any) => any>(
1111
importFn: () => Promise<{ default: T }>
1212
): (
1313
props: PropsOf<T> & {
14-
fallback?: string | Node;
15-
errorFallback?: string | Node | ((error: Error) => Node);
14+
fallback?: ComponentChildren;
15+
errorFallback?:
16+
| ComponentChildren
17+
| ((error: Error) => ComponentChildren);
1618
}
1719
) => ReturnType<T> {
1820
let Component: T | null = null;
@@ -95,7 +97,8 @@ export function lazy<T extends (props: any) => any>(
9597
? props.errorFallback(error.value)
9698
: props.errorFallback
9799
: "Unknown error occurred while lazy loading component, use errorFallback prop to override"
98-
: Component && <Component {...props} />
100+
: // @ts-expect-error
101+
Component && <Component {...props} />
99102
}
100103
</>
101104
) as unknown as ReturnType<T>;

0 commit comments

Comments
 (0)