@zenstackhq/common-helpers 3.0.0-beta.12 → 3.0.0-beta.14
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 +51 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -21,10 +21,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
// src/index.ts
|
|
22
22
|
var src_exports = {};
|
|
23
23
|
__export(src_exports, {
|
|
24
|
+
clone: () => clone,
|
|
25
|
+
enumerate: () => enumerate,
|
|
24
26
|
invariant: () => invariant,
|
|
25
27
|
isPlainObject: () => isPlainObject,
|
|
26
28
|
lowerCaseFirst: () => lowerCaseFirst,
|
|
27
29
|
paramCase: () => paramCase,
|
|
30
|
+
safeJSONStringify: () => safeJSONStringify,
|
|
28
31
|
sleep: () => sleep,
|
|
29
32
|
upperCaseFirst: () => upperCaseFirst,
|
|
30
33
|
zip: () => zip
|
|
@@ -49,6 +52,39 @@ function isPlainObject(o) {
|
|
|
49
52
|
}
|
|
50
53
|
__name(isPlainObject, "isPlainObject");
|
|
51
54
|
|
|
55
|
+
// src/clone.ts
|
|
56
|
+
function clone(value) {
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
return value.map((v) => clone(v));
|
|
59
|
+
}
|
|
60
|
+
if (typeof value === "object") {
|
|
61
|
+
if (!value || !isPlainObject(value)) {
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
const result = {};
|
|
65
|
+
for (const key of Object.keys(value)) {
|
|
66
|
+
result[key] = clone(value[key]);
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
__name(clone, "clone");
|
|
73
|
+
|
|
74
|
+
// src/enumerable.ts
|
|
75
|
+
function enumerate(x) {
|
|
76
|
+
if (x === null || x === void 0) {
|
|
77
|
+
return [];
|
|
78
|
+
} else if (Array.isArray(x)) {
|
|
79
|
+
return x;
|
|
80
|
+
} else {
|
|
81
|
+
return [
|
|
82
|
+
x
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
__name(enumerate, "enumerate");
|
|
87
|
+
|
|
52
88
|
// src/lower-case-first.ts
|
|
53
89
|
function lowerCaseFirst(input) {
|
|
54
90
|
return input.charAt(0).toLowerCase() + input.slice(1);
|
|
@@ -69,6 +105,18 @@ function paramCase(input) {
|
|
|
69
105
|
}
|
|
70
106
|
__name(paramCase, "paramCase");
|
|
71
107
|
|
|
108
|
+
// src/safe-json-stringify.ts
|
|
109
|
+
function safeJSONStringify(value) {
|
|
110
|
+
return JSON.stringify(value, (_, v) => {
|
|
111
|
+
if (typeof v === "bigint") {
|
|
112
|
+
return v.toString();
|
|
113
|
+
} else {
|
|
114
|
+
return v;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
__name(safeJSONStringify, "safeJSONStringify");
|
|
119
|
+
|
|
72
120
|
// src/sleep.ts
|
|
73
121
|
function sleep(timeout) {
|
|
74
122
|
return new Promise((resolve) => {
|
|
@@ -112,10 +160,13 @@ function zip(arr1, arr2) {
|
|
|
112
160
|
__name(zip, "zip");
|
|
113
161
|
// Annotate the CommonJS export names for ESM import in node:
|
|
114
162
|
0 && (module.exports = {
|
|
163
|
+
clone,
|
|
164
|
+
enumerate,
|
|
115
165
|
invariant,
|
|
116
166
|
isPlainObject,
|
|
117
167
|
lowerCaseFirst,
|
|
118
168
|
paramCase,
|
|
169
|
+
safeJSONStringify,
|
|
119
170
|
sleep,
|
|
120
171
|
upperCaseFirst,
|
|
121
172
|
zip
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/is-plain-object.ts","../src/lower-case-first.ts","../src/param-case.ts","../src/sleep.ts","../src/tiny-invariant.ts","../src/upper-case-first.ts","../src/zip.ts"],"sourcesContent":["export * from './is-plain-object';\nexport * from './lower-case-first';\nexport * from './param-case';\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","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","export function sleep(timeout: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n}\n","const isProduction = 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: T[], arr2: 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
|
|
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 = 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: T[], arr2: 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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.
|
|
3
|
+
*/
|
|
4
|
+
declare function clone<T>(value: T): T;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Array or scalar
|
|
8
|
+
*/
|
|
9
|
+
type Enumerable<T> = T | Array<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Uniformly enumerates an array or scalar.
|
|
12
|
+
*/
|
|
13
|
+
declare function enumerate<T>(x: Enumerable<T>): T[];
|
|
14
|
+
|
|
1
15
|
declare function isPlainObject(o: unknown): boolean;
|
|
2
16
|
|
|
3
17
|
declare function lowerCaseFirst(input: string): string;
|
|
4
18
|
|
|
5
19
|
declare function paramCase(input: string): string;
|
|
6
20
|
|
|
21
|
+
/**
|
|
22
|
+
* A safe JSON stringify that handles bigint values.
|
|
23
|
+
*/
|
|
24
|
+
declare function safeJSONStringify(value: unknown): string;
|
|
25
|
+
|
|
7
26
|
declare function sleep(timeout: number): Promise<void>;
|
|
8
27
|
|
|
9
28
|
declare function invariant(condition: unknown, message?: string): asserts condition;
|
|
@@ -15,4 +34,4 @@ declare function upperCaseFirst(input: string): string;
|
|
|
15
34
|
*/
|
|
16
35
|
declare function zip<T, U>(arr1: T[], arr2: U[]): Array<[T, U]>;
|
|
17
36
|
|
|
18
|
-
export { invariant, isPlainObject, lowerCaseFirst, paramCase, sleep, upperCaseFirst, zip };
|
|
37
|
+
export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, sleep, upperCaseFirst, zip };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clones the given object. Only arrays and plain objects are cloned. Other values are returned as is.
|
|
3
|
+
*/
|
|
4
|
+
declare function clone<T>(value: T): T;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Array or scalar
|
|
8
|
+
*/
|
|
9
|
+
type Enumerable<T> = T | Array<T>;
|
|
10
|
+
/**
|
|
11
|
+
* Uniformly enumerates an array or scalar.
|
|
12
|
+
*/
|
|
13
|
+
declare function enumerate<T>(x: Enumerable<T>): T[];
|
|
14
|
+
|
|
1
15
|
declare function isPlainObject(o: unknown): boolean;
|
|
2
16
|
|
|
3
17
|
declare function lowerCaseFirst(input: string): string;
|
|
4
18
|
|
|
5
19
|
declare function paramCase(input: string): string;
|
|
6
20
|
|
|
21
|
+
/**
|
|
22
|
+
* A safe JSON stringify that handles bigint values.
|
|
23
|
+
*/
|
|
24
|
+
declare function safeJSONStringify(value: unknown): string;
|
|
25
|
+
|
|
7
26
|
declare function sleep(timeout: number): Promise<void>;
|
|
8
27
|
|
|
9
28
|
declare function invariant(condition: unknown, message?: string): asserts condition;
|
|
@@ -15,4 +34,4 @@ declare function upperCaseFirst(input: string): string;
|
|
|
15
34
|
*/
|
|
16
35
|
declare function zip<T, U>(arr1: T[], arr2: U[]): Array<[T, U]>;
|
|
17
36
|
|
|
18
|
-
export { invariant, isPlainObject, lowerCaseFirst, paramCase, sleep, upperCaseFirst, zip };
|
|
37
|
+
export { type Enumerable, clone, enumerate, invariant, isPlainObject, lowerCaseFirst, paramCase, safeJSONStringify, sleep, upperCaseFirst, zip };
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,39 @@ function isPlainObject(o) {
|
|
|
19
19
|
}
|
|
20
20
|
__name(isPlainObject, "isPlainObject");
|
|
21
21
|
|
|
22
|
+
// src/clone.ts
|
|
23
|
+
function clone(value) {
|
|
24
|
+
if (Array.isArray(value)) {
|
|
25
|
+
return value.map((v) => clone(v));
|
|
26
|
+
}
|
|
27
|
+
if (typeof value === "object") {
|
|
28
|
+
if (!value || !isPlainObject(value)) {
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const key of Object.keys(value)) {
|
|
33
|
+
result[key] = clone(value[key]);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
__name(clone, "clone");
|
|
40
|
+
|
|
41
|
+
// src/enumerable.ts
|
|
42
|
+
function enumerate(x) {
|
|
43
|
+
if (x === null || x === void 0) {
|
|
44
|
+
return [];
|
|
45
|
+
} else if (Array.isArray(x)) {
|
|
46
|
+
return x;
|
|
47
|
+
} else {
|
|
48
|
+
return [
|
|
49
|
+
x
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
__name(enumerate, "enumerate");
|
|
54
|
+
|
|
22
55
|
// src/lower-case-first.ts
|
|
23
56
|
function lowerCaseFirst(input) {
|
|
24
57
|
return input.charAt(0).toLowerCase() + input.slice(1);
|
|
@@ -39,6 +72,18 @@ function paramCase(input) {
|
|
|
39
72
|
}
|
|
40
73
|
__name(paramCase, "paramCase");
|
|
41
74
|
|
|
75
|
+
// src/safe-json-stringify.ts
|
|
76
|
+
function safeJSONStringify(value) {
|
|
77
|
+
return JSON.stringify(value, (_, v) => {
|
|
78
|
+
if (typeof v === "bigint") {
|
|
79
|
+
return v.toString();
|
|
80
|
+
} else {
|
|
81
|
+
return v;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
__name(safeJSONStringify, "safeJSONStringify");
|
|
86
|
+
|
|
42
87
|
// src/sleep.ts
|
|
43
88
|
function sleep(timeout) {
|
|
44
89
|
return new Promise((resolve) => {
|
|
@@ -81,10 +126,13 @@ function zip(arr1, arr2) {
|
|
|
81
126
|
}
|
|
82
127
|
__name(zip, "zip");
|
|
83
128
|
export {
|
|
129
|
+
clone,
|
|
130
|
+
enumerate,
|
|
84
131
|
invariant,
|
|
85
132
|
isPlainObject,
|
|
86
133
|
lowerCaseFirst,
|
|
87
134
|
paramCase,
|
|
135
|
+
safeJSONStringify,
|
|
88
136
|
sleep,
|
|
89
137
|
upperCaseFirst,
|
|
90
138
|
zip
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/is-plain-object.ts","../src/lower-case-first.ts","../src/param-case.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","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","export function sleep(timeout: number) {\n return new Promise<void>((resolve) => {\n setTimeout(() => resolve(), timeout);\n });\n}\n","const isProduction = 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: T[], arr2: 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,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;;;
|
|
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 = 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: T[], arr2: 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zenstackhq/common-helpers",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.14",
|
|
4
4
|
"description": "ZenStack Common Helpers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [],
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@zenstackhq/typescript-config": "3.0.0-beta.
|
|
26
|
-
"@zenstackhq/eslint-config": "3.0.0-beta.
|
|
25
|
+
"@zenstackhq/typescript-config": "3.0.0-beta.14",
|
|
26
|
+
"@zenstackhq/eslint-config": "3.0.0-beta.14"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"build": "tsc --noEmit && tsup-node",
|