UNPKG

@enonic/js-utils

Version:
79 lines (73 loc) 2.06 kB
// array/flatten.ts function flatten(arr, d = 1) { return d > 0 ? arr.reduce((acc, val) => acc.concat( Array.isArray(val) ? flatten(val, d - 1) : val ), []) : arr.slice(); } // value/isDate.ts function isDate(value) { return Object.prototype.toString.call(value).slice(8, -1) === "Date"; } // value/isFunction.ts function isFunction(value) { return Object.prototype.toString.call(value).slice(8, -1) === "Function"; } // value/isInfinity.ts function isInfinity(value) { return typeof value === "number" && !isFinite(value); } // value/isObject.ts var isObject = (value) => Object.prototype.toString.call(value).slice(8, -1) === "Object"; // storage/indexing/enonify.ts function enonify(unknown) { function shouldBeDeleted(unknown2) { return unknown2 === null || typeof unknown2 === "undefined" || isFunction(unknown2) || isInfinity(unknown2) || isNumberButNaN(unknown2); } function enonifyArray(array) { const flattenedAndEnonified = flatten(array).map((v) => enonify(v)).filter((v) => !shouldBeDeleted(v)); if (flattenedAndEnonified.length === 0) { return void 0; } if (flattenedAndEnonified.length === 1) { return flattenedAndEnonified[0]; } return flattenedAndEnonified; } function isNumberButNaN(unknown2) { return typeof unknown2 === "number" && isNaN(unknown2); } if (isObject(unknown)) { Object.keys(unknown).forEach((k) => { let value = unknown[k]; if (Array.isArray(value)) { value = enonifyArray(value); } if (Array.isArray(value)) { unknown[k] = value; } else { if (shouldBeDeleted(value)) { delete unknown[k]; } else { unknown[k] = enonify(value); } } }); return unknown; } if (Array.isArray(unknown)) { return enonifyArray(unknown); } if (isDate(unknown)) { return unknown.toISOString(); } if (isNumberButNaN(unknown)) { return void 0; } if (isInfinity(unknown)) { return void 0; } return unknown; } export { enonify };