@zero-scripts/core
Version:
Framework for creating presets, configurations and extensions
45 lines • 1.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AbstractConfigBuilder = void 0;
const cloneInstance_1 = require("./utils/cloneInstance");
class AbstractConfigBuilder {
constructor(optionsContainer) {
this.optionsContainer = optionsContainer;
this.modifications = [];
this._beforeBuild = [];
this._afterBuild = [];
}
build(createBaseConfig) {
this._beforeBuild.forEach(func => {
func(this);
});
const options = this.optionsContainer.build();
const config = createBaseConfig
? createBaseConfig(options)
: {};
const appliedModifications = [];
this.modifications.forEach(modifier => {
if (!modifier.id ||
!appliedModifications.some(appliedModifier => Boolean(appliedModifier.id) && appliedModifier.id === modifier.id)) {
appliedModifications.push(modifier.apply(config, options));
}
});
this._afterBuild.forEach(func => {
func(config);
});
return config;
}
beforeBuild(func) {
this._beforeBuild.push(func);
return this;
}
afterBuild(func) {
this._afterBuild.push(func);
return this;
}
clone() {
return cloneInstance_1.cloneInstance(this);
}
}
exports.AbstractConfigBuilder = AbstractConfigBuilder;
//# sourceMappingURL=AbstractConfigBuilder.js.map