UNPKG

@egova/flagwind-core

Version:
1,896 lines 124 kB
declare namespace flagwind { /** * 应用程序类,负责整个应用的启动和退出。 * @static * @class * @version 1.0.0 */ class Application { private static _isStarted; private static _context; private static _eventProvider; /** * 获取一个事件提供程序实例。 * @private * @property * @returns IEventProvider */ private static get eventProvider(); /** * 获取一个布尔值,表示当前应用是否启动完成。 * @static * @property * @returns boolean */ static get isStarted(): boolean; /** * 获取应用程序上下文实例。 * @static * @property * @returns ApplicationContextBase */ static get context(): ApplicationContextBase; /** * 当应用程序启动时产生的事件。 * @event ApplicationEventArgs */ static STARTING: string; /** * 当应用程序启动后产生的事件。 * @event ApplicationEventArgs */ static STARTED: string; /** * 当应用程序即将退出时产生的事件。 * @event CancelEventArgs */ static EXITING: string; /** * 启动应用程序。 * @static * @param {ApplicationContextBase} context 应用程序上下文实例。 * @param {Array<string>} args 启动参数。 * @returns void */ static start(context: ApplicationContextBase, args?: Array<string>): void; /** * 关闭当前应用程序。 * @static * @returns void */ static exit(): void; /** * 为指定的事件类型注册一个侦听器,以使侦听器能够接收事件通知。 * @summary 如果不再需要某个事件侦听器,可调用 removeListener() 删除它,否则会产生内存问题。 * 由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。 * @param {string} type 事件类型。 * @param {Function} 处理事件的侦听器函数。 * @param {any} scope? 侦听函数绑定的 this 对象。 * @param {boolean} once? 是否添加仅回调一次的事件侦听器,如果此参数设为 true 则在第一次回调时就自动移除监听。 * @returns void */ static addListener(type: string, listener: Function, scope?: any, once?: boolean): void; /** * 移除侦听器。如果没有注册任何匹配的侦听器,则对此方法的调用没有任何效果。 * @param {string} type 事件类型。 * @param {Function} listener 处理事件的侦听器函数。 * @param {any} scope? 侦听函数绑定的 this 对象。 * @returns void */ static removeListener(type: string, listener: Function, scope?: any): void; /** * 派发一个指定参数的事件。 * @param {EventArgs} eventArgs 事件参数实例。 * @returns void */ static dispatchEvent(args: EventArgs): void; /** * 初始化全局模块。 * @private * @static * @param {ApplicationContextBase} context * @returns void */ private static initializeGlobalModules; /** * 卸载全局模块。 * @private * @static * @param {ApplicationContextBase} context * @returns void */ private static disposeGlobalModules; } } declare namespace flagwind { /** * 表示实现该抽象类的是一个应用程序上下文。 * @class * @version 1.0.0 */ abstract class ApplicationContextBase { private _applicationId; private _title; private _modules; private _states; private _workbench; private _credential; /** * 获取或设置当前应用程序唯一代号。 * @summary 注意:本属性一旦被设置则不能被更改。 * @property * @returns string */ get applicationId(): string; set applicationId(value: string); /** * 获取或设置当前应用程序的标题。 * @property * @returns string */ get title(): string; set title(value: string); /** * 获取当前应用程序的服务管理对象。 * @property * @returns IServiceProviderFactory */ get serviceFactory(): IServiceProviderFactory; /** * 获取当前应用程序的模块集合。 * @property * @returns ISet */ get modules(): ISet<IApplicationModule>; /** * 获取或设置当前用户的安全凭证。 * @property * @returns ICredential */ get credential(): ICredential; set credential(value: ICredential); /** * 获取当前应用的状态字典。 * @property * @returns IMap */ get states(): IMap<string, any>; /** * 获取当前应用程序的工作台(主界面)。 * 必须使用 Application 类的 start 方法,启动应用程序后才能使用该属性获取到创建成功的工作台对象。 * @property * @returns IWorkbench */ get workbench(): IWorkbench; /** * 初始化应用程序上下文的新实例。 * @protected * @param {string} applicationId? 应用程序的唯一代号。 */ protected constructor(applicationId?: string); /** * 返回当前应用程序的工作台(主界面)。 * @param {Array<string>} args 初始化的参数。 * @returns IWorkbench 返回新建或已创建的工作台对象。 */ getWorkbench(args: Array<string>): IWorkbench; /** * 创建一个主窗体对象。 * 通常子类中实现的该方法只是创建空的工作台对象,并没有构建出该工作台下面的子构件。 * 具体构建工作台子构件的最佳时机通常在 Workbench 类的 Open 方法内进行。 * @abstract * @returns IWorkbench */ protected abstract createWorkbench(args: Array<string>): IWorkbench; } } declare namespace flagwind { /** * EventArgs 类作为创建事件参数的基类,当发生事件时,EventArgs 实例将作为参数传递给事件侦听器。 * @class * @version 1.0.0 */ class EventArgs { private _type; private _source; private _data; /** * 获取一个字符串值,表示事件的类型。 * @property * @returns string */ get type(): string; /** * 获取或设置事件源对象。 * @property * @returns any */ get source(): any; set source(value: any); /** * 获取或设置与事件关联的可选数据。 * @property * @returns any */ get data(): any; set data(value: any); /** * 初始化 EventArgs 类的新实例。 * @constructor * @param {string} type 事件类型。 * @param {any?} data 可选数据。 */ constructor(type: string, data?: any); } } declare namespace flagwind { /** * 应用程序事件参数类。 * @class * @version 1.0.0 */ class ApplicationEventArgs extends EventArgs { /** * 获取应用程序上下文实例。 * @member */ readonly context: ApplicationContextBase; /** * 初始化应用程序事件参数类的新实例。 * @param {string} type 事件类型。 * @param {ApplicationContextBase} context 应用程序上下文实例。 */ constructor(type: string, context: ApplicationContextBase); } } declare namespace flagwind { /** * 向实现类提供应用扩展模块初始化和处置事件。 * @interface * @version 1.0.0 */ interface IApplicationModule extends IDisposable { /** * 获取应用扩展模块名称。 * @property */ name: string; /** * 初始化应用扩展模块,并使其为处理请求做好准备。 * 使用该方法将事件处理方法向具体事件进行注册等初始化操作。 * @param {ApplicationContextBase} context 一个上下文对象,它提供对模块处理应用程序内所有应用程序对象的公用的方法、属性和事件的访问。 * @returns void */ initialize(context: ApplicationContextBase): void; } } declare namespace flagwind { /** * 表示工作台的接口,包含对工作台的基本行为特性的定义。 * @interface * @version 1.0.0 */ interface IWorkbench extends IEventProvider { /** * 当工作台正在打开时产生的事件。 * @event EventArgs */ readonly OPENING: string; /** * 当工作台被打开后产生的事件。 * @event EventArgs */ readonly OPENED: string; /** * 当工作台正在取消激活时产生的事件。 * @event EventArgs */ readonly DEACTIVATING: string; /** * 当工作台取消激活后产生的事件。 * @event EventArgs */ readonly DEACTIVATED: string; /** * 当工作台正在激活时产生的事件。 * @event EventArgs */ readonly ACTIVATING: string; /** * 当工作台正在关闭时产生的事件。 * @event CancelEventArgs */ readonly CLOSING: string; /** * 当工作台被关闭后产生的事件。 * @event EventArgs */ readonly CLOSED: string; /** * 当工作台标题被更改后产生的事件。 * @event EventArgs */ readonly TITLE_CHANGED: string; /** * 获取工作台状态。 * @property */ status: WorkbenchStatus; /** * 获取或设置工作台标题。 * @property */ title: string; /** * 打开工作台。 * @async * @param {Array<string>} args * @returns void */ open(args: Array<string>): Promise<void>; /** * 关闭工作台。 * @async * @returns boolean */ close(): Promise<boolean>; /** * 取消激活工作台。 * @returns void */ deactivate(): void; /** * 激活工作台。 * @returns void */ activate(): void; } } declare namespace flagwind { /** * 事件提供程序类。 * @description 用于添加或删除事件侦听器的方法,检查是否已注册特定类型的事件侦听器,并调度事件。 * @class * @version 1.0.0 */ class EventProvider implements IEventProvider { private _source; private _events; /** * 初始化事件提供程序的新实例。 * @param {any} source? 事件源实例。 */ constructor(source?: any); /** * 为指定的事件类型注册一个侦听器,以使侦听器能够接收事件通知。 * @summary 如果不再需要某个事件侦听器,可调用 removeListener() 删除它,否则会产生内存问题。 * 由于垃圾回收器不会删除仍包含引用的对象,因此不会从内存中自动删除使用已注册事件侦听器的对象。 * @param {string} type 事件类型。 * @param {Function} 处理事件的侦听器函数。 * @param {any} scope? 侦听函数绑定的 this 对象。 * @param {boolean} once? 是否添加仅回调一次的事件侦听器,如果此参数设为 true 则在第一次回调时就自动移除监听。 * @returns void+ */ addListener(type: string, listener: Function, scope?: any, once?: boolean): void; /** * 移除侦听器。如果没有注册任何匹配的侦听器,则对此方法的调用没有任何效果。 * @param {string} type 事件类型。 * @param {Function} listener 处理事件的侦听器函数。 * @param {any} scope? 侦听函数绑定的 this 对象。 * @returns void */ removeListener(type: string, listener: Function, scope?: any): void; /** * 检查是否为特定事件类型注册了侦听器。 * @param {string} type 事件类型。 * @returns boolean 如果指定类型的侦听器已注册,则值为 true;否则,值为 false。 */ hasListener(type: string): boolean; /** * 派发一个指定类型的事件。 * @param {string} type 事件类型。 * @param {any} data? 事件数据。 * @returns void */ dispatchEvent(type: string, data?: any): void; /** * 派发一个指定参数的事件。 * @param {EventArgs} eventArgs 事件参数实例。 * @returns void */ dispatchEvent(args: EventArgs): void; } } declare namespace flagwind { /** * 提供工作台的基本封装,建议自定义工作台从此类继承。 * @abstract * @class * @version 1.0.0 */ abstract class WorkbenchBase extends EventProvider implements IWorkbench { private _status; private _title; private _applicationContext; /** * 当工作台正在打开时产生的事件。 * @event EventArgs */ readonly OPENING: string; /** * 当工作台被打开后产生的事件。 * @event EventArgs */ readonly OPENED: string; /** * 当工作台正在取消激活时产生的事件。 * @event EventArgs */ readonly DEACTIVATING: string; /** * 当工作台取消激活后产生的事件。 * @event EventArgs */ readonly DEACTIVATED: string; /** * 当工作台正在激活时产生的事件。 * @event EventArgs */ readonly ACTIVATING: string; /** * 当工作台正在关闭时产生的事件。 * @event CancelEventArgs */ readonly CLOSING: string; /** * 当工作台被关闭后产生的事件。 * @event EventArgs */ readonly CLOSED: string; /** * 当工作台标题被更改后产生的事件。 * @event EventArgs */ readonly TITLE_CHANGED: string; /** * 获取工作台的当前状态。 * @property * @returns WorkbenchStatus */ get status(): WorkbenchStatus; /** * 获取或设置工作台的标题。 * @property * @returns string */ get title(): string; set title(value: string); /** * 获取工作台所属的应用程序上下文实例。 * @property * @returns ApplicationContextBase */ get applicationContext(): ApplicationContextBase; /** * 初始化工作台的新实例。 * @protected * @param {ApplicationContextBase} applicationContext+ */ protected constructor(applicationContext: ApplicationContextBase); /** * 打开工作台。 * @async * @param {Array<string>} args * @returns void */ open(args: Array<string>): Promise<void>; /** * 关闭工作台。 * @async * @returns boolean */ close(): Promise<boolean>; /** * 取消激活工作台。 * @returns void */ deactivate(): void; /** * 激活工作台。 * @returns void */ activate(): void; /** * 当准备打开工作台时调用。 * @protected * @virtual * @returns void */ protected onOpening(): void; /** * 当工作台打开时调用。 * @async * @protected * @virtual * @param {Array<string>} args * @returns void */ protected onOpen(args: Array<string>): Promise<void>; /** * 当工作台打开完成时调用。 * @protected * @virtual * @returns void */ protected onOpened(): void; /** * 当准备关闭工作台时调用。 * @protected * @virtual * @param {CancelEventArgs} event */ protected onClosing(event: CancelEventArgs): void; /** * 当工作台关闭时调用。 * @async * @protected * @virtual * @returns void */ protected onClose(): Promise<void>; /** * 当工作台关闭完成时调用。 * @protected * @virtual * @returns void */ protected onClosed(): void; /** * 当工作台准备失去焦点时调用。 * @protected * @virtual * @returns void */ protected onDeactivateing(): void; /** * 当工作台失去焦点时调用。 * @protected * @virtual * @returns void */ protected onDeactivate(): void; /** * 当工作台失去焦点后调用。 * @protected * @virtual * @returns void */ protected onDeactivated(): void; /** * 当工作台准备获得焦时调用。 * @protected * @virtual * @returns void */ protected onActivating(): void; /** * 当工作台获得焦时调用。 * @protected * @virtual * @returns void */ protected onActivate(): void; /** * 当工作台获得焦后调用。 * @protected * @virtual * @returns void */ protected onActivated(): void; /** * 当工作台标题更改后调用。 * @protected * @virtual * @returns void */ protected onTitleChanged(): void; } } declare namespace flagwind { /** * 表示工作台的运行状态。 * @enum * @version 1.0.0 */ const enum WorkbenchStatus { /** * 未开始或已关闭。 * @member */ closed = 0, /** * 正在打开中。 * @member */ opening = 1, /** * 正常运行。 * @member */ running = 2, /** * 取消激活中。 * @member */ deactivating = 3, /** * 已被取消激活。 * @member */ deactivated = 4, /** * 正在激活中。 * @member */ activating = 5, /** * 正在关闭中。 * @member */ closing = 6 } } declare namespace flagwind { /** * 表示一条广播信息。 * @class * @version 1.0.0 */ class Broadcast { private _uri; private _scheme; private _action; private _extras; /** * 获取广播的方案。 * @property * @returns string */ get scheme(): string; /** * 获取广播的动作。 * @property * @returns string */ get action(): string; /** * 获取广播的标识符。 * @property * @returns string */ get uri(): string; /** * 获取广播携带的数据。 * @property * @returns Map */ get extras(): Map<string, any>; /** * 初始化一个广播新实例。 * @property * @param {string} uri 广播描述符。 * @param {Map<string, any>} extras? 携带的数据。 */ constructor(uri: string, extras?: Map<string, any>); } } declare namespace flagwind { /** * 广播在传播过程中使用的上下文参数。 * @class * @version 1.0.0 */ class BroadcastContext { private _manager; private _uri; private _scheme; private _action; private _extras; private _aborted; /** * 获取广播所在的广播管理器实例。 * @property * @returns BroadcastManager */ get manager(): BroadcastManager; /** * 获取广播的方案。 * @property * @returns string */ get scheme(): string; /** * 获取广播的动作。 * @property * @returns string */ get action(): string; /** * 获取广播的标识符。 * @property * @returns string */ get uri(): string; /** * 获取广播携带的数据。 * @property * @returns Map<string, any> */ get extras(): Map<string, any>; /** * 表示是否阻止广播继续传播。 * @property * @returns boolean */ get aborted(): boolean; /** * 初始化广播上下文的新实例。 * @param {BroadcastManager} manager 广播管理器。 * @param {Broadcast} broadcast 广播实例。 */ constructor(manager: BroadcastManager, broadcast: Broadcast); /** * 阻止广播在本次传播中继续进行传播。 * @returns void */ abort(): void; } } declare namespace flagwind { /** * 表示一个广播契约。 * @class * @version 1.0.0 */ class BroadcastContract { private _scheme; private _priority; private _actions; /** * 获取广播契约的方案。 * @property * @returns string */ get scheme(): string; /** * 获取或设置广播接收时的优先顺序。 * @property * @returns number */ get priority(): number; set priority(value: number); /** * 获取广播契约所拥有的动作。 * @property * @returns Set */ get actions(): Set<string>; /** * 初始化广播契约的新实例。 * @constructor * @param {string} scheme 协议方案。 * @param {Array<string>} actions 协议包含的动作。 */ constructor(scheme: string, actions: Array<string>); /** * 初始化广播契约的新实例。 * @constructor * @param {string} uri 协议URI。 */ constructor(uri: string); } } declare namespace flagwind { /** * 提供用于广播注册发布等功能。 * @class * @version 1.0.0 */ class BroadcastManager { private _eventProvider; private _receiverProvider; private static _instance; /** * 获取一个事件提供程序。 * @protected * @property * @returns IEventProvider */ protected get eventProvider(): IEventProvider; /** * 获取一个广播接收器提供程序。 * @protected * @property * @returns IBroadcastReceiverProvider */ protected get receiverProvider(): IBroadcastReceiverProvider; /** * 获取广播管理器的单实例。 * @static * @returns BroadcastManager */ static get instance(): BroadcastManager; /** * 初始化广播管理器的新实例。 * @param {IBroadcastReceiverProvider} receiverProvider? 广播接收器提供程序。 */ constructor(receiverProvider?: IBroadcastReceiverProvider); /** * 是否存在指定契约的uri接收器 * @param uri 广播契约uri */ hasReceiver(uri: string): boolean; /** * 基于指定的契约注册一个广播接收程序。 * @param {BroadcastContract} contract 广播契约。 * @param {IBroadcastReceiver} receiver 接收程序。 * @returns void */ register(contract: BroadcastContract, receiver: IBroadcastReceiver): void; /** * 移除指定契约的广播接收器。 * @param {BroadcastContract} contract 广播契约。 * @returns void */ unregister(contract: BroadcastContract): void; /** * 发送一条广播信息。 * @param {Broadcast} broadcast 广播实例。 * @returns void */ send(broadcast: Broadcast): void; /** * 当接收广播时调用。 * @protected * @virtual * @returns any */ protected onReceive(request: any): void; /** * 创建广播上下文实例。 * @protected * @virtual * @param {Broadcast} broadcast * @returns BroadcastContext */ protected createBroadcastContext(broadcast: Broadcast): BroadcastContext; } } declare namespace flagwind { /** * 表示广播接收的优先级别。 * @enum * @version 1.0.0 */ const enum BroadcastPriority { /** * 默认优先级。 * @member */ normal = 0, /** * 最高的。 * @member */ highest = 9999, /** * 最低的。 * @member */ lowest = -9999 } } declare namespace flagwind { /** * 提供用于检索广播接收器广播项。 * @class * @version 1.0.0 */ class BroadcastReceiverEntry { private _contract; private _receiver; /** * 获取广播接收优先级。 * @property * @returns number */ get priority(): number; /** * 获取广播契约实例。 * @property * @returns BroadcastContract */ get contract(): BroadcastContract; /** * 获取广播接收器实例。 * @property * @returns IBroadcastReceiver */ get receiver(): IBroadcastReceiver; /** * 初始化广播项的新实例。 * @param {BroadcastContract} contract 广播契约。 * @param {IBroadcastReceiver} receiver 广播接收器。 */ constructor(contract: BroadcastContract, receiver: IBroadcastReceiver); } } declare namespace flagwind { /** * 提供用于检索广播接收器对象的机制。 * @class * @version 1.0.0 */ class BroadcastReceiverProvider implements IBroadcastReceiverProvider { private _entries; /** * 初始化广播接收器提供程序的新实例。 * @constructor */ constructor(); has(uri: string): boolean; /** * 注册一个广播接收器至容器中。 * @param {BroadcastContract} contract 广播契约。 * @param {IBroadcastReceiver} receiver 广播接收器。 * @returns void */ register(contract: BroadcastContract, receiver: IBroadcastReceiver): void; /** * 移除指定契约的广播接收器。 * @param {BroadcastContract} contract 广播契约。 * @returns void */ unregister(contract: BroadcastContract): void; /** * 根据指定广播实例获取所有广播接收器实例。 * @param {Broadcast} broadcast 广播实例。 * @returns IEnumerable<IBroadcastReceiver> */ resolve(broadcast: Broadcast): IEnumerable<IBroadcastReceiver>; /** * 清除所有注册信息 */ clear(): void; } } declare namespace flagwind { /** * 表示一个用于存储键值对的数据结构。 * @class * @description Map 类似于对象,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 * @version 1.0.0 */ class Map<K, V> implements IMap<K, V> { private _keys; private _values; /** * 获取 Map<K, V> 中实际包含的成员总数。 * @property * @returns number */ get size(): number; /** * 设置键名 key 对应的键值为 value,然后返回整个 Map<K, V> 结构。 * 如果 key 已经有值,则键值会被更新,否则就新生成该键。 * @param {K} key 键。 * @param {V} value 值。 * @returns void */ set(key: K, value: V): Map<K, V>; /** * 读取 key 对应的键值,如果找不到 key,返回 undefined。 * @param {K} key 键。 * @returns V */ get(key: K): V; /** * 确定 Map<K, V> 是否包含指定的键。 * @param {K} key 键。 * @returns boolean 如果 Map<K, V> 包含具有指定键的成员,则为 true;否则为 false。 */ has(key: K): boolean; /** * 从 Map<K, V> 中删除指定的键对应的项。 * @param {K} key 键。 * @returns boolean 如果成功找到并移除该项,则为 true;否则为 false。 */ delete(key: K): boolean; /** * 清除所有键和值。 * @returns void */ clear(): void; /** * 返回一个循环访问集合的枚举器。 * @returns IEnumerator */ getEnumerator(): IEnumerator<KeyValuePair<K, V>>; /** * 对 IEnumerable<T> 进行迭代处理。 * @param {Function} callback 每次迭代中执行的回掉函数,当前迭代项将传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (item: KeyValuePair<K, V>, source: IEnumerable<KeyValuePair<K, V>>) => void, scope?: any): void; /** * 获取包含 Map<K, V> 中的键列表。 * @returns Array */ keys(): Array<K>; /** * 获取包含 Map<K, V> 中的值列表。 * @returns Array */ values(): Array<V>; /** * 获取包含 Map<K, V> 中的成员列表。 * @returns Array */ entries(): Array<KeyValuePair<K, V>>; /** * 返回 Map<K, V> 的字符串表示形式。 * @override * @returns string */ toString(): string; } } declare namespace flagwind { /** * 标注当前类型是一个广播接收器。 * @param {string} uri 广播描述符。 * @param {number} priority? 广播优先级。 */ function receivable(uri: string, priority?: number): (receiverType: Function) => void; } declare namespace flagwind { /** * 广播接收器接口。 * @interface * @version 1.0.0 */ interface IBroadcastReceiver { /** * 当接收到广播时调用的方法。 * @param {BroadcastContext} context 广播上下文实例。 * @returns void */ receive(context: BroadcastContext): void; } } declare namespace flagwind { /** * 定义用于检索广播接收器对象的机制。 * @interface * @version 1.0.0 */ interface IBroadcastReceiverProvider { /*** * 清除所有注册信息 */ clear(): void; /** * 是否存在该uri的注册的接收器 * @param uri 广播契约uri */ has(uri: string): boolean; /** * 注册一个广播接收器至容器中。 * @param {BroadcastContract} contract 广播契约。 * @param {IBroadcastReceiver} receiver 广播接收器。 * @returns void */ register(contract: BroadcastContract, receiver: IBroadcastReceiver): void; /** * 移除指定契约的广播接收器。 * @param {BroadcastContract} contract 广播契约。 * @returns void */ unregister(contract: BroadcastContract): void; /** * 根据指定广播实例获取所有广播接收器实例。 * @param {Broadcast} broadcast 广播实例。 * @returns IEnumerable<IBroadcastReceiver> */ resolve(broadcast: Broadcast): IEnumerable<IBroadcastReceiver>; } } declare namespace flagwind { /** * 表示一个默认的枚举器。 * @class * @version 1.0.0 */ class Enumerator<T> implements IEnumerator<T> { private _items; private _current; private _index; /** * 获取当前遍历的值。 * @summary 如果已经遍历结束,则返回 undefined。 * @property * @returns T */ get current(): T; /** * 初始化 Enumerator<T> 类的新实例。 * @constructor * @param {Array<T>} items 要枚举的元素。 */ constructor(items: Array<T>); /** * 将枚举数推进到集合的下一个元素。 * @returns boolean 如果枚举数已成功地推进到下一个元素,则为 true;如果枚举数传递到集合的末尾,则为 false。 */ next(): boolean; } } declare namespace flagwind { /** * 表示实现该接口的是一个可枚举的类型。 * @interface * @version 1.0.0 */ interface IEnumerable<T> { /** * 返回一个循环访问集合的枚举器。 * @returns IEnumerator */ getEnumerator(): IEnumerator<T>; /** * 对 IEnumerable<T> 进行迭代处理。 * @param {Function} callback 每次迭代中执行的回掉函数,当前迭代项将传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (item: T, source: IEnumerable<T>) => void, scope?: any): void; } } declare namespace flagwind { /** * 支持对泛型集合的简单迭代。 * @interface * @version 1.0.0 */ interface IEnumerator<T> { /** * 获取当前遍历的值。 * @summary 如果已经遍历结束,则返回 undefined。 * @property * @returns T */ current: T; /** * 将枚举数推进到集合的下一个元素。 * @returns boolean 如果枚举数已成功地推进到下一个元素,则为 true;如果枚举数传递到集合的末尾,则为 false。 */ next(): boolean; } } declare namespace flagwind { /** * 表示一个用于存储键值对的数据结构。 * @interface * @description IMap 类似于对象,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 * @version 1.0.0 */ interface IMap<K, V> extends IEnumerable<KeyValuePair<K, V>> { /** * 获取 IMap<K, V> 中实际包含的成员总数。 * @property * @returns number */ size: number; /** * 设置键名 key 对应的键值为 value,然后返回整个 IMap<K, V> 结构。 * 如果 key 已经有值,则键值会被更新,否则就新生成该键。 * @param {K} key 键。 * @param {V} value 值。 * @returns void */ set(key: K, value: V): IMap<K, V>; /** * 读取 key 对应的键值,如果找不到 key,返回 undefined。 * @param {K} key 键。 * @returns V */ get(key: K): V; /** * 确定 IMap<K, V> 是否包含指定的键。 * @param {K} key 键。 * @returns boolean 如果 Map<K, V> 包含具有指定键的成员,则为 true;否则为 false。 */ has(key: K): boolean; /** * 从 IMap<K, V> 中删除指定的键对应的项。 * @param {K} key 键。 * @returns boolean 如果成功找到并移除该项,则为 true;否则为 false。 */ delete(key: K): boolean; /** * 清除所有键和值。 * @returns void */ clear(): void; /** * 获取包含 IMap<K, V> 中的键列表。 * @returns Array */ keys(): Array<K>; /** * 获取包含 IMap<K, V> 中的值列表。 * @returns Array */ values(): Array<V>; /** * 获取包含 IMap<K, V> 中的成员列表。 * @returns Array */ entries(): Array<KeyValuePair<K, V>>; /** * 返回一个循环访问集合的枚举器。 * @returns IEnumerator */ getEnumerator(): IEnumerator<KeyValuePair<K, V>>; /** * 对 IEnumerable<T> 进行迭代处理。 * @param {Function} callback 每次迭代中执行的回掉函数,当前迭代项将传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (item: KeyValuePair<K, V>, source: IEnumerable<KeyValuePair<K, V>>) => void, scope?: any): void; } } declare namespace flagwind { /** * 表示一个强类型列表。提供用于对列表进行搜索、排序和操作的方法。 * @interface * @description ISet<T> 接受 null 作为引用类型的有效值,但是不允许有重复的元素。 * @version 1.0.0 */ interface ISet<T> extends IEnumerable<T> { /** * 获取 ISet<T> 中实际包含的元素总数。 * @property * @returns number */ size: number; /** * 将元素添加到 ISet<T> 的结尾处。 * @param {Array<T>} ...values 要添加到 ISet<T> 末尾处的元素。 * @returns Set */ add(...values: Array<T>): ISet<T>; /** * 获取指定索引处的元素。 * @param {number} index 要获得或设置的元素从零开始的索引。 * @returns T 指定索引处的元素。 */ get(index: number): T; /** * 设置指定索引处的元素。 * @param {number} index 设置的元素从零开始的索引。 * @param {T} value 元素值。 * @returns void */ set(index: number, value: T): void; /** * 从 ISet<T> 中移除特定元素的匹配项。 * @param {T} value 要从 ISet<T> 中移除的元素。 * @returns boolean 如果成功移除 value,则为 true;否则为 false。如果在 ISet<T> 中没有找到 value,该方法也会返回 false。 */ delete(value: T): boolean; /** * 移除 ISet<T> 的指定索引处的元素。 * @param {number} index 要移除的元素的从零开始的索引。 * @returns void */ deleteAt(index: number): void; /** * 从 ISet<T> 中移除所有元素。 * @returns void */ clear(): void; /** * 搜索指定的元素,并返回整个 ISet<T> 中第一个匹配项的从零开始的索引。 * @param {T} value 要在 ISet<T> 中定位的元素。对于引用类型,该值可以为 null。 * @param {number} index? 从零开始的搜索的起始索引。 * @returns number 如果在整个 ISet<T> 中找到 value 的第一个匹配项,则为该项的从零开始的索引;否则为 -1。 */ indexOf(value: T, index?: number): number; /** * 确定某元素是否在 ISet<T> 中。 * @param {T} value 要在 ISet<T> 中定位的元素。对于引用类型,该值可以为 null。 * @returns boolean 如果在 ISet<T> 中找到 value,则为 true,否则为 false。 */ has(value: T): boolean; /** * 返回一个循环访问集合的枚举器。 * @returns IEnumerator */ getEnumerator(): IEnumerator<T>; /** * 对 IEnumerable<T> 进行迭代处理。 * @param {(item:T,source:IEnumerable<T>)=>void} callback 每次迭代中执行的回掉函数,当前迭代项将传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (item: T, source: IEnumerable<T>) => void, scope?: any): void; /** * 对 ISet<T> 进行迭代处理。 * @param {(value:T,index:number,set:ISet<T>)=>void} callback 每次迭代中执行的回掉函数,当前迭代项及它的索引号将被作为参数传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (value: T, index: number, set: ISet<T>) => void, scope?: any): void; /** * 搜索与指定谓词所定义的条件相匹配的元素,并返回 ISet<T> 中第一个匹配元素。 * @param {(value:T,index:number,set:ISet<T>)=>boolean} callback 定义要搜索的元素的条件。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns T */ find(callback: (value: T, index: number, set: ISet<T>) => boolean, scope?: any): T; /** * 使用指定的比较器对整个 ISet<T> 中的元素进行排序。 * @param {(a:T,b:T)=>number} comparer? 比较元素时要使用的比较器函数。 * @returns void */ sort(comparer?: (a: T, b: T) => number): void; /** * 将指定的 ISet<T> 合并到当前 ISet<T> 中。 * @param {ISet<T>} second 需要合并的数据源。 * @returns ISet */ union(source: ISet<T>): ISet<T>; /** * 获取包含 ISet<T> 中的值列表。 * @returns Array */ values(): Array<T>; } } declare namespace flagwind { /** * 定义可设置或检索的键/值对。 * @class * @version 1.0.0 */ class KeyValuePair<K, V> { private _key; private _value; /** * 获取键/值对中的键。 * @property * @returns K */ get key(): K; /** * 获取键/值对中的值。 * @property * @returns V */ get value(): V; /** * 初始化 KeyValuePair<K, V> 类的新实例。 * @param {K} key 每个键/值对中定义的对象。 * @param {V} value 与 key 相关联的定义。 */ constructor(key: K, value: V); /** * 使用键和值的字符串表示形式返回 KeyValuePair<K, V> 的字符串表示形式。 * @override * @returns string */ toString(): string; } } declare namespace flagwind { /** * 表示一个强类型列表。提供用于对列表进行搜索、排序和操作的方法。 * @class * @description Set<T> 接受 null 作为引用类型的有效值,但是不允许有重复的元素。 * @version 1.0.0 */ class Set<T> implements ISet<T> { private _values; /** * 获取 Set<T> 中实际包含的元素总数。 * @property * @returns number */ get size(): number; /** * 初始化 Set<T> 的新实例。 * @param {Array<T>} ...values */ constructor(...values: Array<T>); /** * 将元素添加到 Set<T> 的结尾处。 * @param {T[]} ...values 要添加到 Set<T> 末尾处的元素。 * @returns Set */ add(...values: Array<T>): Set<T>; /** * 获取指定索引处的元素。 * @param {number} index 要获得或设置的元素从零开始的索引。 * @returns T 指定索引处的元素。 */ get(index: number): T; /** * 设置指定索引处的元素。 * @param {number} index 设置的元素从零开始的索引。 * @param {T} value 元素值。 * @returns void */ set(index: number, value: T): void; /** * 从 Set<T> 中移除特定元素的匹配项。 * @param {T} value 要从 Set<T> 中移除的元素。 * @returns boolean 如果成功移除 value,则为 true;否则为 false。如果在 Set<T> 中没有找到 value,该方法也会返回 false。 */ delete(value: T): boolean; /** * 移除 Set<T> 的指定索引处的元素。 * @param {number} index 要移除的元素的从零开始的索引。 * @returns void */ deleteAt(index: number): void; /** * 从 Set<T> 中移除所有元素。 * @returns void */ clear(): void; /** * 搜索指定的元素,并返回整个 Set<T> 中第一个匹配项的从零开始的索引。 * @param {T} value 要在 Set<T> 中定位的元素。对于引用类型,该值可以为 null。 * @param {number} index? 从零开始的搜索的起始索引。 * @returns number 如果在整个 Set<T> 中找到 value 的第一个匹配项,则为该项的从零开始的索引;否则为 -1。 */ indexOf(value: T, index?: number): number; /** * 确定某元素是否在 Set<T> 中。 * @param {T} value 要在 Set<T> 中定位的元素。对于引用类型,该值可以为 null。 * @returns boolean 如果在 Set<T> 中找到 value,则为 true,否则为 false。 */ has(value: T): boolean; /** * 返回一个循环访问集合的枚举器。 * @returns IEnumerator */ getEnumerator(): IEnumerator<T>; /** * 对 Set<T> 进行迭代处理。 * @param {(item:T,index:number,set:Set<T>)=>void} callback 每次迭代中执行的回掉函数,当前迭代项及它的索引号将被作为参数传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (item: T, index: number, set: Set<T>) => void, scope?: any): void; /** * 对 IEnumerable<T> 进行迭代处理。 * @param {(value:T,source:IEnumerable<T>)=>void} callback 每次迭代中执行的回掉函数,当前迭代项将传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (value: T, source: IEnumerable<T>) => void, scope?: any): void; /** * 搜索与指定谓词所定义的条件相匹配的元素,并返回 Set<T> 中第一个匹配元素。 * @param {Function} callback 定义要搜索的元素的条件。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns T */ find(callback: (value: T, index: number, set: Set<T>) => boolean, scope?: any): T; /** * 使用指定的比较器对整个 Set<T> 中的元素进行排序。 * @param {Function} comparer? 比较元素时要使用的比较器函数。 * @returns void */ sort(comparer?: (a: T, b: T) => number): void; /** * 将指定的 ISet<T> 合并到当前 ISet<T> 中。 * @param {ISet<T>} second 需要合并的数据源。 * @returns ISet */ union(source: ISet<T>): ISet<T>; /** * 获取包含 Set<T> 中的值列表。 * @returns Array */ values(): Array<T>; /** * 返回 Set<T> 的字符串表示形式。 * @override * @returns string */ toString(): string; } } declare namespace flagwind { /** * 提供实现 ICommand 接口功能的基类。 * @abstract * @class * @description 建议需要完成 ICommand 接口功能的实现者从此类继承。 * @version 1.0.0 */ abstract class CommandBase<TContext extends CommandContext> implements ICommand { private _name; private _enabled; /** * 获取或设置命令的名称。 * @property * @returns string */ get name(): string; set name(value: string); /** * 获取或设置当前命令是否可用。 * @summary 该属性作为当前命令是否可被执行的备选方案,命令是否可被执行由 canExecute 方法决定,该方法的不同实现方式可能导致不同的判断逻辑。 * 有关默认的判断逻辑请参考 canExecute 方法的帮助。 * @property * @returns boolean */ get enabled(): boolean; set enabled(value: boolean); /** * 初始化命令的新实例。 * @param {string} name 命令名称。 * @param {boolean} enabled 是否启用。 */ constructor(name?: string, enabled?: boolean); /** * 判断当前命令能否依据给定的选项和参数执行。 * @virtual * @param {any} context 判断命令能否执行的上下文对象。 * @returns boolean 返回能否执行的结果。 */ canExecute(context: TContext): boolean; /** * 执行命令。 * @summary 对实现着的要求:应该在本方法的实现中首先调用 canExecute 方法,以确保阻止非法的调用。 * @virtual * @async * @param {any} context 执行命令的上下文对象。 * @returns any 返回执行的返回结果。 */ execute(context: TContext): Promise<any>; /** * 当执行命令时调用。 * @protected * @abstract * @async * @param {TContext} context 执行命令的上下文对象。 * @returns any 执行的返回结果。 */ protected abstract onExecute(context: TContext): Promise<any>; } } declare namespace flagwind { /** * 表示一个命令容器,用户存储命令使用。 * @class * @description 该类为临时过度方案,后续将会替换为命令树的形式进行存储。 * @version 1.0.0 */ class CommandCollection implements IEnumerable<KeyValuePair<string, ICommand>> { private _items; /** * 获取命令的总数量。 * @property * @returns number */ get size(): number; /** * 初始化命令容器的新实例。 * @constructor */ constructor(); /** * 将一个命令实例挂载至指定的的路径。 * @summary 如果指定的路径已存在命令将会抛出异常。 * @param {string} path 路径字符串。 * @param {ICommand} command 命令。 * @returns void */ add(path: string, command: ICommand): void; /** * 移除指定路径的命令。 * @param {string} path 路径字符串。 * @returns boolean */ remove(path: string): boolean; /** * 根据指定的路径获取一个命令。 * @param {string} path 路径字符串。 * @returns string */ find(path: string): ICommand; /** * 检测是否包含指定的路径的命令。 * @param {string} path * @returns boolean */ contains(path: string): boolean; /** * 返回一个循环访问集合的枚举器。 * @returns IEnumerator */ getEnumerator(): IEnumerator<KeyValuePair<string, ICommand>>; /** * 对 IEnumerable<T> 进行迭代处理。 * @param {Function} callback 每次迭代中执行的回掉函数,当前迭代项将传入该函数。 * @param {any} scope? 回掉函数中 this 所引用的对象。 * @returns void */ forEach(callback: (item: KeyValuePair<string, ICommand>, source: IEnumerable<KeyValuePair<string, ICommand>>) => void, scope?: any): void; } } declare namespace flagwind { /** * 命令在执行器过程中使用的上下文参数。 * @class * @version 1.0.0 */ class CommandContext { private _executor; private _expression; private _command; private _parameter; private _extendedProperties; /** * 获取命令所在的命令执行器。 * @property * @returns ICommandExecutor */ get executor(): ICommandExecutor; /** * 获取当前命令对应的表达式。 * @property * @returns CommandExpression */ get expression(): CommandExpression; /** * 获取执行的命令对象。 * @property * @returns ICommand */ get command(): ICommand; /** * 获取命令执行的传入参数。 * @property * @returns any */ get parameter(): any; /** * 获取扩展属性集是否有内容。 * 在不确定扩展属性集是否含有内容之前,建议先使用该属性来检测。 * @property * @returns boolean */ get hasExtendedProperties(): boolean; /** * 获取可用于在本次执行过程中在各处理模块之间组织和共享数据的键/值集合。 * @property * @returns Map */ get extendedProperties(): Map<string, any>; /** * 初始化执行命令上下文的新实例。 * @constructor * @param {ICommandExecutor} executor 执行命令所在的命令执行器。 * @param {CommandExpression} expression 命令对应的表达式。 * @param {ICommand} command 执行的命令对象。 * @param {any} parameter 命令执行的传入参数。 * @param {Map} extendedProperties 在本次执行过程中在各处理模块之间组织和共享数据的键/值集合。 */ constructor(executor: ICommandExecutor, expression: CommandExpression, command: ICommand, parameter: any, extendedProperties?: Map<string, any>); } } declare namespace flagwind { /** * 提供命令注册与执行的实现。 * @class * @version 1.0.0 */ class CommandExecutor implements ICommandExecutor { private _commands; private _parser; private static _default; /** * 获取或设置默认的命令执行器。 * @static * @property * @returns CommandExecutor */ static get default(): CommandExecutor; /** * 获取或设置默认的命令执行器。 * @static * @property * @param {CommandExecutor} value */ static set default(value: CommandExecutor); /** * 初始化命令执行器的新实例。 * @constructor */ constructor(parser?: ICommandExpressionParser); /** * 注册一个命令。 * 注意: 如果路径已存在,则会抛出一个异常。 * @param {string} path 命令路径。 * @param {ICommand} command 命令实例。 * @returns void */ register(path: string, command: ICommand): void; /** * 移除指定路径的命令。 * @param {string} path * @returns boolean */ remove(path: string): boolean; /** * 查找指定路径的命令。 * @param {string} path 路径字符串。 * @returns ICommand */ find(path: string): ICommand; /** * 执行命令。 * @summary 暂不支持表达式,commandText 仅为命令路径。 * @async * @param {string} commandText 指定要执行的命令表达式文本。 * @param {any} parameter 指定的输入参数。 * @returns any 返回命令执行的结果。 */ execute(commandText: string, parameter?: any): Promise<any>; /** * 当执行命令时调用。 * @async * @param {CommandExecutorContext} context 命令执行上下文。 * @returns any */ protected onExecute(context: CommandExecutorContext): Promise<any>; /** * 执行命令。 * @protected * @virtual * @async * @param {CommandExecutorContext} context * @param {CommandExpression} expression * @param {ICommand} command * @param {any} parameter * @returns any */ protected executeCommand(context: CommandExecutorContext, expression: CommandExpression, command: ICommand, parameter: any): Promise<any>; /** * 创建命令执行上下文实例。 * @protected * @virtual * @param {string} commandText * @param {any} parameter * @returns CommandExecutorContext */ protected createExecutorContext(commandText: string, parameter: any): CommandExecutorContext; /** * 创建命令上下文实例。 * @protected * @virtual * @param {CommandExpression} expression * @param {ICommand} command * @param {any} parameter * @returns CommandContext */ protected createCommandContext(expression: CommandExpression, command: ICommand, parameter: any): CommandContext; /** * 当解析命令表达式时调用。 * @protected * @virtual * @param {string} text * @returns CommandExpression */ protected onParse(text: string): CommandExpression; } } declare namespace flagwind { /** * 表示命令执行器在执行命令时产生的上下文。 * @class * @version 1.0.0 */ class CommandExecutorContext { private _executor; private _expression; private _parameter; /** * 获取当前命令执行器对象。 * @property * @returns ICommandExecutor */ get executor(): ICommandExecutor; /** * 获取当前命令执行器的命令表达式。 * @property * @returns CommandExpression */ get expression(): CommandExpression; /** * 获取从命令执行器传入的参数值。 * @property * @returns any */ get parameter(): any; /** * 初始化命令执行器上下文的新实例。 * @constructor * @param {ICommandExecutor} executor 当前命令执行器对象。 * @param {CommandExpression} expression 当前命令执行器的命令表达式。 * @param {any} parameter 从命令执行器传入的参数。 */ constructor(executor: ICommandExecutor, expression: CommandExpression, parameter: any); } } declare namespace flagwind { /** * 命令表达式类,提供命令的名称路径与参数选项等信息。 * @class * @version 1.0.0 */ class CommandExpression { private _name; private _path; private _fullPath; private _anchor; private _options; private _arguments; private _next; /** * 获取命令名称。 * @property * @returns string */ get name(): string; /** * 获取命令的路径(不包含名称)。 * @property * @returns string */ get path(): string; /** * 获取命令的完整路径(包含名称)。 * @property * @returns string */ get fullPath(): string; /** * 获取命令的锚定点。 * @property * @returns PathAnchor */ get anchor(): PathAnchor; /** * 获取命令的所有选项。 * @property * @returns CommandOptionCollection */ get options(): CommandOptionCollection; /** * 获取命令的所有参数。 * @property * @returns string */ get arguments(): Array<string>; /** * 获取获设置当前命令的下一个串联命令表达式。 * @property * @returns CommandExpr