1.0.3 • Published 5 years ago
@irim/ds-core v1.0.3
DS-CORE
快速使用
安装
$ npm install --save @irim/ds-coreimport { Core, Plugin, createApplyChain, uuid, random } from '@irim/ds-core';Core
DS 核心引擎,用于注册插件、处理事件等 (继承自 Events )
const ds = new Core();
// 修改配置项
ds.setConfig({
  pluginA: { foo: 'bar' }, // 用于 pluginA 的初始化参数
});
// 注册插件,初始化后会执行插件的 init 方法
//     注册成功后,可用 ds.pluginA 的方式获取到插件实例
ds.register('pluginA', PluginA, {
  goo: 1001, // 实际初始化的参数是此参数与 config.pluginA 的合并数据
});
// 卸载插件,会执行插件的 destroy 方法
ds.unregister('pluginA');事件相关的接口请参考 Events 文档
Plugin
基础插件类,所有 ds 插件必须继承此类,不能直接用 new 的方式初始化;Plugin 继承自 Events,同样包含事件能力。
需要重写的抽象方法:
- init() 在插件注册时会被调用
- destroy() 在插件卸载前会被调用
// 向调用链添加一个中间件
ds.pluginA.use(async ctx => {
  console.log('before...');
  ctx.next();
  console.log('after...');
});
// 创建并执行调用链
ds.pluginA.run(options);工具类方法
- createApplyChain(middlewares: Function[], scope?: Object): Function创建一个调用链
scope 表示执行每个 middleware 的上下文
async function middlewareA(ctx) {
  console.log('---- 1');
  ctx.next();
  console.log('---- 4');
}
async function middlewareB(ctx) {
  console.log('---- 2');
  ctx.next();
  console.log('---- 3');
}
const invoke = createApplyChain([middlewareA, middlewareB]);
invoke(); // 打印顺序: 1, 2, 3, 4- random(min: number, max?: number): number返回- [min, max]的随机整数
- uuid(): string创建一个唯一的ID
- logger.{debug|error|warn|info|success|line}(...args): void控制台打印日志
logger.debug('Hello', 'Lilith');
logger.info('GET /api/todo', { message: 'say hello' });- batchExecSync(callbacks: Function[], args?: Array, scope?: object)批量同步执行方法
const callback1 = (data) => { return data.content };
const callback2 = (data) => { throw new Error('custom error') };
// [{ success: true, result: 'hello' }, { success: false, error: Error }]
const result = batchExecSync([callback1, callback2], [{ content: 'hello' }]);- batchExecAsync(callbacks: Function[], args?: Array, scope?: object)批量异步执行方法
const callback1 = (data) => { return Promise.resolve(data.content) };
const callback2 = (data) => { return Promise.reject(new Error('custom error')) };
// [{ success: true, result: 'hello' }, { success: false, error: Error }]
const result = await batchExecAsync([callback1, callback2], [{ content: 'hello' }]);定义一个插件
class PluginA extends Plugin {
  init() {
    this.registerMiddleware();
  }
  // 注册插件执行中间件
  registerMiddleware() {
    this.use(async ctx => {
      console.log('before');
      await ctx.next();
      console.log('after');
    });
    this.use(async ctx => {
      ctx.response = await request('/api/todo');
      await ctx.next();
    });
  }
  async getTodoList() {
    const { response } = await this.run();
    // ....
  }
}LICENSE
BSD-3-Clause License
1.0.3
5 years ago
1.0.2
5 years ago
1.0.1
6 years ago
1.0.0
6 years ago
1.0.0-beta.2
6 years ago
1.0.0-beta.1
6 years ago