public async initPlugin()

in packages/core/src/Service.ts [169:198]


  public async initPlugin(plugin: BreezrPlugin, args?: CommandArgs) {
    const { id, pluginEntry } = plugin;

    if (this._pluginStateMap.get(id) === PluginState.INITED) {
      return;
    }

    if (this._pluginStateMap.get(id) === PluginState.INITING) {
      error(`can't not circular refer in plugin: ${id}`);
      exit(0);
    }

    this._pluginStateMap.set(id, PluginState.INITING);

    // resolve dependencies
    try {
      const pkg = require(path.join(id, 'package.json'));
      const depsPlugins = resolvePluginsFromPkg(pkg);

      for (const dep of depsPlugins) {
        await this.initPlugin(dep, args);
      }
    } catch (e) {
      // throw e;
    }

    await pluginEntry(new PluginAPI(id, this), this.loadPluginOptions(id) || {}, args);

    this._pluginStateMap.set(id, PluginState.INITED);
  }