Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@zenstackhq/common-helpers

Package Overview
Dependencies
Maintainers
2
Versions
113
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@zenstackhq/common-helpers - npm Package Compare versions

Comparing version
3.5.6
to
3.6.0
+51
dist/index.d.mts
//#region src/clone.d.ts
/**
* Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.
*/
declare function clone<T>(value: T): T;
//#endregion
//#region src/enumerable.d.ts
/**
* Array or scalar
*/
type Enumerable<T> = T | Array<T>;
/**
* Uniformly enumerates an array or scalar.
*/
declare function enumerate<T>(x: Enumerable<T>): T[];
//#endregion
//#region src/is-plain-object.d.ts
declare function isPlainObject(o: unknown): boolean;
//#endregion
//#region src/lower-case-first.d.ts
declare function lowerCaseFirst(input: string): string;
//#endregion
//#region src/param-case.d.ts
declare function paramCase(input: string): string;
//#endregion
//#region src/safe-json-stringify.d.ts
/**
* A safe JSON stringify that handles bigint values.
*/
declare function safeJSONStringify(value: unknown): string;
//#endregion
//#region src/single-debounce.d.ts
declare function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall?: boolean): () => void;
//#endregion
//#region src/sleep.d.ts
declare function sleep(timeout: number): Promise<void>;
//#endregion
//#region src/tiny-invariant.d.ts
declare function invariant(condition: unknown, message?: string): asserts condition;
//#endregion
//#region src/upper-case-first.d.ts
declare function upperCaseFirst(input: string): string;
//#endregion
//#region src/zip.d.ts
/**
* Zips two arrays into an array of tuples.
*/
declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
//#endregion
export { Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
//# sourceMappingURL=index.d.mts.map
//#region src/is-plain-object.ts
function isObject(o) {
return Object.prototype.toString.call(o) === "[object Object]";
}
function isPlainObject(o) {
if (isObject(o) === false) return false;
const ctor = o.constructor;
if (ctor === void 0) return true;
const prot = ctor.prototype;
if (isObject(prot) === false) return false;
if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) return false;
return true;
}
//#endregion
//#region src/clone.ts
/**
* Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.
*/
function clone(value) {
if (Array.isArray(value)) return value.map((v) => clone(v));
if (typeof value === "object") {
if (!value || !isPlainObject(value)) return value;
const result = {};
for (const key of Object.keys(value)) result[key] = clone(value[key]);
return result;
}
return value;
}
//#endregion
//#region src/enumerable.ts
/**
* Uniformly enumerates an array or scalar.
*/
function enumerate(x) {
if (x === null || x === void 0) return [];
else if (Array.isArray(x)) return x;
else return [x];
}
//#endregion
//#region src/lower-case-first.ts
function lowerCaseFirst(input) {
return input.charAt(0).toLowerCase() + input.slice(1);
}
//#endregion
//#region src/param-case.ts
const DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;
const DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;
const DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
function paramCase(input) {
const result = input.replace(DEFAULT_SPLIT_REGEXP_1, "$1\0$2").replace(DEFAULT_SPLIT_REGEXP_2, "$1\0$2").replace(DEFAULT_STRIP_REGEXP, "\0");
let start = 0;
let end = result.length;
while (result.charAt(start) === "\0") start++;
while (result.charAt(end - 1) === "\0") end--;
return result.slice(start, end).split("\0").map((str) => str.toLowerCase()).join("-");
}
//#endregion
//#region src/safe-json-stringify.ts
/**
* A safe JSON stringify that handles bigint values.
*/
function safeJSONStringify(value) {
return JSON.stringify(value, (_, v) => {
if (typeof v === "bigint") return v.toString();
else return v;
});
}
//#endregion
//#region src/single-debounce.ts
function singleDebounce(cb, debounceMc, reRunOnInProgressCall = false) {
let timeout;
let inProgress = false;
let pendingInProgress = false;
const run = async () => {
if (inProgress) {
if (reRunOnInProgressCall) pendingInProgress = true;
return;
}
inProgress = true;
pendingInProgress = false;
try {
await cb();
} finally {
inProgress = false;
if (pendingInProgress) await run();
}
};
return () => {
clearTimeout(timeout);
timeout = setTimeout(run, debounceMc);
};
}
//#endregion
//#region src/sleep.ts
function sleep(timeout) {
return new Promise((resolve) => {
setTimeout(() => resolve(), timeout);
});
}
//#endregion
//#region src/tiny-invariant.ts
const isProduction = typeof process !== "undefined" && process.env["NODE_ENV"] === "production";
const prefix = "Invariant failed";
function invariant(condition, message) {
if (condition) return;
if (isProduction) throw new Error(prefix);
throw new Error(message ? `${prefix}: ${message}` : prefix);
}
//#endregion
//#region src/upper-case-first.ts
function upperCaseFirst(input) {
return input.charAt(0).toUpperCase() + input.slice(1);
}
//#endregion
//#region src/zip.ts
/**
* Zips two arrays into an array of tuples.
*/
function zip(arr1, arr2) {
const length = Math.min(arr1.length, arr2.length);
const result = [];
for (let i = 0; i < length; i++) result.push([arr1[i], arr2[i]]);
return result;
}
//#endregion
export { clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
//# sourceMappingURL=index.mjs.map
{"version":3,"file":"index.mjs","names":[],"sources":["../src/is-plain-object.ts","../src/clone.ts","../src/enumerable.ts","../src/lower-case-first.ts","../src/param-case.ts","../src/safe-json-stringify.ts","../src/single-debounce.ts","../src/sleep.ts","../src/tiny-invariant.ts","../src/upper-case-first.ts","../src/zip.ts"],"sourcesContent":["function isObject(o: unknown) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: unknown) {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = (o as { constructor: unknown }).constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = (ctor as { prototype: unknown }).prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (Object.prototype.hasOwnProperty.call(prot, 'isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import { isPlainObject } from './is-plain-object';\n\n/**\n * Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.\n */\nexport function clone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((v) => clone(v)) as T;\n }\n\n if (typeof value === 'object') {\n if (!value || !isPlainObject(value)) {\n return value;\n }\n\n const result: any = {};\n for (const key of Object.keys(value)) {\n result[key] = clone(value[key as keyof T]);\n }\n return result;\n }\n\n return value;\n}\n","/**\n * Array or scalar\n */\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Uniformly enumerates an array or scalar.\n */\nexport function enumerate<T>(x: Enumerable<T>) {\n if (x === null || x === undefined) {\n return [];\n } else if (Array.isArray(x)) {\n return x;\n } else {\n return [x];\n }\n}\n","export function lowerCaseFirst(input: string) {\n return input.charAt(0).toLowerCase() + input.slice(1);\n}\n","const DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;\nconst DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\nexport function paramCase(input: string) {\n const result = input\n .replace(DEFAULT_SPLIT_REGEXP_1, '$1\\0$2')\n .replace(DEFAULT_SPLIT_REGEXP_2, '$1\\0$2')\n .replace(DEFAULT_STRIP_REGEXP, '\\0');\n\n let start = 0;\n let end = result.length;\n\n while (result.charAt(start) === '\\0') start++;\n while (result.charAt(end - 1) === '\\0') end--;\n\n return result\n .slice(start, end)\n .split('\\0')\n .map((str) => str.toLowerCase())\n .join('-');\n}\n","/**\n * A safe JSON stringify that handles bigint values.\n */\nexport function safeJSONStringify(value: unknown) {\n return JSON.stringify(value, (_, v) => {\n if (typeof v === 'bigint') {\n return v.toString();\n } else {\n return v;\n }\n });\n}\n","export function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall: boolean = false) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let inProgress = false;\n let pendingInProgress = false;\n\n const run = async () => {\n if (inProgress) {\n if (reRunOnInProgressCall) {\n pendingInProgress = true;\n }\n\n return;\n }\n\n inProgress = true;\n pendingInProgress = false;\n\n try {\n await cb();\n } finally {\n inProgress = false;\n\n if (pendingInProgress) {\n await run();\n }\n }\n };\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(run, debounceMc);\n }\n}\n","export function sleep(timeout: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n}\n","const isProduction = typeof process !== 'undefined' && process.env['NODE_ENV'] === 'production';\nconst prefix = 'Invariant failed';\n\nexport function invariant(condition: unknown, message?: string): asserts condition {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n }\n\n throw new Error(message ? `${prefix}: ${message}` : prefix);\n}\n","export function upperCaseFirst(input: string) {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n","/**\n * Zips two arrays into an array of tuples.\n */\nexport function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]> {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}\n"],"mappings":"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"}
+114
-181

@@ -1,206 +0,139 @@

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
clone: () => clone,
enumerate: () => enumerate,
invariant: () => invariant,
isPlainObject: () => isPlainObject,
lowerCaseFirst: () => lowerCaseFirst,
paramCase: () => paramCase,
safeJSONStringify: () => safeJSONStringify,
singleDebounce: () => singleDebounce,
sleep: () => sleep,
upperCaseFirst: () => upperCaseFirst,
zip: () => zip
});
module.exports = __toCommonJS(src_exports);
// src/is-plain-object.ts
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
//#region src/is-plain-object.ts
function isObject(o) {
return Object.prototype.toString.call(o) === "[object Object]";
return Object.prototype.toString.call(o) === "[object Object]";
}
__name(isObject, "isObject");
function isPlainObject(o) {
if (isObject(o) === false) return false;
const ctor = o.constructor;
if (ctor === void 0) return true;
const prot = ctor.prototype;
if (isObject(prot) === false) return false;
if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
return false;
}
return true;
if (isObject(o) === false) return false;
const ctor = o.constructor;
if (ctor === void 0) return true;
const prot = ctor.prototype;
if (isObject(prot) === false) return false;
if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) return false;
return true;
}
__name(isPlainObject, "isPlainObject");
// src/clone.ts
//#endregion
//#region src/clone.ts
/**
* Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.
*/
function clone(value) {
if (Array.isArray(value)) {
return value.map((v) => clone(v));
}
if (typeof value === "object") {
if (!value || !isPlainObject(value)) {
return value;
}
const result = {};
for (const key of Object.keys(value)) {
result[key] = clone(value[key]);
}
return result;
}
return value;
if (Array.isArray(value)) return value.map((v) => clone(v));
if (typeof value === "object") {
if (!value || !isPlainObject(value)) return value;
const result = {};
for (const key of Object.keys(value)) result[key] = clone(value[key]);
return result;
}
return value;
}
__name(clone, "clone");
// src/enumerable.ts
//#endregion
//#region src/enumerable.ts
/**
* Uniformly enumerates an array or scalar.
*/
function enumerate(x) {
if (x === null || x === void 0) {
return [];
} else if (Array.isArray(x)) {
return x;
} else {
return [
x
];
}
if (x === null || x === void 0) return [];
else if (Array.isArray(x)) return x;
else return [x];
}
__name(enumerate, "enumerate");
// src/lower-case-first.ts
//#endregion
//#region src/lower-case-first.ts
function lowerCaseFirst(input) {
return input.charAt(0).toLowerCase() + input.slice(1);
return input.charAt(0).toLowerCase() + input.slice(1);
}
__name(lowerCaseFirst, "lowerCaseFirst");
// src/param-case.ts
var DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;
var DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;
var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
//#endregion
//#region src/param-case.ts
const DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;
const DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;
const DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
function paramCase(input) {
const result = input.replace(DEFAULT_SPLIT_REGEXP_1, "$1\0$2").replace(DEFAULT_SPLIT_REGEXP_2, "$1\0$2").replace(DEFAULT_STRIP_REGEXP, "\0");
let start = 0;
let end = result.length;
while (result.charAt(start) === "\0") start++;
while (result.charAt(end - 1) === "\0") end--;
return result.slice(start, end).split("\0").map((str) => str.toLowerCase()).join("-");
const result = input.replace(DEFAULT_SPLIT_REGEXP_1, "$1\0$2").replace(DEFAULT_SPLIT_REGEXP_2, "$1\0$2").replace(DEFAULT_STRIP_REGEXP, "\0");
let start = 0;
let end = result.length;
while (result.charAt(start) === "\0") start++;
while (result.charAt(end - 1) === "\0") end--;
return result.slice(start, end).split("\0").map((str) => str.toLowerCase()).join("-");
}
__name(paramCase, "paramCase");
// src/safe-json-stringify.ts
//#endregion
//#region src/safe-json-stringify.ts
/**
* A safe JSON stringify that handles bigint values.
*/
function safeJSONStringify(value) {
return JSON.stringify(value, (_, v) => {
if (typeof v === "bigint") {
return v.toString();
} else {
return v;
}
});
return JSON.stringify(value, (_, v) => {
if (typeof v === "bigint") return v.toString();
else return v;
});
}
__name(safeJSONStringify, "safeJSONStringify");
// src/single-debounce.ts
//#endregion
//#region src/single-debounce.ts
function singleDebounce(cb, debounceMc, reRunOnInProgressCall = false) {
let timeout;
let inProgress = false;
let pendingInProgress = false;
const run = /* @__PURE__ */ __name(async () => {
if (inProgress) {
if (reRunOnInProgressCall) {
pendingInProgress = true;
}
return;
}
inProgress = true;
pendingInProgress = false;
try {
await cb();
} finally {
inProgress = false;
if (pendingInProgress) {
await run();
}
}
}, "run");
return () => {
clearTimeout(timeout);
timeout = setTimeout(run, debounceMc);
};
let timeout;
let inProgress = false;
let pendingInProgress = false;
const run = async () => {
if (inProgress) {
if (reRunOnInProgressCall) pendingInProgress = true;
return;
}
inProgress = true;
pendingInProgress = false;
try {
await cb();
} finally {
inProgress = false;
if (pendingInProgress) await run();
}
};
return () => {
clearTimeout(timeout);
timeout = setTimeout(run, debounceMc);
};
}
__name(singleDebounce, "singleDebounce");
// src/sleep.ts
//#endregion
//#region src/sleep.ts
function sleep(timeout) {
return new Promise((resolve) => {
setTimeout(() => resolve(), timeout);
});
return new Promise((resolve) => {
setTimeout(() => resolve(), timeout);
});
}
__name(sleep, "sleep");
// src/tiny-invariant.ts
var isProduction = typeof process !== "undefined" && process.env["NODE_ENV"] === "production";
var prefix = "Invariant failed";
//#endregion
//#region src/tiny-invariant.ts
const isProduction = typeof process !== "undefined" && process.env["NODE_ENV"] === "production";
const prefix = "Invariant failed";
function invariant(condition, message) {
if (condition) {
return;
}
if (isProduction) {
throw new Error(prefix);
}
throw new Error(message ? `${prefix}: ${message}` : prefix);
if (condition) return;
if (isProduction) throw new Error(prefix);
throw new Error(message ? `${prefix}: ${message}` : prefix);
}
__name(invariant, "invariant");
// src/upper-case-first.ts
//#endregion
//#region src/upper-case-first.ts
function upperCaseFirst(input) {
return input.charAt(0).toUpperCase() + input.slice(1);
return input.charAt(0).toUpperCase() + input.slice(1);
}
__name(upperCaseFirst, "upperCaseFirst");
// src/zip.ts
//#endregion
//#region src/zip.ts
/**
* Zips two arrays into an array of tuples.
*/
function zip(arr1, arr2) {
const length = Math.min(arr1.length, arr2.length);
const result = [];
for (let i = 0; i < length; i++) {
result.push([
arr1[i],
arr2[i]
]);
}
return result;
const length = Math.min(arr1.length, arr2.length);
const result = [];
for (let i = 0; i < length; i++) result.push([arr1[i], arr2[i]]);
return result;
}
__name(zip, "zip");
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
clone,
enumerate,
invariant,
isPlainObject,
lowerCaseFirst,
paramCase,
safeJSONStringify,
singleDebounce,
sleep,
upperCaseFirst,
zip
});
//#endregion
exports.clone = clone;
exports.enumerate = enumerate;
exports.invariant = invariant;
exports.isPlainObject = isPlainObject;
exports.lowerCaseFirst = lowerCaseFirst;
exports.paramCase = paramCase;
exports.safeJSONStringify = safeJSONStringify;
exports.singleDebounce = singleDebounce;
exports.sleep = sleep;
exports.upperCaseFirst = upperCaseFirst;
exports.zip = zip;
//# sourceMappingURL=index.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts","../src/is-plain-object.ts","../src/clone.ts","../src/enumerable.ts","../src/lower-case-first.ts","../src/param-case.ts","../src/safe-json-stringify.ts","../src/single-debounce.ts","../src/sleep.ts","../src/tiny-invariant.ts","../src/upper-case-first.ts","../src/zip.ts"],"sourcesContent":["export * from './clone';\nexport * from './enumerable';\nexport * from './is-plain-object';\nexport * from './lower-case-first';\nexport * from './param-case';\nexport * from './safe-json-stringify';\nexport * from './single-debounce';\nexport * from './sleep';\nexport * from './tiny-invariant';\nexport * from './upper-case-first';\nexport * from './zip';\n","function isObject(o: unknown) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: unknown) {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = (o as { constructor: unknown }).constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = (ctor as { prototype: unknown }).prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (Object.prototype.hasOwnProperty.call(prot, 'isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import { isPlainObject } from './is-plain-object';\n\n/**\n * Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.\n */\nexport function clone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((v) => clone(v)) as T;\n }\n\n if (typeof value === 'object') {\n if (!value || !isPlainObject(value)) {\n return value;\n }\n\n const result: any = {};\n for (const key of Object.keys(value)) {\n result[key] = clone(value[key as keyof T]);\n }\n return result;\n }\n\n return value;\n}\n","/**\n * Array or scalar\n */\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Uniformly enumerates an array or scalar.\n */\nexport function enumerate<T>(x: Enumerable<T>) {\n if (x === null || x === undefined) {\n return [];\n } else if (Array.isArray(x)) {\n return x;\n } else {\n return [x];\n }\n}\n","export function lowerCaseFirst(input: string) {\n return input.charAt(0).toLowerCase() + input.slice(1);\n}\n","const DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;\nconst DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\nexport function paramCase(input: string) {\n const result = input\n .replace(DEFAULT_SPLIT_REGEXP_1, '$1\\0$2')\n .replace(DEFAULT_SPLIT_REGEXP_2, '$1\\0$2')\n .replace(DEFAULT_STRIP_REGEXP, '\\0');\n\n let start = 0;\n let end = result.length;\n\n while (result.charAt(start) === '\\0') start++;\n while (result.charAt(end - 1) === '\\0') end--;\n\n return result\n .slice(start, end)\n .split('\\0')\n .map((str) => str.toLowerCase())\n .join('-');\n}\n","/**\n * A safe JSON stringify that handles bigint values.\n */\nexport function safeJSONStringify(value: unknown) {\n return JSON.stringify(value, (_, v) => {\n if (typeof v === 'bigint') {\n return v.toString();\n } else {\n return v;\n }\n });\n}\n","export function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall: boolean = false) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let inProgress = false;\n let pendingInProgress = false;\n\n const run = async () => {\n if (inProgress) {\n if (reRunOnInProgressCall) {\n pendingInProgress = true;\n }\n\n return;\n }\n\n inProgress = true;\n pendingInProgress = false;\n\n try {\n await cb();\n } finally {\n inProgress = false;\n\n if (pendingInProgress) {\n await run();\n }\n }\n };\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(run, debounceMc);\n }\n}\n","export function sleep(timeout: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n}\n","const isProduction = typeof process !== 'undefined' && process.env['NODE_ENV'] === 'production';\nconst prefix = 'Invariant failed';\n\nexport function invariant(condition: unknown, message?: string): asserts condition {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n }\n\n throw new Error(message ? `${prefix}: ${message}` : prefix);\n}\n","export function upperCaseFirst(input: string) {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n","/**\n * Zips two arrays into an array of tuples.\n */\nexport function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]> {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}\n"],"mappings":"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","names":["isObject","o","Object","prototype","toString","call","isPlainObject","ctor","undefined","prot","hasOwnProperty","clone","value","Array","isArray","map","v","isPlainObject","result","key","Object","keys","enumerate","x","undefined","Array","isArray","lowerCaseFirst","input","charAt","toLowerCase","slice","DEFAULT_SPLIT_REGEXP_1","DEFAULT_SPLIT_REGEXP_2","DEFAULT_STRIP_REGEXP","paramCase","input","result","replace","start","end","length","charAt","slice","split","map","str","toLowerCase","join","safeJSONStringify","value","JSON","stringify","_","v","toString","singleDebounce","cb","debounceMc","reRunOnInProgressCall","timeout","inProgress","pendingInProgress","run","clearTimeout","setTimeout","sleep","timeout","Promise","resolve","setTimeout","isProduction","process","env","prefix","invariant","condition","message","Error","upperCaseFirst","input","charAt","toUpperCase","slice","zip","arr1","arr2","length","Math","min","result","i","push"]}
{"version":3,"file":"index.cjs","names":[],"sources":["../src/is-plain-object.ts","../src/clone.ts","../src/enumerable.ts","../src/lower-case-first.ts","../src/param-case.ts","../src/safe-json-stringify.ts","../src/single-debounce.ts","../src/sleep.ts","../src/tiny-invariant.ts","../src/upper-case-first.ts","../src/zip.ts"],"sourcesContent":["function isObject(o: unknown) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: unknown) {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = (o as { constructor: unknown }).constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = (ctor as { prototype: unknown }).prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (Object.prototype.hasOwnProperty.call(prot, 'isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import { isPlainObject } from './is-plain-object';\n\n/**\n * Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.\n */\nexport function clone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((v) => clone(v)) as T;\n }\n\n if (typeof value === 'object') {\n if (!value || !isPlainObject(value)) {\n return value;\n }\n\n const result: any = {};\n for (const key of Object.keys(value)) {\n result[key] = clone(value[key as keyof T]);\n }\n return result;\n }\n\n return value;\n}\n","/**\n * Array or scalar\n */\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Uniformly enumerates an array or scalar.\n */\nexport function enumerate<T>(x: Enumerable<T>) {\n if (x === null || x === undefined) {\n return [];\n } else if (Array.isArray(x)) {\n return x;\n } else {\n return [x];\n }\n}\n","export function lowerCaseFirst(input: string) {\n return input.charAt(0).toLowerCase() + input.slice(1);\n}\n","const DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;\nconst DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\nexport function paramCase(input: string) {\n const result = input\n .replace(DEFAULT_SPLIT_REGEXP_1, '$1\\0$2')\n .replace(DEFAULT_SPLIT_REGEXP_2, '$1\\0$2')\n .replace(DEFAULT_STRIP_REGEXP, '\\0');\n\n let start = 0;\n let end = result.length;\n\n while (result.charAt(start) === '\\0') start++;\n while (result.charAt(end - 1) === '\\0') end--;\n\n return result\n .slice(start, end)\n .split('\\0')\n .map((str) => str.toLowerCase())\n .join('-');\n}\n","/**\n * A safe JSON stringify that handles bigint values.\n */\nexport function safeJSONStringify(value: unknown) {\n return JSON.stringify(value, (_, v) => {\n if (typeof v === 'bigint') {\n return v.toString();\n } else {\n return v;\n }\n });\n}\n","export function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall: boolean = false) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let inProgress = false;\n let pendingInProgress = false;\n\n const run = async () => {\n if (inProgress) {\n if (reRunOnInProgressCall) {\n pendingInProgress = true;\n }\n\n return;\n }\n\n inProgress = true;\n pendingInProgress = false;\n\n try {\n await cb();\n } finally {\n inProgress = false;\n\n if (pendingInProgress) {\n await run();\n }\n }\n };\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(run, debounceMc);\n }\n}\n","export function sleep(timeout: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n}\n","const isProduction = typeof process !== 'undefined' && process.env['NODE_ENV'] === 'production';\nconst prefix = 'Invariant failed';\n\nexport function invariant(condition: unknown, message?: string): asserts condition {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n }\n\n throw new Error(message ? `${prefix}: ${message}` : prefix);\n}\n","export function upperCaseFirst(input: string) {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n","/**\n * Zips two arrays into an array of tuples.\n */\nexport function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]> {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}\n"],"mappings":"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"}

@@ -0,1 +1,2 @@

//#region src/clone.d.ts
/**

@@ -5,3 +6,4 @@ * Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.

declare function clone<T>(value: T): T;
//#endregion
//#region src/enumerable.d.ts
/**

@@ -15,9 +17,13 @@ * Array or scalar

declare function enumerate<T>(x: Enumerable<T>): T[];
//#endregion
//#region src/is-plain-object.d.ts
declare function isPlainObject(o: unknown): boolean;
//#endregion
//#region src/lower-case-first.d.ts
declare function lowerCaseFirst(input: string): string;
//#endregion
//#region src/param-case.d.ts
declare function paramCase(input: string): string;
//#endregion
//#region src/safe-json-stringify.d.ts
/**

@@ -27,11 +33,16 @@ * A safe JSON stringify that handles bigint values.

declare function safeJSONStringify(value: unknown): string;
//#endregion
//#region src/single-debounce.d.ts
declare function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall?: boolean): () => void;
//#endregion
//#region src/sleep.d.ts
declare function sleep(timeout: number): Promise<void>;
//#endregion
//#region src/tiny-invariant.d.ts
declare function invariant(condition: unknown, message?: string): asserts condition;
//#endregion
//#region src/upper-case-first.d.ts
declare function upperCaseFirst(input: string): string;
//#endregion
//#region src/zip.d.ts
/**

@@ -41,3 +52,4 @@ * Zips two arrays into an array of tuples.

declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
//#endregion
export { Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
//# sourceMappingURL=index.d.cts.map

@@ -5,3 +5,3 @@ {

"description": "ZenStack Common Helpers",
"version": "3.5.6",
"version": "3.6.0",
"type": "module",

@@ -25,4 +25,4 @@ "author": {

"import": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},

@@ -36,10 +36,12 @@ "require": {

"devDependencies": {
"@zenstackhq/typescript-config": "3.5.6",
"@zenstackhq/eslint-config": "3.5.6",
"@zenstackhq/vitest-config": "3.5.6"
"@types/node": "^20.19.0",
"@zenstackhq/eslint-config": "3.6.0",
"@zenstackhq/typescript-config": "3.6.0",
"@zenstackhq/tsdown-config": "3.6.0",
"@zenstackhq/vitest-config": "3.6.0"
},
"funding": "https://github.com/sponsors/zenstackhq",
"scripts": {
"build": "tsc --noEmit && tsup-node",
"watch": "tsup-node --watch",
"build": "tsc --noEmit && tsdown",
"watch": "tsdown --watch",
"lint": "eslint src --ext ts",

@@ -46,0 +48,0 @@ "test": "vitest run",

/**
* Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.
*/
declare function clone<T>(value: T): T;
/**
* Array or scalar
*/
type Enumerable<T> = T | Array<T>;
/**
* Uniformly enumerates an array or scalar.
*/
declare function enumerate<T>(x: Enumerable<T>): T[];
declare function isPlainObject(o: unknown): boolean;
declare function lowerCaseFirst(input: string): string;
declare function paramCase(input: string): string;
/**
* A safe JSON stringify that handles bigint values.
*/
declare function safeJSONStringify(value: unknown): string;
declare function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall?: boolean): () => void;
declare function sleep(timeout: number): Promise<void>;
declare function invariant(condition: unknown, message?: string): asserts condition;
declare function upperCaseFirst(input: string): string;
/**
* Zips two arrays into an array of tuples.
*/
declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
// src/is-plain-object.ts
function isObject(o) {
return Object.prototype.toString.call(o) === "[object Object]";
}
__name(isObject, "isObject");
function isPlainObject(o) {
if (isObject(o) === false) return false;
const ctor = o.constructor;
if (ctor === void 0) return true;
const prot = ctor.prototype;
if (isObject(prot) === false) return false;
if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) {
return false;
}
return true;
}
__name(isPlainObject, "isPlainObject");
// src/clone.ts
function clone(value) {
if (Array.isArray(value)) {
return value.map((v) => clone(v));
}
if (typeof value === "object") {
if (!value || !isPlainObject(value)) {
return value;
}
const result = {};
for (const key of Object.keys(value)) {
result[key] = clone(value[key]);
}
return result;
}
return value;
}
__name(clone, "clone");
// src/enumerable.ts
function enumerate(x) {
if (x === null || x === void 0) {
return [];
} else if (Array.isArray(x)) {
return x;
} else {
return [
x
];
}
}
__name(enumerate, "enumerate");
// src/lower-case-first.ts
function lowerCaseFirst(input) {
return input.charAt(0).toLowerCase() + input.slice(1);
}
__name(lowerCaseFirst, "lowerCaseFirst");
// src/param-case.ts
var DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;
var DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;
var DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;
function paramCase(input) {
const result = input.replace(DEFAULT_SPLIT_REGEXP_1, "$1\0$2").replace(DEFAULT_SPLIT_REGEXP_2, "$1\0$2").replace(DEFAULT_STRIP_REGEXP, "\0");
let start = 0;
let end = result.length;
while (result.charAt(start) === "\0") start++;
while (result.charAt(end - 1) === "\0") end--;
return result.slice(start, end).split("\0").map((str) => str.toLowerCase()).join("-");
}
__name(paramCase, "paramCase");
// src/safe-json-stringify.ts
function safeJSONStringify(value) {
return JSON.stringify(value, (_, v) => {
if (typeof v === "bigint") {
return v.toString();
} else {
return v;
}
});
}
__name(safeJSONStringify, "safeJSONStringify");
// src/single-debounce.ts
function singleDebounce(cb, debounceMc, reRunOnInProgressCall = false) {
let timeout;
let inProgress = false;
let pendingInProgress = false;
const run = /* @__PURE__ */ __name(async () => {
if (inProgress) {
if (reRunOnInProgressCall) {
pendingInProgress = true;
}
return;
}
inProgress = true;
pendingInProgress = false;
try {
await cb();
} finally {
inProgress = false;
if (pendingInProgress) {
await run();
}
}
}, "run");
return () => {
clearTimeout(timeout);
timeout = setTimeout(run, debounceMc);
};
}
__name(singleDebounce, "singleDebounce");
// src/sleep.ts
function sleep(timeout) {
return new Promise((resolve) => {
setTimeout(() => resolve(), timeout);
});
}
__name(sleep, "sleep");
// src/tiny-invariant.ts
var isProduction = typeof process !== "undefined" && process.env["NODE_ENV"] === "production";
var prefix = "Invariant failed";
function invariant(condition, message) {
if (condition) {
return;
}
if (isProduction) {
throw new Error(prefix);
}
throw new Error(message ? `${prefix}: ${message}` : prefix);
}
__name(invariant, "invariant");
// src/upper-case-first.ts
function upperCaseFirst(input) {
return input.charAt(0).toUpperCase() + input.slice(1);
}
__name(upperCaseFirst, "upperCaseFirst");
// src/zip.ts
function zip(arr1, arr2) {
const length = Math.min(arr1.length, arr2.length);
const result = [];
for (let i = 0; i < length; i++) {
result.push([
arr1[i],
arr2[i]
]);
}
return result;
}
__name(zip, "zip");
export {
clone,
enumerate,
invariant,
isPlainObject,
lowerCaseFirst,
paramCase,
safeJSONStringify,
singleDebounce,
sleep,
upperCaseFirst,
zip
};
//# sourceMappingURL=index.js.map
{"version":3,"sources":["../src/is-plain-object.ts","../src/clone.ts","../src/enumerable.ts","../src/lower-case-first.ts","../src/param-case.ts","../src/safe-json-stringify.ts","../src/single-debounce.ts","../src/sleep.ts","../src/tiny-invariant.ts","../src/upper-case-first.ts","../src/zip.ts"],"sourcesContent":["function isObject(o: unknown) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nexport function isPlainObject(o: unknown) {\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n const ctor = (o as { constructor: unknown }).constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n const prot = (ctor as { prototype: unknown }).prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (Object.prototype.hasOwnProperty.call(prot, 'isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n","import { isPlainObject } from './is-plain-object';\n\n/**\n * Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.\n */\nexport function clone<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map((v) => clone(v)) as T;\n }\n\n if (typeof value === 'object') {\n if (!value || !isPlainObject(value)) {\n return value;\n }\n\n const result: any = {};\n for (const key of Object.keys(value)) {\n result[key] = clone(value[key as keyof T]);\n }\n return result;\n }\n\n return value;\n}\n","/**\n * Array or scalar\n */\nexport type Enumerable<T> = T | Array<T>;\n\n/**\n * Uniformly enumerates an array or scalar.\n */\nexport function enumerate<T>(x: Enumerable<T>) {\n if (x === null || x === undefined) {\n return [];\n } else if (Array.isArray(x)) {\n return x;\n } else {\n return [x];\n }\n}\n","export function lowerCaseFirst(input: string) {\n return input.charAt(0).toLowerCase() + input.slice(1);\n}\n","const DEFAULT_SPLIT_REGEXP_1 = /([a-z0-9])([A-Z])/g;\nconst DEFAULT_SPLIT_REGEXP_2 = /([A-Z])([A-Z][a-z])/g;\nconst DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n\nexport function paramCase(input: string) {\n const result = input\n .replace(DEFAULT_SPLIT_REGEXP_1, '$1\\0$2')\n .replace(DEFAULT_SPLIT_REGEXP_2, '$1\\0$2')\n .replace(DEFAULT_STRIP_REGEXP, '\\0');\n\n let start = 0;\n let end = result.length;\n\n while (result.charAt(start) === '\\0') start++;\n while (result.charAt(end - 1) === '\\0') end--;\n\n return result\n .slice(start, end)\n .split('\\0')\n .map((str) => str.toLowerCase())\n .join('-');\n}\n","/**\n * A safe JSON stringify that handles bigint values.\n */\nexport function safeJSONStringify(value: unknown) {\n return JSON.stringify(value, (_, v) => {\n if (typeof v === 'bigint') {\n return v.toString();\n } else {\n return v;\n }\n });\n}\n","export function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall: boolean = false) {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let inProgress = false;\n let pendingInProgress = false;\n\n const run = async () => {\n if (inProgress) {\n if (reRunOnInProgressCall) {\n pendingInProgress = true;\n }\n\n return;\n }\n\n inProgress = true;\n pendingInProgress = false;\n\n try {\n await cb();\n } finally {\n inProgress = false;\n\n if (pendingInProgress) {\n await run();\n }\n }\n };\n\n return () => {\n clearTimeout(timeout);\n\n timeout = setTimeout(run, debounceMc);\n }\n}\n","export function sleep(timeout: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n}\n","const isProduction = typeof process !== 'undefined' && process.env['NODE_ENV'] === 'production';\nconst prefix = 'Invariant failed';\n\nexport function invariant(condition: unknown, message?: string): asserts condition {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n }\n\n throw new Error(message ? `${prefix}: ${message}` : prefix);\n}\n","export function upperCaseFirst(input: string) {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n","/**\n * Zips two arrays into an array of tuples.\n */\nexport function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]> {\n const length = Math.min(arr1.length, arr2.length);\n const result: Array<[T, U]> = [];\n for (let i = 0; i < length; i++) {\n result.push([arr1[i]!, arr2[i]!]);\n }\n return result;\n}\n"],"mappings":"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","names":["isObject","o","Object","prototype","toString","call","isPlainObject","ctor","undefined","prot","hasOwnProperty","clone","value","Array","isArray","map","v","isPlainObject","result","key","Object","keys","enumerate","x","undefined","Array","isArray","lowerCaseFirst","input","charAt","toLowerCase","slice","DEFAULT_SPLIT_REGEXP_1","DEFAULT_SPLIT_REGEXP_2","DEFAULT_STRIP_REGEXP","paramCase","input","result","replace","start","end","length","charAt","slice","split","map","str","toLowerCase","join","safeJSONStringify","value","JSON","stringify","_","v","toString","singleDebounce","cb","debounceMc","reRunOnInProgressCall","timeout","inProgress","pendingInProgress","run","clearTimeout","setTimeout","sleep","timeout","Promise","resolve","setTimeout","isProduction","process","env","prefix","invariant","condition","message","Error","upperCaseFirst","input","charAt","toUpperCase","slice","zip","arr1","arr2","length","Math","min","result","i","push"]}