UNPKG

@rzl-zone/utils-js

Version:

A modern, lightweight set of JavaScript utility functions with TypeScript support for everyday development, crafted to enhance code readability and maintainability.

124 lines (118 loc) 5.36 kB
/*! * ==================================================== * Rzl Utils-JS. * ---------------------------------------------------- * Version: 3.11.0. * Author: Rizalvin Dwiky. * Repository: https://github.com/rzl-zone/utils-js. * ==================================================== */ 'use strict'; var chunkUDA26MCU_cjs = require('./chunk-UDA26MCU.cjs'); var chunkSYHPSOUU_cjs = require('./chunk-SYHPSOUU.cjs'); function isMap(value) { return Object.prototype.toString.call(value) === "[object Map]" || value instanceof Map; } var isDate = (value, options = {}) => { chunkSYHPSOUU_cjs.assertIsPlainObject(options, { message: ({ currentType, validType }) => `Second parameter (\`options\`) must be of type \`${validType}\`, but received: \`${currentType}\`.` }); const skipInvalidDate = chunkSYHPSOUU_cjs.isPlainObject(options) && chunkSYHPSOUU_cjs.isBoolean(options.skipInvalidDate) ? options.skipInvalidDate : false; const instanceDate = value instanceof Date; if (skipInvalidDate) return instanceDate; return instanceDate && !chunkSYHPSOUU_cjs.isNaN(value.getTime()); }; var safeStableStringify = (value, options = {}) => { chunkSYHPSOUU_cjs.assertIsPlainObject(options, { message: ({ currentType, validType }) => `Second parameter (\`options\`) must be of type \`${validType}\`, but received: \`${currentType}\`.` }); const pretty = chunkSYHPSOUU_cjs.hasOwnProp(options, "pretty") ? options.pretty : false; const sortKeys = chunkSYHPSOUU_cjs.hasOwnProp(options, "sortKeys") ? options.sortKeys : true; const sortArray = chunkSYHPSOUU_cjs.hasOwnProp(options, "sortArray") ? options.sortArray : false; const keepUndefined = chunkSYHPSOUU_cjs.hasOwnProp(options, "keepUndefined") ? options.keepUndefined : false; if (!chunkSYHPSOUU_cjs.isBoolean(sortKeys) || !chunkSYHPSOUU_cjs.isBoolean(sortArray) || !chunkSYHPSOUU_cjs.isBoolean(pretty) || !chunkSYHPSOUU_cjs.isBoolean(keepUndefined)) { throw new TypeError( `Parameters \`sortKeys\`, \`sortArray\`, \`keepUndefined\` and \`pretty\` property of the \`options\` (second parameter) must be of type \`boolean\`, but received: "['sortKeys': \`${chunkSYHPSOUU_cjs.getPreciseType( sortKeys )}\`, 'sortArray': \`${chunkSYHPSOUU_cjs.getPreciseType( sortArray )}\`, 'keepUndefined': \`${chunkSYHPSOUU_cjs.getPreciseType( keepUndefined )}\`, 'pretty': \`${chunkSYHPSOUU_cjs.getPreciseType(pretty)}\`]".` ); } if (chunkSYHPSOUU_cjs.isUndefined(value)) { return keepUndefined ? "undefined" : "null"; } const seen = /* @__PURE__ */ new WeakSet(); const isPrimitive = (val) => chunkSYHPSOUU_cjs.isNull(val) || !chunkSYHPSOUU_cjs.isObjectOrArray(val) && !chunkSYHPSOUU_cjs.isFunction(val); const deepProcess = (val) => { if (chunkSYHPSOUU_cjs.isNumberObject(val)) { const valOf = val.valueOf(); return chunkSYHPSOUU_cjs.isNaN(valOf) || chunkSYHPSOUU_cjs.isInfinityNumber(valOf) ? null : valOf; } if (chunkSYHPSOUU_cjs.isStringObject(val)) return val.valueOf(); if (chunkSYHPSOUU_cjs.isBooleanObject(val)) return val.valueOf(); if (chunkSYHPSOUU_cjs.isFunction(val) || chunkSYHPSOUU_cjs.isSymbol(val)) return void 0; if (chunkUDA26MCU_cjs.isBigInt(val)) return val.toString(); if (chunkSYHPSOUU_cjs.isNaN(val) || chunkSYHPSOUU_cjs.isInfinityNumber(val)) return null; if (chunkSYHPSOUU_cjs.isUndefined(val)) { return keepUndefined ? void 0 : null; } if (chunkSYHPSOUU_cjs.isObjectOrArray(val)) { if (seen.has(val)) return "[Circular]"; seen.add(val); if (isDate(val)) return val.toISOString(); if (isMap(val)) { return { map: Array.from(val.entries()).map(([k, v]) => [k, deepProcess(v)]) }; } if (chunkSYHPSOUU_cjs.isSet(val)) return { set: Array.from(val.values()).map(deepProcess) }; if (chunkSYHPSOUU_cjs.isArray(val)) { const processedArr = val.map(deepProcess); if (sortArray) { const primitives = []; const nonPrimitives = []; for (const item of processedArr) { if (isPrimitive(item)) primitives.push(item); else nonPrimitives.push(item); } primitives.sort((a, b) => { if (chunkSYHPSOUU_cjs.isNumber(a) && chunkSYHPSOUU_cjs.isNumber(b)) return a - b; return String(a).localeCompare(String(b)); }); return [...primitives, ...nonPrimitives]; } return processedArr; } const keys = Object.keys(val); if (sortKeys) { keys.sort((a, b) => { const na = Number(a); const nb = Number(b); if (!chunkSYHPSOUU_cjs.isNaN(na) && !chunkSYHPSOUU_cjs.isNaN(nb)) return na - nb; return a.localeCompare(b); }); } const result = {}; if (chunkSYHPSOUU_cjs.isObject(val)) { for (const k of keys) { const v = deepProcess(val[k]); if (!chunkSYHPSOUU_cjs.isUndefined(v)) result[k] = v; } } return result; } return val; }; try { return JSON.stringify(deepProcess(value), null, pretty ? 2 : 0); } catch (err) { console.warn("Error in safeStableStringify:", err); return "{}"; } }; exports.isDate = isDate; exports.isMap = isMap; exports.safeStableStringify = safeStableStringify;