@zero-scripts/core
Version:
Framework for creating presets, configurations and extensions
47 lines • 2.19 kB
JavaScript
;
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