import {parseRecord} from '../common/micro-parsers.js'; import {ViewProps} from '../common/model/view-props.js'; import {BaseBladeParams} from '../common/params.js'; import {forceCast} from '../misc/type-util.js'; import {BasePlugin} from '../plugin/plugin.js'; import {PluginPool} from '../plugin/pool.js'; import {BladeApi} from './common/api/blade.js'; import {BladeController} from './common/controller/blade.js'; import {Blade, createBlade} from './common/model/blade.js'; interface Acceptance
{ params: Omit
; } interface ControllerArguments
{ blade: Blade; document: Document; params: P; viewProps: ViewProps; } interface ApiArguments { controller: BladeController; pool: PluginPool; } export interface BladePlugin
extends BasePlugin {
type: 'blade';
accept: {
(params: Record | null;
};
controller: {
(args: ControllerArguments ): BladeController;
};
api: {
(args: ApiArguments): BladeApi | null;
};
}
export function createBladeController (
plugin: BladePlugin ,
args: {
document: Document;
params: Record