@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
JavaScript
/*!
* ====================================================
* Rzl Utils-JS.
* ----------------------------------------------------
* Version: 3.11.0.
* Author: Rizalvin Dwiky.
* Repository: https://github.com/rzl-zone/utils-js.
* ====================================================
*/
;
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;