UNPKG

react-pdf-builder

Version:
76 lines (75 loc) 2.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.childrenAsArray = void 0; exports.randomUuid = randomUuid; exports.deepMerge = deepMerge; const react_1 = __importDefault(require("react")); const uuid_1 = require("uuid"); function randomUuid() { return (0, uuid_1.v4)(); } /** * Deep merges two records by combining their properties. * * The mergeRecords function creates a copy of record1 in a new object called merged * and iterates over each key in record2. If both values of the corresponding keys * in record1 and record2 are objects, it recursively calls mergeRecords. If not, * it assigns the value from record2 to merged. Finally, it returns the merged record. * * A third customMerge function arg allows for custom merging of certain values. * * @param record1 - The first record to merge. * @param record2 - The second record to merge. * @param customMerge - A function allowing custom value merging in certain circumstances. * @returns The merged record. */ function deepMerge(record1, record2, customMerge) { const merged = Object.assign({}, record1); const record2Keys = Object.keys(record2 !== null && record2 !== void 0 ? record2 : {}); for (let i = 0; i < record2Keys.length; i++) { const key = record2Keys[i]; const value1 = record1[key]; const value2 = record2[key]; // Check if both values are objects and not null if (typeof value1 === 'object' && value1 !== null && typeof value2 === 'object' && value2 !== null) { merged[key] = deepMerge(value1, value2, customMerge); } else { let customMergeResult = undefined; if (customMerge) { customMergeResult = customMerge(key, value1, value2); } // If a custom merge was made, accept that result if (customMergeResult === null || customMergeResult === void 0 ? void 0 : customMergeResult.success) { merged[key] = customMergeResult.value; } else { merged[key] = value2; // Take the value from record2 } } } return merged; } /** Returns all children as an array, including those inside React fragments. */ const childrenAsArray = (children) => { if (Array.isArray(children)) { return children; } else if (children && typeof children === 'object' && children !== null && (children === null || children === void 0 ? void 0 : children.hasOwnProperty('type')) && children.type === react_1.default.Fragment) { return (0, exports.childrenAsArray)(children.props.children); } else if (typeof children === 'undefined') { return []; } else { return [children]; } }; exports.childrenAsArray = childrenAsArray;