piral-ng
Version:
Plugin for integrating Angular components in Piral.
118 lines (103 loc) • 3.47 kB
text/typescript
import type { Type, PlatformRef, NgModuleRef } from '@angular/core';
import type { ForeignComponent } from 'piral-core';
declare module 'piral-core/lib/types/custom' {
interface PiletCustomApi extends PiletNgApi {}
interface PiralCustomComponentConverters<TProps> {
ng(component: NgComponent): ForeignComponent<TProps>;
}
}
export interface NgModuleFlags {
/**
* If set to true prevents the module from being disposed.
*/
keepAlive?: boolean;
}
/**
* Options passed through to Angular `bootstrapModule`.
*
* Mainly to specify Noop Zone, but also includes compiler specific settings.
* See https://angular.io/api/core/PlatformRef#bootstrapModule for possible values.
*/
export type NgOptions = Parameters<PlatformRef['bootstrapModule']>[1];
export type ModuleInstanceResult = [any, NgOptions, NgModuleFlags];
export type PrepareBootstrapResult = [...ModuleInstanceResult, any];
export type NgModuleInt = NgModuleRef<any> & { _destroyed: boolean };
export { Type };
/**
* Gives you the ability to use a component from a lazy loaded module.
*/
export interface NgComponentLoader {
/**
* Uses a component from a lazy loaded module.
* @param selector The selector defined for the component to load.
*/
(selector: string): NgComponent;
}
export interface NgLazyType {
selector: string;
module: () => Promise<{ default: Type<any> }>;
opts: NgOptions;
flags: NgModuleFlags;
state: any;
}
/**
* The lazy loading interface for retrieving Angular components.
*/
export interface LazyType<T> {
/**
* Callback to be invoked for lazy loading an Angular module or component.
*/
(): Promise<{ default: Type<T> }>;
}
/**
* Represents the interface implemented by a module definer function.
*/
export interface NgModuleDefiner {
/**
* Defines the module to use when bootstrapping the Angular pilet.
* @param ngModule The module to use for running Angular.
* @param opts The options to pass when bootstrapping.
* @param flags The flags to use when dealing with the module.
*/
<T>(module: Type<T>, opts?: NgOptions, flags?: NgModuleFlags): void;
/**
* Defines the module to lazy load for bootstrapping the Angular pilet.
* @param getModule The module lazy loader to use for running Angular.
* @param opts The options to pass when bootstrapping.
* @param flags The flags to use when dealing with the module.
* @returns The module ID to be used to reference components.
*/
<T>(getModule: LazyType<T>, opts?: NgOptions, flags?: NgModuleFlags): NgComponentLoader;
}
export interface NgComponent {
/**
* The component root.
*/
component: Type<any> | NgLazyType;
/**
* The type of the Angular component.
*/
type: 'ng';
}
/**
* Defines the provided set of Angular Pilet API extensions.
*/
export interface PiletNgApi {
/**
* Defines the module to use when bootstrapping the Angular pilet.
*/
defineNgModule: NgModuleDefiner;
/**
* Wraps an Angular component for use in Piral. Might reuse a previously
* defined module if the component was exported from it.
* Alternatively, a module might be passed in, where the first component
* of either the bootstrap or the entryComponents declaration is used.
* @param component The component root.
* @returns The Piral Ng component.
*/
fromNg<T>(component: Type<T>): NgComponent;
/**
* Angular component for displaying extensions of the given name.
*/
NgExtension: any;
}