@grucloud/core
Version:
GruCloud core, generate infrastructure code
62 lines (59 loc) • 1.67 kB
JavaScript
const assert = require("assert");
const { pipe, tap, map, reduce, switchCase } = require("rubico");
const { isObject, identity } = require("rubico/x");
const deepReject = (predicate) =>
pipe([
tap((params) => {
assert(predicate);
}),
switchCase([
Array.isArray,
pipe([map((obj) => deepReject(predicate)(obj))]),
isObject,
pipe([
Object.entries,
reduce(
(acc, [key, value]) =>
pipe([
() => value,
switchCase([
Array.isArray,
pipe([
map((obj) => deepReject(predicate)(obj)),
(result) => ({
...acc,
[key]: result,
}),
]),
() => value instanceof Date,
pipe([
switchCase([
() => predicate([key, value]),
() => acc,
() => ({ ...acc, [key]: value.toUTCString() }),
]),
]),
isObject,
pipe([
() => deepReject(predicate)(value),
(result) => ({
...acc,
[key]: result,
}),
]),
pipe([
switchCase([
() => predicate([key, value]),
() => acc,
() => ({ ...acc, [key]: value }),
]),
]),
]),
])(),
{}
),
]),
identity,
]),
]);
exports.deepReject = deepReject;