fusee-framework 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +145 -123
- package/app/benchmark/benchmark.js +633 -0
- package/app/benchmark/index.html +102 -0
- package/app/benchmark/styles.css +249 -0
- package/app/components/Counter.js +17 -7
- package/app/components/CounterSection.js +3 -4
- package/app/main.js +50 -62
- package/app/main.ts +78 -63
- package/app/pages/404.js +16 -0
- package/app/pages/[...all].js +35 -0
- package/app/pages/[...all].ts +35 -0
- package/app/pages/_layout.js +53 -0
- package/app/pages/_layout.ts +26 -0
- package/app/pages/about.js +23 -0
- package/app/pages/about.ts +29 -0
- package/app/pages/async-work.js +65 -0
- package/app/pages/composables.js +158 -0
- package/app/pages/composables.ts +158 -0
- package/app/pages/dynamic.js +40 -0
- package/app/pages/dynamic.ts +40 -0
- package/app/pages/index.js +137 -0
- package/app/pages/index.ts +87 -0
- package/app/pages/login.ts +21 -0
- package/app/pages/objects/[id].js +56 -0
- package/app/pages/objects/[id].ts +56 -0
- package/app/pages/posts/[category]/[slug].js +56 -0
- package/app/pages/posts/[category]/[slug].ts +56 -0
- package/app/pages/router-example.js +79 -0
- package/app/pages/router-example.ts +56 -0
- package/app/pages/scroll-demo.ts +102 -0
- package/app/pages/test-for.js +65 -0
- package/app/pages/test-for.ts +80 -0
- package/app/pages/users/[id].js +24 -0
- package/app/pages/users/[id].ts +46 -0
- package/app/pages/users/index.js +22 -0
- package/app/pages/users/index.ts +29 -0
- package/app/pages/users.js +43 -0
- package/app/pages/users.ts +78 -0
- package/app/providers/ChildComponent.js +8 -2
- package/app/providers/ChildComponent.ts +47 -47
- package/app/providers/GrandchildComponent.js +19 -0
- package/app/providers/ParentComponent.js +5 -1
- package/app/routes/About.js +1 -1
- package/app/routes/About.ts +1 -1
- package/app/routes/AuthRoutes.ts +41 -0
- package/app/routes/Home.js +9 -0
- package/app/routes/NotFound.js +16 -0
- package/app/routes/NotFound.ts +16 -0
- package/app/routes/RouterExample.js +78 -0
- package/app/routes/RouterExample.ts +56 -0
- package/app/routes/TestResource.js +47 -0
- package/app/routes/WildcardDemo.js +35 -0
- package/app/routes/WildcardDemo.ts +35 -0
- package/app/services.js +15 -0
- package/auto-imports.d.ts +9 -0
- package/bin/create-fusee-linux +0 -0
- package/bin/create-fusee-mac-arm64 +0 -0
- package/bin/create-fusee-mac-intel +0 -0
- package/bin/create-fusee-win.exe +0 -0
- package/bin/create-fusee.exe +0 -0
- package/bin/index.js +38 -0
- package/create-fusee-go/cmd/generate.go +72 -0
- package/create-fusee-go/cmd/init.go +38 -0
- package/create-fusee-go/cmd/root.go +121 -0
- package/create-fusee-go/go.mod +10 -0
- package/create-fusee-go/go.sum +10 -0
- package/create-fusee-go/internal/assets/assets.go +78 -0
- package/create-fusee-go/internal/assets/embed/framework/auto-import-preset.js +9 -0
- package/create-fusee-go/internal/assets/embed/framework/core/compiler.js +253 -0
- package/create-fusee-go/internal/assets/embed/framework/core/component.js +266 -0
- package/create-fusee-go/internal/assets/embed/framework/core/composable.js +27 -0
- package/create-fusee-go/internal/assets/embed/framework/core/directives.js +875 -0
- package/create-fusee-go/internal/assets/embed/framework/core/evaluator.js +153 -0
- package/create-fusee-go/internal/assets/embed/framework/core/event-delegation.js +191 -0
- package/create-fusee-go/internal/assets/embed/framework/core/signal.js +412 -0
- package/create-fusee-go/internal/assets/embed/framework/core/store.js +81 -0
- package/create-fusee-go/internal/assets/embed/framework/index.d.ts +3 -0
- package/create-fusee-go/internal/assets/embed/framework/index.js +10 -0
- package/create-fusee-go/internal/assets/embed/framework/router/file-router.js +177 -0
- package/create-fusee-go/internal/assets/embed/framework/router/router.js +462 -0
- package/create-fusee-go/internal/assets/embed/framework/types/compiler.d.ts +15 -0
- package/create-fusee-go/internal/assets/embed/framework/types/component.d.ts +88 -0
- package/create-fusee-go/internal/assets/embed/framework/types/composable.d.ts +14 -0
- package/create-fusee-go/internal/assets/embed/framework/types/directives.d.ts +55 -0
- package/create-fusee-go/internal/assets/embed/framework/types/evaluator.d.ts +13 -0
- package/create-fusee-go/internal/assets/embed/framework/types/event-delegation.d.ts +32 -0
- package/create-fusee-go/internal/assets/embed/framework/types/index.d.ts +22 -0
- package/create-fusee-go/internal/assets/embed/framework/types/router.d.ts +32 -0
- package/create-fusee-go/internal/assets/embed/framework/types/signal.d.ts +79 -0
- package/create-fusee-go/internal/assets/embed/framework/types/store.d.ts +8 -0
- package/create-fusee-go/internal/assets/templates/Counter.tmpl +26 -0
- package/create-fusee-go/internal/assets/templates/component.tmpl +11 -0
- package/create-fusee-go/internal/assets/templates/components/Loading.tmpl +24 -0
- package/create-fusee-go/internal/assets/templates/index.html.tmpl +15 -0
- package/create-fusee-go/internal/assets/templates/main.tmpl +14 -0
- package/create-fusee-go/internal/assets/templates/package.json.tmpl +14 -0
- package/create-fusee-go/internal/assets/templates/page.tmpl +12 -0
- package/create-fusee-go/internal/assets/templates/pages/about.tmpl +20 -0
- package/create-fusee-go/internal/assets/templates/pages/index.tmpl +22 -0
- package/create-fusee-go/internal/assets/templates/pages/layout.tmpl +18 -0
- package/create-fusee-go/internal/assets/templates/tsconfig.json.tmpl +14 -0
- package/create-fusee-go/internal/assets/templates/vite.config.js.tmpl +18 -0
- package/create-fusee-go/main.go +7 -0
- package/framework/auto-import-preset.js +13 -9
- package/framework/core/compiler.js +252 -249
- package/framework/core/component.js +279 -260
- package/framework/core/di.js +187 -0
- package/framework/core/directives.js +819 -786
- package/framework/core/evaluator.js +153 -70
- package/framework/core/event-delegation.js +33 -14
- package/framework/core/reconcile.js +151 -0
- package/framework/core/signal.js +679 -403
- package/framework/core/store.js +322 -81
- package/framework/index.js +12 -11
- package/framework/router/file-router.js +177 -0
- package/framework/router/router.js +554 -80
- package/framework/types/component.d.ts +89 -88
- package/framework/types/di.d.ts +43 -0
- package/framework/types/event-delegation.d.ts +0 -58
- package/framework/types/index.d.ts +32 -22
- package/framework/types/reconcile.d.ts +7 -0
- package/framework/types/router.d.ts +42 -15
- package/framework/types/signal.d.ts +147 -78
- package/framework/types/store.d.ts +66 -8
- package/index.html +638 -626
- package/package.json +5 -3
- package/tsconfig.json +1 -0
- package/vite.config.js +7 -1
- /package/{framework → create-fusee-go/internal/assets/embed/framework}/bin/create-fusee.js +0 -0
|
@@ -1,88 +1,89 @@
|
|
|
1
|
-
export type ComponentProps = Record<string, any>
|
|
2
|
-
export type EmptyProps = Record<string, never>
|
|
3
|
-
export type PropSchema = string[] | Record<string, PropConfig>
|
|
4
|
-
|
|
5
|
-
export type PropConfig = {
|
|
6
|
-
type?: FunctionConstructor | StringConstructor | NumberConstructor | BooleanConstructor
|
|
7
|
-
default?: any | (() => any)
|
|
8
|
-
required?: boolean
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type EmitFn = (eventName: string, ...args: any[]) => void
|
|
12
|
-
|
|
13
|
-
export type Slots = Record<string, string>
|
|
14
|
-
|
|
15
|
-
export type SetupContext = {
|
|
16
|
-
emit: EmitFn
|
|
17
|
-
slots: Slots
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type ComponentInstance = {
|
|
21
|
-
props: ComponentProps
|
|
22
|
-
_mountHooks: (() => void)[]
|
|
23
|
-
_unmountHooks: (() => void)[]
|
|
24
|
-
_effects: import('./signal').EffectRunner[]
|
|
25
|
-
_element: HTMLElement | null
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
export declare function
|
|
54
|
-
export declare function
|
|
55
|
-
export declare function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
export declare function
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
T extends
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
1
|
+
export type ComponentProps = Record<string, any>
|
|
2
|
+
export type EmptyProps = Record<string, never>
|
|
3
|
+
export type PropSchema = string[] | Record<string, PropConfig>
|
|
4
|
+
|
|
5
|
+
export type PropConfig = {
|
|
6
|
+
type?: FunctionConstructor | StringConstructor | NumberConstructor | BooleanConstructor
|
|
7
|
+
default?: any | (() => any)
|
|
8
|
+
required?: boolean
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type EmitFn = (eventName: string, ...args: any[]) => void
|
|
12
|
+
|
|
13
|
+
export type Slots = Record<string, string>
|
|
14
|
+
|
|
15
|
+
export type SetupContext = {
|
|
16
|
+
emit: EmitFn
|
|
17
|
+
slots: Slots
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type ComponentInstance = {
|
|
21
|
+
props: ComponentProps
|
|
22
|
+
_mountHooks: (() => void)[]
|
|
23
|
+
_unmountHooks: (() => void)[]
|
|
24
|
+
_effects: import('./signal').EffectRunner[]
|
|
25
|
+
_element: HTMLElement | null
|
|
26
|
+
_parent: ComponentInstance | null
|
|
27
|
+
_injector: import('./di').Injector
|
|
28
|
+
_ownsInjector: boolean
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export type ComponentResult = {
|
|
32
|
+
template: string
|
|
33
|
+
[key: string]: any
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type ComponentOptions<TProps = ComponentProps, P = PropSchema> = {
|
|
37
|
+
props?: P
|
|
38
|
+
components?: Record<string, ComponentFactory<any>>
|
|
39
|
+
setup: (props: TProps, ctx: SetupContext) => ComponentResult
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type ComponentFactory<TProps = ComponentProps> = (
|
|
43
|
+
props?: TProps,
|
|
44
|
+
options?: { listeners?: Record<string, Function>, slots?: Slots, parent?: ComponentInstance }
|
|
45
|
+
) => ComponentApi
|
|
46
|
+
|
|
47
|
+
export type ComponentApi = {
|
|
48
|
+
render: (container: HTMLElement) => ComponentInstance
|
|
49
|
+
unmount: () => void
|
|
50
|
+
instance: ComponentInstance
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export declare function onMount(fn: () => void): void
|
|
54
|
+
export declare function onUnmount(fn: () => void): void
|
|
55
|
+
export declare function parseSlots(slotHTML: string): Slots
|
|
56
|
+
export declare function getCurrentInstance(): ComponentInstance | null
|
|
57
|
+
|
|
58
|
+
export declare function provide(keyOrProvider: any, value?: any): void
|
|
59
|
+
export { inject } from './di'
|
|
60
|
+
|
|
61
|
+
type InferPropType<T> = T extends StringConstructor ? string :
|
|
62
|
+
T extends NumberConstructor ? number :
|
|
63
|
+
T extends BooleanConstructor ? boolean :
|
|
64
|
+
any;
|
|
65
|
+
|
|
66
|
+
type InferProps<P> = P extends string[]
|
|
67
|
+
? Record<P[number], any>
|
|
68
|
+
: P extends Record<string, PropConfig>
|
|
69
|
+
? {
|
|
70
|
+
[K in keyof P]: P[K]['required'] extends true
|
|
71
|
+
? InferPropType<P[K]['type']>
|
|
72
|
+
: InferPropType<P[K]['type']> | (P[K] extends { default: any } ? never : undefined)
|
|
73
|
+
}
|
|
74
|
+
: Record<string, any>;
|
|
75
|
+
|
|
76
|
+
export declare function defineComponent<P extends PropSchema = any, TProps = InferProps<P>>(
|
|
77
|
+
options: ComponentOptions<TProps, P>
|
|
78
|
+
): ComponentFactory<TProps>
|
|
79
|
+
|
|
80
|
+
export type AsyncComponentLoader<TProps = ComponentProps> = () => Promise<ComponentFactory<TProps> | { default: ComponentFactory<TProps> } | Record<string, any>>
|
|
81
|
+
|
|
82
|
+
export type AsyncComponentOptions<TProps = ComponentProps> = {
|
|
83
|
+
loader: AsyncComponentLoader<TProps>
|
|
84
|
+
loadingComponent?: ComponentFactory<any>
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export declare function defineAsyncComponent<TProps = ComponentProps>(
|
|
88
|
+
loaderOrOptions: AsyncComponentLoader<TProps> | AsyncComponentOptions<TProps>
|
|
89
|
+
): ComponentFactory<TProps>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare class InjectionToken<T = any> {
|
|
2
|
+
constructor(description: string);
|
|
3
|
+
description: string;
|
|
4
|
+
toString(): string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export declare function isClass(fn: any): boolean;
|
|
8
|
+
|
|
9
|
+
export interface InjectOptions {
|
|
10
|
+
optional?: boolean;
|
|
11
|
+
skipSelf?: boolean;
|
|
12
|
+
self?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export declare abstract class Injector {
|
|
16
|
+
get<T>(token: any, options?: InjectOptions): T;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export declare class NullInjector extends Injector {
|
|
20
|
+
get<T>(token: any, options?: InjectOptions): T | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export declare type Provider =
|
|
24
|
+
| any // class (shorthand)
|
|
25
|
+
| { provide: any, useClass: any }
|
|
26
|
+
| { provide: any, useValue: any }
|
|
27
|
+
| { provide: any, useFactory: () => any }
|
|
28
|
+
| { provide: any, useExisting: any };
|
|
29
|
+
|
|
30
|
+
export declare class EnvironmentInjector extends Injector {
|
|
31
|
+
constructor(providers?: Provider[], parent?: Injector);
|
|
32
|
+
parent: Injector;
|
|
33
|
+
provide(provider: Provider): void;
|
|
34
|
+
get<T>(token: any, options?: InjectOptions): T;
|
|
35
|
+
createChild(providers?: Provider[]): EnvironmentInjector;
|
|
36
|
+
destroy(): void;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export declare function runInContext<T>(injector: Injector, fn: () => T): T;
|
|
40
|
+
export declare function replaceActiveInjector(injector: Injector): void;
|
|
41
|
+
export declare function inject<T>(token: any, options: InjectOptions & { optional: true }): T | null;
|
|
42
|
+
export declare function inject<T>(token: any, options?: InjectOptions): T;
|
|
43
|
+
|
|
@@ -1,40 +1,13 @@
|
|
|
1
|
-
// ─── Event Delegation Types ────────────────────────────────────────────────
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Set of standard events that support delegation.
|
|
5
|
-
* These events bubble and are commonly used in UI interactions.
|
|
6
|
-
*/
|
|
7
1
|
export const DELEGATED_EVENTS: Set<string>
|
|
8
2
|
|
|
9
|
-
/**
|
|
10
|
-
* Check if an event type is delegated.
|
|
11
|
-
* @param eventName - The event name to check (e.g., 'click', 'keydown')
|
|
12
|
-
* @returns True if the event can be delegated
|
|
13
|
-
*/
|
|
14
3
|
export function isDelegatedEvent(eventName: string): boolean
|
|
15
4
|
|
|
16
|
-
/**
|
|
17
|
-
* Options for registering a delegated event.
|
|
18
|
-
*/
|
|
19
5
|
export interface DelegatedEventOptions {
|
|
20
|
-
/** Event modifiers (e.g., 'prevent', 'stop', 'debounce', 'throttle') */
|
|
21
6
|
modifiers?: string[]
|
|
22
|
-
/** Component context for evaluating expressions */
|
|
23
7
|
context?: Record<string, any>
|
|
24
|
-
/** Expression string to evaluate */
|
|
25
8
|
expr?: string
|
|
26
9
|
}
|
|
27
10
|
|
|
28
|
-
/**
|
|
29
|
-
* Register a delegated event handler for an element.
|
|
30
|
-
* Creates a single document-level listener if not already present.
|
|
31
|
-
*
|
|
32
|
-
* @param element - The DOM element to register
|
|
33
|
-
* @param eventType - The event type (e.g., 'click', 'input')
|
|
34
|
-
* @param handler - The event handler function
|
|
35
|
-
* @param options - Optional configuration
|
|
36
|
-
* @returns Cleanup function to remove the handler
|
|
37
|
-
*/
|
|
38
11
|
export function registerDelegatedEvent(
|
|
39
12
|
element: Element,
|
|
40
13
|
eventType: string,
|
|
@@ -42,16 +15,6 @@ export function registerDelegatedEvent(
|
|
|
42
15
|
options?: DelegatedEventOptions
|
|
43
16
|
): () => void
|
|
44
17
|
|
|
45
|
-
/**
|
|
46
|
-
* Create a wrapped event handler with modifier support.
|
|
47
|
-
* Supports: prevent, stop, self, debounce, throttle, keyboard modifiers.
|
|
48
|
-
*
|
|
49
|
-
* @param handler - The original handler (function or expression)
|
|
50
|
-
* @param modifiers - Array of modifier names
|
|
51
|
-
* @param context - Component context for evaluating expressions
|
|
52
|
-
* @param expr - Expression string (when handler is a string)
|
|
53
|
-
* @returns Wrapped handler function
|
|
54
|
-
*/
|
|
55
18
|
export function createEventHandler(
|
|
56
19
|
handler: Function | string,
|
|
57
20
|
modifiers: string[],
|
|
@@ -59,29 +22,8 @@ export function createEventHandler(
|
|
|
59
22
|
expr: string
|
|
60
23
|
): (event: Event) => void
|
|
61
24
|
|
|
62
|
-
/**
|
|
63
|
-
* Event handler syntax preference.
|
|
64
|
-
* Use @ prefix for delegated events (optimized, single document listener).
|
|
65
|
-
* Use on: prefix for native events (individual element listeners, full event control).
|
|
66
|
-
*
|
|
67
|
-
* @example
|
|
68
|
-
* // Delegated - efficient for many elements
|
|
69
|
-
* <button @click="handleClick">Click</button>
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* // Native - full control including stopPropagation
|
|
73
|
-
* <button on:click="handleClick">Click</button>
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* // With modifiers
|
|
77
|
-
* <form @submit.prevent="handleSubmit">Submit</form>
|
|
78
|
-
* <input @keydown.enter="handleEnter" />
|
|
79
|
-
* <input @input.debounce="handleInput" />
|
|
80
|
-
*/
|
|
81
25
|
export interface EventHandlerSyntax {
|
|
82
|
-
/** Delegated event: @click, @input, @keydown, etc. */
|
|
83
26
|
delegated: `@${string}`
|
|
84
|
-
/** Native event: on:click, on:input, on:custom, etc. */
|
|
85
27
|
native: `on:${string}`
|
|
86
28
|
}
|
|
87
29
|
|
|
@@ -1,22 +1,32 @@
|
|
|
1
|
-
export * from './signal'
|
|
2
|
-
export * from './component'
|
|
3
|
-
export * from './composable'
|
|
4
|
-
export * from './router'
|
|
5
|
-
export * from './compiler'
|
|
6
|
-
export * from './directives'
|
|
7
|
-
export * from './store'
|
|
8
|
-
export * from './event-delegation'
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
type
|
|
14
|
-
type
|
|
15
|
-
type
|
|
16
|
-
type
|
|
17
|
-
type
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
export * from './signal'
|
|
2
|
+
export * from './component'
|
|
3
|
+
export * from './composable'
|
|
4
|
+
export * from './router'
|
|
5
|
+
export * from './compiler'
|
|
6
|
+
export * from './directives'
|
|
7
|
+
export * from './store'
|
|
8
|
+
export * from './event-delegation'
|
|
9
|
+
export * from './di'
|
|
10
|
+
export * from './reconcile'
|
|
11
|
+
|
|
12
|
+
declare global {
|
|
13
|
+
type Signal<T = any> = import('./signal').Signal<T>
|
|
14
|
+
type Computed<T = any> = import('./signal').Computed<T>
|
|
15
|
+
type SignalAccessor<T> = import('./signal').SignalAccessor<T>
|
|
16
|
+
type Composable<T extends (...args: any[]) => any> = import('./composable').Composable<T>
|
|
17
|
+
type DirectiveBinding<V = any> = import('./directives').DirectiveBinding<V>
|
|
18
|
+
type DirectiveHooks<V = any> = import('./directives').DirectiveHooks<V>
|
|
19
|
+
type DelegatedEventOptions = import('./event-delegation').DelegatedEventOptions
|
|
20
|
+
const defineStore: typeof import('./store').defineStore
|
|
21
|
+
const storeToRefs: typeof import('./store').storeToRefs
|
|
22
|
+
const storeToState: typeof import('./store').storeToState
|
|
23
|
+
const storeToGetters: typeof import('./store').storeToGetters
|
|
24
|
+
const useNestedStore: typeof import('./store').useNestedStore
|
|
25
|
+
type StoreHook<T> = import('./store').StoreHook<T>
|
|
26
|
+
const isDelegatedEvent: typeof import('./event-delegation').isDelegatedEvent
|
|
27
|
+
const InjectionToken: typeof import('./di').InjectionToken
|
|
28
|
+
const provideGlobal: typeof import('./di').provideGlobal
|
|
29
|
+
const reconcile: typeof import('./reconcile').reconcile
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export as namespace Fusee
|
|
@@ -1,15 +1,42 @@
|
|
|
1
|
-
import type { ComponentApi } from './component'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import type { ComponentApi, ComponentFactory } from './component'
|
|
2
|
+
import type { Signal } from './signal'
|
|
3
|
+
|
|
4
|
+
export type Route = {
|
|
5
|
+
path: string | string[]
|
|
6
|
+
component: ComponentFactory<any>
|
|
7
|
+
children?: Route[]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export type ScrollPosition = { left: number; top: number } | { selector: string } | false
|
|
11
|
+
|
|
12
|
+
export type ScrollBehaviorOptions = {
|
|
13
|
+
scrollToTop?: boolean
|
|
14
|
+
scrollToAnchor?: boolean
|
|
15
|
+
saveScrollPosition?: boolean
|
|
16
|
+
custom?: (to: string, from: string, savedPosition: ScrollPosition | null) => ScrollPosition | Promise<ScrollPosition>
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type Router = {
|
|
20
|
+
navigate: (path: string) => void
|
|
21
|
+
destroy: () => void
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export type RouteParams = Record<string, string>
|
|
25
|
+
|
|
26
|
+
export declare const currentRoute: Signal<string>
|
|
27
|
+
export declare const routeParams: Signal<RouteParams>
|
|
28
|
+
export declare const routeQuery: Signal<Record<string, string>>
|
|
29
|
+
export declare const matchedRoutes: Signal<Route[]>
|
|
30
|
+
|
|
31
|
+
export declare function createRouter(routes: Route[], options?: { cacheSize?: number; routerViewTimeout?: number; scrollBehavior?: ScrollBehaviorOptions }): Router
|
|
32
|
+
export declare function navigate(path: string): void
|
|
33
|
+
export declare function mountOutlet(el: HTMLElement): void
|
|
34
|
+
|
|
35
|
+
export type FileRouterOptions = {
|
|
36
|
+
loadingComponent?: ComponentFactory<any>
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export declare function generateRoutes(
|
|
40
|
+
globResults: Record<string, () => Promise<any>>,
|
|
41
|
+
options?: FileRouterOptions
|
|
42
|
+
): Route[]
|
|
@@ -1,78 +1,147 @@
|
|
|
1
|
-
export type SignalAccessor<T> = {
|
|
2
|
-
(): T;
|
|
3
|
-
(newValue: T): void;
|
|
4
|
-
isSignal: boolean;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export interface ReactiveArrayMethods<T> {
|
|
8
|
-
map<U>(callbackfn: (value: T, index: number, array: T[]) => U): Computed<U[]>;
|
|
9
|
-
filter(predicate: (value: T, index: number, array: T[]) => boolean): Computed<T[]>;
|
|
10
|
-
slice(start?: number, end?: number): Computed<T[]>;
|
|
11
|
-
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): Computed<U>;
|
|
12
|
-
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): Computed<T>;
|
|
13
|
-
find(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<T | undefined>;
|
|
14
|
-
findLast(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<T | undefined>;
|
|
15
|
-
findIndex(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<number>;
|
|
16
|
-
findLastIndex(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<number>;
|
|
17
|
-
every(predicate: (value: T, index: number, array: T[]) => boolean): Computed<boolean>;
|
|
18
|
-
some(predicate: (value: T, index: number, array: T[]) => boolean): Computed<boolean>;
|
|
19
|
-
includes(searchElement: T, fromIndex?: number): Computed<boolean>;
|
|
20
|
-
indexOf(searchElement: T, fromIndex?: number): Computed<number>;
|
|
21
|
-
lastIndexOf(searchElement: T, fromIndex?: number): Computed<number>;
|
|
22
|
-
at(index: number): Computed<T | undefined>;
|
|
23
|
-
concat(...items: (T | T[])[]): Computed<T[]>;
|
|
24
|
-
flat<depth extends number = 1>(depth?: depth): Computed<any[]>;
|
|
25
|
-
flatMap<U>(callback: (value: T, index: number, array: T[]) => U | U[]): Computed<U[]>;
|
|
26
|
-
join(separator?: string): Computed<string>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type ArraySignalAccessor<T extends any[]> = SignalAccessor<T> & ReactiveArrayMethods<T[number]> & {
|
|
30
|
-
push(...items: T[number][]): number;
|
|
31
|
-
pop(): T[number] | undefined;
|
|
32
|
-
shift(): T[number] | undefined;
|
|
33
|
-
unshift(...items: T[number][]): number;
|
|
34
|
-
splice(start: number, deleteCount: number, ...items: T[number][]): T[number][];
|
|
35
|
-
remove(predicate: (item: T[number], index: number) => boolean): void;
|
|
36
|
-
clear(): void;
|
|
37
|
-
sort(compareFn?: (a: T[number], b: T[number]) => number): ArraySignalAccessor<T>;
|
|
38
|
-
reverse(): ArraySignalAccessor<T>;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type ComputedAccessor<T> = {
|
|
42
|
-
(): T;
|
|
43
|
-
isSignal: boolean;
|
|
44
|
-
readonly: true;
|
|
45
|
-
} & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
46
|
-
|
|
47
|
-
export type Signal<T = any> = SignalAccessor<T> & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
48
|
-
export type Computed<T = any> = ComputedAccessor<T> & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
49
|
-
|
|
50
|
-
type EffectRunner = {
|
|
51
|
-
(): void;
|
|
52
|
-
deps: Set<Set<EffectRunner>>;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export type WatchSource<T = any> = (() => T) | Signal<T> | Computed<T>
|
|
56
|
-
export type WatchCallback<T = any> = (newValue: T, oldValue: T | undefined, onCleanup: (fn: () => void) => void) => void
|
|
57
|
-
|
|
58
|
-
export interface WatchOptions {
|
|
59
|
-
immediate?: boolean;
|
|
60
|
-
equals?: (a: any, b: any) => boolean;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
export
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
1
|
+
export type SignalAccessor<T> = {
|
|
2
|
+
(): T;
|
|
3
|
+
(newValue: T): void;
|
|
4
|
+
isSignal: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface ReactiveArrayMethods<T> {
|
|
8
|
+
map<U>(callbackfn: (value: T, index: number, array: T[]) => U): Computed<U[]>;
|
|
9
|
+
filter(predicate: (value: T, index: number, array: T[]) => boolean): Computed<T[]>;
|
|
10
|
+
slice(start?: number, end?: number): Computed<T[]>;
|
|
11
|
+
reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: T[]) => U, initialValue: U): Computed<U>;
|
|
12
|
+
reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: T[]) => T): Computed<T>;
|
|
13
|
+
find(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<T | undefined>;
|
|
14
|
+
findLast(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<T | undefined>;
|
|
15
|
+
findIndex(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<number>;
|
|
16
|
+
findLastIndex(predicate: (value: T, index: number, obj: T[]) => boolean): Computed<number>;
|
|
17
|
+
every(predicate: (value: T, index: number, array: T[]) => boolean): Computed<boolean>;
|
|
18
|
+
some(predicate: (value: T, index: number, array: T[]) => boolean): Computed<boolean>;
|
|
19
|
+
includes(searchElement: T, fromIndex?: number): Computed<boolean>;
|
|
20
|
+
indexOf(searchElement: T, fromIndex?: number): Computed<number>;
|
|
21
|
+
lastIndexOf(searchElement: T, fromIndex?: number): Computed<number>;
|
|
22
|
+
at(index: number): Computed<T | undefined>;
|
|
23
|
+
concat(...items: (T | T[])[]): Computed<T[]>;
|
|
24
|
+
flat<depth extends number = 1>(depth?: depth): Computed<any[]>;
|
|
25
|
+
flatMap<U>(callback: (value: T, index: number, array: T[]) => U | U[]): Computed<U[]>;
|
|
26
|
+
join(separator?: string): Computed<string>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export type ArraySignalAccessor<T extends any[]> = SignalAccessor<T> & ReactiveArrayMethods<T[number]> & {
|
|
30
|
+
push(...items: T[number][]): number;
|
|
31
|
+
pop(): T[number] | undefined;
|
|
32
|
+
shift(): T[number] | undefined;
|
|
33
|
+
unshift(...items: T[number][]): number;
|
|
34
|
+
splice(start: number, deleteCount: number, ...items: T[number][]): T[number][];
|
|
35
|
+
remove(predicate: (item: T[number], index: number) => boolean): void;
|
|
36
|
+
clear(): void;
|
|
37
|
+
sort(compareFn?: (a: T[number], b: T[number]) => number): ArraySignalAccessor<T>;
|
|
38
|
+
reverse(): ArraySignalAccessor<T>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type ComputedAccessor<T> = {
|
|
42
|
+
(): T;
|
|
43
|
+
isSignal: boolean;
|
|
44
|
+
readonly: true;
|
|
45
|
+
} & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
46
|
+
|
|
47
|
+
export type Signal<T = any> = SignalAccessor<T> & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
48
|
+
export type Computed<T = any> = ComputedAccessor<T> & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
49
|
+
|
|
50
|
+
type EffectRunner = {
|
|
51
|
+
(): void;
|
|
52
|
+
deps: Set<Set<EffectRunner>>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export type WatchSource<T = any> = (() => T) | Signal<T> | Computed<T>
|
|
56
|
+
export type WatchCallback<T = any> = (newValue: T, oldValue: T | undefined, onCleanup: (fn: () => void) => void) => void
|
|
57
|
+
|
|
58
|
+
export interface WatchOptions {
|
|
59
|
+
immediate?: boolean;
|
|
60
|
+
equals?: (a: any, b: any) => boolean;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface ResourceOptions {
|
|
64
|
+
staleTime?: number;
|
|
65
|
+
key?: string | number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type ResourceAccessor<T> = {
|
|
69
|
+
(): T | undefined;
|
|
70
|
+
read(): T;
|
|
71
|
+
isSignal: boolean;
|
|
72
|
+
loading: Signal<boolean>;
|
|
73
|
+
isFetching: Signal<boolean>;
|
|
74
|
+
error: Signal<any>;
|
|
75
|
+
} & (T extends any[] ? ReactiveArrayMethods<T[number]> : {})
|
|
76
|
+
|
|
77
|
+
export type ResourceActions<T> = {
|
|
78
|
+
mutate: (val: T) => void;
|
|
79
|
+
refetch: () => void;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export type ResourceReturn<T, R = unknown> = [
|
|
83
|
+
ResourceAccessor<T>,
|
|
84
|
+
{
|
|
85
|
+
mutate: (val: T) => void;
|
|
86
|
+
refetch: () => void;
|
|
87
|
+
}
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
export interface SuspenseOptions {
|
|
91
|
+
onError?: (err: any) => void;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface SuspenseSignal<T> {
|
|
95
|
+
(): T;
|
|
96
|
+
pending: Signal<boolean>;
|
|
97
|
+
error: Signal<any>;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export type Resource<T> = [ResourceAccessor<T>, ResourceActions<T>]
|
|
101
|
+
|
|
102
|
+
export declare function signal<T extends any[]>(initialValue: T): ArraySignalAccessor<T>
|
|
103
|
+
export declare function signal<T>(initialValue: T): SignalAccessor<T>
|
|
104
|
+
export declare function effect(fn: () => void): () => void
|
|
105
|
+
export declare function computed<T>(fn: () => T): Computed<T>
|
|
106
|
+
export declare function batch<T>(fn: () => T): T
|
|
107
|
+
export declare function untrack<T>(fn: () => T): T
|
|
108
|
+
export declare function watch<T>(source: WatchSource<T>, callback: WatchCallback<T>, options?: WatchOptions): () => void
|
|
109
|
+
export declare function watch<T extends any[]>(
|
|
110
|
+
sources: [...{ [K in keyof T]: WatchSource<T[K]> }],
|
|
111
|
+
callback: (newValue: T, oldValue: T | undefined, onCleanup: (fn: () => void) => void) => void,
|
|
112
|
+
options?: WatchOptions
|
|
113
|
+
): () => void
|
|
114
|
+
export declare function inspect(...args: any[]): (() => void) | void
|
|
115
|
+
export declare function onCleanup(fn: () => void): void
|
|
116
|
+
|
|
117
|
+
export function resource<T, R = any>(
|
|
118
|
+
fetcher: (input: R) => Promise<T>,
|
|
119
|
+
options?: { key?: string | number; staleTime?: number }
|
|
120
|
+
): ResourceReturn<T, R>;
|
|
121
|
+
|
|
122
|
+
export function resource<T, R>(
|
|
123
|
+
source: () => R,
|
|
124
|
+
fetcher: (input: R) => Promise<T>,
|
|
125
|
+
options?: { key?: string | number; staleTime?: number }
|
|
126
|
+
): ResourceReturn<T, R>;
|
|
127
|
+
|
|
128
|
+
export function createSuspense<T>(
|
|
129
|
+
renderFn: () => T,
|
|
130
|
+
fallbackFn: (() => T) | T,
|
|
131
|
+
options?: SuspenseOptions
|
|
132
|
+
): [SuspenseSignal<T>, () => void];
|
|
133
|
+
|
|
134
|
+
declare function setEffectHook(fn: (eff: any) => void): void
|
|
135
|
+
|
|
136
|
+
export type AsyncPriority = 'high' | 'low';
|
|
137
|
+
export interface AsyncJobOptions {
|
|
138
|
+
priority?: AsyncPriority;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function scheduleAsyncJob(fn: () => void, opts?: AsyncJobOptions): void;
|
|
142
|
+
|
|
143
|
+
export interface ResourceOptions<T = any> {
|
|
144
|
+
key?: string | number;
|
|
145
|
+
staleTime?: number;
|
|
146
|
+
fetchPriority?: AsyncPriority;
|
|
147
|
+
}
|