@archtx/utils 1.0.1

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.
Files changed (92) hide show
  1. package/dist/exports.d.ts +25 -0
  2. package/dist/exports.js +26 -0
  3. package/dist/exports.js.map +1 -0
  4. package/dist/src/array-values-or-undefined.d.ts +1 -0
  5. package/dist/src/array-values-or-undefined.js +6 -0
  6. package/dist/src/array-values-or-undefined.js.map +1 -0
  7. package/dist/src/bool-or-undefined.d.ts +1 -0
  8. package/dist/src/bool-or-undefined.js +2 -0
  9. package/dist/src/bool-or-undefined.js.map +1 -0
  10. package/dist/src/constants/millisecond-time.d.ts +7 -0
  11. package/dist/src/constants/millisecond-time.js +8 -0
  12. package/dist/src/constants/millisecond-time.js.map +1 -0
  13. package/dist/src/constants/second-time.d.ts +6 -0
  14. package/dist/src/constants/second-time.js +7 -0
  15. package/dist/src/constants/second-time.js.map +1 -0
  16. package/dist/src/deep-clone.d.ts +1 -0
  17. package/dist/src/deep-clone.js +27 -0
  18. package/dist/src/deep-clone.js.map +1 -0
  19. package/dist/src/deep-equal.d.ts +7 -0
  20. package/dist/src/deep-equal.js +52 -0
  21. package/dist/src/deep-equal.js.map +1 -0
  22. package/dist/src/deep-equal.test.d.ts +1 -0
  23. package/dist/src/deep-equal.test.js +97 -0
  24. package/dist/src/deep-equal.test.js.map +1 -0
  25. package/dist/src/deep-freeze.d.ts +7 -0
  26. package/dist/src/deep-freeze.js +20 -0
  27. package/dist/src/deep-freeze.js.map +1 -0
  28. package/dist/src/deep-merge.d.ts +1 -0
  29. package/dist/src/deep-merge.js +27 -0
  30. package/dist/src/deep-merge.js.map +1 -0
  31. package/dist/src/ensure-array.d.ts +16 -0
  32. package/dist/src/ensure-array.js +26 -0
  33. package/dist/src/ensure-array.js.map +1 -0
  34. package/dist/src/format-decimal.d.ts +1 -0
  35. package/dist/src/format-decimal.js +9 -0
  36. package/dist/src/format-decimal.js.map +1 -0
  37. package/dist/src/is-email.d.ts +1 -0
  38. package/dist/src/is-email.js +5 -0
  39. package/dist/src/is-email.js.map +1 -0
  40. package/dist/src/is-hex-color.d.ts +1 -0
  41. package/dist/src/is-hex-color.js +4 -0
  42. package/dist/src/is-hex-color.js.map +1 -0
  43. package/dist/src/is-prod.d.ts +1 -0
  44. package/dist/src/is-prod.js +2 -0
  45. package/dist/src/is-prod.js.map +1 -0
  46. package/dist/src/is-url.d.ts +1 -0
  47. package/dist/src/is-url.js +10 -0
  48. package/dist/src/is-url.js.map +1 -0
  49. package/dist/src/make-uuid.d.ts +16 -0
  50. package/dist/src/make-uuid.js +23 -0
  51. package/dist/src/make-uuid.js.map +1 -0
  52. package/dist/src/make-uuid.test.d.ts +1 -0
  53. package/dist/src/make-uuid.test.js +22 -0
  54. package/dist/src/make-uuid.test.js.map +1 -0
  55. package/dist/src/obfuscate-string.d.ts +21 -0
  56. package/dist/src/obfuscate-string.js +46 -0
  57. package/dist/src/obfuscate-string.js.map +1 -0
  58. package/dist/src/object-diff-paths.d.ts +9 -0
  59. package/dist/src/object-diff-paths.js +39 -0
  60. package/dist/src/object-diff-paths.js.map +1 -0
  61. package/dist/src/object-diff-paths.test.d.ts +1 -0
  62. package/dist/src/object-diff-paths.test.js +141 -0
  63. package/dist/src/object-diff-paths.test.js.map +1 -0
  64. package/dist/src/object-values-to-dot-notation.d.ts +1 -0
  65. package/dist/src/object-values-to-dot-notation.js +23 -0
  66. package/dist/src/object-values-to-dot-notation.js.map +1 -0
  67. package/dist/src/object-values-to-dot-notation.test.d.ts +1 -0
  68. package/dist/src/object-values-to-dot-notation.test.js +21 -0
  69. package/dist/src/object-values-to-dot-notation.test.js.map +1 -0
  70. package/dist/src/object.d.ts +7 -0
  71. package/dist/src/object.js +19 -0
  72. package/dist/src/object.js.map +1 -0
  73. package/dist/src/pluralize.d.ts +5 -0
  74. package/dist/src/pluralize.js +17 -0
  75. package/dist/src/pluralize.js.map +1 -0
  76. package/dist/src/random-color.d.ts +1 -0
  77. package/dist/src/random-color.js +4 -0
  78. package/dist/src/random-color.js.map +1 -0
  79. package/dist/src/sanitize-obj-props.d.ts +1 -0
  80. package/dist/src/sanitize-obj-props.js +5 -0
  81. package/dist/src/sanitize-obj-props.js.map +1 -0
  82. package/dist/src/sleep.d.ts +1 -0
  83. package/dist/src/sleep.js +6 -0
  84. package/dist/src/sleep.js.map +1 -0
  85. package/dist/src/timeout.d.ts +8 -0
  86. package/dist/src/timeout.js +14 -0
  87. package/dist/src/timeout.js.map +1 -0
  88. package/dist/src/undefined-default.d.ts +1 -0
  89. package/dist/src/undefined-default.js +2 -0
  90. package/dist/src/undefined-default.js.map +1 -0
  91. package/dist/tsconfig.tsbuildinfo +1 -0
  92. package/package.json +27 -0
@@ -0,0 +1,25 @@
1
+ export * from './src/constants/millisecond-time';
2
+ export * from './src/constants/second-time';
3
+ export * from './src/array-values-or-undefined';
4
+ export * from './src/bool-or-undefined';
5
+ export * from './src/deep-clone';
6
+ export * from './src/deep-equal';
7
+ export * from './src/deep-freeze';
8
+ export * from './src/deep-merge';
9
+ export * from './src/ensure-array';
10
+ export * from './src/format-decimal';
11
+ export * from './src/is-email';
12
+ export * from './src/is-hex-color';
13
+ export * from './src/is-prod';
14
+ export * from './src/is-url';
15
+ export * from './src/make-uuid';
16
+ export * from './src/obfuscate-string';
17
+ export * from './src/object';
18
+ export * from './src/object-diff-paths';
19
+ export * from './src/object-values-to-dot-notation';
20
+ export * from './src/pluralize';
21
+ export * from './src/random-color';
22
+ export * from './src/sanitize-obj-props';
23
+ export * from './src/sleep';
24
+ export * from './src/timeout';
25
+ export * from './src/undefined-default';
@@ -0,0 +1,26 @@
1
+ export * from './src/constants/millisecond-time';
2
+ export * from './src/constants/second-time';
3
+ export * from './src/array-values-or-undefined';
4
+ export * from './src/bool-or-undefined';
5
+ export * from './src/deep-clone';
6
+ export * from './src/deep-equal';
7
+ export * from './src/deep-freeze';
8
+ export * from './src/deep-merge';
9
+ export * from './src/ensure-array';
10
+ export * from './src/format-decimal';
11
+ export * from './src/is-email';
12
+ export * from './src/is-hex-color';
13
+ export * from './src/is-prod';
14
+ export * from './src/is-url';
15
+ export * from './src/make-uuid';
16
+ export * from './src/obfuscate-string';
17
+ export * from './src/object';
18
+ export * from './src/object-diff-paths';
19
+ export * from './src/object-values-to-dot-notation';
20
+ export * from './src/pluralize';
21
+ export * from './src/random-color';
22
+ export * from './src/sanitize-obj-props';
23
+ export * from './src/sleep';
24
+ export * from './src/timeout';
25
+ export * from './src/undefined-default';
26
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../exports.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA;AAChD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,qCAAqC,CAAA;AACnD,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function arrayValuesOrUndefined<T>(arr?: T[]): T[] | undefined;
@@ -0,0 +1,6 @@
1
+ export function arrayValuesOrUndefined(arr) {
2
+ if (Array.isArray(arr) && arr.length)
3
+ return arr;
4
+ return undefined;
5
+ }
6
+ //# sourceMappingURL=array-values-or-undefined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-values-or-undefined.js","sourceRoot":"","sources":["../../src/array-values-or-undefined.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CAAI,GAAS;IACjD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,GAAG,CAAA;IAEhD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const boolOrUndefined: (value?: boolean) => boolean | undefined;
@@ -0,0 +1,2 @@
1
+ export const boolOrUndefined = (value) => typeof value === 'boolean' ? value : undefined;
2
+ //# sourceMappingURL=bool-or-undefined.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bool-or-undefined.js","sourceRoot":"","sources":["../../src/bool-or-undefined.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAe,EAAE,EAAE,CACjD,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare const ONE_MIN_MILLI = 60000;
2
+ export declare const ONE_HR_MILLI: number;
3
+ export declare const ONE_DAY_MILLI: number;
4
+ export declare const ONE_WEEK_MILLI: number;
5
+ export declare const ONE_MONTH_MILLI: number;
6
+ export declare const FIVE_MIN_MILLI: number;
7
+ export declare const TEN_MIN_MILLI: number;
@@ -0,0 +1,8 @@
1
+ export const ONE_MIN_MILLI = 60_000;
2
+ export const ONE_HR_MILLI = 60_000 * 60;
3
+ export const ONE_DAY_MILLI = ONE_HR_MILLI * 24;
4
+ export const ONE_WEEK_MILLI = ONE_DAY_MILLI * 7;
5
+ export const ONE_MONTH_MILLI = ONE_WEEK_MILLI * 4.3;
6
+ export const FIVE_MIN_MILLI = ONE_MIN_MILLI * 5;
7
+ export const TEN_MIN_MILLI = ONE_MIN_MILLI * 10;
8
+ //# sourceMappingURL=millisecond-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"millisecond-time.js","sourceRoot":"","sources":["../../../src/constants/millisecond-time.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAA;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,GAAG,EAAE,CAAA;AACvC,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,GAAG,EAAE,CAAA;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,GAAG,CAAC,CAAA;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,GAAG,GAAG,CAAA;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,GAAG,CAAC,CAAA;AAC/C,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,GAAG,EAAE,CAAA"}
@@ -0,0 +1,6 @@
1
+ export declare const ONE_HR_SECONDS: number;
2
+ export declare const ONE_DAY_SECONDS: number;
3
+ export declare const ONE_WEEK_SECONDS: number;
4
+ export declare const ONE_MONTH_SECONDS: number;
5
+ export declare const FIVE_MIN_SECONDS: number;
6
+ export declare const TEN_MIN_SECONDS: number;
@@ -0,0 +1,7 @@
1
+ export const ONE_HR_SECONDS = 60 * 60;
2
+ export const ONE_DAY_SECONDS = ONE_HR_SECONDS * 24;
3
+ export const ONE_WEEK_SECONDS = ONE_DAY_SECONDS * 7;
4
+ export const ONE_MONTH_SECONDS = ONE_WEEK_SECONDS * 4.3;
5
+ export const FIVE_MIN_SECONDS = 60 * 5;
6
+ export const TEN_MIN_SECONDS = 60 * 10;
7
+ //# sourceMappingURL=second-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"second-time.js","sourceRoot":"","sources":["../../../src/constants/second-time.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,CAAA;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,GAAG,EAAE,CAAA;AAClD,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,GAAG,CAAC,CAAA;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,GAAG,CAAA;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,CAAC,CAAA;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function deepClone<T>(o: T): T;
@@ -0,0 +1,27 @@
1
+ // courtesy of unknown author found online in a benchmark test
2
+ export function deepClone(o) {
3
+ let newO;
4
+ let i;
5
+ if (typeof o !== 'object') {
6
+ return o;
7
+ }
8
+ if (!o) {
9
+ return o;
10
+ }
11
+ if (Array.isArray(o)) {
12
+ newO = [];
13
+ for (i = 0; i < o.length; i += 1) {
14
+ newO[i] = deepClone(o[i]);
15
+ }
16
+ return newO;
17
+ }
18
+ newO = {};
19
+ for (i in o) {
20
+ if (o.hasOwnProperty(i)) {
21
+ // @ts-ignore
22
+ newO[i] = deepClone(o[i]);
23
+ }
24
+ }
25
+ return newO;
26
+ }
27
+ //# sourceMappingURL=deep-clone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-clone.js","sourceRoot":"","sources":["../../src/deep-clone.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAI,CAAI;IAC/B,IAAI,IAAS,CAAA;IACb,IAAI,CAAM,CAAA;IAEV,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAA;IACV,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,GAAG,EAAE,CAAA;QAET,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,IAAS,CAAA;IAClB,CAAC;IAED,IAAI,GAAG,EAAE,CAAA;IAET,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,aAAa;YACb,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,IAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Check if all primitive values are equal.
3
+ *
4
+ * @param a
5
+ * @param b
6
+ */
7
+ export declare function deepEqual(a: any, b: any): boolean;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Check if all primitive values are equal.
3
+ *
4
+ * @param a
5
+ * @param b
6
+ */
7
+ export function deepEqual(a, b) {
8
+ if (a === b)
9
+ return true;
10
+ if (a && b && typeof a === 'object' && typeof b === 'object') {
11
+ if (Array.isArray(a)) {
12
+ if (a.length !== b.length)
13
+ return false;
14
+ for (const [i, item] of a.entries()) {
15
+ if (!deepEqual(item, b[i]))
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ else if (a instanceof Map && b instanceof Map) {
21
+ if (a.size !== b.size)
22
+ return false;
23
+ for (const [key, value] of a.entries()) {
24
+ if (!b.has(key) || !deepEqual(value, b.get(key)))
25
+ return false;
26
+ }
27
+ return true;
28
+ }
29
+ else if (a instanceof Set && b instanceof Set) {
30
+ if (a.size !== b.size)
31
+ return false;
32
+ for (const item of a) {
33
+ if (!b.has(item))
34
+ return false;
35
+ }
36
+ return true;
37
+ }
38
+ const aKeys = Object.keys(a);
39
+ const bKeys = Object.keys(b);
40
+ if (aKeys.length !== bKeys.length)
41
+ return false;
42
+ for (const key of aKeys) {
43
+ if (!(key in b) ||
44
+ !deepEqual(a[key], b[key])) {
45
+ return false;
46
+ }
47
+ }
48
+ return true;
49
+ }
50
+ return Number.isNaN(a) && Number.isNaN(b);
51
+ }
52
+ //# sourceMappingURL=deep-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-equal.js","sourceRoot":"","sources":["../../src/deep-equal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,CAAM,EAAE,CAAM;IACtC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAExB,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAA;YACvC,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;YAC1C,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;aAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAA;YACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAA;YAChE,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;aAAM,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YAChD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAA;YACnC,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAA;YAChC,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QAE/C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IACE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACX,CAAC,SAAS,CACP,CAA6B,CAAC,GAAG,CAAC,EAClC,CAA6B,CAAC,GAAG,CAAC,CACpC,EACD,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,97 @@
1
+ import assert from 'assert';
2
+ import { deepEqual } from './deep-equal';
3
+ describe('deep equal', () => {
4
+ it('different types', () => {
5
+ const o1 = 1;
6
+ const o2 = true;
7
+ const diff = deepEqual(o1, o2);
8
+ assert.deepEqual(diff, false);
9
+ });
10
+ it('empty objects', () => {
11
+ const o1 = {};
12
+ const o2 = {};
13
+ const diff = deepEqual(o1, o2);
14
+ assert.deepEqual(diff, true);
15
+ });
16
+ it('a single object entry is different', () => {
17
+ const o1 = {
18
+ a: {
19
+ b: {
20
+ c: { s: 't' },
21
+ },
22
+ },
23
+ };
24
+ const o2 = { ...o1, a: { ...o1.a, b: { ...o1.a.b, d: 'e' } } };
25
+ const diff = deepEqual(o1, o2);
26
+ assert.deepEqual(diff, false);
27
+ });
28
+ it('null vs undefined', () => {
29
+ const o1 = {
30
+ foo: null,
31
+ };
32
+ const o2 = {
33
+ foo: undefined,
34
+ };
35
+ const diff = deepEqual(o1, o2);
36
+ assert.deepEqual(diff, false);
37
+ });
38
+ it('entries are missing/different from each objects', () => {
39
+ const o1 = {
40
+ a: {
41
+ b: {
42
+ fn: () => 4,
43
+ arr: [1, 2, 3],
44
+ c: {
45
+ s: 't',
46
+ y: 'g',
47
+ },
48
+ },
49
+ },
50
+ };
51
+ const o2 = {
52
+ ...o1,
53
+ a: {
54
+ ...o1.a,
55
+ b: {
56
+ ...o1.a.b,
57
+ fn: () => 4,
58
+ arr: [1, 2, 3, 4, 5],
59
+ c: { s: 'e', t: 'e' },
60
+ },
61
+ },
62
+ };
63
+ const diff = deepEqual(o1, o2);
64
+ assert.deepEqual(diff, false);
65
+ });
66
+ it('nested arrays', () => {
67
+ const o1 = {
68
+ a: {
69
+ arr: [
70
+ 1,
71
+ [{ one: 1, two: 1 }],
72
+ {
73
+ foo: 'bar',
74
+ },
75
+ 4,
76
+ ],
77
+ },
78
+ };
79
+ const o2 = {
80
+ ...o1,
81
+ a: {
82
+ ...o1.a,
83
+ arr: [
84
+ 1,
85
+ [{ one: 2, two: 2 }],
86
+ {
87
+ foo: 'bar',
88
+ },
89
+ 4,
90
+ ],
91
+ },
92
+ };
93
+ const diff = deepEqual(o1, o2);
94
+ assert.deepEqual(diff, false);
95
+ });
96
+ });
97
+ //# sourceMappingURL=deep-equal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-equal.test.js","sourceRoot":"","sources":["../../src/deep-equal.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Recursively freeze an object.
3
+ *
4
+ * @param object Target object to freeze
5
+ * @param clone When true, the object itself and all nested objects are cloned so that the original object is not frozen
6
+ */
7
+ export declare function deepFreeze(object: any, clone?: boolean): any;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Recursively freeze an object.
3
+ *
4
+ * @param object Target object to freeze
5
+ * @param clone When true, the object itself and all nested objects are cloned so that the original object is not frozen
6
+ */
7
+ export function deepFreeze(object, clone = true) {
8
+ // Retrieve the property names defined on object
9
+ const propNames = Object.getOwnPropertyNames(object);
10
+ // Freeze properties before freezing self
11
+ for (const name of propNames) {
12
+ const value = object[name];
13
+ // 'null' will equal 'object' bitches.
14
+ if (value && typeof value === 'object') {
15
+ deepFreeze(value, clone);
16
+ }
17
+ }
18
+ return Object.freeze(clone ? { ...object } : object);
19
+ }
20
+ //# sourceMappingURL=deep-freeze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-freeze.js","sourceRoot":"","sources":["../../src/deep-freeze.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAW,EAAE,KAAK,GAAG,IAAI;IAClD,gDAAgD;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IAEpD,yCAAyC;IAEzC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAE1B,sCAAsC;QACtC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACtD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function deepMerge<T extends Record<any, any>>(target: T, ...sources: Record<any, any>[]): T;
@@ -0,0 +1,27 @@
1
+ function isObject(item) {
2
+ return item && typeof item === 'object' && !Array.isArray(item);
3
+ }
4
+ export function deepMerge(target, ...sources) {
5
+ if (!sources.length)
6
+ return target;
7
+ const source = sources.shift();
8
+ if (isObject(target) && isObject(source)) {
9
+ for (const key in source) {
10
+ if (isObject(source[key])) {
11
+ // @ts-ignore
12
+ if (!target[key]) {
13
+ // @ts-ignore
14
+ Object.assign(target, { [key]: {} });
15
+ }
16
+ // @ts-ignore
17
+ deepMerge(target[key], source[key]);
18
+ }
19
+ else {
20
+ // @ts-ignore
21
+ Object.assign(target, { [key]: source[key] });
22
+ }
23
+ }
24
+ }
25
+ return deepMerge(target, ...sources);
26
+ }
27
+ //# sourceMappingURL=deep-merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-merge.js","sourceRoot":"","sources":["../../src/deep-merge.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,IAAS;IACzB,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAS,EACT,GAAG,OAA2B;IAE9B,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,MAAM,CAAA;IAElC,MAAM,MAAM,GAAQ,OAAO,CAAC,KAAK,EAAE,CAAA;IAEnC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1B,aAAa;gBACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjB,aAAa;oBACb,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;gBACtC,CAAC;gBAED,aAAa;gBACb,SAAS,CAAI,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACxC,CAAC;iBAAM,CAAC;gBACN,aAAa;gBACb,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAI,MAAM,EAAE,GAAG,OAAO,CAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Ensures that the given array contains unique truthy values.
3
+ *
4
+ * @param {T[]} arr - The array to ensure uniqueness and truthiness.
5
+ * @return {T[]} - The resulting array with unique truthy values.
6
+ */
7
+ export declare function ensureUniqArrayWithTruthyValues<T>(arr?: T[]): T[];
8
+ /**
9
+ * Ensures that the input is an array or undefined. If the input is already an array with values,
10
+ * it will return the input array as is. If the input is a value other than undefined, it will wrap
11
+ * the value in an array and return it. If the input is undefined, it will return undefined.
12
+ *
13
+ * @param {T[] | T} arr - The input value that needs to be checked.
14
+ * @returns {T[] | undefined} - An array or undefined based on the input value.
15
+ */
16
+ export declare function ensureArrayValuesOrUndefined<T>(arr?: T[] | T): T[] | undefined;
@@ -0,0 +1,26 @@
1
+ import { uniq } from 'lodash-es';
2
+ /**
3
+ * Ensures that the given array contains unique truthy values.
4
+ *
5
+ * @param {T[]} arr - The array to ensure uniqueness and truthiness.
6
+ * @return {T[]} - The resulting array with unique truthy values.
7
+ */
8
+ export function ensureUniqArrayWithTruthyValues(arr) {
9
+ return (Array.isArray(arr) ? uniq(arr) : []).filter((x) => !!x);
10
+ }
11
+ /**
12
+ * Ensures that the input is an array or undefined. If the input is already an array with values,
13
+ * it will return the input array as is. If the input is a value other than undefined, it will wrap
14
+ * the value in an array and return it. If the input is undefined, it will return undefined.
15
+ *
16
+ * @param {T[] | T} arr - The input value that needs to be checked.
17
+ * @returns {T[] | undefined} - An array or undefined based on the input value.
18
+ */
19
+ export function ensureArrayValuesOrUndefined(arr) {
20
+ if (Array.isArray(arr) && arr.length)
21
+ return arr;
22
+ if (typeof arr !== 'undefined')
23
+ return [arr];
24
+ return undefined;
25
+ }
26
+ //# sourceMappingURL=ensure-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-array.js","sourceRoot":"","sources":["../../src/ensure-array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAI,GAAS;IAC1D,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,4BAA4B,CAAI,GAAa;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM;QAAG,OAAO,GAAG,CAAA;IACjD,IAAI,OAAO,GAAG,KAAK,WAAW;QAAE,OAAO,CAAC,GAAG,CAAQ,CAAA;IAEnD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function formatDecimal(value: number, maxDecimals?: number): number;
@@ -0,0 +1,9 @@
1
+ export function formatDecimal(value, maxDecimals = 2) {
2
+ if (typeof value === 'number' && value % 1 !== 0) {
3
+ // The number is a decimal, round it to 2 decimal places
4
+ return +value.toFixed(maxDecimals);
5
+ }
6
+ // The value is not a decimal number, return it as is
7
+ return value;
8
+ }
9
+ //# sourceMappingURL=format-decimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-decimal.js","sourceRoot":"","sources":["../../src/format-decimal.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,WAAW,GAAG,CAAC;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,wDAAwD;QACxD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACpC,CAAC;IAED,qDAAqD;IACrD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isEmail(email: string): boolean;
@@ -0,0 +1,5 @@
1
+ export function isEmail(email) {
2
+ const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3
+ return re.test(String(email).trim().toLowerCase());
4
+ }
5
+ //# sourceMappingURL=is-email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-email.js","sourceRoot":"","sources":["../../src/is-email.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,EAAE,GACN,uJAAuJ,CAAA;IACzJ,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AACpD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isHexColor(str: string): boolean;
@@ -0,0 +1,4 @@
1
+ export function isHexColor(str) {
2
+ return /^#([0-9A-F]{3}){1,2}$/i.test(str);
3
+ }
4
+ //# sourceMappingURL=is-hex-color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-hex-color.js","sourceRoot":"","sources":["../../src/is-hex-color.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC3C,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const isProd: () => boolean;
@@ -0,0 +1,2 @@
1
+ export const isProd = () => process.env.NODE_ENV === 'production';
2
+ //# sourceMappingURL=is-prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-prod.js","sourceRoot":"","sources":["../../src/is-prod.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function isUrl(str: string): boolean;
@@ -0,0 +1,10 @@
1
+ export function isUrl(str) {
2
+ const pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
3
+ '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
4
+ '((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
5
+ '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
6
+ '(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
7
+ '(\\#[-a-z\\d_]*)?$', 'i');
8
+ return !!pattern.test(str);
9
+ }
10
+ //# sourceMappingURL=is-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-url.js","sourceRoot":"","sources":["../../src/is-url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,mBAAmB,GAAG,WAAW;QAC/B,kDAAkD,GAAG,cAAc;QACnE,6BAA6B,GAAG,qBAAqB;QACrD,iCAAiC,GAAG,gBAAgB;QACpD,0BAA0B,GAAG,eAAe;QAC5C,oBAAoB,EACtB,GAAG,CACJ,CAAA;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This func is used by Entities to create `id` fields, some Entities embed the OrganizationEntity's `id` in their
3
+ * own `id`, in these cases, the `organizationId` is passed as an arg. The position of the embedded organizationId
4
+ * should always be last.
5
+ *
6
+ * The default size we implement here is 14 char,
7
+ *
8
+ * Note: for size, check the collission probability calculator: https://zelark.github.io/nano-id-cc/
9
+ *
10
+ * @param prefix
11
+ * @param opts
12
+ */
13
+ export declare const makeUuid: (prefix?: string | number, opts?: {
14
+ postfix?: string;
15
+ size?: number;
16
+ }) => string;
@@ -0,0 +1,23 @@
1
+ import { nanoid } from 'nanoid';
2
+ /**
3
+ * This func is used by Entities to create `id` fields, some Entities embed the OrganizationEntity's `id` in their
4
+ * own `id`, in these cases, the `organizationId` is passed as an arg. The position of the embedded organizationId
5
+ * should always be last.
6
+ *
7
+ * The default size we implement here is 14 char,
8
+ *
9
+ * Note: for size, check the collission probability calculator: https://zelark.github.io/nano-id-cc/
10
+ *
11
+ * @param prefix
12
+ * @param opts
13
+ */
14
+ export const makeUuid = (prefix, opts) => {
15
+ const prfx = prefix || '';
16
+ const psfx = opts?.postfix ? `${opts?.postfix}` : '';
17
+ // no spaces or line-breaks allowed
18
+ // The only special chars allowed are "-" and "_"
19
+ return `${prfx}${nanoid(opts?.size || 14)}${psfx}`
20
+ .trim()
21
+ .replace(/[^\w-_]/g, '');
22
+ };
23
+ //# sourceMappingURL=make-uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-uuid.js","sourceRoot":"","sources":["../../src/make-uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAwB,EACxB,IAA0C,EAC1C,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAA;IACzB,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEpD,mCAAmC;IACnC,iDAAiD;IACjD,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE;SAC/C,IAAI,EAAE;SACN,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import { makeUuid } from './make-uuid';
2
+ describe('makeUuid()', () => {
3
+ test('it works', () => {
4
+ const uuid = makeUuid();
5
+ expect(typeof uuid).toBe('string');
6
+ expect(uuid.length).toBeGreaterThan(10);
7
+ });
8
+ test('it accepts a prefix', () => {
9
+ const uuid = makeUuid('pRfiX');
10
+ const uuid2 = makeUuid('-0.*--');
11
+ const uuid3 = makeUuid(' - nospacesallowed - ');
12
+ expect(uuid).toContain('pRfiX');
13
+ expect(uuid2).toContain('-0--');
14
+ expect(uuid3).toContain('-nospacesallowed-');
15
+ expect(uuid.length).toBeGreaterThan(16);
16
+ });
17
+ test('it accepts an organizationId and is always appended to the uuid', () => {
18
+ const uuid = makeUuid('prefix', { postfix: 'abc123' });
19
+ expect(uuid.substr(uuid.length - 6)).toBe('abc123');
20
+ });
21
+ });
22
+ //# sourceMappingURL=make-uuid.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-uuid.test.js","sourceRoot":"","sources":["../../src/make-uuid.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QACpB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAA;QAEvB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAA;QAE/C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAC5C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEtD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}