UNPKG

@snipsonian/core

Version:

Core/base reusable javascript code snippets

27 lines (26 loc) 1.1 kB
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; }