@catbee/utils 0.0.8-rc.0 → 0.0.8-rc.2
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/README.md +25 -1
- package/build/esm/config.d.ts +0 -1
- package/build/esm/config.js +6 -7
- package/build/esm/index.d.ts +0 -1
- package/build/esm/index.js +0 -1
- package/build/esm/servers/server.builder.d.ts +0 -1
- package/build/esm/servers/server.builder.js +99 -147
- package/build/esm/servers/server.d.ts +0 -1
- package/build/esm/servers/server.js +591 -876
- package/build/esm/types/api-response.d.ts +0 -1
- package/build/esm/types/api-response.js +0 -1
- package/build/esm/types/index.d.ts +0 -1
- package/build/esm/types/index.js +0 -1
- package/build/esm/types/server.d.ts +0 -1
- package/build/esm/types/server.js +0 -1
- package/build/esm/utils/array.utils.d.ts +0 -1
- package/build/esm/utils/array.utils.js +48 -86
- package/build/esm/utils/async.utils.d.ts +0 -1
- package/build/esm/utils/async.utils.js +247 -524
- package/build/esm/utils/cache.utils.d.ts +0 -1
- package/build/esm/utils/cache.utils.js +96 -301
- package/build/esm/utils/context-store.utils.d.ts +0 -1
- package/build/esm/utils/context-store.utils.js +62 -79
- package/build/esm/utils/crypto.utils.d.ts +0 -1
- package/build/esm/utils/crypto.utils.js +78 -175
- package/build/esm/utils/date.utils.d.ts +0 -1
- package/build/esm/utils/date.utils.js +47 -53
- package/build/esm/utils/decorators.utils.d.ts +201 -5
- package/build/esm/utils/decorators.utils.js +632 -285
- package/build/esm/utils/dir.utils.d.ts +0 -1
- package/build/esm/utils/dir.utils.js +264 -786
- package/build/esm/utils/env.utils.d.ts +0 -1
- package/build/esm/utils/env.utils.js +180 -271
- package/build/esm/utils/exception.utils.d.ts +0 -1
- package/build/esm/utils/exception.utils.js +112 -289
- package/build/esm/utils/fs.utils.d.ts +0 -1
- package/build/esm/utils/fs.utils.js +169 -401
- package/build/esm/utils/http-status-codes.d.ts +0 -1
- package/build/esm/utils/http-status-codes.js +0 -1
- package/build/esm/utils/id.utils.d.ts +0 -1
- package/build/esm/utils/id.utils.js +5 -9
- package/build/esm/utils/logger.utils.d.ts +0 -1
- package/build/esm/utils/logger.utils.js +34 -71
- package/build/esm/utils/middleware.utils.d.ts +0 -1
- package/build/esm/utils/middleware.utils.js +65 -155
- package/build/esm/utils/obj.utils.d.ts +0 -1
- package/build/esm/utils/obj.utils.js +69 -176
- package/build/esm/utils/performance.utils.d.ts +0 -1
- package/build/esm/utils/performance.utils.js +92 -195
- package/build/esm/utils/request.utils.d.ts +0 -1
- package/build/esm/utils/request.utils.js +41 -74
- package/build/esm/utils/response.utils.d.ts +0 -1
- package/build/esm/utils/response.utils.js +84 -107
- package/build/esm/utils/stream.utils.d.ts +0 -1
- package/build/esm/utils/stream.utils.js +38 -113
- package/build/esm/utils/string.utils.d.ts +0 -1
- package/build/esm/utils/string.utils.js +6 -11
- package/build/esm/utils/type.utils.d.ts +0 -1
- package/build/esm/utils/type.utils.js +8 -12
- package/build/esm/utils/url.utils.d.ts +0 -1
- package/build/esm/utils/url.utils.js +49 -127
- package/build/esm/utils/validate.utils.d.ts +0 -1
- package/build/esm/utils/validate.utils.js +23 -40
- package/package.json +3 -33
- package/build/esm/config.js.map +0 -1
- package/build/esm/index.js.map +0 -1
- package/build/esm/servers/server.builder.js.map +0 -1
- package/build/esm/servers/server.js.map +0 -1
- package/build/esm/types/api-response.js.map +0 -1
- package/build/esm/types/index.js.map +0 -1
- package/build/esm/types/server.js.map +0 -1
- package/build/esm/utils/array.utils.js.map +0 -1
- package/build/esm/utils/async.utils.js.map +0 -1
- package/build/esm/utils/cache.utils.js.map +0 -1
- package/build/esm/utils/context-store.utils.js.map +0 -1
- package/build/esm/utils/crypto.utils.js.map +0 -1
- package/build/esm/utils/date.utils.js.map +0 -1
- package/build/esm/utils/decorators.utils.js.map +0 -1
- package/build/esm/utils/dir.utils.js.map +0 -1
- package/build/esm/utils/env.utils.js.map +0 -1
- package/build/esm/utils/exception.utils.js.map +0 -1
- package/build/esm/utils/fs.utils.js.map +0 -1
- package/build/esm/utils/http-status-codes.js.map +0 -1
- package/build/esm/utils/id.utils.js.map +0 -1
- package/build/esm/utils/logger.utils.js.map +0 -1
- package/build/esm/utils/middleware.utils.js.map +0 -1
- package/build/esm/utils/obj.utils.js.map +0 -1
- package/build/esm/utils/performance.utils.js.map +0 -1
- package/build/esm/utils/request.utils.js.map +0 -1
- package/build/esm/utils/response.utils.js.map +0 -1
- package/build/esm/utils/stream.utils.js.map +0 -1
- package/build/esm/utils/string.utils.js.map +0 -1
- package/build/esm/utils/type.utils.js.map +0 -1
- package/build/esm/utils/url.utils.js.map +0 -1
- package/build/esm/utils/validate.utils.js.map +0 -1
- package/build/esnext/config.d.ts +0 -122
- package/build/esnext/config.js +0 -133
- package/build/esnext/config.js.map +0 -1
- package/build/esnext/index.d.ts +0 -27
- package/build/esnext/index.js +0 -50
- package/build/esnext/index.js.map +0 -1
- package/build/esnext/servers/server.builder.d.ts +0 -508
- package/build/esnext/servers/server.builder.js +0 -657
- package/build/esnext/servers/server.builder.js.map +0 -1
- package/build/esnext/servers/server.d.ts +0 -256
- package/build/esnext/servers/server.js +0 -955
- package/build/esnext/servers/server.js.map +0 -1
- package/build/esnext/types/api-response.d.ts +0 -152
- package/build/esnext/types/api-response.js +0 -34
- package/build/esnext/types/api-response.js.map +0 -1
- package/build/esnext/types/index.d.ts +0 -125
- package/build/esnext/types/index.js +0 -25
- package/build/esnext/types/index.js.map +0 -1
- package/build/esnext/types/server.d.ts +0 -268
- package/build/esnext/types/server.js +0 -25
- package/build/esnext/types/server.js.map +0 -1
- package/build/esnext/utils/array.utils.d.ts +0 -168
- package/build/esnext/utils/array.utils.js +0 -345
- package/build/esnext/utils/array.utils.js.map +0 -1
- package/build/esnext/utils/async.utils.d.ts +0 -265
- package/build/esnext/utils/async.utils.js +0 -620
- package/build/esnext/utils/async.utils.js.map +0 -1
- package/build/esnext/utils/cache.utils.d.ts +0 -153
- package/build/esnext/utils/cache.utils.js +0 -293
- package/build/esnext/utils/cache.utils.js.map +0 -1
- package/build/esnext/utils/context-store.utils.d.ts +0 -189
- package/build/esnext/utils/context-store.utils.js +0 -289
- package/build/esnext/utils/context-store.utils.js.map +0 -1
- package/build/esnext/utils/crypto.utils.d.ts +0 -160
- package/build/esnext/utils/crypto.utils.js +0 -276
- package/build/esnext/utils/crypto.utils.js.map +0 -1
- package/build/esnext/utils/date.utils.d.ts +0 -159
- package/build/esnext/utils/date.utils.js +0 -384
- package/build/esnext/utils/date.utils.js.map +0 -1
- package/build/esnext/utils/decorators.utils.d.ts +0 -315
- package/build/esnext/utils/decorators.utils.js +0 -504
- package/build/esnext/utils/decorators.utils.js.map +0 -1
- package/build/esnext/utils/dir.utils.d.ts +0 -196
- package/build/esnext/utils/dir.utils.js +0 -477
- package/build/esnext/utils/dir.utils.js.map +0 -1
- package/build/esnext/utils/env.utils.d.ts +0 -377
- package/build/esnext/utils/env.utils.js +0 -785
- package/build/esnext/utils/env.utils.js.map +0 -1
- package/build/esnext/utils/exception.utils.d.ts +0 -230
- package/build/esnext/utils/exception.utils.js +0 -381
- package/build/esnext/utils/exception.utils.js.map +0 -1
- package/build/esnext/utils/fs.utils.d.ts +0 -164
- package/build/esnext/utils/fs.utils.js +0 -349
- package/build/esnext/utils/fs.utils.js.map +0 -1
- package/build/esnext/utils/http-status-codes.d.ts +0 -266
- package/build/esnext/utils/http-status-codes.js +0 -295
- package/build/esnext/utils/http-status-codes.js.map +0 -1
- package/build/esnext/utils/id.utils.d.ts +0 -36
- package/build/esnext/utils/id.utils.js +0 -84
- package/build/esnext/utils/id.utils.js.map +0 -1
- package/build/esnext/utils/logger.utils.d.ts +0 -160
- package/build/esnext/utils/logger.utils.js +0 -300
- package/build/esnext/utils/logger.utils.js.map +0 -1
- package/build/esnext/utils/middleware.utils.d.ts +0 -100
- package/build/esnext/utils/middleware.utils.js +0 -236
- package/build/esnext/utils/middleware.utils.js.map +0 -1
- package/build/esnext/utils/obj.utils.d.ts +0 -124
- package/build/esnext/utils/obj.utils.js +0 -413
- package/build/esnext/utils/obj.utils.js.map +0 -1
- package/build/esnext/utils/performance.utils.d.ts +0 -136
- package/build/esnext/utils/performance.utils.js +0 -271
- package/build/esnext/utils/performance.utils.js.map +0 -1
- package/build/esnext/utils/request.utils.d.ts +0 -86
- package/build/esnext/utils/request.utils.js +0 -186
- package/build/esnext/utils/request.utils.js.map +0 -1
- package/build/esnext/utils/response.utils.d.ts +0 -163
- package/build/esnext/utils/response.utils.js +0 -247
- package/build/esnext/utils/response.utils.js.map +0 -1
- package/build/esnext/utils/stream.utils.d.ts +0 -88
- package/build/esnext/utils/stream.utils.js +0 -210
- package/build/esnext/utils/stream.utils.js.map +0 -1
- package/build/esnext/utils/string.utils.d.ts +0 -93
- package/build/esnext/utils/string.utils.js +0 -165
- package/build/esnext/utils/string.utils.js.map +0 -1
- package/build/esnext/utils/type.utils.d.ts +0 -90
- package/build/esnext/utils/type.utils.js +0 -187
- package/build/esnext/utils/type.utils.js.map +0 -1
- package/build/esnext/utils/url.utils.d.ts +0 -141
- package/build/esnext/utils/url.utils.js +0 -304
- package/build/esnext/utils/url.utils.js.map +0 -1
- package/build/esnext/utils/validate.utils.d.ts +0 -177
- package/build/esnext/utils/validate.utils.js +0 -320
- package/build/esnext/utils/validate.utils.js.map +0 -1
- package/build/src/config.d.ts +0 -122
- package/build/src/config.js +0 -138
- package/build/src/config.js.map +0 -1
- package/build/src/index.d.ts +0 -27
- package/build/src/index.js +0 -69
- package/build/src/index.js.map +0 -1
- package/build/src/servers/server.builder.d.ts +0 -508
- package/build/src/servers/server.builder.js +0 -661
- package/build/src/servers/server.builder.js.map +0 -1
- package/build/src/servers/server.d.ts +0 -256
- package/build/src/servers/server.js +0 -962
- package/build/src/servers/server.js.map +0 -1
- package/build/src/types/api-response.d.ts +0 -152
- package/build/src/types/api-response.js +0 -37
- package/build/src/types/api-response.js.map +0 -1
- package/build/src/types/index.d.ts +0 -125
- package/build/src/types/index.js +0 -26
- package/build/src/types/index.js.map +0 -1
- package/build/src/types/server.d.ts +0 -268
- package/build/src/types/server.js +0 -26
- package/build/src/types/server.js.map +0 -1
- package/build/src/utils/array.utils.d.ts +0 -168
- package/build/src/utils/array.utils.js +0 -364
- package/build/src/utils/array.utils.js.map +0 -1
- package/build/src/utils/async.utils.d.ts +0 -265
- package/build/src/utils/async.utils.js +0 -641
- package/build/src/utils/async.utils.js.map +0 -1
- package/build/src/utils/cache.utils.d.ts +0 -153
- package/build/src/utils/cache.utils.js +0 -297
- package/build/src/utils/cache.utils.js.map +0 -1
- package/build/src/utils/context-store.utils.d.ts +0 -189
- package/build/src/utils/context-store.utils.js +0 -296
- package/build/src/utils/context-store.utils.js.map +0 -1
- package/build/src/utils/crypto.utils.d.ts +0 -160
- package/build/src/utils/crypto.utils.js +0 -293
- package/build/src/utils/crypto.utils.js.map +0 -1
- package/build/src/utils/date.utils.d.ts +0 -159
- package/build/src/utils/date.utils.js +0 -396
- package/build/src/utils/date.utils.js.map +0 -1
- package/build/src/utils/decorators.utils.d.ts +0 -315
- package/build/src/utils/decorators.utils.js +0 -516
- package/build/src/utils/decorators.utils.js.map +0 -1
- package/build/src/utils/dir.utils.d.ts +0 -196
- package/build/src/utils/dir.utils.js +0 -501
- package/build/src/utils/dir.utils.js.map +0 -1
- package/build/src/utils/env.utils.d.ts +0 -377
- package/build/src/utils/env.utils.js +0 -789
- package/build/src/utils/env.utils.js.map +0 -1
- package/build/src/utils/exception.utils.d.ts +0 -230
- package/build/src/utils/exception.utils.js +0 -407
- package/build/src/utils/exception.utils.js.map +0 -1
- package/build/src/utils/fs.utils.d.ts +0 -164
- package/build/src/utils/fs.utils.js +0 -372
- package/build/src/utils/fs.utils.js.map +0 -1
- package/build/src/utils/http-status-codes.d.ts +0 -266
- package/build/src/utils/http-status-codes.js +0 -298
- package/build/src/utils/http-status-codes.js.map +0 -1
- package/build/src/utils/id.utils.d.ts +0 -36
- package/build/src/utils/id.utils.js +0 -91
- package/build/src/utils/id.utils.js.map +0 -1
- package/build/src/utils/logger.utils.d.ts +0 -160
- package/build/src/utils/logger.utils.js +0 -346
- package/build/src/utils/logger.utils.js.map +0 -1
- package/build/src/utils/middleware.utils.d.ts +0 -100
- package/build/src/utils/middleware.utils.js +0 -244
- package/build/src/utils/middleware.utils.js.map +0 -1
- package/build/src/utils/obj.utils.d.ts +0 -124
- package/build/src/utils/obj.utils.js +0 -429
- package/build/src/utils/obj.utils.js.map +0 -1
- package/build/src/utils/performance.utils.d.ts +0 -136
- package/build/src/utils/performance.utils.js +0 -278
- package/build/src/utils/performance.utils.js.map +0 -1
- package/build/src/utils/request.utils.d.ts +0 -86
- package/build/src/utils/request.utils.js +0 -195
- package/build/src/utils/request.utils.js.map +0 -1
- package/build/src/utils/response.utils.d.ts +0 -163
- package/build/src/utils/response.utils.js +0 -260
- package/build/src/utils/response.utils.js.map +0 -1
- package/build/src/utils/stream.utils.d.ts +0 -88
- package/build/src/utils/stream.utils.js +0 -218
- package/build/src/utils/stream.utils.js.map +0 -1
- package/build/src/utils/string.utils.d.ts +0 -93
- package/build/src/utils/string.utils.js +0 -179
- package/build/src/utils/string.utils.js.map +0 -1
- package/build/src/utils/type.utils.d.ts +0 -90
- package/build/src/utils/type.utils.js +0 -196
- package/build/src/utils/type.utils.js.map +0 -1
- package/build/src/utils/url.utils.d.ts +0 -141
- package/build/src/utils/url.utils.js +0 -317
- package/build/src/utils/url.utils.js.map +0 -1
- package/build/src/utils/validate.utils.d.ts +0 -177
- package/build/src/utils/validate.utils.js +0 -345
- package/build/src/utils/validate.utils.js.map +0 -1
package/build/esm/types/index.js
CHANGED
|
@@ -165,4 +165,3 @@ export declare function compact<T>(array: T[]): NonNullable<T>[];
|
|
|
165
165
|
* @returns {Record<string, number>} Object with counts by key.
|
|
166
166
|
*/
|
|
167
167
|
export declare function countBy<T>(array: T[], keyFn: (item: T) => string | number | symbol): Record<string, number>;
|
|
168
|
-
//# sourceMappingURL=array.utils.d.ts.map
|
|
@@ -21,31 +21,6 @@
|
|
|
21
21
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
22
|
* SOFTWARE.
|
|
23
23
|
*/
|
|
24
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
25
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
26
|
-
if (!m) return o;
|
|
27
|
-
var i = m.call(o), r, ar = [], e;
|
|
28
|
-
try {
|
|
29
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
30
|
-
}
|
|
31
|
-
catch (error) { e = { error: error }; }
|
|
32
|
-
finally {
|
|
33
|
-
try {
|
|
34
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
35
|
-
}
|
|
36
|
-
finally { if (e) throw e.error; }
|
|
37
|
-
}
|
|
38
|
-
return ar;
|
|
39
|
-
};
|
|
40
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
41
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
42
|
-
if (ar || !(i in from)) {
|
|
43
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
44
|
-
ar[i] = from[i];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
48
|
-
};
|
|
49
24
|
import { getValueByPath } from './obj.utils';
|
|
50
25
|
/**
|
|
51
26
|
* Splits an array into chunks of the specified size.
|
|
@@ -64,7 +39,7 @@ export function chunk(array, size) {
|
|
|
64
39
|
return [];
|
|
65
40
|
if (!Number.isInteger(size) || size <= 0)
|
|
66
41
|
throw new Error('Chunk size must be a positive integer');
|
|
67
|
-
return Array.from({ length: Math.ceil(array.length / size) },
|
|
42
|
+
return Array.from({ length: Math.ceil(array.length / size) }, (_, i) => array.slice(i * size, i * size + size));
|
|
68
43
|
}
|
|
69
44
|
/**
|
|
70
45
|
* Removes duplicate values from an array.
|
|
@@ -80,9 +55,9 @@ export function unique(array, keyFn) {
|
|
|
80
55
|
return [];
|
|
81
56
|
if (!keyFn)
|
|
82
57
|
return Array.from(new Set(array));
|
|
83
|
-
|
|
84
|
-
return array.filter(
|
|
85
|
-
|
|
58
|
+
const seen = new Set();
|
|
59
|
+
return array.filter(item => {
|
|
60
|
+
const key = keyFn(item);
|
|
86
61
|
if (seen.has(key))
|
|
87
62
|
return false;
|
|
88
63
|
seen.add(key);
|
|
@@ -99,9 +74,9 @@ export function unique(array, keyFn) {
|
|
|
99
74
|
export function flattenDeep(array) {
|
|
100
75
|
if (!Array.isArray(array))
|
|
101
76
|
return [];
|
|
102
|
-
return array.reduce(
|
|
77
|
+
return array.reduce((acc, val) => {
|
|
103
78
|
if (Array.isArray(val)) {
|
|
104
|
-
acc.push
|
|
79
|
+
acc.push(...flattenDeep(val));
|
|
105
80
|
}
|
|
106
81
|
else {
|
|
107
82
|
acc.push(val);
|
|
@@ -124,9 +99,9 @@ export function random(array) {
|
|
|
124
99
|
export function groupBy(array, keyOrFn) {
|
|
125
100
|
if (!Array.isArray(array) || array.length === 0)
|
|
126
101
|
return {};
|
|
127
|
-
|
|
128
|
-
return array.reduce(
|
|
129
|
-
|
|
102
|
+
const keyFn = typeof keyOrFn === 'function' ? keyOrFn : (item) => item[keyOrFn];
|
|
103
|
+
return array.reduce((acc, item) => {
|
|
104
|
+
const key = keyFn(item);
|
|
130
105
|
if (!acc[key])
|
|
131
106
|
acc[key] = [];
|
|
132
107
|
acc[key].push(item);
|
|
@@ -143,13 +118,12 @@ export function groupBy(array, keyOrFn) {
|
|
|
143
118
|
* @throws {TypeError} If array is not an array.
|
|
144
119
|
*/
|
|
145
120
|
export function shuffle(array) {
|
|
146
|
-
var _a;
|
|
147
121
|
if (!Array.isArray(array))
|
|
148
122
|
throw new TypeError('Expected an array');
|
|
149
|
-
|
|
150
|
-
for (
|
|
151
|
-
|
|
152
|
-
|
|
123
|
+
const copy = array.slice();
|
|
124
|
+
for (let i = copy.length - 1; i > 0; i--) {
|
|
125
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
126
|
+
[copy[i], copy[j]] = [copy[j], copy[i]];
|
|
153
127
|
}
|
|
154
128
|
return copy;
|
|
155
129
|
}
|
|
@@ -165,7 +139,7 @@ export function shuffle(array) {
|
|
|
165
139
|
export function pluck(array, key) {
|
|
166
140
|
if (!Array.isArray(array))
|
|
167
141
|
return [];
|
|
168
|
-
return array.map(
|
|
142
|
+
return array.map(item => item[key]);
|
|
169
143
|
}
|
|
170
144
|
/**
|
|
171
145
|
* Returns values in array A that are not in array B.
|
|
@@ -178,8 +152,8 @@ export function pluck(array, key) {
|
|
|
178
152
|
export function difference(a, b) {
|
|
179
153
|
if (!Array.isArray(a) || !Array.isArray(b))
|
|
180
154
|
return [];
|
|
181
|
-
|
|
182
|
-
return a.filter(
|
|
155
|
+
const setB = new Set(b);
|
|
156
|
+
return a.filter(item => !setB.has(item));
|
|
183
157
|
}
|
|
184
158
|
/**
|
|
185
159
|
* Returns common values between arrays A and B.
|
|
@@ -192,8 +166,8 @@ export function difference(a, b) {
|
|
|
192
166
|
export function intersect(a, b) {
|
|
193
167
|
if (!Array.isArray(a) || !Array.isArray(b))
|
|
194
168
|
return [];
|
|
195
|
-
|
|
196
|
-
return a.filter(
|
|
169
|
+
const setB = new Set(b);
|
|
170
|
+
return a.filter(item => setB.has(item));
|
|
197
171
|
}
|
|
198
172
|
/**
|
|
199
173
|
* Sorts an array of objects by a nested key using Merge Sort (O(n log n)).
|
|
@@ -206,16 +180,15 @@ export function intersect(a, b) {
|
|
|
206
180
|
* @returns {T[]} A new sorted array.
|
|
207
181
|
* @throws {TypeError} If array is not an array.
|
|
208
182
|
*/
|
|
209
|
-
export function mergeSort(array, key, direction) {
|
|
210
|
-
if (direction === void 0) { direction = 'asc'; }
|
|
183
|
+
export function mergeSort(array, key, direction = 'asc') {
|
|
211
184
|
if (!Array.isArray(array))
|
|
212
185
|
throw new TypeError('Expected array');
|
|
213
186
|
if (array.length <= 1)
|
|
214
187
|
return array.slice();
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
188
|
+
const keyFn = typeof key === 'function' ? key : (item) => getValueByPath(item, key);
|
|
189
|
+
const compare = (a, b) => {
|
|
190
|
+
const aVal = keyFn(a);
|
|
191
|
+
const bVal = keyFn(b);
|
|
219
192
|
// Sorts undefined/null last for "asc", first for "desc"
|
|
220
193
|
if (aVal === bVal)
|
|
221
194
|
return 0;
|
|
@@ -225,9 +198,9 @@ export function mergeSort(array, key, direction) {
|
|
|
225
198
|
return direction === 'asc' ? -1 : 1;
|
|
226
199
|
return direction === 'asc' ? (aVal < bVal ? -1 : 1) : aVal > bVal ? -1 : 1;
|
|
227
200
|
};
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
201
|
+
const merge = (left, right) => {
|
|
202
|
+
const result = [];
|
|
203
|
+
let i = 0, j = 0;
|
|
231
204
|
while (i < left.length && j < right.length) {
|
|
232
205
|
if (compare(left[i], right[j]) <= 0)
|
|
233
206
|
result.push(left[i++]);
|
|
@@ -236,12 +209,12 @@ export function mergeSort(array, key, direction) {
|
|
|
236
209
|
}
|
|
237
210
|
return result.concat(left.slice(i)).concat(right.slice(j));
|
|
238
211
|
};
|
|
239
|
-
|
|
212
|
+
const sort = (arr) => {
|
|
240
213
|
if (arr.length <= 1)
|
|
241
214
|
return arr;
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
215
|
+
const mid = Math.floor(arr.length / 2);
|
|
216
|
+
const left = sort(arr.slice(0, mid));
|
|
217
|
+
const right = sort(arr.slice(mid));
|
|
245
218
|
return merge(left, right);
|
|
246
219
|
};
|
|
247
220
|
return sort(array);
|
|
@@ -254,23 +227,16 @@ export function mergeSort(array, key, direction) {
|
|
|
254
227
|
* @param {...Array<T>[]} arrays - Two or more arrays to zip together.
|
|
255
228
|
* @returns {Array<T[]>} Array of grouped elements.
|
|
256
229
|
*/
|
|
257
|
-
export function zip() {
|
|
258
|
-
var arrays = [];
|
|
259
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
260
|
-
arrays[_i] = arguments[_i];
|
|
261
|
-
}
|
|
230
|
+
export function zip(...arrays) {
|
|
262
231
|
if (arrays.length === 0)
|
|
263
232
|
return [];
|
|
264
|
-
if (arrays.some(
|
|
233
|
+
if (arrays.some(arr => !Array.isArray(arr))) {
|
|
265
234
|
throw new TypeError('All arguments must be arrays');
|
|
266
235
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
result.push(arrays.map(
|
|
271
|
-
};
|
|
272
|
-
for (var i = 0; i < minLength; i++) {
|
|
273
|
-
_loop_1(i);
|
|
236
|
+
const minLength = Math.min(...arrays.map(arr => arr.length));
|
|
237
|
+
const result = [];
|
|
238
|
+
for (let i = 0; i < minLength; i++) {
|
|
239
|
+
result.push(arrays.map(arr => arr[i]));
|
|
274
240
|
}
|
|
275
241
|
return result;
|
|
276
242
|
}
|
|
@@ -285,9 +251,8 @@ export function zip() {
|
|
|
285
251
|
export function partition(array, predicate) {
|
|
286
252
|
if (!Array.isArray(array))
|
|
287
253
|
return [[], []];
|
|
288
|
-
return array.reduce(
|
|
289
|
-
|
|
290
|
-
return predicate(item, index, array) ? [__spreadArray(__spreadArray([], __read(pass), false), [item], false), fail] : [pass, __spreadArray(__spreadArray([], __read(fail), false), [item], false)];
|
|
254
|
+
return array.reduce(([pass, fail], item, index) => {
|
|
255
|
+
return predicate(item, index, array) ? [[...pass, item], fail] : [pass, [...fail, item]];
|
|
291
256
|
}, [[], []]);
|
|
292
257
|
}
|
|
293
258
|
/**
|
|
@@ -298,20 +263,19 @@ export function partition(array, predicate) {
|
|
|
298
263
|
* @param {number} [step=1] - Step between numbers.
|
|
299
264
|
* @returns {number[]} Array of numbers in range.
|
|
300
265
|
*/
|
|
301
|
-
export function range(start, end, step) {
|
|
302
|
-
if (step === void 0) { step = 1; }
|
|
266
|
+
export function range(start, end, step = 1) {
|
|
303
267
|
if (!Number.isFinite(start) || !Number.isFinite(end) || !Number.isFinite(step)) {
|
|
304
268
|
throw new TypeError('Arguments must be finite numbers');
|
|
305
269
|
}
|
|
306
270
|
if (step === 0)
|
|
307
271
|
throw new Error('Step cannot be zero');
|
|
308
|
-
|
|
272
|
+
const isAscending = step > 0;
|
|
309
273
|
if ((isAscending && start >= end) || (!isAscending && start <= end)) {
|
|
310
274
|
return [];
|
|
311
275
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
for (
|
|
276
|
+
const length = Math.max(Math.ceil((end - start) / step), 0);
|
|
277
|
+
const result = new Array(length);
|
|
278
|
+
for (let i = 0, value = start; i < length; i++, value += step) {
|
|
315
279
|
result[i] = value;
|
|
316
280
|
}
|
|
317
281
|
return result;
|
|
@@ -324,8 +288,7 @@ export function range(start, end, step) {
|
|
|
324
288
|
* @param {number} [n=1] - Number of elements to take.
|
|
325
289
|
* @returns {T[]} New array with first n elements.
|
|
326
290
|
*/
|
|
327
|
-
export function take(array, n) {
|
|
328
|
-
if (n === void 0) { n = 1; }
|
|
291
|
+
export function take(array, n = 1) {
|
|
329
292
|
if (!Array.isArray(array) || n <= 0)
|
|
330
293
|
return [];
|
|
331
294
|
return array.slice(0, n);
|
|
@@ -341,8 +304,8 @@ export function take(array, n) {
|
|
|
341
304
|
export function takeWhile(array, predicate) {
|
|
342
305
|
if (!Array.isArray(array))
|
|
343
306
|
return [];
|
|
344
|
-
|
|
345
|
-
for (
|
|
307
|
+
const result = [];
|
|
308
|
+
for (let i = 0; i < array.length; i++) {
|
|
346
309
|
if (!predicate(array[i], i))
|
|
347
310
|
break;
|
|
348
311
|
result.push(array[i]);
|
|
@@ -373,10 +336,9 @@ export function compact(array) {
|
|
|
373
336
|
export function countBy(array, keyFn) {
|
|
374
337
|
if (!Array.isArray(array))
|
|
375
338
|
return {};
|
|
376
|
-
return array.reduce(
|
|
377
|
-
|
|
339
|
+
return array.reduce((acc, item) => {
|
|
340
|
+
const key = String(keyFn(item));
|
|
378
341
|
acc[key] = (acc[key] || 0) + 1;
|
|
379
342
|
return acc;
|
|
380
343
|
}, {});
|
|
381
344
|
}
|
|
382
|
-
//# sourceMappingURL=array.utils.js.map
|