@snipsonian/core
Version:
Core/base reusable javascript code snippets
30 lines (29 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const isArray_1 = require("../../is/isArray");
const isUndefined_1 = require("../../is/isUndefined");
function builder({ initialBuildParams = {}, buildStateName = '_builder', } = {}) {
return function decorate(target) {
if ((0, isArray_1.default)(target)) {
return target.map((entity) => enrichToBeBuilder(entity, { initialBuildParams, buildStateName }));
}
return enrichToBeBuilder(target, { initialBuildParams, buildStateName });
};
}
exports.default = builder;
function enrichToBeBuilder(target, { initialBuildParams, buildStateName }) {
const enrichedTarget = target;
if ((0, isUndefined_1.default)(enrichedTarget[buildStateName])) {
enrichedTarget[buildStateName] = initialBuildParams;
}
else {
Object.assign(enrichedTarget[buildStateName], initialBuildParams);
}
enrichedTarget.with = (key, val) => {
enrichedTarget[buildStateName][key] = val;
return enrichedTarget;
};
enrichedTarget.getBuildParam = (key) => enrichedTarget[buildStateName][key];
enrichedTarget.build = () => enrichedTarget[buildStateName];
return enrichedTarget;
}