@superutils/core 1.0.6 → 1.0.7
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 +11 -4
- package/dist/index.d.ts +7 -7
- package/dist/index.js +16 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ For full API reference check out the [docs page](https://alien45.github.io/super
|
|
|
15
15
|
- [`is`](#is): Type checkers
|
|
16
16
|
- [`deferred()`](#deferred): Debounce callbacks
|
|
17
17
|
- [`throttle()`](#throttle): Throttle callbacks
|
|
18
|
-
- [`fallbackIfFails()`](#fallback-if-fails): Gracefully invoke functions
|
|
18
|
+
- [`fallbackIfFails()`](#fallback-if-fails): Gracefully invoke functions or promises with a fallback
|
|
19
19
|
- [`objCopy()`](#obj-copy): Deep-copy objects
|
|
20
20
|
- [`search()`](#search): Search iterable collections
|
|
21
21
|
|
|
@@ -110,9 +110,9 @@ handleChange({ target: { value 3 } }) // will be ignored
|
|
|
110
110
|
|
|
111
111
|
<div id="fallback-if-fails"></div>
|
|
112
112
|
|
|
113
|
-
### `fallbackIfFails(
|
|
113
|
+
### `fallbackIfFails(target, args, fallback)`: Gracefully invoke functions or promises with a fallback
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
The `fallbackIfFails` function can wrap a standard function, a promise-returning function, or a promise directly. It automatically handles both synchronous execution and asynchronous resolution, providing a fallback value if the function throws an error or the promise is rejected.
|
|
116
116
|
|
|
117
117
|
#### Sync operations:
|
|
118
118
|
|
|
@@ -149,6 +149,13 @@ fallbackIfFails(
|
|
|
149
149
|
{ products: [] }, // Fallback value to be returned when function throws an error.
|
|
150
150
|
).then(console.log)
|
|
151
151
|
// Prints the result when request is successful or fallback value when request fails
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
// use a promise
|
|
155
|
+
fallbackIfFails(
|
|
156
|
+
Promise.reject('error'),
|
|
157
|
+
[], //
|
|
158
|
+
)
|
|
152
159
|
```
|
|
153
160
|
|
|
154
161
|
<div id="obj-copy"></div>
|
|
@@ -249,7 +256,7 @@ search(data, {
|
|
|
249
256
|
asMap: false, // Result type: true => Map (default, keys preserved), false => Array
|
|
250
257
|
ignoreCase: false, // For text case-sensitivity
|
|
251
258
|
limit: 10, // Number of items returned. Default: no limit
|
|
252
|
-
matchExact: true, // true:
|
|
259
|
+
matchExact: true, // true: match exact value. false (default): partial matching
|
|
253
260
|
matchAll: true, // if true, item will be matched only when all of the query properties match
|
|
254
261
|
query: {
|
|
255
262
|
age: /(2[5-9])|(3[0-5])/, // match ages 25-35
|
package/dist/index.d.ts
CHANGED
|
@@ -24,15 +24,19 @@ type CreateTuple<T, Length extends number, Output extends readonly unknown[] = [
|
|
|
24
24
|
* @template TData The final return type.
|
|
25
25
|
*/
|
|
26
26
|
type Curry<TData, TParams extends unknown[]> = <TArgs extends unknown[]>(...args: TArgs & KeepFirstN<TParams, TArgs['length']>) => DropFirstN<TParams, TArgs['length']> extends [unknown, ...unknown[]] ? Curry<TData, DropFirstN<TParams, TArgs['length']>> : TData;
|
|
27
|
+
type CurriedArgs<TArgs extends unknown[], TArgsIsFinite extends boolean, TFunc extends (...args: any[]) => unknown, TArity extends number> = TArgsIsFinite extends false ? CreateTuple<Parameters<TFunc>[number], TArity> : KeepFirstN<[
|
|
28
|
+
...KeepRequired<TArgs>,
|
|
29
|
+
...KeepOptionals<TArgs, true, undefined>
|
|
30
|
+
], TArity>;
|
|
27
31
|
/**
|
|
28
|
-
* Deferred function
|
|
32
|
+
* Deferred function options
|
|
29
33
|
*/
|
|
30
|
-
|
|
34
|
+
type DeferredOptions<ThisArg = unknown> = {
|
|
31
35
|
leading?: boolean | 'global';
|
|
32
36
|
onError?: (err: unknown) => ValueOrPromise<unknown>;
|
|
33
37
|
thisArg?: ThisArg;
|
|
34
38
|
tid?: TimeoutId;
|
|
35
|
-
}
|
|
39
|
+
};
|
|
36
40
|
/**
|
|
37
41
|
* Drop the first item from an array/tuple and keep the rest
|
|
38
42
|
* ---
|
|
@@ -249,10 +253,6 @@ type ValueOrPromise<T> = T | Promise<T>;
|
|
|
249
253
|
declare function curry<TData, TArgs extends unknown[], TArgsIsFinite extends boolean = IsFiniteTuple<TArgs>, TArity extends TArgs['length'] = TArgsIsFinite extends true ? TupleMaxLength<TArgs> : number>(func: (...args: TArgs) => TData, ...[arity]: TArgsIsFinite extends true ? [arity?: TArity] : [
|
|
250
254
|
arity: TArity
|
|
251
255
|
]): Curry<TData, CurriedArgs<TArgs, TArgsIsFinite, (...args: TArgs) => TData, TArity>>;
|
|
252
|
-
type CurriedArgs<TArgs extends unknown[], TArgsIsFinite extends boolean, TFunc extends (...args: any[]) => unknown, TArity extends number> = TArgsIsFinite extends false ? CreateTuple<Parameters<TFunc>[number], TArity> : KeepFirstN<[
|
|
253
|
-
...KeepRequired<TArgs>,
|
|
254
|
-
...KeepOptionals<TArgs, true, undefined>
|
|
255
|
-
], TArity>;
|
|
256
256
|
|
|
257
257
|
/**
|
|
258
258
|
* @function deferred AKA debounce
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
// src/forceCast.ts
|
|
2
|
-
var asAny = (x) => x;
|
|
3
|
-
var forceCast = (x) => x;
|
|
4
|
-
var forceCast_default = forceCast;
|
|
5
|
-
|
|
6
1
|
// src/curry.ts
|
|
7
2
|
function curry(func, ...[arity = func.length]) {
|
|
8
3
|
const curriedFn = (...args) => {
|
|
9
4
|
const _args = args;
|
|
10
|
-
if (_args.length >= arity) return func(...
|
|
11
|
-
return (...nextArgs) =>
|
|
5
|
+
if (_args.length >= arity) return func(...args);
|
|
6
|
+
return (...nextArgs) => curriedFn(
|
|
12
7
|
..._args,
|
|
13
8
|
...nextArgs
|
|
14
9
|
);
|
|
@@ -248,6 +243,10 @@ function debounce(...args) {
|
|
|
248
243
|
return deferred_default(...args);
|
|
249
244
|
}
|
|
250
245
|
|
|
246
|
+
// src/forceCast.ts
|
|
247
|
+
var asAny = (x) => x;
|
|
248
|
+
var forceCast = (x) => x;
|
|
249
|
+
|
|
251
250
|
// src/throttled.ts
|
|
252
251
|
var throttled = (callback, delay = 50, config = {}) => {
|
|
253
252
|
const { defaults: d } = throttled;
|
|
@@ -346,7 +345,7 @@ var objCopy = (input, output, ignoreKeys, override = false, recursive = true) =>
|
|
|
346
345
|
const value = input[key];
|
|
347
346
|
const skip = _output.hasOwnProperty(key) && (override === "empty" ? !isEmpty(_output[key]) : isFn(override) ? !override(key, _output[key], value) : true);
|
|
348
347
|
if (skip) continue;
|
|
349
|
-
const isPrimitive = [void 0, null, Infinity, NaN].includes(
|
|
348
|
+
const isPrimitive = [void 0, null, Infinity, NaN].includes(value) || !isObj(value, false);
|
|
350
349
|
if (isPrimitive) {
|
|
351
350
|
_output[key] = value;
|
|
352
351
|
continue;
|
|
@@ -356,26 +355,28 @@ var objCopy = (input, output, ignoreKeys, override = false, recursive = true) =>
|
|
|
356
355
|
case Array.prototype:
|
|
357
356
|
return clone(value, "[]");
|
|
358
357
|
case ArrayBuffer.prototype:
|
|
359
|
-
return
|
|
358
|
+
return value.slice(0);
|
|
360
359
|
case Date.prototype:
|
|
361
|
-
return new Date(
|
|
360
|
+
return new Date(value.getTime());
|
|
362
361
|
case Map.prototype:
|
|
363
362
|
return new Map(
|
|
364
363
|
clone(
|
|
365
|
-
Array.from(
|
|
364
|
+
Array.from(
|
|
365
|
+
value
|
|
366
|
+
),
|
|
366
367
|
"[]"
|
|
367
368
|
)
|
|
368
369
|
);
|
|
369
370
|
case RegExp.prototype:
|
|
370
|
-
return new RegExp(
|
|
371
|
+
return new RegExp(value);
|
|
371
372
|
case Set.prototype:
|
|
372
373
|
return new Set(
|
|
373
|
-
clone(Array.from(
|
|
374
|
+
clone(Array.from(value))
|
|
374
375
|
);
|
|
375
376
|
case Uint8Array.prototype:
|
|
376
|
-
return new Uint8Array([...
|
|
377
|
+
return new Uint8Array([...value]);
|
|
377
378
|
case URL.prototype:
|
|
378
|
-
return new URL(
|
|
379
|
+
return new URL(value);
|
|
379
380
|
default:
|
|
380
381
|
break;
|
|
381
382
|
}
|
package/package.json
CHANGED