@viewfly/core 1.0.0-alpha.9 → 1.0.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.
@@ -0,0 +1,595 @@
1
+ declare class ForwardRef<T = any> {
2
+ private forwardRefFn;
3
+ constructor(forwardRefFn: () => T);
4
+ getRef(): T;
5
+ }
6
+ /**
7
+ * 引用后声明的类的工具函数
8
+ * @param fn
9
+ */
10
+ declare function forwardRef<T>(fn: () => T): ForwardRef<T>;
11
+
12
+ declare class Scope {
13
+ name: string;
14
+ constructor(name: string);
15
+ toString(): string;
16
+ }
17
+ type ProvideScope = 'root' | Scope;
18
+ interface InjectableOptions {
19
+ provideIn: ProvideScope;
20
+ }
21
+ interface InjectableDecorator {
22
+ (options?: InjectableOptions): ClassDecorator;
23
+ new (options?: InjectableOptions): Injectable;
24
+ }
25
+ interface Injectable {
26
+ provideIn?: ProvideScope;
27
+ }
28
+ /**
29
+ * 可注入类的装饰器
30
+ */
31
+ declare const Injectable: InjectableDecorator;
32
+
33
+ /**
34
+ * 生成自定义依赖注入 token 的类
35
+ */
36
+ declare class InjectionToken<T> {
37
+ readonly description: string;
38
+ constructor(description: string);
39
+ toString(): string;
40
+ }
41
+
42
+ declare const Type: FunctionConstructor;
43
+ interface Type<T> extends Function {
44
+ new (...args: any[]): T;
45
+ }
46
+ interface AbstractType<T> extends Function {
47
+ prototype: T;
48
+ }
49
+
50
+ /**
51
+ * 查找规则
52
+ */
53
+ declare enum InjectFlags {
54
+ /** 默认查找规则 */
55
+ Default = "Default",
56
+ /** 锁定当前容器 */
57
+ Self = "Self",
58
+ /** 跳过当前容器 */
59
+ SkipSelf = "SkipSelf",
60
+ /** 可选查找 */
61
+ Optional = "Optional"
62
+ }
63
+ /**
64
+ * 根据 token 推断返回数据类型
65
+ */
66
+ type ExtractValueType<T> = T extends Type<any> ? InstanceType<T> : T extends AbstractType<infer K> ? K : T extends InjectionToken<infer V> ? V : never;
67
+ /**
68
+ * DI 容器抽象基类
69
+ */
70
+ declare abstract class Injector {
71
+ abstract parentInjector: Injector | null;
72
+ abstract get<T extends Type<any> | AbstractType<any> | InjectionToken<any>, U = never>(token: T, notFoundValue?: U, flags?: InjectFlags): ExtractValueType<T> | U;
73
+ }
74
+
75
+ interface InjectDecorator {
76
+ (token: InjectionToken<any> | Type<any> | ForwardRef<InjectionToken<any> | Type<any>>): ParameterDecorator;
77
+ new (token: InjectionToken<any> | Type<any> | ForwardRef<InjectionToken<any> | Type<any>>): Inject;
78
+ }
79
+ interface Inject {
80
+ token: InjectionToken<any> | Type<any> | ForwardRef<InjectionToken<any> | Type<any>>;
81
+ }
82
+ /**
83
+ * 构造函数参数装饰器,用于改变注入 token
84
+ */
85
+ declare const Inject: InjectDecorator;
86
+ interface SelfDecorator {
87
+ (): ParameterDecorator;
88
+ new (): Self;
89
+ }
90
+ interface Self {
91
+ }
92
+ declare const Self: SelfDecorator;
93
+ interface SkipSelfDecorator {
94
+ (): ParameterDecorator;
95
+ new (): SkipSelf;
96
+ }
97
+ interface SkipSelf {
98
+ }
99
+ declare const SkipSelf: SkipSelfDecorator;
100
+ interface OptionalDecorator {
101
+ (): ParameterDecorator;
102
+ new (): Optional;
103
+ }
104
+ interface Optional {
105
+ }
106
+ declare const Optional: OptionalDecorator;
107
+ interface PropDecorator {
108
+ <T extends Type<any> | AbstractType<any> | InjectionToken<any>, U = never>(token?: T | ForwardRef<ExtractValueType<T>>, notFoundValue?: U, flags?: InjectFlags): PropertyDecorator;
109
+ new (token: any): Prop;
110
+ }
111
+ interface Prop {
112
+ }
113
+ declare const Prop: PropDecorator;
114
+
115
+ declare const THROW_IF_NOT_FOUND: any;
116
+ declare class NullInjector implements Injector {
117
+ parentInjector: null;
118
+ get(token: any, notFoundValue?: any, _?: InjectFlags): any;
119
+ }
120
+
121
+ interface ClassProvider<T = any> {
122
+ provide: Type<T> | AbstractType<T> | InjectionToken<T>;
123
+ useClass: Type<T>;
124
+ deps?: any[];
125
+ }
126
+ interface FactoryProvider<T = any> {
127
+ provide: Type<T> | AbstractType<T> | InjectionToken<T>;
128
+ useFactory: (...args: any[]) => T;
129
+ deps?: any[];
130
+ }
131
+ interface ValueProvider<T = any> {
132
+ provide: Type<T> | AbstractType<T> | InjectionToken<T>;
133
+ useValue: T;
134
+ }
135
+ interface ExistingProvider<T = any> {
136
+ provide: Type<T> | AbstractType<T> | InjectionToken<T>;
137
+ useExisting: T;
138
+ }
139
+ interface ConstructorProvider<T = any> {
140
+ provide: Type<T>;
141
+ deps?: [];
142
+ }
143
+ interface TypeProvider<T = any> extends Type<T> {
144
+ }
145
+ interface AbstractProvider<T = any> extends AbstractType<T> {
146
+ }
147
+ type StaticProvider<T = any> = ClassProvider<T> | FactoryProvider<T> | ValueProvider<T> | ExistingProvider<T> | ConstructorProvider<T>;
148
+ type Provider<T = any> = TypeProvider<T> | AbstractProvider<T> | StaticProvider<T>;
149
+
150
+ interface ReflectiveDependency {
151
+ injectKey: any;
152
+ visibility: SkipSelf | Self | null;
153
+ optional: boolean;
154
+ }
155
+ interface NormalizedProvider {
156
+ provide: any;
157
+ generateFactory: (injector: Injector, cacheFn: (token: any, value: any) => void) => (...args: any[]) => any;
158
+ deps: ReflectiveDependency[];
159
+ scope: ProvideScope | null;
160
+ }
161
+ /**
162
+ * 标准化 provide,并返回统一数据结构
163
+ * @param provider
164
+ */
165
+ declare function normalizeProvider(provider: Provider): NormalizedProvider;
166
+
167
+ /**
168
+ * 反射注入器
169
+ */
170
+ declare class ReflectiveInjector implements Injector {
171
+ parentInjector: Injector | null;
172
+ protected scope?: Scope | undefined;
173
+ protected normalizedProviders: NormalizedProvider[];
174
+ protected recordValues: Map<Type<any> | AbstractType<any> | InjectionToken<any>, any>;
175
+ constructor(parentInjector: Injector | null, staticProviders: Provider[], scope?: Scope | undefined);
176
+ /**
177
+ * 用于获取当前注入器上下文内的实例、对象或数据
178
+ * @param token 访问 token
179
+ * @param notFoundValue 如未查找到的返回值
180
+ * @param flags 查询规则
181
+ */
182
+ get<T extends Type<any> | AbstractType<any> | InjectionToken<any>, U = never>(token: T, notFoundValue?: U, flags?: InjectFlags): ExtractValueType<T> | U;
183
+ private getValue;
184
+ /**
185
+ * 解决并获取依赖参数
186
+ * @param deps 依赖规则
187
+ * @private
188
+ */
189
+ private resolveDeps;
190
+ }
191
+
192
+ declare function makeError(name: string): (message: string) => Error;
193
+
194
+ interface Props {
195
+ children?: JSXNode | JSXNode[];
196
+ }
197
+ declare function Fragment(props: Props): () => JSXNode | JSXNode[];
198
+ type Key = number | string;
199
+ declare function jsx(type: string | ComponentSetup, props: Props & Record<string, any>, key?: Key): ViewFlyNode;
200
+ declare const jsxs: typeof jsx;
201
+ interface ViewFlyNode<T = string | ComponentSetup> {
202
+ type: T;
203
+ props: Props & Record<string, any>;
204
+ key?: Key;
205
+ }
206
+ declare const JSXNodeFactory: {
207
+ createNode<T = string | ComponentSetup<any>>(type: T, props: Props & Record<string, any>, key?: Key): ViewFlyNode<T>;
208
+ };
209
+
210
+ type NativeNode = Record<string, any>;
211
+ declare abstract class NativeRenderer<ElementNode = NativeNode, TextNode = NativeNode> {
212
+ abstract createElement(name: string, isSvg: boolean): ElementNode;
213
+ abstract createTextNode(textContent: string, isSvg: boolean): TextNode;
214
+ abstract setProperty(node: ElementNode, key: string, value: any, isSvg: boolean): void;
215
+ abstract appendChild(parent: ElementNode, newChild: ElementNode | TextNode, isSvg: boolean): void;
216
+ abstract prependChild(parent: ElementNode, newChild: ElementNode | TextNode, isSvg: boolean): void;
217
+ abstract removeProperty(node: ElementNode, key: string, isSvg: boolean): void;
218
+ abstract setStyle(target: ElementNode, key: string, value: any, isSvg: boolean): void;
219
+ abstract removeStyle(target: ElementNode, key: string, isSvg: boolean): void;
220
+ abstract setClass(target: ElementNode, value: string, isSvg: boolean): void;
221
+ abstract listen<T = any>(node: ElementNode, type: string, callback: (ev: T) => any, isSvg: boolean): void;
222
+ abstract unListen(node: ElementNode, type: string, callback: (ev: any) => any, isSvg: boolean): void;
223
+ abstract remove(node: ElementNode | TextNode, isSvg: boolean): void;
224
+ abstract cleanChildren(node: ElementNode, isSvg: boolean): void;
225
+ abstract syncTextContent(target: TextNode, content: string, isSvg: boolean): void;
226
+ abstract insertAfter(newNode: ElementNode | TextNode, ref: ElementNode | TextNode, isSvg: boolean): void;
227
+ }
228
+
229
+ declare namespace JSX {
230
+ type ElementType = keyof IntrinsicElements | ComponentSetup;
231
+ interface Element extends ViewFlyNode {
232
+ }
233
+ interface KeyedAttributes {
234
+ key?: Key;
235
+ }
236
+ interface IntrinsicAttributes extends KeyedAttributes {
237
+ ref?: any;
238
+ [key: string]: any;
239
+ }
240
+ interface RefAttributes<T> extends KeyedAttributes {
241
+ ref?: DynamicRef<ExtractInstanceType<T>> | DynamicRef<ExtractInstanceType<T>>[];
242
+ }
243
+ interface ElementClass<P = any> extends ComponentInstance<P> {
244
+ }
245
+ interface ElementChildrenAttribute {
246
+ }
247
+ interface IntrinsicElements {
248
+ [name: string]: any;
249
+ }
250
+ interface IntrinsicClassAttributes<T> {
251
+ ref?: DynamicRef<T>;
252
+ }
253
+ }
254
+
255
+ type ClassNames = string | Record<string, unknown> | false | null | undefined | ClassNames[];
256
+ interface ComponentInstance<P> {
257
+ $portalHost?: NativeNode;
258
+ $render(): JSXNode;
259
+ $useMemo?(currentProps: P, prevProps: P): boolean;
260
+ }
261
+ type JSXNode = JSX.Element | JSX.ElementClass | string | number | boolean | null | undefined | Iterable<JSXNode>;
262
+ interface ComponentAnnotation {
263
+ scope?: Scope;
264
+ providers?: Provider[];
265
+ }
266
+ interface ComponentSetup<P = any> {
267
+ (props: P): (() => JSXNode) | ComponentInstance<P>;
268
+ annotation?: ComponentAnnotation;
269
+ }
270
+ /**
271
+ * Viewfly 组件管理类,用于管理组件的生命周期,上下文等
272
+ */
273
+ declare class Component extends ReflectiveInjector {
274
+ private readonly parentComponent;
275
+ readonly type: ComponentSetup;
276
+ props: Props;
277
+ readonly key?: Key | undefined;
278
+ instance: ComponentInstance<Props>;
279
+ template: JSXNode;
280
+ changedSubComponents: Set<Component>;
281
+ get dirty(): boolean;
282
+ get changed(): boolean;
283
+ unmountedCallbacks?: LifeCycleCallback[] | null;
284
+ mountCallbacks?: LifeCycleCallback[] | null;
285
+ propsChangedCallbacks?: PropsChangedCallback<any>[] | null;
286
+ updatedCallbacks?: LifeCycleCallback[] | null;
287
+ private updatedDestroyCallbacks?;
288
+ private propsChangedDestroyCallbacks?;
289
+ protected _dirty: boolean;
290
+ protected _changed: boolean;
291
+ private unWatch?;
292
+ private isFirstRendering;
293
+ private refs;
294
+ constructor(parentComponent: Injector | null, type: ComponentSetup, props: Props, key?: Key | undefined);
295
+ markAsDirtied(): void;
296
+ markAsChanged(changedComponent?: Component): void;
297
+ render(): {
298
+ template: JSXNode;
299
+ portalHost: NativeNode | undefined;
300
+ };
301
+ update(newProps: Record<string, any>): JSXNode;
302
+ provide<T>(providers: Provider<T> | Provider<T>[]): void;
303
+ rendered(): void;
304
+ destroy(): void;
305
+ private invokePropsChangedHooks;
306
+ private invokeMountHooks;
307
+ private invokeUpdatedHooks;
308
+ }
309
+ interface LifeCycleCallback {
310
+ (): void | (() => void);
311
+ }
312
+ interface PropsChangedCallback<T extends Props> {
313
+ (currentProps: T | null, oldProps: T | null): void | (() => void);
314
+ }
315
+ /**
316
+ * 当组件第一次渲染完成时触发
317
+ * @param callback
318
+ * ```tsx
319
+ * function App() {
320
+ * onMount(() => {
321
+ * console.log('App mounted!')
322
+ * })
323
+ * return () => <div>...</div>
324
+ * }
325
+ * ```
326
+ */
327
+ declare function onMounted(callback: LifeCycleCallback): void;
328
+ /**
329
+ * 当组件视图更新后调用
330
+ * @param callback
331
+ * ```tsx
332
+ * function App() {
333
+ * onUpdated(() => {
334
+ * console.log('App updated!')
335
+ * return () => {
336
+ * console.log('destroy prev update!')
337
+ * }
338
+ * })
339
+ * return () => <div>...</div>
340
+ * }
341
+ * ```
342
+ */
343
+ declare function onUpdated(callback: LifeCycleCallback): () => void;
344
+ /**
345
+ * 当组件 props 更新地调用
346
+ * @param callback
347
+ * @example
348
+ * ```tsx
349
+ * function YourComponent(props) {
350
+ * onPropsChanged((currentProps, prevProps) => {
351
+ * console.log(currentProps, prevProps)
352
+ *
353
+ * return () => {
354
+ * console.log('destroy prev changed!')
355
+ * }
356
+ * })
357
+ * return () => {
358
+ * return <div>xxx</div>
359
+ * }
360
+ * }
361
+ * ```
362
+ */
363
+ declare function onPropsChanged<T extends Props>(callback: PropsChangedCallback<T>): () => void;
364
+ /**
365
+ * 当组件销毁时调用回调函数
366
+ * @param callback
367
+ */
368
+ declare function onUnmounted(callback: () => void): void;
369
+ interface RefListener<T> {
370
+ (current: T): void | (() => void);
371
+ }
372
+ type ExtractInstanceType<T, U = T extends (...args: any) => any ? ReturnType<T> : T> = U extends ComponentInstance<any> ? Omit<U, keyof ComponentInstance<any>> : U extends Function ? never : T;
373
+ interface AbstractInstanceType<T extends Record<string, any>> {
374
+ (): T & ComponentInstance<any>;
375
+ }
376
+ declare class DynamicRef<T> {
377
+ private callback;
378
+ private unBindMap;
379
+ private targetCaches;
380
+ constructor(callback: RefListener<T>);
381
+ bind(value: T): void;
382
+ unBind(value: T): void;
383
+ }
384
+ /**
385
+ * 用于节点渲染完成时获取 DOM 节点
386
+ * @param callback 获取 DOM 节点的回调函数
387
+ * @example
388
+ * ```tsx
389
+ * function App() {
390
+ * const ref = createDynamicRef(node => {
391
+ * function fn() {
392
+ * // do something...
393
+ * }
394
+ * node.addEventListener('click', fn)
395
+ * return () => {
396
+ * node.removeEventListener('click', fn)
397
+ * }
398
+ * })
399
+ * return () => {
400
+ * return <div ref={ref}>xxx</div>
401
+ * }
402
+ * }
403
+ * ```
404
+ */
405
+ declare function createDynamicRef<T, U = ExtractInstanceType<T>>(callback: RefListener<U>): DynamicRef<U>;
406
+ declare class StaticRef<T> extends DynamicRef<T> {
407
+ readonly current: T | null;
408
+ constructor();
409
+ }
410
+ declare function createRef<T, U = ExtractInstanceType<T>>(): StaticRef<U>;
411
+ declare const depsKey: unique symbol;
412
+ /**
413
+ * 组件状态实例,直接调用可以获取最新的状态,通过 set 方法可以更新状态
414
+ * ```
415
+ */
416
+ interface Signal<T> {
417
+ $isSignal: true;
418
+ /**
419
+ * 直接调用一个 Signal 实例,可以获取最新状态
420
+ */
421
+ (): T;
422
+ /**
423
+ * 更新组件状态的方法,可以传入最新的值
424
+ * @param newState
425
+ */
426
+ set(newState: T): void;
427
+ [depsKey]: Set<LifeCycleCallback>;
428
+ }
429
+ /**
430
+ * 组件状态管理器
431
+ * @param state 初始状态
432
+ * @example
433
+ * ```tsx
434
+ * function App() {
435
+ * // 初始化状态
436
+ * const state = createSignal(1)
437
+ *
438
+ * return () => {
439
+ * <div>
440
+ * <div>当前值为:{state()}</div>
441
+ * <div>
442
+ * <button type="button" onClick={() => {
443
+ * // 当点击时更新状态
444
+ * state.set(state() + 1)
445
+ * }
446
+ * }>updateState</button>
447
+ * </div>
448
+ * </div>
449
+ * }
450
+ * }
451
+ */
452
+ declare function createSignal<T>(state: T): Signal<T>;
453
+ /**
454
+ * 使用派生值,Viewfly 会收集回调函数内同步执行时访问的 Signal,
455
+ * 并在你获取 useDerived 函数返回的 Signal 的值时,自动计算最新的值。
456
+ *
457
+ * @param callback
458
+ * @param isContinue 可选的停止函数,在每次值更新后调用,当返回值为 false 时,将不再监听依赖的变化
459
+ */
460
+ declare function createDerived<T>(callback: () => T, isContinue?: (data: T) => unknown): Signal<T>;
461
+ interface WatchCallback<T, U> {
462
+ (newValue: T, oldValue: U): void | (() => void);
463
+ }
464
+ /**
465
+ * 监听状态变化,当任意一个状态发生变更时,触发回调。
466
+ * watch 会返回一个取消监听的函数,调用此函数,可以取消监听。
467
+ * 当在组件中调用时,组件销毁时会自动取消监听。
468
+ * @param deps 依赖的状态 Signal,可以是一个 Signal,只可以一个数包含 Signal 的数组,或者是一个求值函数
469
+ * @param callback 状态变更后的回调函数
470
+ */
471
+ declare function watch<T>(deps: Signal<T>, callback: WatchCallback<T, T>): () => void;
472
+ declare function watch<T>(deps: [Signal<T>], callback: WatchCallback<[T], [T]>): () => void;
473
+ declare function watch<T, T1>(deps: [Signal<T>, Signal<T1>], callback: WatchCallback<[T, T1], [T, T1]>): () => void;
474
+ declare function watch<T, T1, T2>(deps: [Signal<T>, Signal<T1>, Signal<T2>], callback: WatchCallback<[T, T1, T2], [T, T1, T2]>): () => void;
475
+ declare function watch<T, T1, T2, T3>(deps: [Signal<T>, Signal<T1>, Signal<T2>, Signal<T3>], callback: WatchCallback<[T, T1, T2, T3], [T, T1, T2, T3]>): () => void;
476
+ declare function watch<T, T1, T2, T3, T4>(deps: [Signal<T>, Signal<T1>, Signal<T2>, Signal<T3>, Signal<T4>], callback: WatchCallback<[T, T1, T2, T3, T4], [T, T1, T2, T3, T4]>): () => void;
477
+ declare function watch<T, T1, T2, T3, T4, T5>(deps: [Signal<T>, Signal<T1>, Signal<T2>, Signal<T3>, Signal<T4>, Signal<T5>], callback: WatchCallback<[T, T1, T2, T3, T4, T5], [T, T1, T2, T3, T4, T5]>): () => void;
478
+ declare function watch<T, T1, T2, T3, T4, T5, T6>(deps: [Signal<T>, Signal<T1>, Signal<T2>, Signal<T3>, Signal<T4>, Signal<T5>, Signal<T6>], callback: WatchCallback<[T, T1, T2, T3, T4, T5, T6], [T, T1, T2, T3, T4, T5, T6]>): () => void;
479
+ declare function watch<T, T1, T2, T3, T4, T5, T6, T7>(deps: [Signal<T>, Signal<T1>, Signal<T2>, Signal<T3>, Signal<T4>, Signal<T5>, Signal<T6>, Signal<T7>], callback: WatchCallback<[T, T1, T2, T3, T4, T5, T6, T7], [T, T1, T2, T3, T4, T5, T6, T7]>): () => void;
480
+ declare function watch<T>(deps: () => T, callback: WatchCallback<T, T>): () => void;
481
+ declare function watch<T = any>(deps: Signal<any>[], callback: WatchCallback<T[], T[]>): () => void;
482
+ /**
483
+ * 给组件添加注解
484
+ * @param annotation
485
+ * @param componentSetup
486
+ * @example
487
+ * ```ts
488
+ * export customScope = new Scope('scopeName')
489
+ * export const App = withAnnotation({
490
+ * scope: customScope,
491
+ * providers: [
492
+ * ExampleService
493
+ * ]
494
+ * }, function(props: Props) {
495
+ * return () => {
496
+ * return <div>...</div>
497
+ * }
498
+ * })
499
+ * ```
500
+ */
501
+ declare function withAnnotation<T extends ComponentSetup>(annotation: ComponentAnnotation, componentSetup: T): T;
502
+ /**
503
+ * 通过组件上下文获取 IoC 容器内数据的勾子方法
504
+ */
505
+ declare function inject<T extends Type<any> | AbstractType<any> | InjectionToken<any>, U = never>(token: T, notFoundValue?: U, flags?: InjectFlags): ExtractValueType<T> | U;
506
+ /**
507
+ * 获取当前组件实例
508
+ */
509
+ declare function getCurrentInstance(): Component;
510
+
511
+ declare function withMemo<T extends Props = Props>(canUseMemo: ComponentInstance<T>['$useMemo'], render: () => JSXNode): ComponentInstance<T>;
512
+
513
+ declare function createRenderer(component: Component, nativeRenderer: NativeRenderer): (host: NativeNode) => void;
514
+
515
+ /**
516
+ * Viewfly 根组件,用于实现组件状态更新事件通知
517
+ */
518
+ declare class RootComponent extends Component {
519
+ private refresh;
520
+ constructor(parentInjector: Injector | null, factory: ComponentSetup, refresh: () => void);
521
+ markAsChanged(changedComponent?: Component): void;
522
+ }
523
+
524
+ declare const TextAtomType: unique symbol;
525
+ declare const ElementAtomType: unique symbol;
526
+ declare const ComponentAtomType: unique symbol;
527
+ interface TextAtom {
528
+ type: typeof TextAtomType;
529
+ index: number;
530
+ jsxNode: string;
531
+ nodeType: string;
532
+ key?: null;
533
+ nativeNode: NativeNode | null;
534
+ child: Atom | null;
535
+ sibling: Atom | null;
536
+ isSvg: boolean;
537
+ }
538
+ interface ElementAtom {
539
+ type: typeof ElementAtomType;
540
+ index: number;
541
+ nodeType: string;
542
+ key?: Key;
543
+ jsxNode: ViewFlyNode<string>;
544
+ nativeNode: NativeNode | null;
545
+ child: Atom | null;
546
+ sibling: Atom | null;
547
+ isSvg: boolean;
548
+ }
549
+ interface ComponentAtom {
550
+ type: typeof ComponentAtomType;
551
+ index: number;
552
+ nodeType: ComponentSetup;
553
+ key?: Key;
554
+ jsxNode: ViewFlyNode<ComponentSetup> | Component;
555
+ nativeNode: NativeNode | null;
556
+ child: Atom | null;
557
+ sibling: Atom | null;
558
+ isSvg: boolean;
559
+ }
560
+ type Atom = TextAtom | ElementAtom | ComponentAtom;
561
+ interface ComponentView {
562
+ atom: Atom;
563
+ host: NativeNode;
564
+ isParent: boolean;
565
+ rootHost: NativeNode;
566
+ }
567
+
568
+ /**
569
+ * Viewfly 配置项
570
+ */
571
+ interface Config {
572
+ /** 根节点 */
573
+ root: JSXNode;
574
+ /** 平台渲染器 */
575
+ nativeRenderer: NativeRenderer;
576
+ /** 应用的上下文 */
577
+ context?: Injector;
578
+ /** 是否自动更新视图 */
579
+ autoUpdate?: boolean;
580
+ }
581
+ interface Application<T extends NativeNode = NativeNode> {
582
+ provide(providers: Provider | Provider[]): Application<T>;
583
+ mount(host: T): Application<T>;
584
+ use(module: Module | Module[]): Application<T>;
585
+ render(): Application<T>;
586
+ destroy(): void;
587
+ }
588
+ interface Module {
589
+ setup?(app: Application): void;
590
+ onAfterStartup?(app: Application): void;
591
+ onDestroy?(): void;
592
+ }
593
+ declare function viewfly<T extends NativeNode>(config: Config): Application<T>;
594
+
595
+ export { type AbstractInstanceType, type AbstractProvider, type AbstractType, type Application, type Atom, type ClassNames, type ClassProvider, Component, type ComponentAnnotation, type ComponentInstance, type ComponentSetup, type ComponentView, type Config, type ConstructorProvider, DynamicRef, type ExistingProvider, type ExtractInstanceType, type ExtractValueType, type FactoryProvider, ForwardRef, Fragment, Inject, type InjectDecorator, InjectFlags, Injectable, type InjectableDecorator, type InjectableOptions, InjectionToken, Injector, JSX, type JSXNode, JSXNodeFactory, type Key, type LifeCycleCallback, type Module, type NativeNode, NativeRenderer, type NormalizedProvider, NullInjector, Optional, type OptionalDecorator, Prop, type PropDecorator, type Props, type PropsChangedCallback, type ProvideScope, type Provider, type RefListener, type ReflectiveDependency, ReflectiveInjector, RootComponent, Scope, Self, type SelfDecorator, type Signal, SkipSelf, type SkipSelfDecorator, type StaticProvider, StaticRef, THROW_IF_NOT_FOUND, Type, type TypeProvider, type ValueProvider, type ViewFlyNode, type WatchCallback, createDerived, createDynamicRef, createRef, createRenderer, createSignal, forwardRef, getCurrentInstance, inject, jsx, jsxs, makeError, normalizeProvider, onMounted, onPropsChanged, onUnmounted, onUpdated, viewfly, watch, withAnnotation, withMemo };