Files
flights_web_raw/apps/angular/node_modules/reduce-configs/dist/index.js
T

56 lines
2.4 KiB
JavaScript

const isNil = (o)=>null == o;
const isFunction = (func)=>'function' == typeof func;
const isObject = (obj)=>null !== obj && 'object' == typeof obj;
const isPlainObject = (obj)=>isObject(obj) && '[object Object]' === Object.prototype.toString.call(obj);
function reduceConfigs({ initial, config, mergeFn = Object.assign }) {
if (isNil(config)) return initial;
if (isPlainObject(config)) return isPlainObject(initial) ? mergeFn(initial, config) : config;
if (isFunction(config)) return config(initial) ?? initial;
if (Array.isArray(config)) return config.reduce((initial, config)=>reduceConfigs({
initial,
config,
mergeFn
}), initial);
return config ?? initial;
}
function reduceConfigsWithContext({ initial, config, ctx, mergeFn = Object.assign }) {
if (isNil(config)) return initial;
if (isPlainObject(config)) return isPlainObject(initial) ? mergeFn(initial, config) : config;
if (isFunction(config)) return config(initial, ctx) ?? initial;
if (Array.isArray(config)) return config.reduce((initial, config)=>reduceConfigsWithContext({
initial,
config,
ctx,
mergeFn
}), initial);
return config ?? initial;
}
async function reduceConfigsAsyncWithContext({ initial, config, ctx, mergeFn = Object.assign }) {
if (isNil(config)) return initial;
if (isPlainObject(config)) return isPlainObject(initial) ? mergeFn(initial, config) : config;
if (isFunction(config)) return await config(initial, ctx) ?? initial;
if (Array.isArray(config)) return config.reduce((initial, config)=>reduceConfigsWithContext({
initial,
config,
ctx,
mergeFn
}), initial);
return config ?? initial;
}
function reduceConfigsMergeContext({ initial, config, ctx, mergeFn = Object.assign }) {
if (isNil(config)) return initial;
if (isPlainObject(config)) return isPlainObject(initial) ? mergeFn(initial, config) : config;
if (isFunction(config)) return config({
value: initial,
...ctx
}) ?? initial;
if (Array.isArray(config)) return config.reduce((initial, config)=>reduceConfigsMergeContext({
initial,
config,
ctx,
mergeFn
}), initial);
return config ?? initial;
}
export { reduceConfigs, reduceConfigsAsyncWithContext, reduceConfigsMergeContext, reduceConfigsWithContext };