UNPKG

@flourish/sdk

Version:
33 lines (27 loc) 1.04 kB
const deepCopyObject = require("../common/utils/state").deepCopyObject; function isPrimitive(entity) { if (entity === null) { return true; } return ["string", "boolean", "number"].includes(typeof entity); } function extendItem(extendee, extender) { const v = isPrimitive(extendee) ? [extendee] : extendee; const w = isPrimitive(extender) ? [extender] : extender; const CANNOT_MERGE_MESSAGE = `template.yml: cannot extend ${ JSON.stringify(extendee, null, 2) } with ${ JSON.stringify(extender, null, 2) }`; let output; if (Array.isArray(v)) { if (Array.isArray(w)) { output = v.concat(w); } else { throw new Error(CANNOT_MERGE_MESSAGE); } } else if (typeof v === "object") { // Order of Object.assign means parameters in extendee are favoured over parameters in extender if (typeof(w) === "object") { output = Object.assign(deepCopyObject(w), deepCopyObject(v)); } else { throw new Error(CANNOT_MERGE_MESSAGE); } } else { throw new Error(CANNOT_MERGE_MESSAGE); } return output; } module.exports = { extendItem };