UNPKG

@zero-scripts/core

Version:

Framework for creating presets, configurations and extensions

47 lines 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbstractPreset = void 0; const packageIsExtension_1 = require("./packageIsExtension"); const ScriptsMap_1 = require("./ScriptsMap"); const getBaseClass_1 = require("./utils/getBaseClass"); const readPackageJson_1 = require("./utils/readPackageJson"); class AbstractPreset { constructor(standardExtensions = []) { this.standardExtensions = standardExtensions; this.scripts = new ScriptsMap_1.ScriptsMap(); this.instances = new Map(); this.extensions = []; Object.keys(readPackageJson_1.readPackageJson(data => data.devDependencies)) .filter(packageIsExtension_1.packageIsExtension) .concat(standardExtensions) .map((packageName) => { const ExtensionClass = require(packageName).default; return new ExtensionClass(); }) .forEach(extension => { const newBaseClass = getBaseClass_1.getBaseClass(extension.constructor, 1); if (newBaseClass) { const conflictExtension = this.extensions.find(ext => { const iterableBaseClass = getBaseClass_1.getBaseClass(ext.constructor, 1); return (ext.constructor.name === extension.constructor.name || (iterableBaseClass !== undefined && newBaseClass.name === iterableBaseClass.name)); }); if (conflictExtension) { throw new Error(`Extensions conflict. Check devDependencies and choose one between: ${extension.constructor.name} or ${conflictExtension.constructor.name}`); } } extension.activate(this); this.extensions.push(extension); }); } getInstance(Class) { const className = Class.name; if (!this.instances.get(className)) { this.instances.set(className, new Class()); } return this.instances.get(className); } } exports.AbstractPreset = AbstractPreset; //# sourceMappingURL=AbstractPreset.js.map