UNPKG

@trackcity/managers

Version:

Managers Plugins that contains managers for trackcity cli

79 lines (60 loc) 1.99 kB
const { Collection } = require("@trackcity/collections"); const { TrackcityPlugin } = require("@trackcity/plugins"); const { readdirSync, readFileSync, existsSync } = require("fs"); const globalDirectories = require("global-dirs"); const path = require("path"); class WorkspaceManager { constructor() { this.initTypes = new Collection(); } getInitTypes() { return this.initTypes; } addInitCreationType(type) { this.initTypes.set(type.name, type); } removeInitCreationType(type) { if (typeof type === "string") { this.initTypes.remove(type); } else { this.initTypes.remove(type.name); } } } class PluginsManager { constructor() { this.pluginsCollection = new Collection(); } loadPlugins(workspace) { let r = readdirSync(globalDirectories.npm.packages).filter((pkg) => pkg.startsWith('trackcity_')); for (let pkg of r) { let p = path.join(globalDirectories.npm.packages, pkg) if (!existsSync(path.join(p, "npm.trackcity.json"))) continue; let trackcity = JSON.parse(readFileSync(path.join(p, "npm.trackcity.json"), "utf-8")); let name = trackcity["name"]; let main = trackcity["main"]; if (!name || !main) continue; let r = require(path.join(p, main)); let fx = new r(); fx.init(trackcity, workspace); this.registerPlugin(fx); } } /** * * @param {TrackcityPlugin} plugin */ registerPlugin(plugin) { this.pluginsCollection.set(plugin.getPluginData().name, plugin); } getPlugin(plugin) { return this.pluginsCollection.get(plugin); } getPlugins() { return this.pluginsCollection; } } module.exports = { WorkspaceManager, PluginsManager }