floating-live 0.16.0-alpha.3 → 0.16.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/app.d.ts CHANGED
@@ -2,7 +2,7 @@ import { CommandOptions, CommandCallOptions, AppCommandMap, CommandFunction } fr
2
2
  import { AppError } from "./error";
3
3
  import { AppEventDetailMap, AppEventEmitOptions, AppEventListener } from "./event";
4
4
  import { AppHookMap, HookCallOptions, HookContext, HookFunction, HookUseOptions } from "./hook";
5
- import { PluginContext, PluginRegisterOptions } from "./plugin";
5
+ import { PluginContext, PluginInitOptions } from "./plugin";
6
6
  import { CustomEventEmitter } from "./utils/EventEmitter";
7
7
  import { AppValueMap, ValueOptions } from "./value";
8
8
  export declare class App extends CustomEventEmitter implements PluginContext {
@@ -10,16 +10,17 @@ export declare class App extends CustomEventEmitter implements PluginContext {
10
10
  private pluginManager;
11
11
  private commandManager;
12
12
  private valueManager;
13
+ private abortController;
13
14
  constructor();
14
- on<K extends keyof AppEventDetailMap>(type: K, listener: AppEventListener<AppEventDetailMap[K]>): void;
15
- once<K extends keyof AppEventDetailMap>(type: K, listener: AppEventListener<AppEventDetailMap[K]>): void;
15
+ on<K extends keyof AppEventDetailMap>(type: K, listener: AppEventListener<AppEventDetailMap[K]>, signal?: AbortSignal): void;
16
+ once<K extends keyof AppEventDetailMap>(type: K, listener: AppEventListener<AppEventDetailMap[K]>, signal?: AbortSignal): void;
16
17
  off<K extends keyof AppEventDetailMap>(type: K, listener: AppEventListener<AppEventDetailMap[K]>): void;
17
18
  emit<K extends keyof AppEventDetailMap>(type: K, detail: AppEventDetailMap[K], options?: AppEventEmitOptions & EventInit): void;
18
19
  /** 发送错误 */
19
20
  throw(err?: Error): void;
20
21
  error(id: string, detail?: Record<string, any>): AppError;
21
22
  /** 注册插件 */
22
- register(plugin: any, options?: PluginRegisterOptions): void;
23
+ register(plugin: any, options?: PluginInitOptions): void;
23
24
  /** 取消注册插件 */
24
25
  unregister(pluginName: string): void;
25
26
  getPlugin(pluginName: string): void;
@@ -43,4 +44,5 @@ export declare class App extends CustomEventEmitter implements PluginContext {
43
44
  destroy(): void;
44
45
  /** 拓展值 */
45
46
  define(): void;
47
+ get signal(): AbortSignal;
46
48
  }
package/dist/app.js CHANGED
@@ -7,16 +7,17 @@ import { ValueManager } from "./value/manager";
7
7
  export class App extends CustomEventEmitter {
8
8
  constructor() {
9
9
  super();
10
+ this.abortController = new AbortController();
10
11
  this.hookManager = new HookManager(this);
11
12
  this.pluginManager = new PluginManager(this);
12
13
  this.commandManager = new CommandManager(this);
13
14
  this.valueManager = new ValueManager(this);
14
15
  }
15
- on(type, listener) {
16
- super.on(type, listener);
16
+ on(type, listener, signal = this.signal) {
17
+ super.on(type, listener, signal);
17
18
  }
18
- once(type, listener) {
19
- super.once(type, listener);
19
+ once(type, listener, signal = this.signal) {
20
+ super.once(type, listener, signal);
20
21
  }
21
22
  off(type, listener) {
22
23
  super.off(type, listener);
@@ -119,8 +120,13 @@ export class App extends CustomEventEmitter {
119
120
  setValue(name, value) {
120
121
  this.valueManager.set(name, value);
121
122
  }
122
- destroy() { }
123
+ destroy() {
124
+ this.abortController.abort();
125
+ }
123
126
  //--- 其他 ---//
124
127
  /** 拓展值 */
125
128
  define() { }
129
+ get signal() {
130
+ return this.abortController.signal;
131
+ }
126
132
  }
@@ -4,7 +4,7 @@ import { AppError, ErrorOptions } from "../../error";
4
4
  import { AppEventListener, AppEventEmitOptions, AppEventDetailMap } from "../../event";
5
5
  import { HookUseOptions, HookCallOptions, AppHookMap, HookFunction, HookContext } from "../../hook";
6
6
  import { AppValueMap, ValueOptions } from "../../value";
7
- import type { PluginContext, PluginConstructor, PluginRegisterOptions, AppPluginExposesMap } from "../types";
7
+ import type { PluginContext, PluginConstructor, PluginInitOptions, AppPluginExposesMap } from "../types";
8
8
  export declare class CommonPluginContext implements PluginContext {
9
9
  #private;
10
10
  get safe(): boolean;
@@ -18,7 +18,7 @@ export declare class CommonPluginContext implements PluginContext {
18
18
  */
19
19
  throw(err: AppError): void;
20
20
  error(id: string, options: ErrorOptions): AppError;
21
- register(plugin: PluginConstructor, options?: PluginRegisterOptions): void;
21
+ register(plugin: PluginConstructor, options?: PluginInitOptions): void;
22
22
  unregister(pluginName: string): void;
23
23
  getPluginExposes<K extends keyof AppPluginExposesMap>(pluginName: K): AppPluginExposesMap[K];
24
24
  whenRegister<T>(pluginName: string, callback: (exposes: any) => (() => void) | undefined): (() => void) | void;
@@ -42,4 +42,5 @@ export declare class CommonPluginContext implements PluginContext {
42
42
  getValue<K extends keyof AppValueMap>(name: K): undefined;
43
43
  setValue<K extends keyof AppValueMap>(name: K, value: AppValueMap[K]): void;
44
44
  destroy(): void;
45
+ get signal(): AbortSignal;
45
46
  }
@@ -9,7 +9,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
9
9
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10
10
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11
11
  };
12
- var _CommonPluginContext_app, _CommonPluginContext_registered;
12
+ var _CommonPluginContext_app, _CommonPluginContext_abortController, _CommonPluginContext_registered;
13
13
  import { AppError } from "../../error";
14
14
  class ListMap extends Map {
15
15
  addItem(key, value) {
@@ -35,6 +35,8 @@ export class CommonPluginContext {
35
35
  constructor(app, pluginName) {
36
36
  /** 主程序,插件不可访问 */
37
37
  _CommonPluginContext_app.set(this, void 0);
38
+ /** AbortController,插件不可访问 */
39
+ _CommonPluginContext_abortController.set(this, new AbortController());
38
40
  _CommonPluginContext_registered.set(this, {
39
41
  plugins: new Set(),
40
42
  values: new Set(),
@@ -262,12 +264,15 @@ export class CommonPluginContext {
262
264
  }
263
265
  }
264
266
  destroy() {
265
- const { plugins, events, values, hooks, commands } = __classPrivateFieldGet(this, _CommonPluginContext_registered, "f");
267
+ const { plugins, values, hooks, commands } = __classPrivateFieldGet(this, _CommonPluginContext_registered, "f");
266
268
  plugins.forEach((pluginName) => __classPrivateFieldGet(this, _CommonPluginContext_app, "f").unregister(pluginName));
267
- events.forEach((listenerList, eventName) => listenerList.forEach((listener) => __classPrivateFieldGet(this, _CommonPluginContext_app, "f").off(eventName, listener)));
268
269
  hooks.forEach((hookList, name) => hookList.forEach((hookFunc) => __classPrivateFieldGet(this, _CommonPluginContext_app, "f").off(name, hookFunc)));
269
270
  commands.forEach((name) => __classPrivateFieldGet(this, _CommonPluginContext_app, "f").unregisterCommand(name));
270
271
  values.forEach((name) => __classPrivateFieldGet(this, _CommonPluginContext_app, "f").unregisterValue(name));
272
+ __classPrivateFieldGet(this, _CommonPluginContext_abortController, "f").abort();
273
+ }
274
+ get signal() {
275
+ return __classPrivateFieldGet(this, _CommonPluginContext_abortController, "f").signal;
271
276
  }
272
277
  }
273
- _CommonPluginContext_app = new WeakMap(), _CommonPluginContext_registered = new WeakMap();
278
+ _CommonPluginContext_app = new WeakMap(), _CommonPluginContext_abortController = new WeakMap(), _CommonPluginContext_registered = new WeakMap();
@@ -2,7 +2,7 @@ import { App } from "../../app";
2
2
  import { AppCommandMap, CommandCallOptions, CommandFunction, CommandOptions } from "../../command";
3
3
  import { AppEventDetailMap, AppEventEmitOptions } from "../../event";
4
4
  import { AppHookMap, HookCallOptions, HookContext, HookFunction, HookUseOptions } from "../../hook";
5
- import { PluginConstructor, PluginRegisterOptions } from "../types";
5
+ import { PluginConstructor, PluginInitOptions } from "../types";
6
6
  import { CommonPluginContext } from "./CommonPluginContext";
7
7
  export interface PluginPermissions {
8
8
  "plugin.register"?: boolean;
@@ -22,7 +22,7 @@ export declare class SafePluginContext extends CommonPluginContext {
22
22
  permissions: PluginPermissions;
23
23
  });
24
24
  private throwNotPermitted;
25
- register(plugin: PluginConstructor, options?: PluginRegisterOptions): void;
25
+ register(plugin: PluginConstructor, options?: PluginInitOptions): void;
26
26
  unregister(pluginName: string): void;
27
27
  emit<K extends keyof AppEventDetailMap>(type: K, detail: AppEventDetailMap[K], options?: AppEventEmitOptions & EventInit): void;
28
28
  call<T extends keyof AppCommandMap>(name: T, ...args: Parameters<AppCommandMap[T]>): ReturnType<AppCommandMap[T]>;
@@ -38,8 +38,8 @@ export class PluginManager {
38
38
  return;
39
39
  // 执行插件函数
40
40
  const plugin = new pluginConstructor(pluginCtx, registerCtx.options || {});
41
- // 调用插件的register钩子
42
- await plugin.register?.(pluginCtx, registerCtx.options || {});
41
+ // 调用插件的init钩子
42
+ await plugin.init?.(pluginCtx, registerCtx.options || {});
43
43
  // 调用插件的expose钩子
44
44
  const exposes = await plugin.expose?.(pluginCtx);
45
45
  this.list.set(pluginName, { plugin, context: pluginCtx, exposes });
@@ -6,7 +6,7 @@ import { AppValueMap, ValueOptions } from "../value";
6
6
  /** 插件对象 */
7
7
  export interface PluginItem {
8
8
  pluginName: string;
9
- register?(ctx: PluginContext, options?: Record<string, any>): void | Promise<void>;
9
+ init?(ctx: PluginContext, options?: Record<string, any>): void | Promise<void>;
10
10
  destroy?(ctx: PluginContext): void | Promise<void>;
11
11
  expose?(ctx: PluginContext): any;
12
12
  }
@@ -15,8 +15,8 @@ export interface PluginConstructor {
15
15
  pluginName: string;
16
16
  new (ctx: PluginContext, options: any): PluginItem;
17
17
  }
18
- /** 插件注册选项 */
19
- export interface PluginRegisterOptions {
18
+ /** 插件初始化选项 */
19
+ export interface PluginInitOptions {
20
20
  }
21
21
  /** 插件上下文 */
22
22
  export interface PluginContext {
@@ -33,7 +33,7 @@ export interface PluginContext {
33
33
  /** 生成错误 */
34
34
  error(id: string, options: ErrorOptions): AppError;
35
35
  /** 注册插件 */
36
- register(plugin: PluginConstructor, options?: PluginRegisterOptions): void;
36
+ register(plugin: PluginConstructor, options?: PluginInitOptions): void;
37
37
  /** 取消注册插件 */
38
38
  unregister(pluginName: string): void;
39
39
  /** 获取插件暴露对象 */
@@ -71,6 +71,7 @@ export interface PluginContext {
71
71
  /** 设置值 */
72
72
  setValue<K extends keyof AppValueMap>(name: K, value: AppValueMap[K]): void;
73
73
  destroy(): void;
74
+ get signal(): AbortSignal;
74
75
  }
75
76
  export interface AppPluginExposesMap {
76
77
  "": {};
@@ -1,6 +1,6 @@
1
1
  export declare class CustomEventEmitter extends EventTarget {
2
- on(type: string, listener: (e: any) => void): void;
3
- once(type: string, listener: (e: any) => void): void;
2
+ on(type: string, listener: (e: any) => void, signal?: AbortSignal): void;
3
+ once(type: string, listener: (e: any) => void, signal?: AbortSignal): void;
4
4
  off(type: string, listener: (e: any) => void): void;
5
5
  emit(type: string, detail: any, options?: EventInit): void;
6
6
  }
@@ -10,11 +10,11 @@ function getListenerCallback(listener) {
10
10
  return newItem;
11
11
  }
12
12
  export class CustomEventEmitter extends EventTarget {
13
- on(type, listener) {
14
- this.addEventListener(type, getListenerCallback(listener));
13
+ on(type, listener, signal) {
14
+ this.addEventListener(type, getListenerCallback(listener), { signal });
15
15
  }
16
- once(type, listener) {
17
- this.addEventListener(type, getListenerCallback(listener), { once: true });
16
+ once(type, listener, signal) {
17
+ this.addEventListener(type, getListenerCallback(listener), { once: true, signal });
18
18
  }
19
19
  off(type, listener) {
20
20
  this.removeEventListener(type, getListenerCallback(listener));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "floating-live",
3
- "version": "0.16.0-alpha.3",
3
+ "version": "0.16.0-alpha.5",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",