UNPKG

@talend/react-cmf

Version:

A framework built on top of best react libraries

165 lines (162 loc) 4.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deepMerge = deepMerge; exports.default = void 0; exports.getReduceConfig = getReduceConfig; exports.getUnique = getUnique; exports.mergeObjects = mergeObjects; var _effects = require("redux-saga/effects"); var _assert = require("./assert"); var _lodash = require("lodash"); var _jsxRuntime = require("react/jsx-runtime"); function deepMerge(obj1, obj2) { if (!obj2) { return obj1; } if (!obj1) { return obj2; } return (0, _lodash.merge)(obj1, obj2); } function mergeObjects(obj1, obj2) { if (!obj2) { return obj1; } if (!obj1) { return obj2; } return Object.keys(obj2).reduce((acc, key) => { if (obj2[key] === undefined) { throw new TypeError(`${key} value is undefined. You may have a bad import here`); } if (obj1[key] !== undefined && obj1[key] !== obj2[key]) { // eslint-disable-next-line no-console console.warn(`override detected ${key}`); } return { ...acc, [key]: obj2[key] }; }, { ...obj1 }); } function mergeFns(fn1, fn2) { if (!fn2) { return fn1; } if (!fn1) { return fn2; } return function mergedFn(...args) { fn1(...args); fn2(...args); }; } function throwIfBothExists(obj1, obj2, name) { if (obj1 && obj2) { throw new Error(`Can't merge both config that both have ${name} attribute. Only one is accepted.`); } } function getUnique(obj1, obj2, name) { throwIfBothExists(obj1, obj2, name); if (obj1) { return obj1; } return obj2; } function mergeSaga(saga, newSaga) { (0, _assert.assertValueTypeOf)(saga, 'function'); (0, _assert.assertValueTypeOf)(newSaga, 'function'); if (saga && newSaga) { return function* mergedSaga() { yield (0, _effects.spawn)(saga); yield (0, _effects.spawn)(newSaga); }; } if (newSaga) { return newSaga; } return saga; } /** undefined mean true, only false work */ function booleanAnd(a, b) { return a !== false && b !== false; } function mergeArrays(preReducer, newPreReducer) { if (preReducer && newPreReducer) { return [].concat(preReducer).concat(newPreReducer); } if (newPreReducer) { return newPreReducer; } return preReducer; } function composeComponents(RootComponent, NestedRootComponent) { if (!RootComponent) { return NestedRootComponent; } // eslint-disable-next-line react/prop-types const CMFComposition = ({ children }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(RootComponent, { children: /*#__PURE__*/(0, _jsxRuntime.jsx)(NestedRootComponent, { children: children }) }); CMFComposition.displayName = 'CMFComposition'; return CMFComposition; } const MERGE_FNS = { id: () => undefined, modules: () => undefined, init: () => undefined, render: booleanAnd, onError: getUnique, root: getUnique, appId: getUnique, RootComponent: composeComponents, AppLoader: getUnique, saga: mergeSaga, httpMiddleware: getUnique, preReducer: mergeArrays, enhancer: mergeFns, middlewares: mergeArrays, storeCallback: mergeFns, reducer: deepMerge, preloadedState: getUnique, settingsURL: getUnique, registry: mergeObjects, sagas: mergeObjects, components: mergeObjects, expressions: mergeObjects, actionCreators: mergeObjects, httpInterceptors: mergeArrays }; function getReduceConfig(mergeConfig = MERGE_FNS) { return function reduceConfig(acc, config) { return Object.keys(config).reduce((subacc, key) => { if (!mergeConfig[key]) { throw new Error(`${key} is not supported`); } return { ...subacc, [key]: mergeConfig[key](acc[key], config[key], key) }; }, acc); }; } /** * this function help you to merge multiple cmfModule together * before passing them to cmf.bootstrap */ function merge(...configs) { return configs.reduce(getReduceConfig(), {}); } var _default = exports.default = merge; merge.getReduceConfig = getReduceConfig; merge.getUnique = getUnique; merge.mergeObjects = mergeObjects; //# sourceMappingURL=cmfModule.merge.js.map