@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 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(fn, args, fallback)`: gracefully invoke functions
113
+ ### `fallbackIfFails(target, args, fallback)`: Gracefully invoke functions or promises with a fallback
114
114
 
115
- Based on the function provided `fallbackIfFails` will either execute synchronously or asynchronously.
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: full text search. false (default): partial matching
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 config
32
+ * Deferred function options
29
33
  */
30
- interface DeferredOptions<ThisArg = unknown> {
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(...forceCast_default(args));
11
- return (...nextArgs) => asAny(curriedFn)(
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(asAny(value)) || !isObj(value, false);
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 asAny(value).slice(0);
358
+ return value.slice(0);
360
359
  case Date.prototype:
361
- return new Date(asAny(value).getTime());
360
+ return new Date(value.getTime());
362
361
  case Map.prototype:
363
362
  return new Map(
364
363
  clone(
365
- Array.from(asAny(value)),
364
+ Array.from(
365
+ value
366
+ ),
366
367
  "[]"
367
368
  )
368
369
  );
369
370
  case RegExp.prototype:
370
- return new RegExp(asAny(value));
371
+ return new RegExp(value);
371
372
  case Set.prototype:
372
373
  return new Set(
373
- clone(Array.from(asAny(value)))
374
+ clone(Array.from(value))
374
375
  );
375
376
  case Uint8Array.prototype:
376
- return new Uint8Array([...asAny(value)]);
377
+ return new Uint8Array([...value]);
377
378
  case URL.prototype:
378
- return new URL(asAny(value));
379
+ return new URL(value);
379
380
  default:
380
381
  break;
381
382
  }
package/package.json CHANGED
@@ -42,5 +42,5 @@
42
42
  "sideEffects": false,
43
43
  "type": "module",
44
44
  "types": "dist/index.d.ts",
45
- "version": "1.0.6"
45
+ "version": "1.0.7"
46
46
  }