@bitbeater/ecma-utils 2.7.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.
Files changed (90) hide show
  1. package/README.md +23 -0
  2. package/dist/bytes.d.ts +65 -0
  3. package/dist/bytes.d.ts.map +1 -0
  4. package/dist/bytes.js +68 -0
  5. package/dist/bytes.js.map +1 -0
  6. package/dist/collection/CircularArray.d.ts +98 -0
  7. package/dist/collection/CircularArray.d.ts.map +1 -0
  8. package/dist/collection/CircularArray.js +134 -0
  9. package/dist/collection/CircularArray.js.map +1 -0
  10. package/dist/collection/EvictingDequeue.d.ts +22 -0
  11. package/dist/collection/EvictingDequeue.d.ts.map +1 -0
  12. package/dist/collection/EvictingDequeue.js +57 -0
  13. package/dist/collection/EvictingDequeue.js.map +1 -0
  14. package/dist/collection/collection.d.ts +4 -0
  15. package/dist/collection/collection.d.ts.map +1 -0
  16. package/dist/collection/collection.js +23 -0
  17. package/dist/collection/collection.js.map +1 -0
  18. package/dist/collection/collectionOperations.d.ts +125 -0
  19. package/dist/collection/collectionOperations.d.ts.map +1 -0
  20. package/dist/collection/collectionOperations.js +193 -0
  21. package/dist/collection/collectionOperations.js.map +1 -0
  22. package/dist/cons.d.ts +34 -0
  23. package/dist/cons.d.ts.map +1 -0
  24. package/dist/cons.js +49 -0
  25. package/dist/cons.js.map +1 -0
  26. package/dist/consts.d.ts +2 -0
  27. package/dist/consts.d.ts.map +1 -0
  28. package/dist/consts.js +5 -0
  29. package/dist/consts.js.map +1 -0
  30. package/dist/index.d.ts +13 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +49 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/logger.d.ts +95 -0
  35. package/dist/logger.d.ts.map +1 -0
  36. package/dist/logger.js +172 -0
  37. package/dist/logger.js.map +1 -0
  38. package/dist/math.d.ts +183 -0
  39. package/dist/math.d.ts.map +1 -0
  40. package/dist/math.js +263 -0
  41. package/dist/math.js.map +1 -0
  42. package/dist/net/http.d.ts +22 -0
  43. package/dist/net/http.d.ts.map +1 -0
  44. package/dist/net/http.js +74 -0
  45. package/dist/net/http.js.map +1 -0
  46. package/dist/object.d.ts +98 -0
  47. package/dist/object.d.ts.map +1 -0
  48. package/dist/object.js +127 -0
  49. package/dist/object.js.map +1 -0
  50. package/dist/path/path.d.ts +2 -0
  51. package/dist/path/path.d.ts.map +1 -0
  52. package/dist/path/path.js +8 -0
  53. package/dist/path/path.js.map +1 -0
  54. package/dist/promises.d.ts +3 -0
  55. package/dist/promises.d.ts.map +1 -0
  56. package/dist/promises.js +13 -0
  57. package/dist/promises.js.map +1 -0
  58. package/dist/random.d.ts +46 -0
  59. package/dist/random.d.ts.map +1 -0
  60. package/dist/random.js +76 -0
  61. package/dist/random.js.map +1 -0
  62. package/dist/revivers.d.ts +25 -0
  63. package/dist/revivers.d.ts.map +1 -0
  64. package/dist/revivers.js +34 -0
  65. package/dist/revivers.js.map +1 -0
  66. package/dist/strings.d.ts +16 -0
  67. package/dist/strings.d.ts.map +1 -0
  68. package/dist/strings.js +34 -0
  69. package/dist/strings.js.map +1 -0
  70. package/dist/time/time.d.ts +189 -0
  71. package/dist/time/time.d.ts.map +1 -0
  72. package/dist/time/time.js +315 -0
  73. package/dist/time/time.js.map +1 -0
  74. package/dist/time/timer.d.ts +93 -0
  75. package/dist/time/timer.d.ts.map +1 -0
  76. package/dist/time/timer.js +182 -0
  77. package/dist/time/timer.js.map +1 -0
  78. package/dist/time.d.ts +189 -0
  79. package/dist/time.d.ts.map +1 -0
  80. package/dist/time.js +308 -0
  81. package/dist/time.js.map +1 -0
  82. package/dist/utils/task_duration_tracker.d.ts +102 -0
  83. package/dist/utils/task_duration_tracker.d.ts.map +1 -0
  84. package/dist/utils/task_duration_tracker.js +144 -0
  85. package/dist/utils/task_duration_tracker.js.map +1 -0
  86. package/dist/utils/utils.d.ts +24 -0
  87. package/dist/utils/utils.d.ts.map +1 -0
  88. package/dist/utils/utils.js +47 -0
  89. package/dist/utils/utils.js.map +1 -0
  90. package/package.json +68 -0
package/dist/object.js ADDED
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPathKeys = getPathKeys;
4
+ exports.isPlainObject = isPlainObject;
5
+ exports.keysOf = keysOf;
6
+ /**
7
+ * Returns an array of a given object's keys paths (own and nested key names) in a reccursive manner, iterated in the same order that a normal loop would.
8
+ *
9
+ * @example ```ts
10
+ * const object={
11
+ * str:"hello",
12
+ * nr:1,
13
+ * fn: (a:number,b:number)=> a+b,
14
+ * arr:[1,2,3],
15
+ * nestedObject:{
16
+ * str:"world",
17
+ * nr:2,
18
+ * fn: (a:number,b:number)=> a+b,
19
+ * arr:[4.5],
20
+ * }
21
+ * };
22
+ *
23
+ * getPathKeys(object)
24
+ *
25
+ * // RETURNS:
26
+ * // [ 'str',
27
+ * // 'nr',
28
+ * // 'fn',
29
+ * // 'arr',
30
+ * // 'nestedObject',
31
+ * // 'nestedObject.str',
32
+ * // 'nestedObject.nr',
33
+ * // 'nestedObject.fn',
34
+ * // 'nestedObject.arr' ]
35
+ * ```
36
+ *
37
+ * @example ```ts
38
+ * const object={
39
+ * str:"hello",
40
+ * nestedObject:{
41
+ * str:"world",
42
+ * nr:2,
43
+ * fn: (a:number,b:number)=> a+b,
44
+ * arr:[4.5],
45
+ * }
46
+ * };
47
+ *
48
+ * getPathKeys(object,{omitFirstLevel:true})
49
+ *
50
+ * // RETURNS:
51
+ * // [ 'str',
52
+ * // 'nestedObject.str',
53
+ * // 'nestedObject.nr',
54
+ * // 'nestedObject.fn',
55
+ * // 'nestedObject.arr' ]
56
+ * ```
57
+ *
58
+ * @param obj object from which to derive the paths
59
+ * @param options options object
60
+ * @returns
61
+ */
62
+ function getPathKeys(obj, options) {
63
+ if (!obj)
64
+ return;
65
+ if (typeof obj === 'string')
66
+ return;
67
+ const pathKeys = [];
68
+ for (const rawKey of Object.keys(obj)) {
69
+ const value = obj[rawKey];
70
+ if (typeof value === 'function' && options?.ignoreFunctions)
71
+ continue;
72
+ const key = Array.isArray(obj) ? '[' + rawKey + ']' : rawKey;
73
+ if (Array.isArray(value) || typeof value !== 'object' || !options?.omitFirstLevel)
74
+ pathKeys.push(key);
75
+ if (typeof value === 'object') {
76
+ if (Array.isArray(value) && !options?.unfoldArrays)
77
+ continue;
78
+ const secondLevelSeparator = Array.isArray(value) ? '' : '.';
79
+ const secondLevelKeys = getPathKeys(value, options);
80
+ if (!secondLevelKeys?.length)
81
+ continue;
82
+ const secondLevelPathKeys = secondLevelKeys.map(k => key + secondLevelSeparator + k);
83
+ pathKeys.push(...secondLevelPathKeys);
84
+ }
85
+ }
86
+ return pathKeys;
87
+ }
88
+ /**
89
+ * Checks if a value is a plain object (not null, not array, not date, not promise, not function)
90
+ *
91
+ * @param v value to check
92
+ * @returns boolean indicating if the value is a plain object
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * isPlainObject({}) // => true
97
+ * isPlainObject({ a: 1, b: { c: 2 } }) // => true
98
+ * isPlainObject(() => {}) // => false
99
+ * isPlainObject(null) // => false
100
+ * isPlainObject(undefined) // => false
101
+ * isPlainObject([]) // => false
102
+ * isPlainObject(new Date()) // => false
103
+ * isPlainObject("hello") // => false
104
+ * isPlainObject(123) // => false
105
+ * isPlainObject(true) // => false
106
+ * isPlainObject(Symbol("sym")) // => false
107
+ * isPlainObject(BigInt(123)) // => false
108
+ * isPlainObject(Promise.resolve(123)) // => false
109
+ * ```
110
+ */
111
+ function isPlainObject(v) {
112
+ return typeof v === 'object' && v !== null && !(v instanceof Date) && !Array.isArray(v) && !(v instanceof Promise);
113
+ }
114
+ /**
115
+ * returns the keys of an object as an array, with proper typing.
116
+ * @example
117
+ * ```ts
118
+ * const obj = { a: 1, b: 2, c: 3 };
119
+ * const keys = keysOf(obj); // ['a', 'b', 'c']
120
+ * ```
121
+ * @param o
122
+ * @returns
123
+ */
124
+ function keysOf(o) {
125
+ return Object.keys(o);
126
+ }
127
+ //# sourceMappingURL=object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../src/object.ts"],"names":[],"mappings":";;AA8DA,kCA2BC;AAyBD,sCAEC;AAYD,wBAEC;AA5HD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,SAAgB,WAAW,CAAC,GAAQ,EAAE,OAAyB;IAC9D,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO;IAEpC,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,EAAE,eAAe;YAAE,SAAS;QAEtE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QAE7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,EAAE,cAAc;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtG,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY;gBAAE,SAAS;YAE7D,MAAM,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAE7D,MAAM,eAAe,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,eAAe,EAAE,MAAM;gBAAE,SAAS;YACvC,MAAM,mBAAmB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,oBAAoB,GAAG,CAAC,CAAC,CAAC;YACrF,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,aAAa,CAAC,CAAU;IACvC,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC;AACpH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,MAAM,CAAmB,CAAI;IAC5C,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAgB,CAAC;AACtC,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare function getPathExtension(path: string): string;
2
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/path/path.ts"],"names":[],"mappings":"AAAA,iBAAS,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
@@ -0,0 +1,8 @@
1
+ function getPathExtension(path) {
2
+ const lastDotIndex = path.lastIndexOf('.');
3
+ if (lastDotIndex === -1 || lastDotIndex === path.length - 1) {
4
+ return '';
5
+ }
6
+ return path.substring(lastDotIndex + 1);
7
+ }
8
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/path/path.ts"],"names":[],"mappings":"AAAA,SAAS,gBAAgB,CAAC,IAAY;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,YAAY,KAAK,CAAC,CAAC,IAAI,YAAY,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function of<T>(data?: T): Promise<T>;
2
+ export declare function delay(ms: number): Promise<void>;
3
+ //# sourceMappingURL=promises.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promises.d.ts","sourceRoot":"","sources":["../src/promises.ts"],"names":[],"mappings":"AAAA,wBAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1C;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/C"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.of = of;
4
+ exports.delay = delay;
5
+ function of(data) {
6
+ return Promise.resolve(data);
7
+ }
8
+ function delay(ms) {
9
+ return new Promise((resolve, _reject) => {
10
+ setTimeout(resolve, ms);
11
+ });
12
+ }
13
+ //# sourceMappingURL=promises.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promises.js","sourceRoot":"","sources":["../src/promises.ts"],"names":[],"mappings":";;AAAA,gBAEC;AAED,sBAIC;AARD,SAAgB,EAAE,CAAI,IAAQ;IAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;QACvC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Returns a random floating-point number between min and max (inclusive).
3
+ * @param min The minimum value.
4
+ * @param max The maximum value.
5
+ * @returns A random floating-point number between min and max.
6
+ */
7
+ export declare function getRandom(min?: number, max?: number): number;
8
+ /**
9
+ * Returns a random integer between min and max (inclusive).
10
+ * @param min The minimum value.
11
+ * @param max The maximum value.
12
+ * @returns A random integer between min and max.
13
+ */
14
+ export declare function getRandomInt(min?: number, max?: number): number;
15
+ /**
16
+ * Returns a random boolean value.
17
+ * @param trueProbability A number between 0 and 1 representing the probability of returning true. Default is 0.5.
18
+ * @returns A random boolean value.
19
+ */
20
+ export declare function getRandomBool(trueProbability?: number): boolean;
21
+ /**
22
+ * Returns either 1 or -1, with equal probability.
23
+ * @returns Either 1 or -1.
24
+ */
25
+ export declare function getRandomSign(positiveProbability?: number): 1 | -1;
26
+ /**]
27
+ * Returns a random character from the given string of characters.
28
+ * @param chars A string containing the characters to choose from. Default is alphanumeric characters.
29
+ * @returns A random character from the given string.
30
+ */
31
+ export declare function getRandomChar(chars?: string): string;
32
+ /**
33
+ * Returns a random string of the specified length using the given characters.
34
+ * @param length The length of the random string to generate.
35
+ * @param chars A string containing the characters to choose from. Default is alphanumeric characters.
36
+ * @returns A random string of the specified length.
37
+ */
38
+ export declare function getRandomString(length: number, chars?: string): string;
39
+ /**
40
+ * Returns a random date between the specified start and end dates.
41
+ * @param start The start date (inclusive).
42
+ * @param end The end date (inclusive).
43
+ * @returns A random date between the start and end dates.
44
+ */
45
+ export declare function getRandomDate(start?: Date, end?: Date): Date;
46
+ //# sourceMappingURL=random.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,SAAmB,EAAE,GAAG,SAAmB,GAAG,MAAM,CAEhF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AAEH,wBAAgB,aAAa,CAAC,eAAe,SAAM,GAAG,OAAO,CAE5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,mBAAmB,SAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAmE,GAAG,MAAM,CAE9G;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAmE,GAAG,MAAM,CAMhI;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,OAAc,EAAE,GAAG,OAAwB,GAAG,IAAI,CAEpF"}
package/dist/random.js ADDED
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRandom = getRandom;
4
+ exports.getRandomInt = getRandomInt;
5
+ exports.getRandomBool = getRandomBool;
6
+ exports.getRandomSign = getRandomSign;
7
+ exports.getRandomChar = getRandomChar;
8
+ exports.getRandomString = getRandomString;
9
+ exports.getRandomDate = getRandomDate;
10
+ const collectionOperations_1 = require("./collection/collectionOperations");
11
+ const time_1 = require("./time/time");
12
+ /**
13
+ * Returns a random floating-point number between min and max (inclusive).
14
+ * @param min The minimum value.
15
+ * @param max The maximum value.
16
+ * @returns A random floating-point number between min and max.
17
+ */
18
+ function getRandom(min = Number.MIN_VALUE, max = Number.MAX_VALUE) {
19
+ return Math.random() * (max - min) + min;
20
+ }
21
+ /**
22
+ * Returns a random integer between min and max (inclusive).
23
+ * @param min The minimum value.
24
+ * @param max The maximum value.
25
+ * @returns A random integer between min and max.
26
+ */
27
+ function getRandomInt(min, max) {
28
+ return Math.floor(getRandom(min, max));
29
+ }
30
+ /**
31
+ * Returns a random boolean value.
32
+ * @param trueProbability A number between 0 and 1 representing the probability of returning true. Default is 0.5.
33
+ * @returns A random boolean value.
34
+ */
35
+ function getRandomBool(trueProbability = 0.5) {
36
+ return Math.random() < trueProbability;
37
+ }
38
+ /**
39
+ * Returns either 1 or -1, with equal probability.
40
+ * @returns Either 1 or -1.
41
+ */
42
+ function getRandomSign(positiveProbability = 0.5) {
43
+ return getRandomBool(positiveProbability) ? 1 : -1;
44
+ }
45
+ /**]
46
+ * Returns a random character from the given string of characters.
47
+ * @param chars A string containing the characters to choose from. Default is alphanumeric characters.
48
+ * @returns A random character from the given string.
49
+ */
50
+ function getRandomChar(chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
51
+ return (0, collectionOperations_1.takeRandomElement)(chars.split(''));
52
+ }
53
+ /**
54
+ * Returns a random string of the specified length using the given characters.
55
+ * @param length The length of the random string to generate.
56
+ * @param chars A string containing the characters to choose from. Default is alphanumeric characters.
57
+ * @returns A random string of the specified length.
58
+ */
59
+ function getRandomString(length, chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
60
+ let result = '';
61
+ for (let i = 0; i < length; i++) {
62
+ result += getRandomChar(chars);
63
+ }
64
+ return result;
65
+ }
66
+ /**
67
+ * Returns a random date between the specified start and end dates.
68
+ * @param start The start date (inclusive).
69
+ * @param end The end date (inclusive).
70
+ * @returns A random date between the start and end dates.
71
+ */
72
+ function getRandomDate(start = new Date(0), end = new Date(time_1.MAX_JS_DATE)) {
73
+ return new Date(getRandomInt(start.getTime(), end.getTime()));
74
+ }
75
+ /// return new Date(getRandomInt(start.getTime(), end.getTime()));
76
+ //# sourceMappingURL=random.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"random.js","sourceRoot":"","sources":["../src/random.ts"],"names":[],"mappings":";;AASA,8BAEC;AAQD,oCAEC;AAQD,sCAEC;AAMD,sCAEC;AAOD,sCAEC;AAQD,0CAMC;AAQD,sCAEC;AAxED,4EAAsE;AACtE,sCAA0C;AAE1C;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,GAAG,MAAM,CAAC,SAAS;IACvE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,GAAY,EAAE,GAAY;IACtD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AAEH,SAAgB,aAAa,CAAC,eAAe,GAAG,GAAG;IAClD,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,mBAAmB,GAAG,GAAG;IACtD,OAAO,aAAa,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,KAAK,GAAG,gEAAgE;IACrG,OAAO,IAAA,wCAAiB,EAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,MAAc,EAAE,KAAK,GAAG,gEAAgE;IACvH,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAW,CAAC;IAC7E,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,kEAAkE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#using_the_reviver_parameter
3
+ */
4
+ export type Reviver<T> = (key: string, value: any) => T;
5
+ /**
6
+ * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#using_the_reviver_parameter
7
+ */
8
+ export type Replacer<T> = Reviver<T> | (number | string)[] | null;
9
+ /**
10
+ * revive
11
+ * @param _key
12
+ * @param value
13
+ * @returns
14
+ */
15
+ export declare const ISO_8601StringtoDate: Reviver<Date>;
16
+ /**
17
+ * merge multiple reviver in one, the resulted value is equal to the result of the first reviver that resolve,
18
+ * so reviver order determine theire priority
19
+ *
20
+ * @param revivers
21
+ * @returns
22
+ * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#using_the_reviver_parameter
23
+ */
24
+ export declare function mergeRevivers(...revivers: Reviver<any>[]): Reviver<any>;
25
+ //# sourceMappingURL=revivers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revivers.d.ts","sourceRoot":"","sources":["../src/revivers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,IAAI,CAA+H,CAAC;AAE/K;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CASvE"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ISO_8601StringtoDate = void 0;
4
+ exports.mergeRevivers = mergeRevivers;
5
+ const consts_1 = require("./consts");
6
+ /**
7
+ * revive
8
+ * @param _key
9
+ * @param value
10
+ * @returns
11
+ */
12
+ const ISO_8601StringtoDate = (_key, value) => (typeof value === 'string' && consts_1.ISO_8601_DATE_FORMAT_REX.test(value) ? new Date(value) : value);
13
+ exports.ISO_8601StringtoDate = ISO_8601StringtoDate;
14
+ /**
15
+ * merge multiple reviver in one, the resulted value is equal to the result of the first reviver that resolve,
16
+ * so reviver order determine theire priority
17
+ *
18
+ * @param revivers
19
+ * @returns
20
+ * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#using_the_reviver_parameter
21
+ */
22
+ function mergeRevivers(...revivers) {
23
+ if (!revivers?.length)
24
+ return;
25
+ return (key, value) => {
26
+ for (const reviver of revivers) {
27
+ const revived = reviver(key, value);
28
+ if (revived !== value)
29
+ return revived;
30
+ }
31
+ return value;
32
+ };
33
+ }
34
+ //# sourceMappingURL=revivers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revivers.js","sourceRoot":"","sources":["../src/revivers.ts"],"names":[],"mappings":";;;AA4BA,sCASC;AArCD,qCAAoD;AAYpD;;;;;GAKG;AACI,MAAM,oBAAoB,GAAkB,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,iCAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAAlK,QAAA,oBAAoB,wBAA8I;AAE/K;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,GAAG,QAAwB;IACxD,IAAI,CAAC,QAAQ,EAAE,MAAM;QAAE,OAAO;IAC9B,OAAO,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE;QAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK;gBAAE,OAAO,OAAO,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare function isJson(str: string): boolean;
2
+ /**
3
+ * convert a template string to a normal string.
4
+ * example:
5
+ * ```ts
6
+ * const name = 'world';
7
+ * const str = templateToString`hello ${name}!`;
8
+ * // str = 'hello world!'
9
+ *
10
+ * @param template
11
+ * @param expressions
12
+ * @returns
13
+ */
14
+ export declare function templateToString(template: TemplateStringsArray, ...expressions: TemplateExpression[]): string;
15
+ export type TemplateExpression = string | number | Array<string | number>;
16
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO3C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,WAAW,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAS7G;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isJson = isJson;
4
+ exports.templateToString = templateToString;
5
+ function isJson(str) {
6
+ try {
7
+ JSON.parse(str);
8
+ }
9
+ catch (e) {
10
+ return false;
11
+ }
12
+ return true;
13
+ }
14
+ /**
15
+ * convert a template string to a normal string.
16
+ * example:
17
+ * ```ts
18
+ * const name = 'world';
19
+ * const str = templateToString`hello ${name}!`;
20
+ * // str = 'hello world!'
21
+ *
22
+ * @param template
23
+ * @param expressions
24
+ * @returns
25
+ */
26
+ function templateToString(template, ...expressions) {
27
+ const merged = [];
28
+ for (let i = 0; i < template.length; i++) {
29
+ merged.push(template[i]);
30
+ merged.push(expressions[i]);
31
+ }
32
+ return merged.join('');
33
+ }
34
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../src/strings.ts"],"names":[],"mappings":";;AAAA,wBAOC;AAcD,4CASC;AA9BD,SAAgB,MAAM,CAAC,GAAW;IACjC,IAAI,CAAC;QACJ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,gBAAgB,CAAC,QAA8B,EAAE,GAAG,WAAiC;IACpG,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC"}
@@ -0,0 +1,189 @@
1
+ export declare const MAX_JS_DATE = 8640000000000000;
2
+ /** in millis */
3
+ export declare const millis = 1;
4
+ /** in millis */
5
+ export declare const second: number;
6
+ /** in millis */
7
+ export declare const minute: number;
8
+ /** in millis */
9
+ export declare const hour: number;
10
+ /** in millis */
11
+ export declare const day: number;
12
+ /** in millis */
13
+ export declare const week: number;
14
+ /**
15
+ * In millis
16
+ * The average month is 365/12 = 30.42 days in a regular year and 366/12 = 30.50 days in a leap year. The Gregorian (western) solar calendar has 365.2425/12 = 30.436875 days on the average, varying between 28 and 31 days.
17
+ */
18
+ export declare const solarYear: number;
19
+ /** in millis */
20
+ export declare const month: number;
21
+ /** in millis */
22
+ export declare const year: number;
23
+ /** 366 days */
24
+ export declare const leapYear: number;
25
+ /** 29 days */
26
+ export declare const leapFebruary: number;
27
+ /** in millis */
28
+ export declare const january: number;
29
+ /** in millis */
30
+ export declare const february: number;
31
+ /** in millis */
32
+ export declare const march: number;
33
+ /** in millis */
34
+ export declare const april: number;
35
+ /** in millis */
36
+ export declare const may: number;
37
+ /** in millis */
38
+ export declare const june: number;
39
+ /** in millis */
40
+ export declare const july: number;
41
+ /** in millis */
42
+ export declare const august: number;
43
+ /** in millis */
44
+ export declare const september: number;
45
+ /** in millis */
46
+ export declare const october: number;
47
+ /** in millis */
48
+ export declare const november: number;
49
+ /** in millis */
50
+ export declare const december: number;
51
+ export declare const months: number[];
52
+ export declare const leapMonths: number[];
53
+ export interface Duration {
54
+ years?: number;
55
+ months?: number;
56
+ weeks?: number;
57
+ days?: number;
58
+ hours?: number;
59
+ minutes?: number;
60
+ seconds?: number;
61
+ milliseconds?: number;
62
+ }
63
+ export interface Interval {
64
+ start?: Date;
65
+ end?: Date;
66
+ }
67
+ /**
68
+ * parse a duration into millisecconds
69
+ *
70
+ * @example
71
+ * ```js
72
+ * durationToMilliSeconds({seconds:1}) // => 1000
73
+ * durationToMilliSeconds({minutes:1}) // => 60_000
74
+ * durationToMilliSeconds({hours:1}) // => 3_600_000
75
+ * durationToMilliSeconds({minutes:1,seconds:1}) // => 61_000
76
+ * durationToMilliSeconds({hours:1,minutes:1,seconds:1}) // => 3_661_000
77
+ * ```
78
+ */
79
+ export declare function durationToMilliSeconds(duration: Duration): number;
80
+ export declare function millisecondsToDuration(millis: number): Duration;
81
+ /**
82
+ * parse a duration into millisecconds
83
+ *
84
+ * @example
85
+ * ```js
86
+ * durationToMilliSeconds({seconds:1}) // => 1
87
+ * durationToMilliSeconds({minutes:1}) // => 60
88
+ * durationToMilliSeconds({hours:1}) // => 3_600
89
+ * durationToMilliSeconds({minutes:1,seconds:1}) // => 61
90
+ * durationToMilliSeconds({hours:1,minutes:1,seconds:1}) // => 3_661
91
+ * ```
92
+ */
93
+ export declare function durationToSeconds(duration: Duration): number;
94
+ /**
95
+ * check if the duration is larger than the interval
96
+ */
97
+ export declare function isDurationBiggerThanInterval(interval: Interval, duration: Duration): boolean;
98
+ /**
99
+ * divide the given interval into smaller intervals, each having the duration equal to the given duration
100
+ *
101
+ * @example
102
+ * ```js
103
+ * const start=new Date('2000-01-01');
104
+ * const end=new Date('2000-01-10');
105
+ *
106
+ * splitIntervalByDuration({start, end},{days:1});
107
+ * // [
108
+ * // {start:2000-01-01, end:2000-01-02},
109
+ * // {start:2000-01-02, end:2000-01-03},
110
+ * // {start:2000-01-03, end:2000-01-04},
111
+ * // {start:2000-01-04, end:2000-01-05},
112
+ * // {start:2000-01-05, end:2000-01-06},
113
+ * // {start:2000-01-06, end:2000-01-07},
114
+ * // {start:2000-01-07, end:2000-01-08},
115
+ * // {start:2000-01-08, end:2000-01-09},
116
+ * // {start:2000-01-09, end:2000-01-10},
117
+ * // ]
118
+ * ```
119
+ */
120
+ export declare function splitIntervalByDuration(interval: Interval, duration: Duration): Interval[];
121
+ /**
122
+ * multiply the given duration
123
+ *
124
+ * @example
125
+ * ```js
126
+ * const duration={moths:2, days:3, hours:4};
127
+ *
128
+ * multiplyDuration(duration:Duration,multiplier:number) // => {moths:4, days:6, hours:8}
129
+ * ```
130
+ */
131
+ export declare function multiplyDuration(duration: Duration, multiplier: number): Duration;
132
+ /**
133
+ * add the given durations
134
+ *
135
+ * @example
136
+ * ```js
137
+ * const duration1={moths:2, days:3, hours:4};
138
+ * const duration2={moths:2, days:3, hours:4};
139
+ * const duration3={moths:2, days:3, hours:4};
140
+ *
141
+ * addDurations(duration1,duration2,duration3) // => {moths:6, days:9, hours:12}
142
+ * ```
143
+ */
144
+ export declare function addDurations(...durations: Duration[]): Duration;
145
+ export declare function isValidDate(value: any): value is Date;
146
+ /**
147
+ * Format a date into sql datetime value
148
+ * @param date
149
+ * @returns
150
+ * * @example
151
+ * ```js
152
+ * const date = new Date();
153
+ * toSqlDate() // => "2017-06-29 17:54:04"
154
+ *
155
+ */
156
+ export declare function toSqlDate(date: Date): string;
157
+ /**
158
+ * Convert an interval to a duration
159
+ * @param interval
160
+ * @returns
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * const interval = { start: new Date('2000-01-01'), end: new Date('2000-01-10') };
165
+ * const duration = IntervalToDuration(interval);
166
+ * // { years: 0, months: 0, weeks: 0, days: 9, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }
167
+ * ```
168
+ */
169
+ export declare function intervalToDuration(interval: Interval): Duration;
170
+ /**
171
+ * Humanize a duration object into a human-readable string.
172
+ * @example
173
+ * ```js
174
+ * const duration = { years: 1, months: 2, days: 3, hours: 4, minutes: 5, seconds: 6 };
175
+ * humanizeDuration(duration) // => "1 year, 2 months, 3 days, 4 hours, 5 minutes and 6 seconds"
176
+ * ```
177
+ * * @example
178
+ * ```js
179
+ * const duration = { seconds: 4000 };
180
+ * humanizeDuration(duration) // => "1 hour, 6 minutes and 40 seconds"
181
+ * ```
182
+ * @param inDuration
183
+ * @param options
184
+ * @returns
185
+ */
186
+ export declare function humanizeDuration(inDuration: Duration, options?: {
187
+ reduce?: boolean;
188
+ }): string;
189
+ //# sourceMappingURL=time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/time/time.ts"],"names":[],"mappings":"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"}