@snipsonian/core
Version:
Core/base reusable javascript code snippets
27 lines (26 loc) • 1.1 kB
JavaScript
import isArray from '../../is/isArray';
import isUndefined from '../../is/isUndefined';
export default function builder({ initialBuildParams = {}, buildStateName = '_builder', } = {}) {
return function decorate(target) {
if (isArray(target)) {
return target.map((entity) => enrichToBeBuilder(entity, { initialBuildParams, buildStateName }));
}
return enrichToBeBuilder(target, { initialBuildParams, buildStateName });
};
}
function enrichToBeBuilder(target, { initialBuildParams, buildStateName }) {
const enrichedTarget = target;
if (isUndefined(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;
}