UNPKG

3.01 kBTypeScriptView Raw
1import { ComponentType, ForwardRefExoticComponent, ReactElement, ReactNode, Ref } from 'react';
2export interface DefaultImportedComponent<P> {
3 default: ComponentType<P>;
4}
5export declare type AnyFunction = (x: any) => any;
6export interface Default<T> {
7 default: T;
8}
9export interface Stream {
10 marks: Record<any, any>;
11}
12export declare type Mark = string[];
13export declare type Promised<T> = () => Promise<T>;
14export declare type DefaultComponent<P> = ComponentType<P> | DefaultImportedComponent<P>;
15export declare type DefaultComponentImport<T> = () => Promise<DefaultComponent<T>>;
16export declare type Defaultable<P> = P | Default<P>;
17/**
18 * standard "importer" accepted by the package.
19 * Could be {default:T} or T
20 */
21export declare type DefaultImport<T> = () => Promise<Defaultable<T>>;
22export interface MarkMeta {
23 loadable: Loadable<any>;
24 mark: Mark;
25 chunkName: string;
26 fileName: string;
27}
28export declare type LazyImport<T> = () => Promise<DefaultImportedComponent<T>>;
29export interface LoadableComponentState {
30 loading?: boolean;
31 error?: any;
32}
33export interface Loadable<T> {
34 done: boolean;
35 error: any;
36 payload: T | undefined;
37 mark: Mark;
38 resolution: Promise<void>;
39 importer: any;
40 isLoading(): boolean;
41 reset(): void;
42 replaceImportFunction(newImportFunction: Promised<T>): void;
43 loadIfNeeded(): Promise<T>;
44 tryResolveSync<Y = T>(then: (x: T) => Y): Promise<Y>;
45 load(): Promise<T>;
46 reload(): Promise<void>;
47 then(callback: (x: T) => void, err: () => void): Promise<any>;
48}
49export interface ComponentOptions<P, K> {
50 loadable: DefaultComponentImport<P> | Loadable<ComponentType<P>>;
51 LoadingComponent?: ComponentType<any>;
52 ErrorComponent?: ComponentType<any>;
53 onError?: (a: any) => void;
54 async?: boolean;
55 render?: (Component: ComponentType<P> | undefined, State: LoadableComponentState, props?: K) => ReactElement | null;
56 forwardRef?: Ref<any>;
57 forwardProps?: K;
58}
59export interface HOCOptions {
60 noAutoImport?: boolean;
61}
62export interface AdditionalHOC {
63 done: Promise<void>;
64 preload(): Promise<void>;
65}
66export declare type HOCType<P, K> = ForwardRefExoticComponent<K & {
67 importedProps?: Partial<ComponentOptions<P, K>>;
68}> & AdditionalHOC;
69export interface ImportModuleHOCProps {
70 fallback: NonNullable<ReactNode> | null;
71}
72export interface ImportModuleProps<T> extends ImportModuleHOCProps {
73 children: (arg: T) => ReactElement | null;
74}
75export interface FullImportModuleProps<T> extends ImportModuleProps<T> {
76 import: DefaultImport<T> | Loadable<T>;
77}
78export declare type ModuleFC<T> = (props: ImportModuleProps<T>) => ReactElement | null;
79export declare type HOCModuleType<T> = ModuleFC<T> & AdditionalHOC;
80export declare type HOC = <P, K = P>(loader: DefaultComponentImport<P>, options?: Partial<ComponentOptions<P, K>> & HOCOptions) => HOCType<P, K>;
81export interface ImportedComponents {
82 [index: number]: () => Promise<DefaultComponent<any>>;
83}