UNPKG

@lonu/stc

Version:

A tool for converting OpenApi/Swagger/Apifox into code.

67 lines (66 loc) 2.82 kB
import Logs from "../console.js"; import { getT } from "../i18n/index.js"; import { TypeScriptPlugin } from "./typescript/index.js"; import { JavaScriptPlugin } from "./javascript/index.js"; import { DartPlugin } from "./dart/index.js"; import { setupTemplate, validTemplate } from "./common.js"; // import { SwiftPlugin } from "./swift/index.ts"; export class PluginManager { constructor() { Object.defineProperty(this, "plugins", { enumerable: true, configurable: true, writable: true, value: [ TypeScriptPlugin, JavaScriptPlugin, DartPlugin, // SwiftPlugin, ] }); } register(plugin) { this.plugins = [ ...this.plugins, ...(Array.isArray(plugin) ? plugin : [plugin]), ]; } async setupAll(context) { const _options = context.options; for (const plugin of this.plugins) { // 加载指定 lang 的插件 const _langs = Array.isArray(plugin.lang) ? plugin.lang : [plugin.lang]; if (!_langs.includes(_options.lang ?? "")) { continue; } Logs.info(getT("$t(plugin.name)", { name: plugin.name })); if (!plugin.setup) { Logs.warn(getT("$t(plugin.noSetupMethod)", { name: plugin.name })); continue; } // 执行插件 setup 方法 const pluginSetup = await plugin.setup(context); context.options.unknownType = pluginSetup.unknownType; context.options.typeMap = pluginSetup.typeMap; context.options.template = pluginSetup.template; context.options.langDirectoryName = pluginSetup.langDirectoryName; context.options.templatePath = pluginSetup.templatePath; validTemplate(pluginSetup.template); setupTemplate(context.options, { langDirectoryName: pluginSetup.langDirectoryName, path: pluginSetup.templatePath, }); // 触发插件 onload 事件 context.onLoad = (data) => plugin.onLoad?.(data, context.options); // 触发插件 onDefinition 事件 context.onDefinition = (data) => plugin.onDefinition?.(data, context.options); // 触发插件 onAction 事件 context.onAction = (data) => plugin.onAction?.(data, context.options); // 触发插件 onTransform 事件 context.onTransform = (def, action) => plugin.onTransform?.(def, action, context.options); // 触发插件 onEnd 事件 context.onEnd = () => plugin.onEnd?.(context.options); } Logs.info(getT("$t(plugin.allSetupDone)")); } }