@develia/commons 0.4.13 → 0.4.15
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/cjs/array.js +27 -1
- package/dist/cjs/array.js.map +1 -1
- package/dist/cjs/async-pool-executor.js +15 -0
- package/dist/cjs/async-pool-executor.js.map +1 -1
- package/dist/cjs/browser/form-utilities.js +33 -6
- package/dist/cjs/browser/form-utilities.js.map +1 -1
- package/dist/cjs/browser/geo-location.js +5 -0
- package/dist/cjs/browser/geo-location.js.map +1 -1
- package/dist/cjs/browser/index.js.map +1 -1
- package/dist/cjs/browser/native-bridge.js +9 -0
- package/dist/cjs/browser/native-bridge.js.map +1 -1
- package/dist/cjs/cancellable-promise.js.map +1 -1
- package/dist/cjs/clean-url-search-params.js +1 -0
- package/dist/cjs/clean-url-search-params.js.map +1 -1
- package/dist/cjs/collections/cache-dictionary.js +39 -0
- package/dist/cjs/collections/cache-dictionary.js.map +1 -1
- package/dist/cjs/collections/default-map.js +25 -1
- package/dist/cjs/collections/default-map.js.map +1 -1
- package/dist/cjs/collections/default-weak-map.js +23 -3
- package/dist/cjs/collections/default-weak-map.js.map +1 -1
- package/dist/cjs/{from.js → collections/from.js} +278 -4
- package/dist/cjs/collections/from.js.map +1 -0
- package/dist/cjs/collections/index.js +3 -1
- package/dist/cjs/collections/index.js.map +1 -1
- package/dist/cjs/draft.js +43 -2
- package/dist/cjs/draft.js.map +1 -1
- package/dist/cjs/event-bus.js +1 -0
- package/dist/cjs/event-bus.js.map +1 -1
- package/dist/cjs/index.js +14 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/key-value-pair.js +6 -0
- package/dist/cjs/key-value-pair.js.map +1 -1
- package/dist/cjs/lazy.js +4 -0
- package/dist/cjs/lazy.js.map +1 -1
- package/dist/cjs/math.js +19 -0
- package/dist/cjs/math.js.map +1 -1
- package/dist/cjs/order.js.map +1 -1
- package/dist/cjs/parse.js +96 -0
- package/dist/cjs/parse.js.map +1 -1
- package/dist/cjs/patch.js +10 -2
- package/dist/cjs/patch.js.map +1 -1
- package/dist/cjs/stopwatch.js +10 -0
- package/dist/cjs/stopwatch.js.map +1 -1
- package/dist/cjs/string.js +62 -0
- package/dist/cjs/string.js.map +1 -1
- package/dist/cjs/timer.js +7 -0
- package/dist/cjs/timer.js.map +1 -1
- package/dist/cjs/timespan.js +202 -0
- package/dist/cjs/timespan.js.map +1 -1
- package/dist/cjs/type-code.js.map +1 -1
- package/dist/cjs/type.js +80 -1
- package/dist/cjs/type.js.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utilities.js +213 -7
- package/dist/cjs/utilities.js.map +1 -1
- package/dist/esm/array.js +27 -1
- package/dist/esm/array.js.map +1 -1
- package/dist/esm/async-pool-executor.js +15 -0
- package/dist/esm/async-pool-executor.js.map +1 -1
- package/dist/esm/browser/form-utilities.js +33 -6
- package/dist/esm/browser/form-utilities.js.map +1 -1
- package/dist/esm/browser/geo-location.js +5 -0
- package/dist/esm/browser/geo-location.js.map +1 -1
- package/dist/esm/browser/index.js.map +1 -1
- package/dist/esm/browser/native-bridge.js +9 -0
- package/dist/esm/browser/native-bridge.js.map +1 -1
- package/dist/esm/cancellable-promise.js.map +1 -1
- package/dist/esm/clean-url-search-params.js +1 -0
- package/dist/esm/clean-url-search-params.js.map +1 -1
- package/dist/esm/collections/cache-dictionary.js +39 -0
- package/dist/esm/collections/cache-dictionary.js.map +1 -1
- package/dist/esm/collections/default-map.js +25 -1
- package/dist/esm/collections/default-map.js.map +1 -1
- package/dist/esm/collections/default-weak-map.js +22 -2
- package/dist/esm/collections/default-weak-map.js.map +1 -1
- package/dist/esm/{from.js → collections/from.js} +278 -4
- package/dist/esm/collections/from.js.map +1 -0
- package/dist/esm/collections/index.js +1 -0
- package/dist/esm/collections/index.js.map +1 -1
- package/dist/esm/draft.js +43 -2
- package/dist/esm/draft.js.map +1 -1
- package/dist/esm/event-bus.js +1 -0
- package/dist/esm/event-bus.js.map +1 -1
- package/dist/esm/index.js +13 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/key-value-pair.js +6 -0
- package/dist/esm/key-value-pair.js.map +1 -1
- package/dist/esm/lazy.js +4 -0
- package/dist/esm/lazy.js.map +1 -1
- package/dist/esm/math.js +19 -0
- package/dist/esm/math.js.map +1 -1
- package/dist/esm/order.js.map +1 -1
- package/dist/esm/parse.js +96 -0
- package/dist/esm/parse.js.map +1 -1
- package/dist/esm/patch.js +10 -2
- package/dist/esm/patch.js.map +1 -1
- package/dist/esm/stopwatch.js +10 -0
- package/dist/esm/stopwatch.js.map +1 -1
- package/dist/esm/string.js +62 -0
- package/dist/esm/string.js.map +1 -1
- package/dist/esm/timer.js +7 -0
- package/dist/esm/timer.js.map +1 -1
- package/dist/esm/timespan.js +202 -0
- package/dist/esm/timespan.js.map +1 -1
- package/dist/esm/type-code.js.map +1 -1
- package/dist/esm/type.js +80 -1
- package/dist/esm/type.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utilities.js +212 -7
- package/dist/esm/utilities.js.map +1 -1
- package/dist/types/array.d.ts +26 -0
- package/dist/types/array.d.ts.map +1 -1
- package/dist/types/async-pool-executor.d.ts +15 -0
- package/dist/types/async-pool-executor.d.ts.map +1 -1
- package/dist/types/browser/form-utilities.d.ts +13 -0
- package/dist/types/browser/form-utilities.d.ts.map +1 -1
- package/dist/types/browser/index.d.ts.map +1 -1
- package/dist/types/browser/native-bridge.d.ts +6 -0
- package/dist/types/browser/native-bridge.d.ts.map +1 -1
- package/dist/types/collections/cache-dictionary.d.ts +39 -0
- package/dist/types/collections/cache-dictionary.d.ts.map +1 -1
- package/dist/types/collections/default-map.d.ts +23 -0
- package/dist/types/collections/default-map.d.ts.map +1 -1
- package/dist/types/collections/default-weak-map.d.ts +20 -1
- package/dist/types/collections/default-weak-map.d.ts.map +1 -1
- package/dist/types/collections/from.d.ts +333 -0
- package/dist/types/collections/from.d.ts.map +1 -0
- package/dist/types/collections/index.d.ts +1 -0
- package/dist/types/collections/index.d.ts.map +1 -1
- package/dist/types/draft.d.ts +68 -0
- package/dist/types/draft.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/key-value-pair.d.ts +6 -0
- package/dist/types/key-value-pair.d.ts.map +1 -1
- package/dist/types/lazy.d.ts +4 -0
- package/dist/types/lazy.d.ts.map +1 -1
- package/dist/types/math.d.ts +19 -0
- package/dist/types/math.d.ts.map +1 -1
- package/dist/types/parse.d.ts +121 -0
- package/dist/types/parse.d.ts.map +1 -1
- package/dist/types/string.d.ts +51 -0
- package/dist/types/string.d.ts.map +1 -1
- package/dist/types/timer.d.ts +7 -0
- package/dist/types/timer.d.ts.map +1 -1
- package/dist/types/timespan.d.ts +202 -0
- package/dist/types/timespan.d.ts.map +1 -1
- package/dist/types/type.d.ts +40 -0
- package/dist/types/type.d.ts.map +1 -1
- package/dist/types/utilities.d.ts +174 -2
- package/dist/types/utilities.d.ts.map +1 -1
- package/dist/web/array.js +27 -1
- package/dist/web/array.js.map +1 -1
- package/dist/web/async-pool-executor.js +15 -0
- package/dist/web/async-pool-executor.js.map +1 -1
- package/dist/web/browser/form-utilities.js +33 -6
- package/dist/web/browser/form-utilities.js.map +1 -1
- package/dist/web/browser/geo-location.js +5 -0
- package/dist/web/browser/geo-location.js.map +1 -1
- package/dist/web/browser/index.js.map +1 -1
- package/dist/web/browser/native-bridge.js +9 -0
- package/dist/web/browser/native-bridge.js.map +1 -1
- package/dist/web/cancellable-promise.js.map +1 -1
- package/dist/web/clean-url-search-params.js +1 -0
- package/dist/web/clean-url-search-params.js.map +1 -1
- package/dist/web/collections/cache-dictionary.js +39 -0
- package/dist/web/collections/cache-dictionary.js.map +1 -1
- package/dist/web/collections/default-map.js +25 -1
- package/dist/web/collections/default-map.js.map +1 -1
- package/dist/web/collections/default-weak-map.js +22 -2
- package/dist/web/collections/default-weak-map.js.map +1 -1
- package/dist/web/{from.js → collections/from.js} +279 -5
- package/dist/web/collections/from.js.map +1 -0
- package/dist/web/collections/index.js +1 -0
- package/dist/web/collections/index.js.map +1 -1
- package/dist/web/draft.js +43 -2
- package/dist/web/draft.js.map +1 -1
- package/dist/web/event-bus.js +1 -0
- package/dist/web/event-bus.js.map +1 -1
- package/dist/web/index.js +13 -1
- package/dist/web/index.js.map +1 -1
- package/dist/web/key-value-pair.js +6 -0
- package/dist/web/key-value-pair.js.map +1 -1
- package/dist/web/lazy.js +4 -0
- package/dist/web/lazy.js.map +1 -1
- package/dist/web/math.js +19 -0
- package/dist/web/math.js.map +1 -1
- package/dist/web/order.js.map +1 -1
- package/dist/web/parse.js +96 -0
- package/dist/web/parse.js.map +1 -1
- package/dist/web/patch.js +10 -2
- package/dist/web/patch.js.map +1 -1
- package/dist/web/stopwatch.js +10 -0
- package/dist/web/stopwatch.js.map +1 -1
- package/dist/web/string.js +62 -0
- package/dist/web/string.js.map +1 -1
- package/dist/web/timer.js +7 -0
- package/dist/web/timer.js.map +1 -1
- package/dist/web/timespan.js +202 -0
- package/dist/web/timespan.js.map +1 -1
- package/dist/web/type-code.js.map +1 -1
- package/dist/web/type.js +80 -1
- package/dist/web/type.js.map +1 -1
- package/dist/web/types.js.map +1 -1
- package/dist/web/utilities.js +212 -7
- package/dist/web/utilities.js.map +1 -1
- package/package.json +1 -1
- package/src/browser/form-utilities.ts +7 -6
- package/src/browser/index.ts +2 -2
- package/src/collections/cache-dictionary.ts +39 -1
- package/src/collections/default-map.ts +15 -9
- package/src/collections/default-weak-map.ts +14 -12
- package/src/{from.ts → collections/from.ts} +285 -15
- package/src/collections/index.ts +4 -3
- package/src/draft.ts +6 -2
- package/src/index.ts +1 -1
- package/src/timespan.ts +199 -20
- package/src/utilities.ts +53 -9
- package/dist/cjs/from.js.map +0 -1
- package/dist/esm/from.js.map +0 -1
- package/dist/types/from.d.ts +0 -59
- package/dist/types/from.d.ts.map +0 -1
- package/dist/web/from.js.map +0 -1
package/dist/cjs/utilities.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// noinspection JSUnusedGlobalSymbols
|
|
2
3
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
5
|
};
|
|
@@ -24,6 +25,7 @@ exports.isNullish = isNullish;
|
|
|
24
25
|
exports.isEmpty = isEmpty;
|
|
25
26
|
exports.isEmptyOrWhitespace = isEmptyOrWhitespace;
|
|
26
27
|
exports.toPairs = toPairs;
|
|
28
|
+
exports.pick = pick;
|
|
27
29
|
exports.promisify = promisify;
|
|
28
30
|
exports.deepClone = deepClone;
|
|
29
31
|
exports.getType = getType;
|
|
@@ -61,28 +63,90 @@ function lazy(factory) {
|
|
|
61
63
|
},
|
|
62
64
|
});
|
|
63
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Checks if an object is iterable.
|
|
68
|
+
*
|
|
69
|
+
* @param {any} obj - The object to check.
|
|
70
|
+
* @return {boolean} - Returns true if the object is iterable, otherwise false.
|
|
71
|
+
*/
|
|
64
72
|
function isIterable(obj) {
|
|
65
73
|
return obj[Symbol.iterator] === 'function';
|
|
66
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Checks if a given value is a string.
|
|
77
|
+
*
|
|
78
|
+
* @param {*} value - The value to check.
|
|
79
|
+
* @return {boolean} - Returns true if the value is a string, otherwise returns false.
|
|
80
|
+
*/
|
|
67
81
|
function isString(value) {
|
|
68
82
|
return typeof value === 'string';
|
|
69
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Checks if a value is a number.
|
|
86
|
+
*
|
|
87
|
+
* @param {any} value - The value to check.
|
|
88
|
+
* @return {boolean} - Returns true if the value is a number, otherwise false.
|
|
89
|
+
*/
|
|
70
90
|
function isNumber(value) {
|
|
71
91
|
return typeof value === 'number';
|
|
72
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Checks if a given value is a boolean.
|
|
95
|
+
*
|
|
96
|
+
* @param {any} value - The value to be checked.
|
|
97
|
+
*
|
|
98
|
+
* @return {boolean} - Returns true if the value is a boolean, otherwise false.
|
|
99
|
+
*/
|
|
73
100
|
function isBoolean(value) {
|
|
74
101
|
return typeof value === 'boolean';
|
|
75
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Checks if a value is an object.
|
|
105
|
+
* @param {any} value - The value to be checked.
|
|
106
|
+
* @returns {boolean} - Returns true if the value is an object, otherwise returns false.
|
|
107
|
+
*/
|
|
76
108
|
function isObject(value) {
|
|
77
109
|
return value != null && typeof value === 'object' && !Array.isArray(value);
|
|
78
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Determines if a value is an array.
|
|
113
|
+
*
|
|
114
|
+
* @param value - The value to be checked.
|
|
115
|
+
*
|
|
116
|
+
* @return Whether the value is an array.
|
|
117
|
+
*/
|
|
79
118
|
function isArray(value) {
|
|
80
119
|
return Array.isArray(value);
|
|
81
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Checks if a value is a function.
|
|
123
|
+
*
|
|
124
|
+
* @param {any} value - The value to be checked.
|
|
125
|
+
* @return {boolean} - Returns true if the value is a function, otherwise returns false.
|
|
126
|
+
*/
|
|
82
127
|
function isFunction(value) {
|
|
83
128
|
return typeof value === 'function';
|
|
84
129
|
}
|
|
85
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Structural deep equality check.
|
|
132
|
+
*
|
|
133
|
+
* Compares primitives by value, and objects/arrays/Maps/Sets/Dates/RegExps
|
|
134
|
+
* by structure. Handles circular references.
|
|
135
|
+
*
|
|
136
|
+
* @param a - First value.
|
|
137
|
+
* @param b - Second value.
|
|
138
|
+
* @returns `true` if `a` and `b` are structurally equal.
|
|
139
|
+
*/
|
|
140
|
+
function deepEqual(a, b) {
|
|
141
|
+
return _deepEqual(a, b);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Internal implementation of deep equality check.
|
|
145
|
+
* @param a - First value.
|
|
146
|
+
* @param b - Second value.
|
|
147
|
+
* @param seen - Internal map used to handle circular references.
|
|
148
|
+
*/
|
|
149
|
+
function _deepEqual(a, b, seen = new WeakMap()) {
|
|
86
150
|
if (a === b)
|
|
87
151
|
return true;
|
|
88
152
|
if (a === null || b === null)
|
|
@@ -105,7 +169,7 @@ function deepEqual(a, b, seen = new WeakMap()) {
|
|
|
105
169
|
if (!(b instanceof Map) || a.size !== b.size)
|
|
106
170
|
return false;
|
|
107
171
|
for (const [k, v] of a) {
|
|
108
|
-
if (!b.has(k) || !
|
|
172
|
+
if (!b.has(k) || !_deepEqual(v, b.get(k), seen))
|
|
109
173
|
return false;
|
|
110
174
|
}
|
|
111
175
|
return true;
|
|
@@ -125,11 +189,28 @@ function deepEqual(a, b, seen = new WeakMap()) {
|
|
|
125
189
|
for (const key of keysA) {
|
|
126
190
|
if (!Object.prototype.hasOwnProperty.call(b, key))
|
|
127
191
|
return false;
|
|
128
|
-
if (!
|
|
192
|
+
if (!_deepEqual(a[key], b[key], seen))
|
|
129
193
|
return false;
|
|
130
194
|
}
|
|
131
195
|
return true;
|
|
132
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Submits an HTML form programmatically using the specified HTTP method (default is POST),
|
|
199
|
+
* without using AJAX. Supports nested objects and arrays using bracket notation (e.g., `user[name]`, `tags[]`).
|
|
200
|
+
*
|
|
201
|
+
* @param url - The destination URL where the form will be submitted.
|
|
202
|
+
* @param data - An object containing key-value pairs. Supports nested structures and arrays.
|
|
203
|
+
* @param method - HTTP method to use: 'POST' or 'GET' (default: 'POST').
|
|
204
|
+
* @param target - Optional parameter specifying the target for the form submission (e.g., '_blank', '_self', '_parent', '_top').
|
|
205
|
+
*/
|
|
206
|
+
/**
|
|
207
|
+
* Compares two objects or arrays to check if they have the same immediate fields and values,
|
|
208
|
+
* or the same immediate elements if they are arrays (shallow equality check).
|
|
209
|
+
*
|
|
210
|
+
* @param {any} a - The first object or array.
|
|
211
|
+
* @param {any} b - The second object or array.
|
|
212
|
+
* @return {boolean} - Returns true if the objects/arrays are shallowly equal, otherwise false.
|
|
213
|
+
*/
|
|
133
214
|
function shallowEqual(a, b) {
|
|
134
215
|
if (a === b) {
|
|
135
216
|
return true;
|
|
@@ -153,40 +234,108 @@ function shallowEqual(a, b) {
|
|
|
153
234
|
}
|
|
154
235
|
return false;
|
|
155
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Pauses the execution of an asynchronous function for a specified duration.
|
|
239
|
+
*
|
|
240
|
+
* @param {number} ms - The delay duration in milliseconds.
|
|
241
|
+
* @return {Promise<void>} A promise that resolves after the specified delay.
|
|
242
|
+
*/
|
|
156
243
|
async function delay(ms) {
|
|
157
244
|
await new Promise(resolve => setTimeout(resolve, ms));
|
|
158
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Checks if a value is undefined.
|
|
248
|
+
*
|
|
249
|
+
* @param {any} value - The value to check.
|
|
250
|
+
* @returns {boolean} - True if the value is undefined, false otherwise.
|
|
251
|
+
*/
|
|
159
252
|
function isUndefined(value) {
|
|
160
253
|
return typeof value === 'undefined';
|
|
161
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Checks if a value is defined or not.
|
|
257
|
+
*
|
|
258
|
+
* @param {any} value - The value to be checked.
|
|
259
|
+
*
|
|
260
|
+
* @return {boolean} - True if the value is defined, false otherwise.
|
|
261
|
+
*/
|
|
162
262
|
function isDefined(value) {
|
|
163
263
|
return typeof value !== 'undefined';
|
|
164
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Checks if a given value is null.
|
|
267
|
+
*
|
|
268
|
+
* @param {any} value - The value to check for null.
|
|
269
|
+
* @return {boolean} - Returns true if the value is null, otherwise returns false.
|
|
270
|
+
*/
|
|
165
271
|
function isNull(value) {
|
|
166
272
|
return value === null;
|
|
167
273
|
}
|
|
274
|
+
/**
|
|
275
|
+
* Determines whether the given value is of type bigint.
|
|
276
|
+
* @param {any} value - The value to be checked.
|
|
277
|
+
* @return {boolean} - Returns true if the value is of type bigint, false otherwise.
|
|
278
|
+
*/
|
|
168
279
|
function isBigInt(value) {
|
|
169
280
|
return typeof value === 'bigint';
|
|
170
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Checks if a given value is a symbol.
|
|
284
|
+
*
|
|
285
|
+
* @param {any} value - The value to be checked.
|
|
286
|
+
* @return {boolean} - Returns true if the value is a symbol, false otherwise.
|
|
287
|
+
*/
|
|
171
288
|
function isSymbol(value) {
|
|
172
289
|
return typeof value === 'symbol';
|
|
173
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Checks if a value is null or undefined.
|
|
293
|
+
*
|
|
294
|
+
* @param {any} value - The value to check.
|
|
295
|
+
* @return {boolean} - Returns true if the value is null or undefined, false otherwise.
|
|
296
|
+
* @deprecated
|
|
297
|
+
*/
|
|
174
298
|
function isNullOrUndefined(value) {
|
|
175
299
|
return value === null || typeof value === 'undefined';
|
|
176
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Checks if a value is null or undefined.
|
|
303
|
+
*
|
|
304
|
+
* @param {any} value - The value to check.
|
|
305
|
+
* @return {boolean} - Returns true if the value is null or undefined, false otherwise.
|
|
306
|
+
|
|
307
|
+
*/
|
|
177
308
|
function isNullish(value) {
|
|
178
309
|
return value === null || typeof value === 'undefined';
|
|
179
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Checks if a given value is empty.
|
|
313
|
+
*
|
|
314
|
+
* @param {any} value - The value to check.
|
|
315
|
+
* @return {boolean} - Returns true if the value is empty, otherwise returns false.
|
|
316
|
+
*/
|
|
180
317
|
function isEmpty(value) {
|
|
181
318
|
return (Array.isArray(value) && value.length === 0) ||
|
|
182
319
|
(typeof value === 'string' && value === '') ||
|
|
183
320
|
value === null || typeof value === 'undefined';
|
|
184
321
|
}
|
|
322
|
+
/**
|
|
323
|
+
* Check if a value is empty or contains only whitespace characters.
|
|
324
|
+
*
|
|
325
|
+
* @param {any} value - The value to check.
|
|
326
|
+
* @return {boolean} Returns true if the value is empty or contains only whitespace characters, otherwise returns false.
|
|
327
|
+
*/
|
|
185
328
|
function isEmptyOrWhitespace(value) {
|
|
186
329
|
return (Array.isArray(value) && value.length === 0) ||
|
|
187
330
|
(typeof value === 'string' && value.trim() === '') ||
|
|
188
331
|
value === null || typeof value === 'undefined';
|
|
189
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* Converts an object into an array of key-value pairs.
|
|
335
|
+
*
|
|
336
|
+
* @param {Record<string, any>} obj - The object to convert.
|
|
337
|
+
* @return {KeyValuePair<string, any>[]} - The array of key-value pairs.
|
|
338
|
+
*/
|
|
190
339
|
function toPairs(obj) {
|
|
191
340
|
let output = [];
|
|
192
341
|
for (const key in obj) {
|
|
@@ -194,6 +343,33 @@ function toPairs(obj) {
|
|
|
194
343
|
}
|
|
195
344
|
return output;
|
|
196
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Creates an object composed of the picked object properties.
|
|
348
|
+
*
|
|
349
|
+
* @template T - The type of the source object.
|
|
350
|
+
* @template K - The type of the keys to pick.
|
|
351
|
+
* @param obj - The source object.
|
|
352
|
+
* @param props - The property names to pick.
|
|
353
|
+
* @returns A new object with the picked properties.
|
|
354
|
+
*/
|
|
355
|
+
function pick(obj, props) {
|
|
356
|
+
const result = {};
|
|
357
|
+
if (obj === null || typeof obj !== 'object') {
|
|
358
|
+
return result;
|
|
359
|
+
}
|
|
360
|
+
for (const key of props) {
|
|
361
|
+
if (key in obj) {
|
|
362
|
+
result[key] = obj[key];
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
return result;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Converts a given thing into a Promise.
|
|
369
|
+
* @template T
|
|
370
|
+
* @param {any} thing - The thing to be converted into a Promise.
|
|
371
|
+
* @returns {Promise<T>} - A Promise representing the given thing.
|
|
372
|
+
*/
|
|
197
373
|
function promisify(thing) {
|
|
198
374
|
if (thing instanceof Promise)
|
|
199
375
|
return thing;
|
|
@@ -210,7 +386,26 @@ function promisify(thing) {
|
|
|
210
386
|
}
|
|
211
387
|
return Promise.resolve(thing);
|
|
212
388
|
}
|
|
213
|
-
|
|
389
|
+
/**
|
|
390
|
+
* Create a deep, independent copy of a value.
|
|
391
|
+
*
|
|
392
|
+
* Supports primitives, plain objects, arrays, `Date`, `RegExp`, `Map`, `Set`,
|
|
393
|
+
* symbol-keyed properties and circular references. Functions are copied by
|
|
394
|
+
* reference. Class instances preserve their prototype.
|
|
395
|
+
*
|
|
396
|
+
* @template T - The value's type.
|
|
397
|
+
* @param value - The value to clone.
|
|
398
|
+
* @returns A deep clone of `value`.
|
|
399
|
+
*/
|
|
400
|
+
function deepClone(value) {
|
|
401
|
+
return _deepClone(value);
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Internal implementation of deep clone.
|
|
405
|
+
* @param value - The value to clone.
|
|
406
|
+
* @param seen - Internal map used to handle circular references.
|
|
407
|
+
*/
|
|
408
|
+
function _deepClone(value, seen = new WeakMap()) {
|
|
214
409
|
if (value === null || typeof value !== "object")
|
|
215
410
|
return value;
|
|
216
411
|
const obj = value;
|
|
@@ -223,13 +418,17 @@ function deepClone(value, seen = new WeakMap()) {
|
|
|
223
418
|
if (value instanceof Map) {
|
|
224
419
|
const copy = new Map();
|
|
225
420
|
seen.set(value, copy);
|
|
226
|
-
|
|
421
|
+
for (const [k, v] of value) {
|
|
422
|
+
copy.set(_deepClone(k, seen), _deepClone(v, seen));
|
|
423
|
+
}
|
|
227
424
|
return copy;
|
|
228
425
|
}
|
|
229
426
|
if (value instanceof Set) {
|
|
230
427
|
const copy = new Set();
|
|
231
428
|
seen.set(value, copy);
|
|
232
|
-
|
|
429
|
+
for (const v of value) {
|
|
430
|
+
copy.add(_deepClone(v, seen));
|
|
431
|
+
}
|
|
233
432
|
return copy;
|
|
234
433
|
}
|
|
235
434
|
const copy = Array.isArray(value)
|
|
@@ -237,10 +436,17 @@ function deepClone(value, seen = new WeakMap()) {
|
|
|
237
436
|
: Object.create(Object.getPrototypeOf(value));
|
|
238
437
|
seen.set(obj, copy);
|
|
239
438
|
for (const key of Reflect.ownKeys(obj)) {
|
|
240
|
-
copy[key] =
|
|
439
|
+
copy[key] = _deepClone(value[key], seen);
|
|
241
440
|
}
|
|
242
441
|
return copy;
|
|
243
442
|
}
|
|
443
|
+
/**
|
|
444
|
+
* Returns the type of the given value.
|
|
445
|
+
*
|
|
446
|
+
* @param {any} value - The value to determine the type of.
|
|
447
|
+
* @return {Type} - The type of the given value.
|
|
448
|
+
* @deprecated use Type.of(...)
|
|
449
|
+
*/
|
|
244
450
|
function getType(value) {
|
|
245
451
|
return type_js_1.default.of(value);
|
|
246
452
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/utilities.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../src/utilities.ts"],"names":[],"mappings":"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","sourcesContent":["// noinspection JSUnusedGlobalSymbols\r\n\r\n\r\nimport KeyValuePair from \"./key-value-pair.js\";\r\nimport type {Resolvable} from \"./types.js\";\r\nimport Type from \"./type.js\";\r\n\r\nexport function lazy<T extends object>(factory: () => T): T {\r\n let instance: T | null = null;\r\n\r\n const getInstance = (): T => {\r\n if (!instance) {\r\n instance = factory();\r\n }\r\n return instance;\r\n };\r\n\r\n return new Proxy({} as T, {\r\n get(_, prop, receiver) {\r\n return Reflect.get(getInstance(), prop, receiver);\r\n },\r\n set(_, prop, value, receiver) {\r\n return Reflect.set(getInstance(), prop, value, receiver);\r\n },\r\n has(_, prop) {\r\n return Reflect.has(getInstance(), prop);\r\n },\r\n deleteProperty(_, prop) {\r\n return Reflect.deleteProperty(getInstance(), prop);\r\n },\r\n ownKeys() {\r\n return Reflect.ownKeys(getInstance());\r\n },\r\n getOwnPropertyDescriptor(_, prop) {\r\n return Reflect.getOwnPropertyDescriptor(getInstance(), prop);\r\n },\r\n getPrototypeOf() {\r\n return Reflect.getPrototypeOf(getInstance());\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Checks if an object is iterable.\r\n *\r\n * @param {any} obj - The object to check.\r\n * @return {boolean} - Returns true if the object is iterable, otherwise false.\r\n */\r\nexport function isIterable(obj: any): boolean {\r\n return obj[Symbol.iterator] === 'function';\r\n}\r\n\r\n/**\r\n * Checks if a given value is a string.\r\n *\r\n * @param {*} value - The value to check.\r\n * @return {boolean} - Returns true if the value is a string, otherwise returns false.\r\n */\r\nexport function isString(value: any): value is string {\r\n return typeof value === 'string';\r\n}\r\n\r\n/**\r\n * Checks if a value is a number.\r\n *\r\n * @param {any} value - The value to check.\r\n * @return {boolean} - Returns true if the value is a number, otherwise false.\r\n */\r\nexport function isNumber(value: any): value is number {\r\n return typeof value === 'number';\r\n}\r\n\r\n/**\r\n * Checks if a given value is a boolean.\r\n *\r\n * @param {any} value - The value to be checked.\r\n *\r\n * @return {boolean} - Returns true if the value is a boolean, otherwise false.\r\n */\r\nexport function isBoolean(value: any): value is boolean {\r\n return typeof value === 'boolean';\r\n}\r\n\r\n/**\r\n * Checks if a value is an object.\r\n * @param {any} value - The value to be checked.\r\n * @returns {boolean} - Returns true if the value is an object, otherwise returns false.\r\n */\r\nexport function isObject(value: any): value is object {\r\n return value != null && typeof value === 'object' && !Array.isArray(value);\r\n}\r\n\r\n/**\r\n * Determines if a value is an array.\r\n *\r\n * @param value - The value to be checked.\r\n *\r\n * @return Whether the value is an array.\r\n */\r\nexport function isArray(value: any): value is any[] {\r\n return Array.isArray(value);\r\n}\r\n\r\n/**\r\n * Checks if a value is a function.\r\n *\r\n * @param {any} value - The value to be checked.\r\n * @return {boolean} - Returns true if the value is a function, otherwise returns false.\r\n */\r\nexport function isFunction(value: any): value is Function {\r\n return typeof value === 'function';\r\n}\r\n\r\n\r\n/**\r\n * Structural deep equality check.\r\n *\r\n * Compares primitives by value, and objects/arrays/Maps/Sets/Dates/RegExps\r\n * by structure. Handles circular references.\r\n *\r\n * @param a - First value.\r\n * @param b - Second value.\r\n * @returns `true` if `a` and `b` are structurally equal.\r\n */\r\nexport function deepEqual(a: unknown, b: unknown): boolean {\r\n return _deepEqual(a, b);\r\n}\r\n\r\n/**\r\n * Internal implementation of deep equality check.\r\n * @param a - First value.\r\n * @param b - Second value.\r\n * @param seen - Internal map used to handle circular references.\r\n */\r\nfunction _deepEqual(\r\n a: unknown,\r\n b: unknown,\r\n seen: WeakMap<object, unknown> = new WeakMap()\r\n): boolean {\r\n if (a === b) return true;\r\n if (a === null || b === null) return false;\r\n if (typeof a !== typeof b) return false;\r\n if (typeof a !== \"object\") return false;\r\n\r\n const objA = a as object;\r\n if (seen.has(objA)) return seen.get(objA) === b;\r\n seen.set(objA, b);\r\n\r\n if (a instanceof Date) return b instanceof Date && a.getTime() === b.getTime();\r\n if (a instanceof RegExp) return b instanceof RegExp && a.toString() === b.toString();\r\n if (Array.isArray(a) !== Array.isArray(b)) return false;\r\n\r\n if (a instanceof Map) {\r\n if (!(b instanceof Map) || a.size !== b.size) return false;\r\n for (const [k, v] of a) {\r\n if (!b.has(k) || !_deepEqual(v, b.get(k), seen)) return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (a instanceof Set) {\r\n if (!(b instanceof Set) || a.size !== b.size) return false;\r\n for (const v of a) if (!b.has(v)) return false;\r\n return true;\r\n }\r\n\r\n const keysA = Reflect.ownKeys(a as object);\r\n const keysB = Reflect.ownKeys(b as object);\r\n if (keysA.length !== keysB.length) return false;\r\n\r\n for (const key of keysA) {\r\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\r\n if (!_deepEqual((a as any)[key], (b as any)[key], seen)) return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n\r\n/**\r\n * Submits an HTML form programmatically using the specified HTTP method (default is POST),\r\n * without using AJAX. Supports nested objects and arrays using bracket notation (e.g., `user[name]`, `tags[]`).\r\n *\r\n * @param url - The destination URL where the form will be submitted.\r\n * @param data - An object containing key-value pairs. Supports nested structures and arrays.\r\n * @param method - HTTP method to use: 'POST' or 'GET' (default: 'POST').\r\n * @param target - Optional parameter specifying the target for the form submission (e.g., '_blank', '_self', '_parent', '_top').\r\n */\r\n\r\n\r\n/**\r\n * Compares two objects or arrays to check if they have the same immediate fields and values,\r\n * or the same immediate elements if they are arrays (shallow equality check).\r\n *\r\n * @param {any} a - The first object or array.\r\n * @param {any} b - The second object or array.\r\n * @return {boolean} - Returns true if the objects/arrays are shallowly equal, otherwise false.\r\n */\r\nexport function shallowEqual(a: any, b: any): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (a === null || b === null || typeof a !== typeof b) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(a) && Array.isArray(b)) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n return a.every((value, index) => value === b[index]);\r\n }\r\n\r\n if (typeof a === \"object\" && typeof b === \"object\") {\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n\r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n return keysA.every(key => b.hasOwnProperty(key) && a[key] === b[key]);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n\r\n/**\r\n * Pauses the execution of an asynchronous function for a specified duration.\r\n *\r\n * @param {number} ms - The delay duration in milliseconds.\r\n * @return {Promise<void>} A promise that resolves after the specified delay.\r\n */\r\nexport async function delay(ms: number): Promise<void> {\r\n await new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\n/**\r\n * Checks if a value is undefined.\r\n *\r\n * @param {any} value - The value to check.\r\n * @returns {boolean} - True if the value is undefined, false otherwise.\r\n */\r\nexport function isUndefined(value: any): value is undefined {\r\n return typeof value === 'undefined';\r\n}\r\n\r\n/**\r\n * Checks if a value is defined or not.\r\n *\r\n * @param {any} value - The value to be checked.\r\n *\r\n * @return {boolean} - True if the value is defined, false otherwise.\r\n */\r\nexport function isDefined(value: any): value is undefined {\r\n return typeof value !== 'undefined';\r\n}\r\n\r\n/**\r\n * Checks if a given value is null.\r\n *\r\n * @param {any} value - The value to check for null.\r\n * @return {boolean} - Returns true if the value is null, otherwise returns false.\r\n */\r\nexport function isNull(value: any): value is null {\r\n return value === null;\r\n}\r\n\r\n\r\n/**\r\n * Determines whether the given value is of type bigint.\r\n * @param {any} value - The value to be checked.\r\n * @return {boolean} - Returns true if the value is of type bigint, false otherwise.\r\n */\r\nexport function isBigInt(value: any): value is bigint {\r\n return typeof value === 'bigint';\r\n}\r\n\r\n/**\r\n * Checks if a given value is a symbol.\r\n *\r\n * @param {any} value - The value to be checked.\r\n * @return {boolean} - Returns true if the value is a symbol, false otherwise.\r\n */\r\nexport function isSymbol(value: any): value is symbol {\r\n return typeof value === 'symbol';\r\n}\r\n\r\n/**\r\n * Checks if a value is null or undefined.\r\n *\r\n * @param {any} value - The value to check.\r\n * @return {boolean} - Returns true if the value is null or undefined, false otherwise.\r\n * @deprecated\r\n */\r\nexport function isNullOrUndefined(value: any): boolean {\r\n return value === null || typeof value === 'undefined';\r\n}\r\n\r\n/**\r\n * Checks if a value is null or undefined.\r\n *\r\n * @param {any} value - The value to check.\r\n * @return {boolean} - Returns true if the value is null or undefined, false otherwise.\r\n\r\n */\r\nexport function isNullish(value: any): boolean {\r\n return value === null || typeof value === 'undefined';\r\n}\r\n\r\n/**\r\n * Checks if a given value is empty.\r\n *\r\n * @param {any} value - The value to check.\r\n * @return {boolean} - Returns true if the value is empty, otherwise returns false.\r\n */\r\nexport function isEmpty(value: any): boolean {\r\n return (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'string' && value === '') ||\r\n value === null || typeof value === 'undefined';\r\n}\r\n\r\n/**\r\n * Check if a value is empty or contains only whitespace characters.\r\n *\r\n * @param {any} value - The value to check.\r\n * @return {boolean} Returns true if the value is empty or contains only whitespace characters, otherwise returns false.\r\n */\r\nexport function isEmptyOrWhitespace(value: any): boolean {\r\n return (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'string' && value.trim() === '') ||\r\n value === null || typeof value === 'undefined';\r\n}\r\n\r\n\r\n/**\r\n * Converts an object into an array of key-value pairs.\r\n *\r\n * @param {Record<string, any>} obj - The object to convert.\r\n * @return {KeyValuePair<string, any>[]} - The array of key-value pairs.\r\n */\r\nexport function toPairs(obj: Record<string, any>): KeyValuePair<string, any>[] {\r\n\r\n let output = [];\r\n for (const key in obj) {\r\n output.push(new KeyValuePair(key, obj[key]));\r\n }\r\n return output;\r\n\r\n}\r\n\r\n/**\r\n * Creates an object composed of the picked object properties.\r\n *\r\n * @template T - The type of the source object.\r\n * @template K - The type of the keys to pick.\r\n * @param obj - The source object.\r\n * @param props - The property names to pick.\r\n * @returns A new object with the picked properties.\r\n */\r\nexport function pick<T extends object, K extends keyof T>(obj: T, props: K[]): Pick<T, K> {\r\n const result = {} as Pick<T, K>;\r\n if (obj === null || typeof obj !== 'object') {\r\n return result;\r\n }\r\n\r\n for (const key of props) {\r\n if (key in obj) {\r\n result[key] = obj[key];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Converts a given thing into a Promise.\r\n * @template T\r\n * @param {any} thing - The thing to be converted into a Promise.\r\n * @returns {Promise<T>} - A Promise representing the given thing.\r\n */\r\nexport function promisify<T>(thing: Resolvable<T>): Promise<T> {\r\n\r\n if (thing instanceof Promise)\r\n return thing;\r\n\r\n\r\n if (isFunction(thing)) {\r\n return new Promise<T>((resolve, reject) => {\r\n try {\r\n const result = thing();\r\n resolve(result);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n }\r\n\r\n return Promise.resolve(thing);\r\n}\r\n\r\n\r\n/**\r\n * Create a deep, independent copy of a value.\r\n *\r\n * Supports primitives, plain objects, arrays, `Date`, `RegExp`, `Map`, `Set`,\r\n * symbol-keyed properties and circular references. Functions are copied by\r\n * reference. Class instances preserve their prototype.\r\n *\r\n * @template T - The value's type.\r\n * @param value - The value to clone.\r\n * @returns A deep clone of `value`.\r\n */\r\nexport function deepClone<T>(value: T): T {\r\n return _deepClone(value);\r\n}\r\n\r\n/**\r\n * Internal implementation of deep clone.\r\n * @param value - The value to clone.\r\n * @param seen - Internal map used to handle circular references.\r\n */\r\nfunction _deepClone<T>(\r\n value: T,\r\n seen: WeakMap<object, unknown> = new WeakMap()\r\n): T {\r\n if (value === null || typeof value !== \"object\") return value;\r\n\r\n const obj = value as unknown as object;\r\n if (seen.has(obj)) return seen.get(obj) as T;\r\n\r\n if (value instanceof Date) return new Date(value) as T;\r\n if (value instanceof RegExp) return new RegExp(value) as T;\r\n\r\n if (value instanceof Map) {\r\n const copy = new Map();\r\n seen.set(value, copy);\r\n for (const [k, v] of value) {\r\n copy.set(_deepClone(k, seen), _deepClone(v, seen));\r\n }\r\n return copy as T;\r\n }\r\n\r\n if (value instanceof Set) {\r\n const copy = new Set();\r\n seen.set(value, copy);\r\n for (const v of value) {\r\n copy.add(_deepClone(v, seen));\r\n }\r\n return copy as T;\r\n }\r\n\r\n const copy: any = Array.isArray(value)\r\n ? []\r\n : Object.create(Object.getPrototypeOf(value));\r\n\r\n seen.set(obj, copy);\r\n\r\n for (const key of Reflect.ownKeys(obj)) {\r\n copy[key] = _deepClone((value as any)[key], seen);\r\n }\r\n\r\n return copy as T;\r\n}\r\n\r\n\r\n/**\r\n * Returns the type of the given value.\r\n *\r\n * @param {any} value - The value to determine the type of.\r\n * @return {Type} - The type of the given value.\r\n * @deprecated use Type.of(...)\r\n */\r\nexport function getType(value: any): Type {\r\n\r\n return Type.of(value);\r\n}\r\n\r\n\r\n\r\n"]}
|
package/dist/esm/array.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes all given values from the provided array and returns the number of removed elements.
|
|
3
|
+
* The operation mutates the original array.
|
|
4
|
+
* @template T
|
|
5
|
+
* @param {Array<T>} array - The array to modify by removing specified items.
|
|
6
|
+
* @param {...T} items - The values to remove from the array.
|
|
7
|
+
* @return {number} The number of elements removed from the array.
|
|
8
|
+
*/
|
|
1
9
|
export function pull(array, ...items) {
|
|
2
10
|
let output = 0;
|
|
3
11
|
for (const item of items) {
|
|
@@ -9,6 +17,13 @@ export function pull(array, ...items) {
|
|
|
9
17
|
}
|
|
10
18
|
return output;
|
|
11
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Splits an array into chunks of a given size.
|
|
22
|
+
* @template T
|
|
23
|
+
* @param {Array<T>} array - The array to split.
|
|
24
|
+
* @param {number} size - The size of each chunk.
|
|
25
|
+
* @return {Array<Array<T>>} The array of chunks.
|
|
26
|
+
*/
|
|
12
27
|
export function chunk(array, size) {
|
|
13
28
|
if (size <= 0)
|
|
14
29
|
throw new Error("Size must be greater than 0");
|
|
@@ -18,16 +33,27 @@ export function chunk(array, size) {
|
|
|
18
33
|
}
|
|
19
34
|
return result;
|
|
20
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Removes all elements from the array, mutating it.
|
|
38
|
+
* @template T
|
|
39
|
+
* @param {Array<T>} array - The array to clear.
|
|
40
|
+
*/
|
|
21
41
|
export function clear(array) {
|
|
22
42
|
array.length = 0;
|
|
23
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Removes all elements from the array that satisfy the predicate.
|
|
46
|
+
* The operation mutates the original array.
|
|
47
|
+
* @template T
|
|
48
|
+
* @return {Array<T>} An array of removed elements.
|
|
49
|
+
*/
|
|
24
50
|
export function remove(array, predicate) {
|
|
25
51
|
const removed = [];
|
|
26
52
|
let i = 0;
|
|
27
53
|
while (i < array.length) {
|
|
28
54
|
if (predicate(array[i])) {
|
|
29
55
|
removed.push(array[i]);
|
|
30
|
-
array.splice(i, 1);
|
|
56
|
+
array.splice(i, 1); // muta el array
|
|
31
57
|
}
|
|
32
58
|
else {
|
|
33
59
|
i++;
|
package/dist/esm/array.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../src/array.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAI,KAAe,EAAE,GAAG,KAAe;IAEvD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,CAAC;QACb,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAI,KAAe,EAAE,IAAY;IAClD,IAAI,IAAI,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAI,KAAe;IACpC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAI,KAAe,EAAC,SAAuB;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACtB,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB;QACxC,CAAC;aAAM,CAAC;YACJ,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["import type {Predicate} from \"./types.js\";\r\n\r\n/**\r\n * Removes all given values from the provided array and returns the number of removed elements.\r\n * The operation mutates the original array.\r\n * @template T\r\n * @param {Array<T>} array - The array to modify by removing specified items.\r\n * @param {...T} items - The values to remove from the array.\r\n * @return {number} The number of elements removed from the array.\r\n */\r\nexport function pull<T>(array: Array<T>, ...items: Array<T>): number {\r\n\r\n let output = 0;\r\n for (const item of items) {\r\n const index = array.indexOf(item);\r\n if (index !== -1) {\r\n array.splice(index, 1);\r\n output++;\r\n }\r\n }\r\n return output;\r\n}\r\n\r\n/**\r\n * Splits an array into chunks of a given size.\r\n * @template T\r\n * @param {Array<T>} array - The array to split.\r\n * @param {number} size - The size of each chunk.\r\n * @return {Array<Array<T>>} The array of chunks.\r\n */\r\nexport function chunk<T>(array: Array<T>, size: number): Array<Array<T>> {\r\n if (size <= 0) throw new Error(\"Size must be greater than 0\");\r\n const result: Array<Array<T>> = [];\r\n for (let i = 0; i < array.length; i += size) {\r\n result.push(array.slice(i, i + size));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Removes all elements from the array, mutating it.\r\n * @template T\r\n * @param {Array<T>} array - The array to clear.\r\n */\r\nexport function clear<T>(array: Array<T>): void {\r\n array.length = 0;\r\n}\r\n\r\n/**\r\n * Removes all elements from the array that satisfy the predicate.\r\n * The operation mutates the original array.\r\n * @template T\r\n * @return {Array<T>} An array of removed elements.\r\n */\r\nexport function remove<T>(array: Array<T>,predicate: Predicate<T>): Array<T> {\r\n const removed: Array<T> = [];\r\n let i = 0;\r\n\r\n while (i < array.length) {\r\n if (predicate(array[i])) {\r\n removed.push(array[i]);\r\n array.splice(i, 1); // muta el array\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n return removed;\r\n}"]}
|
|
@@ -6,12 +6,21 @@ export default class AsyncPoolExecutor {
|
|
|
6
6
|
set maxConcurrency(value) {
|
|
7
7
|
this._maxConcurrency = value;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* @param {number} maxConcurrency - The maximum number of concurrent tasks allowed.
|
|
11
|
+
* @param {number} [checkInterval=50] - The interval, in milliseconds, to check for capacity to run new tasks. Defaults to 50 ms.
|
|
12
|
+
*/
|
|
9
13
|
constructor(maxConcurrency, checkInterval = 50) {
|
|
10
14
|
this._taskQueue = [];
|
|
11
15
|
this._maxConcurrency = maxConcurrency;
|
|
12
16
|
this._checkIntervalMs = checkInterval;
|
|
13
17
|
this._activeTasks = 0;
|
|
14
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Submits a deferred task to a queue for asynchronous execution and returns a Promise resolving to its result.
|
|
21
|
+
* @template T
|
|
22
|
+
* @param {Supplier<T>} task - The deferred task to be executed asynchronously.
|
|
23
|
+
*/
|
|
15
24
|
submit(task) {
|
|
16
25
|
this._taskQueue.push(task);
|
|
17
26
|
if (this._proccess != null)
|
|
@@ -37,6 +46,12 @@ export default class AsyncPoolExecutor {
|
|
|
37
46
|
this._proccess = null;
|
|
38
47
|
}, 0);
|
|
39
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Waits until all tasks (both queued and active) are completed.
|
|
51
|
+
* This method resolves only when there are no pending tasks.
|
|
52
|
+
*
|
|
53
|
+
* @return {Promise<void>} A promise that resolves when all tasks are complete.
|
|
54
|
+
*/
|
|
40
55
|
async shutdown() {
|
|
41
56
|
while (this._taskQueue.length > 0 || this._activeTasks > 0) {
|
|
42
57
|
await delay(this._checkIntervalMs);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async-pool-executor.js","sourceRoot":"","sources":["../../src/async-pool-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAGlC,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAEjC,CAAC;
|
|
1
|
+
{"version":3,"file":"async-pool-executor.js","sourceRoot":"","sources":["../../src/async-pool-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAGlC,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,KAAa;QAC5B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAEjC,CAAC;IAQD;;;OAGG;IACH,YAAY,cAAsB,EAAE,gBAAwB,EAAE;QAPtD,eAAU,GAAyB,EAAE,CAAC;QAQ1C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,IAAmB;QAE7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI;YACtB,OAAO;QAEX,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YAEnC,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAEhC,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBAC/C,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACvC,CAAC;gBAED,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrC,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,YAAY,EAAE,CAAC;oBACpB,UAAU,CAAC,KAAK,IAAI,EAAE;wBAClB,IAAI,CAAC;4BACD,MAAM,IAAI,EAAE,CAAC;wBACjB,CAAC;gCAAS,CAAC;4BACP,IAAI,CAAC,YAAY,EAAE,CAAC;wBACxB,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;YAGL,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC,EAAE,CAAC,CAAC,CAAC;IAGV,CAAC;IAGD;;;;;OAKG;IACI,KAAK,CAAC,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type {Supplier} from \"./types.js\";\r\nimport {delay} from \"./utilities.js\";\r\n\r\nexport default class AsyncPoolExecutor {\r\n private _checkIntervalMs: number;\r\n\r\n get maxConcurrency(): number {\r\n return this._maxConcurrency;\r\n }\r\n\r\n set maxConcurrency(value: number) {\r\n this._maxConcurrency = value;\r\n\r\n }\r\n\r\n private _proccess: any;\r\n private _maxConcurrency: number;\r\n private _activeTasks: number;\r\n private _taskQueue: Array<Supplier<any>> = [];\r\n\r\n\r\n /**\r\n * @param {number} maxConcurrency - The maximum number of concurrent tasks allowed.\r\n * @param {number} [checkInterval=50] - The interval, in milliseconds, to check for capacity to run new tasks. Defaults to 50 ms.\r\n */\r\n constructor(maxConcurrency: number, checkInterval: number = 50) {\r\n this._maxConcurrency = maxConcurrency;\r\n this._checkIntervalMs = checkInterval;\r\n this._activeTasks = 0;\r\n }\r\n\r\n /**\r\n * Submits a deferred task to a queue for asynchronous execution and returns a Promise resolving to its result.\r\n * @template T\r\n * @param {Supplier<T>} task - The deferred task to be executed asynchronously.\r\n */\r\n public submit(task: Supplier<any>): void {\r\n\r\n this._taskQueue.push(task);\r\n\r\n if (this._proccess != null)\r\n return;\r\n\r\n this._proccess = setTimeout(async () => {\r\n\r\n while (this._taskQueue.length > 0) {\r\n\r\n while (this._activeTasks >= this._maxConcurrency) {\r\n await delay(this._checkIntervalMs);\r\n }\r\n\r\n const task = this._taskQueue.shift();\r\n if (task) {\r\n this._activeTasks++;\r\n setTimeout(async () => {\r\n try {\r\n await task();\r\n } finally {\r\n this._activeTasks--;\r\n }\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n this._proccess = null;\r\n }, 0);\r\n\r\n\r\n }\r\n\r\n\r\n /**\r\n * Waits until all tasks (both queued and active) are completed.\r\n * This method resolves only when there are no pending tasks.\r\n *\r\n * @return {Promise<void>} A promise that resolves when all tasks are complete.\r\n */\r\n public async shutdown(): Promise<void> {\r\n while (this._taskQueue.length > 0 || this._activeTasks > 0) {\r\n await delay(this._checkIntervalMs);\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submits a form via AJAX and returns a Promise that resolves to the Response object.
|
|
3
|
+
*
|
|
4
|
+
* @param {HTMLFormElement | string} selectorOrElement - The form element or selector.
|
|
5
|
+
* @return {Promise<Response>} A Promise that resolves to the Response object.
|
|
6
|
+
* @throws {Error} If the element is invalid.
|
|
7
|
+
*/
|
|
1
8
|
export async function ajaxSubmit(selectorOrElement) {
|
|
2
9
|
const form = typeof selectorOrElement === 'string'
|
|
3
10
|
? document.querySelector(selectorOrElement)
|
|
@@ -21,11 +28,16 @@ export function submitForm(url, data, method = 'POST', target) {
|
|
|
21
28
|
if (target) {
|
|
22
29
|
form.target = target;
|
|
23
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Recursively appends inputs to the form, supporting nested keys and arrays.
|
|
33
|
+
* @param keyPrefix - Key path, e.g., 'user[name]' or 'tags[]'
|
|
34
|
+
* @param value - The value to append (can be nested)
|
|
35
|
+
*/
|
|
24
36
|
const appendInputs = (keyPrefix, value) => {
|
|
25
37
|
if (Array.isArray(value)) {
|
|
26
|
-
|
|
38
|
+
for (const val of value) {
|
|
27
39
|
appendInputs(`${keyPrefix}[]`, val);
|
|
28
|
-
}
|
|
40
|
+
}
|
|
29
41
|
}
|
|
30
42
|
else if (typeof value === 'object' && value !== null) {
|
|
31
43
|
for (const subKey in value) {
|
|
@@ -69,6 +81,14 @@ export function formToObject(form) {
|
|
|
69
81
|
}
|
|
70
82
|
return out;
|
|
71
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Converts an object to `FormData` format recursively.
|
|
86
|
+
*
|
|
87
|
+
* @param {Record<string, any>} data - The object data to convert.
|
|
88
|
+
* @param {FormData} formData - The `FormData` instance to append data to.
|
|
89
|
+
* @param {string} parentKey - The parent key to append to child keys in the `FormData`.
|
|
90
|
+
* @returns {FormData} - The `FormData` instance with the converted data.
|
|
91
|
+
*/
|
|
72
92
|
function _objectToFormData(data, formData, parentKey = '') {
|
|
73
93
|
for (const key in data) {
|
|
74
94
|
if (data.hasOwnProperty(key)) {
|
|
@@ -83,7 +103,8 @@ function _objectToFormData(data, formData, parentKey = '') {
|
|
|
83
103
|
_objectToFormData(value, formData, parentKey ? `${parentKey}[${key}]` : key);
|
|
84
104
|
}
|
|
85
105
|
else if (Array.isArray(value)) {
|
|
86
|
-
value.
|
|
106
|
+
for (let index = 0; index < value.length; index++) {
|
|
107
|
+
const item = value[index];
|
|
87
108
|
const arrayKey = `${parentKey ? `${parentKey}[${key}]` : key}[${index}]`;
|
|
88
109
|
if (typeof item === 'object' && !Array.isArray(item)) {
|
|
89
110
|
_objectToFormData(item, formData, arrayKey);
|
|
@@ -91,7 +112,7 @@ function _objectToFormData(data, formData, parentKey = '') {
|
|
|
91
112
|
else {
|
|
92
113
|
formData.append(arrayKey, item);
|
|
93
114
|
}
|
|
94
|
-
}
|
|
115
|
+
}
|
|
95
116
|
}
|
|
96
117
|
else {
|
|
97
118
|
formData.append(parentKey ? `${parentKey}[${key}]` : key, value);
|
|
@@ -100,6 +121,12 @@ function _objectToFormData(data, formData, parentKey = '') {
|
|
|
100
121
|
}
|
|
101
122
|
return formData;
|
|
102
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Converts an object into FormData.
|
|
126
|
+
*
|
|
127
|
+
* @param {Record<string, any>} data - The object to be converted into FormData.
|
|
128
|
+
* @return {FormData} - The FormData object representing the converted data.
|
|
129
|
+
*/
|
|
103
130
|
export function objectToFormData(data) {
|
|
104
131
|
let formData = new FormData();
|
|
105
132
|
return _objectToFormData(data, formData);
|
|
@@ -109,7 +136,7 @@ export function ajaxSubmission(selectorOrElement, onSuccess = undefined, onFailu
|
|
|
109
136
|
? Array.from(document.querySelectorAll(selectorOrElement))
|
|
110
137
|
.filter(el => el instanceof HTMLFormElement)
|
|
111
138
|
: [selectorOrElement];
|
|
112
|
-
|
|
139
|
+
for (const form of forms) {
|
|
113
140
|
form.addEventListener('submit', async (event) => {
|
|
114
141
|
event.preventDefault();
|
|
115
142
|
try {
|
|
@@ -122,6 +149,6 @@ export function ajaxSubmission(selectorOrElement, onSuccess = undefined, onFailu
|
|
|
122
149
|
onFailure(e);
|
|
123
150
|
}
|
|
124
151
|
});
|
|
125
|
-
}
|
|
152
|
+
}
|
|
126
153
|
}
|
|
127
154
|
//# sourceMappingURL=form-utilities.js.map
|