@zenstackhq/common-helpers 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -28,6 +28,7 @@ __export(src_exports, {
28
28
  lowerCaseFirst: () => lowerCaseFirst,
29
29
  paramCase: () => paramCase,
30
30
  safeJSONStringify: () => safeJSONStringify,
31
+ singleDebounce: () => singleDebounce,
31
32
  sleep: () => sleep,
32
33
  upperCaseFirst: () => upperCaseFirst,
33
34
  zip: () => zip
@@ -117,6 +118,36 @@ function safeJSONStringify(value) {
117
118
  }
118
119
  __name(safeJSONStringify, "safeJSONStringify");
119
120
 
121
+ // src/single-debounce.ts
122
+ function singleDebounce(cb, debounceMc, reRunOnInProgressCall = false) {
123
+ let timeout;
124
+ let inProgress = false;
125
+ let pendingInProgress = false;
126
+ const run = /* @__PURE__ */ __name(async () => {
127
+ if (inProgress) {
128
+ if (reRunOnInProgressCall) {
129
+ pendingInProgress = true;
130
+ }
131
+ return;
132
+ }
133
+ inProgress = true;
134
+ pendingInProgress = false;
135
+ try {
136
+ await cb();
137
+ } finally {
138
+ inProgress = false;
139
+ if (pendingInProgress) {
140
+ await run();
141
+ }
142
+ }
143
+ }, "run");
144
+ return () => {
145
+ clearTimeout(timeout);
146
+ timeout = setTimeout(run, debounceMc);
147
+ };
148
+ }
149
+ __name(singleDebounce, "singleDebounce");
150
+
120
151
  // src/sleep.ts
121
152
  function sleep(timeout) {
122
153
  return new Promise((resolve) => {
@@ -167,6 +198,7 @@ __name(zip, "zip");
167
198
  lowerCaseFirst,
168
199
  paramCase,
169
200
  safeJSONStringify,
201
+ singleDebounce,
170
202
  sleep,
171
203
  upperCaseFirst,
172
204
  zip
@@ -1 +1 @@
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/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 './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 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","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"]}
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":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;ACAA,SAASA,SAASC,GAAU;AACxB,SAAOC,OAAOC,UAAUC,SAASC,KAAKJ,CAAAA,MAAO;AACjD;AAFSD;AAIF,SAASM,cAAcL,GAAU;AACpC,MAAID,SAASC,CAAAA,MAAO,MAAO,QAAO;AAGlC,QAAMM,OAAQN,EAA+B;AAC7C,MAAIM,SAASC,OAAW,QAAO;AAG/B,QAAMC,OAAQF,KAAgCJ;AAC9C,MAAIH,SAASS,IAAAA,MAAU,MAAO,QAAO;AAGrC,MAAIP,OAAOC,UAAUO,eAAeL,KAAKI,MAAM,eAAA,MAAqB,OAAO;AACvE,WAAO;EACX;AAGA,SAAO;AACX;AAlBgBH;;;ACCT,SAASK,MAASC,OAAQ;AAC7B,MAAIC,MAAMC,QAAQF,KAAAA,GAAQ;AACtB,WAAOA,MAAMG,IAAI,CAACC,MAAML,MAAMK,CAAAA,CAAAA;EAClC;AAEA,MAAI,OAAOJ,UAAU,UAAU;AAC3B,QAAI,CAACA,SAAS,CAACK,cAAcL,KAAAA,GAAQ;AACjC,aAAOA;IACX;AAEA,UAAMM,SAAc,CAAC;AACrB,eAAWC,OAAOC,OAAOC,KAAKT,KAAAA,GAAQ;AAClCM,aAAOC,GAAAA,IAAOR,MAAMC,MAAMO,GAAAA,CAAe;IAC7C;AACA,WAAOD;EACX;AAEA,SAAON;AACX;AAlBgBD;;;ACGT,SAASW,UAAaC,GAAgB;AACzC,MAAIA,MAAM,QAAQA,MAAMC,QAAW;AAC/B,WAAO,CAAA;EACX,WAAWC,MAAMC,QAAQH,CAAAA,GAAI;AACzB,WAAOA;EACX,OAAO;AACH,WAAO;MAACA;;EACZ;AACJ;AARgBD;;;ACRT,SAASK,eAAeC,OAAa;AACxC,SAAOA,MAAMC,OAAO,CAAA,EAAGC,YAAW,IAAKF,MAAMG,MAAM,CAAA;AACvD;AAFgBJ;;;ACAhB,IAAMK,yBAAyB;AAC/B,IAAMC,yBAAyB;AAC/B,IAAMC,uBAAuB;AAEtB,SAASC,UAAUC,OAAa;AACnC,QAAMC,SAASD,MACVE,QAAQN,wBAAwB,QAAA,EAChCM,QAAQL,wBAAwB,QAAA,EAChCK,QAAQJ,sBAAsB,IAAA;AAEnC,MAAIK,QAAQ;AACZ,MAAIC,MAAMH,OAAOI;AAEjB,SAAOJ,OAAOK,OAAOH,KAAAA,MAAW,KAAMA;AACtC,SAAOF,OAAOK,OAAOF,MAAM,CAAA,MAAO,KAAMA;AAExC,SAAOH,OACFM,MAAMJ,OAAOC,GAAAA,EACbI,MAAM,IAAA,EACNC,IAAI,CAACC,QAAQA,IAAIC,YAAW,CAAA,EAC5BC,KAAK,GAAA;AACd;AAjBgBb;;;ACDT,SAASc,kBAAkBC,OAAc;AAC5C,SAAOC,KAAKC,UAAUF,OAAO,CAACG,GAAGC,MAAAA;AAC7B,QAAI,OAAOA,MAAM,UAAU;AACvB,aAAOA,EAAEC,SAAQ;IACrB,OAAO;AACH,aAAOD;IACX;EACJ,CAAA;AACJ;AARgBL;;;ACHT,SAASO,eAAeC,IAAoCC,YAAoBC,wBAAiC,OAAK;AACzH,MAAIC;AACJ,MAAIC,aAAa;AACjB,MAAIC,oBAAoB;AAExB,QAAMC,MAAM,mCAAA;AACR,QAAIF,YAAY;AACZ,UAAIF,uBAAuB;AACvBG,4BAAoB;MACxB;AAEA;IACJ;AAEAD,iBAAa;AACbC,wBAAoB;AAEpB,QAAI;AACA,YAAML,GAAAA;IACV,UAAA;AACII,mBAAa;AAEb,UAAIC,mBAAmB;AACnB,cAAMC,IAAAA;MACV;IACJ;EACJ,GArBY;AAuBZ,SAAO,MAAA;AACHC,iBAAaJ,OAAAA;AAEbA,cAAUK,WAAWF,KAAKL,UAAAA;EAC9B;AACJ;AAjCgBF;;;ACAT,SAASU,MAAMC,SAAe;AACjC,SAAO,IAAIC,QAAc,CAACC,YAAAA;AACtBC,eAAW,MAAMD,QAAAA,GAAWF,OAAAA;EAChC,CAAA;AACJ;AAJgBD;;;ACAhB,IAAMK,eAAe,OAAOC,YAAY,eAAeA,QAAQC,IAAI,UAAA,MAAgB;AACnF,IAAMC,SAAS;AAER,SAASC,UAAUC,WAAoBC,SAAgB;AAC1D,MAAID,WAAW;AACX;EACJ;AAEA,MAAIL,cAAc;AACd,UAAM,IAAIO,MAAMJ,MAAAA;EACpB;AAEA,QAAM,IAAII,MAAMD,UAAU,GAAGH,MAAAA,KAAWG,OAAAA,KAAYH,MAAAA;AACxD;AAVgBC;;;ACHT,SAASI,eAAeC,OAAa;AACxC,SAAOA,MAAMC,OAAO,CAAA,EAAGC,YAAW,IAAKF,MAAMG,MAAM,CAAA;AACvD;AAFgBJ;;;ACGT,SAASK,IAAUC,MAAoBC,MAAkB;AAC5D,QAAMC,SAASC,KAAKC,IAAIJ,KAAKE,QAAQD,KAAKC,MAAM;AAChD,QAAMG,SAAwB,CAAA;AAC9B,WAASC,IAAI,GAAGA,IAAIJ,QAAQI,KAAK;AAC7BD,WAAOE,KAAK;MAACP,KAAKM,CAAAA;MAAKL,KAAKK,CAAAA;KAAI;EACpC;AACA,SAAOD;AACX;AAPgBN;","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"]}
package/dist/index.d.cts CHANGED
@@ -23,6 +23,8 @@ declare function paramCase(input: string): string;
23
23
  */
24
24
  declare function safeJSONStringify(value: unknown): string;
25
25
 
26
+ declare function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall?: boolean): () => void;
27
+
26
28
  declare function sleep(timeout: number): Promise<void>;
27
29
 
28
30
  declare function invariant(condition: unknown, message?: string): asserts condition;
@@ -34,4 +36,4 @@ declare function upperCaseFirst(input: string): string;
34
36
  */
35
37
  declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
36
38
 
37
- export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, sleep, upperCaseFirst, zip };
39
+ export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
package/dist/index.d.ts CHANGED
@@ -23,6 +23,8 @@ declare function paramCase(input: string): string;
23
23
  */
24
24
  declare function safeJSONStringify(value: unknown): string;
25
25
 
26
+ declare function singleDebounce(cb: () => void | PromiseLike<void>, debounceMc: number, reRunOnInProgressCall?: boolean): () => void;
27
+
26
28
  declare function sleep(timeout: number): Promise<void>;
27
29
 
28
30
  declare function invariant(condition: unknown, message?: string): asserts condition;
@@ -34,4 +36,4 @@ declare function upperCaseFirst(input: string): string;
34
36
  */
35
37
  declare function zip<T, U>(arr1: readonly T[], arr2: readonly U[]): Array<[T, U]>;
36
38
 
37
- export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, sleep, upperCaseFirst, zip };
39
+ export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, singleDebounce, sleep, upperCaseFirst, zip };
package/dist/index.js CHANGED
@@ -84,6 +84,36 @@ function safeJSONStringify(value) {
84
84
  }
85
85
  __name(safeJSONStringify, "safeJSONStringify");
86
86
 
87
+ // src/single-debounce.ts
88
+ function singleDebounce(cb, debounceMc, reRunOnInProgressCall = false) {
89
+ let timeout;
90
+ let inProgress = false;
91
+ let pendingInProgress = false;
92
+ const run = /* @__PURE__ */ __name(async () => {
93
+ if (inProgress) {
94
+ if (reRunOnInProgressCall) {
95
+ pendingInProgress = true;
96
+ }
97
+ return;
98
+ }
99
+ inProgress = true;
100
+ pendingInProgress = false;
101
+ try {
102
+ await cb();
103
+ } finally {
104
+ inProgress = false;
105
+ if (pendingInProgress) {
106
+ await run();
107
+ }
108
+ }
109
+ }, "run");
110
+ return () => {
111
+ clearTimeout(timeout);
112
+ timeout = setTimeout(run, debounceMc);
113
+ };
114
+ }
115
+ __name(singleDebounce, "singleDebounce");
116
+
87
117
  // src/sleep.ts
88
118
  function sleep(timeout) {
89
119
  return new Promise((resolve) => {
@@ -133,6 +163,7 @@ export {
133
163
  lowerCaseFirst,
134
164
  paramCase,
135
165
  safeJSONStringify,
166
+ singleDebounce,
136
167
  sleep,
137
168
  upperCaseFirst,
138
169
  zip
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"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/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 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","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"]}
1
+ {"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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenstackhq/common-helpers",
3
- "version": "3.1.1",
3
+ "version": "3.2.0",
4
4
  "description": "ZenStack Common Helpers",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -22,9 +22,9 @@
22
22
  }
23
23
  },
24
24
  "devDependencies": {
25
- "@zenstackhq/typescript-config": "3.1.1",
26
- "@zenstackhq/vitest-config": "3.1.1",
27
- "@zenstackhq/eslint-config": "3.1.1"
25
+ "@zenstackhq/typescript-config": "3.2.0",
26
+ "@zenstackhq/eslint-config": "3.2.0",
27
+ "@zenstackhq/vitest-config": "3.2.0"
28
28
  },
29
29
  "scripts": {
30
30
  "build": "tsc --noEmit && tsup-node",