@trackcity/managers
Version:
Managers Plugins that contains managers for trackcity cli
79 lines (60 loc) • 1.99 kB
JavaScript
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
}