/// import { HeaderElement } from '../elements/header'; import { ScriptPanelElement } from '../elements/script.panel'; import { StartConfig } from '../utils/start'; import { CommonEventEmitter } from './common'; import { Config } from './config'; import EventEmitter from 'events'; export type ScriptConfigsProvider> = T | { (): T; }; export interface ScriptOptions> { name: string; /** 运行的链接,如果是 string 类型,可以提供用户跳转功能 [链接的解释,链接/正则表达式][] */ matches: (string | RegExp)[] | [string, string | RegExp][]; /** 排除的链接 [链接的解释,链接/正则表达式][] */ excludes?: (string | RegExp)[] | [string, string | RegExp][]; /** 脚本唯一命名空间 */ namespace?: string; /** 脚本提示 */ notes?: string[]; /** 脚本配置 */ configs?: ScriptConfigsProvider; /** 不显示脚本页 */ hideInPanel?: boolean; /** 运行优先级 */ priority?: number; } export type ScriptConfigs = { /** 脚本提示 */ readonly notes?: { defaultValue: string; }; } & Record; export type ScriptMethods = Record any>; type ScriptEvent = { /** 在脚本加载时立即运行的事件 */ start: (...args: any[]) => any; /** 在页面初始化完成时(元素可被访问)时运行的事件 */ active: (...args: any[]) => any; /** 在页面完全加载时运行的事件 */ complete: (...args: any[]) => any; /** 当路由修改时运行的事件 */ hashchange: (...args: any[]) => any; /** 当 history 被 push 或者 replace 修改时运行的事件 */ historychange: (type: 'push' | 'replace', ...args: any[]) => any; /** 在渲染的时候执行的事件,(面板之间切换时会重复渲染) */ render: (elements: { panel: ScriptPanelElement; header: HeaderElement; }) => any; /** 在页面离开时执行的事件 */ beforeunload: (...args: any[]) => undefined | boolean; /** 发生错误时 */ scripterror: (err: string) => void; }; export declare class BaseScript extends CommonEventEmitter { /** 在脚本加载时立即运行的钩子 */ onstart?: (...args: any[]) => any; /** 在页面初始化完成时(元素可被访问)时运行的钩子 */ onactive?: (...args: any[]) => any; /** 在页面完全加载时运行的钩子 */ oncomplete?: (...args: any[]) => any; /** 当路由修改时运行的钩子 */ onhashchange?: (...args: any[]) => any; /** 当 history 被 push 或者 replace 修改时运行的钩子 */ onhistorychange?: (type: 'push' | 'replace', ...args: any[]) => any; /** 在渲染的时候执行的钩子,(面板之间切换时会重复渲染) */ onrender?: (elements: { panel: ScriptPanelElement; header: HeaderElement; }) => any; /** 在页面离开时执行的钩子 */ onbeforeunload?: (...args: any[]) => undefined | boolean; /** 发生错误时 */ onerror?: (err: string) => void; } /** * 脚本 */ export declare class Script extends BaseScript { /** 未经处理的 configs 原对象 */ private _configs?; /** 存储已经处理过的 configs 对象,避免重复调用方法 */ private _resolvedConfigs?; /** 启动参数,由外部方法统一赋值 */ startConfig?: StartConfig; /** 名字 */ name: string; /** 工程名,如果是独立脚本则为空 */ projectName?: string; /** 运行的链接 [链接的解释,链接/正则表达式][] */ matches: (string | RegExp)[] | [string, string | RegExp][]; /** 排除的链接 [链接的解释,链接/正则表达式][] */ excludes?: (string | RegExp)[] | [string, string | RegExp][]; /** 唯一命名空间,用于避免 config 重名 */ namespace?: string; /** 后台脚本(不提供管理页面) */ hideInPanel?: boolean; /** 通过 configs 映射并经过解析后的配置对象 */ cfg: { [K in keyof C]: C[K]['defaultValue']; } & { notes?: string; }; /** 经过初始化页面脚本注入的页面元素,如果初始化脚本未运行,则此元素为空 */ panel?: ScriptPanelElement; /** 操作面板头部元素 */ header?: HeaderElement; /** 脚本暴露给外部调用的方法 */ methods: M; /** 自定义事件触发器,避免使用 script.emit , script.on 导致与原有的事件冲突,使用 script.event.emit 和 script.event.on */ event: EventEmitter; /** 运行优先级,默认0 */ priority: number; get configs(): C | undefined; set configs(c: C | undefined); constructor({ name, namespace, matches, excludes, configs, hideInPanel, onstart, onactive, oncomplete, onbeforeunload, onrender, onhistorychange, methods, priority }: ScriptOptions & { onstart?: (this: Script, ...args: any) => any; onactive?: (this: Script, ...args: any) => any; oncomplete?: (this: Script, ...args: any) => any; onhashchange?: (this: Script, ...args: any) => any; onbeforeunload?: (this: Script, ...args: any) => any; onrender?: (this: Script, elements: { panel: ScriptPanelElement; header: HeaderElement; }) => any; onhistorychange?: (this: Script, type: 'push' | 'replace', ...args: any[]) => any; methods?: (this: Script) => M; }); onConfigChange(key: K, handler: (curr: C[K]['defaultValue'], pre: C[K]['defaultValue'], remote: boolean) => any): number | void; offConfigChange(listener: number | void | EventListener): void; /** * 获取全路径名 */ fullName(): string; private errorHandler; } export {};