@duplojs/utils 1.4.33 → 1.4.35
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/common/createKindIdentifier.d.ts +2 -2
- package/dist/dataParser/base.cjs +0 -1
- package/dist/dataParser/base.d.ts +0 -4
- package/dist/dataParser/base.mjs +0 -1
- package/dist/dataParser/baseExtended.cjs +0 -3
- package/dist/dataParser/baseExtended.d.ts +0 -4
- package/dist/dataParser/baseExtended.mjs +0 -3
- package/dist/dataParser/extended/array.d.ts +3 -13
- package/dist/dataParser/extended/bigint.d.ts +3 -13
- package/dist/dataParser/extended/boolean.d.ts +1 -7
- package/dist/dataParser/extended/date.d.ts +1 -7
- package/dist/dataParser/extended/empty.d.ts +1 -7
- package/dist/dataParser/extended/lazy.d.ts +1 -7
- package/dist/dataParser/extended/literal.d.ts +1 -7
- package/dist/dataParser/extended/nil.d.ts +1 -7
- package/dist/dataParser/extended/nullable.d.ts +1 -7
- package/dist/dataParser/extended/number.d.ts +4 -16
- package/dist/dataParser/extended/object.d.ts +1 -7
- package/dist/dataParser/extended/optional.d.ts +1 -7
- package/dist/dataParser/extended/pipe.d.ts +1 -7
- package/dist/dataParser/extended/record.d.ts +1 -7
- package/dist/dataParser/extended/recover.d.ts +1 -7
- package/dist/dataParser/extended/string.d.ts +4 -16
- package/dist/dataParser/extended/templateLiteral.d.ts +1 -7
- package/dist/dataParser/extended/time.d.ts +3 -13
- package/dist/dataParser/extended/transform.d.ts +1 -7
- package/dist/dataParser/extended/tuple.d.ts +3 -13
- package/dist/dataParser/extended/union.d.ts +1 -7
- package/dist/dataParser/extended/unknown.d.ts +1 -7
- package/dist/dataParser/identifier.d.ts +2 -2
- package/dist/dataParser/parsers/array/index.d.ts +0 -4
- package/dist/dataParser/parsers/bigint/index.d.ts +0 -4
- package/dist/dataParser/parsers/boolean.d.ts +0 -4
- package/dist/dataParser/parsers/date.d.ts +0 -4
- package/dist/dataParser/parsers/empty.d.ts +0 -4
- package/dist/dataParser/parsers/lazy.d.ts +0 -4
- package/dist/dataParser/parsers/literal.d.ts +0 -4
- package/dist/dataParser/parsers/nil.d.ts +0 -4
- package/dist/dataParser/parsers/nullable.d.ts +0 -4
- package/dist/dataParser/parsers/number/index.d.ts +0 -4
- package/dist/dataParser/parsers/object/index.d.ts +0 -4
- package/dist/dataParser/parsers/optional.d.ts +0 -4
- package/dist/dataParser/parsers/pipe.d.ts +0 -4
- package/dist/dataParser/parsers/record/index.d.ts +0 -4
- package/dist/dataParser/parsers/recover.d.ts +0 -4
- package/dist/dataParser/parsers/string/index.d.ts +0 -4
- package/dist/dataParser/parsers/templateLiteral/createTemplateLiteralPattern.cjs +2 -2
- package/dist/dataParser/parsers/templateLiteral/createTemplateLiteralPattern.mjs +2 -2
- package/dist/dataParser/parsers/templateLiteral/index.d.ts +11 -15
- package/dist/dataParser/parsers/time/index.d.ts +0 -4
- package/dist/dataParser/parsers/transform.d.ts +0 -4
- package/dist/dataParser/parsers/tuple.d.ts +0 -4
- package/dist/dataParser/parsers/union.d.ts +0 -4
- package/dist/dataParser/parsers/unknown.d.ts +0 -4
- package/dist/dataParser/types/addCheckersToDefinition.d.ts +2 -2
- package/dist/either/future/create.d.ts +2 -2
- package/dist/either/right/asyncPipe.d.ts +7 -11
- package/dist/either/right/pipe.d.ts +7 -7
- package/dist/metadata.json +15 -0
- package/dist/object/countKeys.cjs +3 -0
- package/dist/object/countKeys.d.ts +27 -0
- package/dist/object/countKeys.mjs +3 -0
- package/dist/pattern/index.cjs +2 -0
- package/dist/pattern/index.d.ts +1 -0
- package/dist/pattern/index.mjs +1 -0
- package/dist/pattern/types/complexMatchedValue/function.d.ts +8 -0
- package/dist/pattern/types/complexMatchedValue/index.d.ts +3 -1
- package/dist/pattern/types/complexMatchedValue/object.d.ts +3 -3
- package/dist/pattern/types/complexUnMatchedValue/array.d.ts +11 -4
- package/dist/pattern/types/complexUnMatchedValue/function.d.ts +8 -0
- package/dist/pattern/types/complexUnMatchedValue/getIncompleteUnion.d.ts +12 -1
- package/dist/pattern/types/complexUnMatchedValue/index.d.ts +9 -2
- package/dist/pattern/types/complexUnMatchedValue/object.d.ts +3 -3
- package/dist/pattern/types/pattern.d.ts +2 -2
- package/dist/pattern/whenNot.cjs +17 -0
- package/dist/pattern/whenNot.d.ts +49 -0
- package/dist/pattern/whenNot.mjs +15 -0
- package/package.json +1 -1
package/dist/pattern/index.cjs
CHANGED
|
@@ -7,6 +7,7 @@ var index = require('./match/index.cjs');
|
|
|
7
7
|
var isMatch = require('./isMatch.cjs');
|
|
8
8
|
var union = require('./union.cjs');
|
|
9
9
|
var when = require('./when.cjs');
|
|
10
|
+
var whenNot = require('./whenNot.cjs');
|
|
10
11
|
var builder = require('./match/builder.cjs');
|
|
11
12
|
var pattern = require('./types/pattern.cjs');
|
|
12
13
|
|
|
@@ -22,6 +23,7 @@ exports.match = index.match;
|
|
|
22
23
|
exports.isMatch = isMatch.isMatch;
|
|
23
24
|
exports.union = union.union;
|
|
24
25
|
exports.when = when.when;
|
|
26
|
+
exports.whenNot = whenNot.whenNot;
|
|
25
27
|
exports.InvalidExhaustivePatternError = builder.InvalidExhaustivePatternError;
|
|
26
28
|
exports.matchBuilder = builder.matchBuilder;
|
|
27
29
|
exports.SymbolToolPatternFunctionLabel = pattern.SymbolToolPatternFunctionLabel;
|
package/dist/pattern/index.d.ts
CHANGED
package/dist/pattern/index.mjs
CHANGED
|
@@ -5,6 +5,7 @@ export { match } from './match/index.mjs';
|
|
|
5
5
|
export { isMatch } from './isMatch.mjs';
|
|
6
6
|
export { union } from './union.mjs';
|
|
7
7
|
export { when } from './when.mjs';
|
|
8
|
+
export { whenNot } from './whenNot.mjs';
|
|
8
9
|
export { InvalidExhaustivePatternError, matchBuilder } from './match/builder.mjs';
|
|
9
10
|
export { SymbolToolPatternFunctionLabel } from './types/pattern.mjs';
|
|
10
11
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AnyFunction, type IsEqual } from "../../../common";
|
|
2
|
+
export type ComplexMatchedFunction<GenericInput extends unknown, GenericPatternValue extends unknown> = ([
|
|
3
|
+
Extract<GenericInput, AnyFunction>,
|
|
4
|
+
Extract<GenericPatternValue, AnyFunction>
|
|
5
|
+
] extends [
|
|
6
|
+
infer inferredInput extends AnyFunction,
|
|
7
|
+
infer inferredPatternValue extends AnyFunction
|
|
8
|
+
] ? Extract<inferredInput, inferredPatternValue> extends infer inferredValue ? IsEqual<inferredValue, never> extends true ? inferredPatternValue : inferredValue : never : never);
|
|
@@ -3,4 +3,6 @@ import { type ComplexMatchedObject } from "./object";
|
|
|
3
3
|
import { type ComplexMatchedArray } from "./array";
|
|
4
4
|
import { type PatternValueMaybeAll } from "../pattern";
|
|
5
5
|
import { type ComplexMatchedMaybeAll } from "./maybeAll";
|
|
6
|
-
|
|
6
|
+
import { type ComplexMatchedFunction } from "./function";
|
|
7
|
+
import { type AnyValue, type IsEqual } from "../../../common";
|
|
8
|
+
export type ComplexMatchedValue<GenericInput extends unknown, GenericPatternValue extends unknown> = (IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput) extends infer InferredInput ? Exclude<GenericPatternValue, PatternValueMaybeAll> extends infer InferredPatternValue ? (ComplexMatchedPrimitive<InferredInput, InferredPatternValue> | ComplexMatchedObject<InferredInput, InferredPatternValue> | ComplexMatchedArray<InferredInput, InferredPatternValue> | ComplexMatchedFunction<InferredInput, InferredPatternValue> | ComplexMatchedMaybeAll<InferredInput, GenericPatternValue>) : never : never;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { type Adaptor, type SimplifyTopLevel, type IsEqual } from "../../../common";
|
|
1
|
+
import { type Adaptor, type SimplifyTopLevel, type IsEqual, type AnyFunction } from "../../../common";
|
|
2
2
|
import { type ComplexMatchedValue } from ".";
|
|
3
3
|
import { type GetPropsWithValue } from "../../../object";
|
|
4
4
|
export type ComplexMatchedObject<GenericInput extends unknown, GenericPatternValue extends unknown> = ([
|
|
5
|
-
Exclude<Extract<GenericInput, object>, readonly any[]>,
|
|
6
|
-
Exclude<Extract<GenericPatternValue, object>, readonly any[]>
|
|
5
|
+
Exclude<Extract<GenericInput, object>, readonly any[] | AnyFunction>,
|
|
6
|
+
Exclude<Extract<GenericPatternValue, object>, readonly any[] | AnyFunction>
|
|
7
7
|
] extends [
|
|
8
8
|
infer InferredInput,
|
|
9
9
|
infer InferredPatternValue
|
|
@@ -5,15 +5,15 @@ type ComplexUnMatchedArrayTuple<GenericInput extends unknown, GenericPatternValu
|
|
|
5
5
|
Extract<GenericPatternValue, AnyTuple>
|
|
6
6
|
] extends [
|
|
7
7
|
infer InferredInput,
|
|
8
|
-
infer
|
|
9
|
-
] ? InferredInput : never);
|
|
8
|
+
infer InferredPatternValue
|
|
9
|
+
] ? IsEqual<InferredPatternValue, never> extends true ? never : InferredInput : never);
|
|
10
10
|
type ComplexUnMatchedTupleTuple<GenericInput extends unknown, GenericPatternValue extends unknown> = ([
|
|
11
11
|
Extract<GenericInput, AnyTuple>,
|
|
12
12
|
Extract<GenericPatternValue, AnyTuple>
|
|
13
13
|
] extends [
|
|
14
14
|
infer InferredInput,
|
|
15
15
|
infer InferredPatternValue
|
|
16
|
-
] ? IsEqual<InferredPatternValue, never> extends true ?
|
|
16
|
+
] ? IsEqual<InferredPatternValue, never> extends true ? never : IsUnion<InferredPatternValue> extends true ? never : InferredInput extends InferredPatternValue ? never : [
|
|
17
17
|
InferredInput,
|
|
18
18
|
InferredPatternValue
|
|
19
19
|
] extends [
|
|
@@ -23,5 +23,12 @@ type ComplexUnMatchedTupleTuple<GenericInput extends unknown, GenericPatternValu
|
|
|
23
23
|
IsEqual<InferredResultFirst, never> extends true ? InferredInputFirst : InferredResultFirst,
|
|
24
24
|
...Adaptor<IsEqual<InferredResultRest, never> extends true ? InferredPatternValueRest : InferredResultRest, readonly any[]>
|
|
25
25
|
] : never : never : never : never);
|
|
26
|
-
|
|
26
|
+
type ComplexUnMatchedArrayArray<GenericInput extends unknown, GenericPatternValue extends unknown> = ([
|
|
27
|
+
Exclude<Extract<GenericInput, readonly any[]>, AnyTuple>,
|
|
28
|
+
Exclude<Extract<GenericPatternValue, readonly any[]>, AnyTuple>
|
|
29
|
+
] extends [
|
|
30
|
+
infer InferredInput extends readonly any[],
|
|
31
|
+
infer InferredPatternValue extends readonly any[]
|
|
32
|
+
] ? IsEqual<InferredInput, never> extends true ? never : InferredInput[number] extends infer InferredInnerValue ? InferredInnerValue extends any ? Extract<InferredInnerValue, InferredPatternValue[number]> extends infer InferredObviousMatch ? IsEqual<InferredObviousMatch, never> extends true ? ComplexUnMatchedValue<InferredInnerValue, InferredPatternValue[number]> extends infer InferredValue ? IsEqual<InferredValue, never> extends true ? never : InferredInput : never : never : never : never : never : never);
|
|
33
|
+
export type ComplexUnMatchedArray<GenericInput extends unknown, GenericPatternValue extends unknown> = Exclude<GenericPatternValue, readonly []> extends infer InferredPatternValue ? IsEqual<InferredPatternValue, never> extends true ? never : (ComplexUnMatchedTupleTuple<GenericInput, InferredPatternValue> | ComplexUnMatchedArrayTuple<GenericInput, InferredPatternValue> | ComplexUnMatchedArrayArray<GenericInput, InferredPatternValue>) : never;
|
|
27
34
|
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AnyFunction } from "../../../common";
|
|
2
|
+
export type ComplexUnMatchedFunction<GenericInput extends unknown, GenericPatternValue extends unknown> = ([
|
|
3
|
+
Extract<GenericInput, AnyFunction>,
|
|
4
|
+
Extract<GenericPatternValue, AnyFunction>
|
|
5
|
+
] extends [
|
|
6
|
+
infer inferredInput,
|
|
7
|
+
infer inferredPatternValue
|
|
8
|
+
] ? Exclude<inferredInput, inferredPatternValue> : never);
|
|
@@ -52,7 +52,18 @@ export type GetIncompleteUnion<GenericInput extends unknown, GenericPatternValue
|
|
|
52
52
|
] ? GetIncompleteUnion<InferredInput[number], InferredPatternValueFirst> extends infer InferredResultFirst ? FlatObject<{
|
|
53
53
|
"@duplojs/utils/[array.first": InferredResultFirst;
|
|
54
54
|
"@duplojs/utils/array.rest]": IsEqual<InferredResultFirst, {}> extends true ? GetIncompleteUnion<InferredInput, InferredPatternValueRest> : never;
|
|
55
|
-
}> : {} : {} : never) | (
|
|
55
|
+
}> : {} : {} : never) | ([
|
|
56
|
+
Exclude<Extract<GenericInput, readonly any[]>, AnyTuple>,
|
|
57
|
+
Exclude<Extract<GenericPatternValue, readonly any[]>, AnyTuple>
|
|
58
|
+
] extends [
|
|
59
|
+
infer InferredInput extends readonly any[],
|
|
60
|
+
infer InferredPatternValue extends readonly any[]
|
|
61
|
+
] ? Or<[
|
|
62
|
+
IsEqual<InferredPatternValue, never>,
|
|
63
|
+
IsEqual<InferredInput, never>
|
|
64
|
+
]> extends true ? never : IsEqual<Exclude<InferredInput[number], InferredPatternValue[number]>, never> extends true ? {} : {
|
|
65
|
+
"@duplojs/utils/[array]": true;
|
|
66
|
+
} : never) | (Extract<GenericPatternValue, PatternValueMaybeAll> extends infer InferredPatternValue ? IsEqual<InferredPatternValue, never> extends true ? never : {
|
|
56
67
|
"@duplojs/utils/{maybeAll}": true;
|
|
57
68
|
} : never) | ([
|
|
58
69
|
Extract<GenericInput, readonly any[]>,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type UnionToTuple } from "../../../common";
|
|
1
|
+
import { type AnyValue, type IsEqual, type UnionToTuple } from "../../../common";
|
|
2
2
|
import { type GetIncompleteUnion } from "./getIncompleteUnion";
|
|
3
3
|
import { type ComplexUnMatchedPrimitive } from "./primitive";
|
|
4
4
|
import { type ComplexUnMatchedObject } from "./object";
|
|
@@ -6,4 +6,11 @@ import { type ComplexUnMatchedUnionObject } from "./unionObject";
|
|
|
6
6
|
import { type ComplexUnMatchedArray } from "./array";
|
|
7
7
|
import { type PatternValueMaybeAll } from "../pattern";
|
|
8
8
|
import { type ComplexUnMatchedMaybeAll } from "./maybeAll";
|
|
9
|
-
|
|
9
|
+
import { type ComplexUnMatchedFunction } from "./function";
|
|
10
|
+
export type ComplexUnMatchedValue<GenericInput extends unknown, GenericPatternValue extends unknown> = (IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput) extends infer InferredInput ? (InferredInput extends any ? UnionToTuple<keyof GetIncompleteUnion<InferredInput, GenericPatternValue>>["length"] extends 0 | 1 ? never : InferredInput : never) extends infer InferredIncompleteUnionInput ? [
|
|
11
|
+
Exclude<InferredInput, InferredIncompleteUnionInput>,
|
|
12
|
+
Exclude<GenericPatternValue, PatternValueMaybeAll>
|
|
13
|
+
] extends [
|
|
14
|
+
infer InferredSortedInput,
|
|
15
|
+
infer InferredPatternValue
|
|
16
|
+
] ? (ComplexUnMatchedPrimitive<InferredSortedInput, InferredPatternValue> | ComplexUnMatchedObject<InferredSortedInput, InferredPatternValue> | ComplexUnMatchedArray<InferredSortedInput, InferredPatternValue> | ComplexUnMatchedUnionObject<InferredSortedInput, InferredPatternValue> | ComplexUnMatchedFunction<InferredSortedInput, InferredPatternValue> | ComplexUnMatchedMaybeAll<InferredSortedInput, GenericPatternValue> | InferredIncompleteUnionInput) : never : never : never;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type Adaptor, type SimplifyTopLevel, type IsEqual, type IsUnion, type NeverCoalescing, type RemoveReadonly } from "../../../common";
|
|
1
|
+
import { type Adaptor, type SimplifyTopLevel, type IsEqual, type IsUnion, type NeverCoalescing, type RemoveReadonly, type AnyFunction } from "../../../common";
|
|
2
2
|
import { type ComplexUnMatchedValue } from ".";
|
|
3
3
|
export type ComplexUnMatchedObject<GenericInput extends unknown, GenericPatternValue extends unknown> = ([
|
|
4
|
-
Exclude<Extract<GenericInput, object>, readonly any[]>,
|
|
5
|
-
Exclude<Extract<GenericPatternValue, object>, readonly any[]>
|
|
4
|
+
Exclude<Extract<GenericInput, object>, readonly any[] | AnyFunction>,
|
|
5
|
+
Exclude<Extract<GenericPatternValue, object>, readonly any[] | AnyFunction>
|
|
6
6
|
] extends [
|
|
7
7
|
infer InferredInput,
|
|
8
8
|
infer InferredPatternValue
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type MergeUnionTuple } from "../../array/types/mergeUnionTuple";
|
|
2
|
-
import { type AnyTuple, type Adaptor, type IsEqual, type ObjectKey, type WrappedValue } from "../../common";
|
|
2
|
+
import { type AnyTuple, type Adaptor, type IsEqual, type ObjectKey, type WrappedValue, type AnyValue } from "../../common";
|
|
3
3
|
export type EligiblePrimitiveMatch = string | number | bigint | boolean | undefined | null;
|
|
4
4
|
type PrimitivePattern<GenericInput extends unknown> = GenericInput extends EligiblePrimitiveMatch ? GenericInput : never;
|
|
5
5
|
type ObjectPattern<GenericInput extends unknown> = Exclude<GenericInput, readonly any[]> extends infer InferredInput ? [
|
|
@@ -25,7 +25,7 @@ export interface ToolPattern<GenericInput extends unknown = any, GenericPattern
|
|
|
25
25
|
[SymbolToolPatternFunction](input: GenericInput): boolean;
|
|
26
26
|
[SymbolToolPattern]: GenericPattern;
|
|
27
27
|
}
|
|
28
|
-
export type Pattern<GenericInput extends unknown = any> = (
|
|
28
|
+
export type Pattern<GenericInput extends unknown = any> = (IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput) extends infer InferredInput ? (PredicatePattern<InferredInput> | ToolPattern<InferredInput> | PrimitivePattern<InferredInput> | ObjectPattern<InferredInput> | ArrayPattern<InferredInput>) : never;
|
|
29
29
|
declare const SymbolPatternValueMaybeAll: unique symbol;
|
|
30
30
|
type SymbolPatternValueMaybeAll = typeof SymbolPatternValueMaybeAll;
|
|
31
31
|
export interface PatternValueMaybeAll<GenericValue extends unknown = any> extends WrappedValue<GenericValue> {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var result = require('./result.cjs');
|
|
4
|
+
|
|
5
|
+
function whenNot(...args) {
|
|
6
|
+
if (args.length === 2) {
|
|
7
|
+
const [predicate, theFunction] = args;
|
|
8
|
+
return (input) => whenNot(input, predicate, theFunction);
|
|
9
|
+
}
|
|
10
|
+
const [input, predicate, theFunction] = args;
|
|
11
|
+
if (!result.isResult(input) && !predicate(input)) {
|
|
12
|
+
return result.result(theFunction(input));
|
|
13
|
+
}
|
|
14
|
+
return input;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.whenNot = whenNot;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type AnyValue, type BreakGenericLink, type IsEqual, type EscapeVoid } from "../common";
|
|
2
|
+
import { type PatternResult } from "./result";
|
|
3
|
+
/**
|
|
4
|
+
* Applies a handler when a predicate fails.
|
|
5
|
+
*
|
|
6
|
+
* **Supported call styles:**
|
|
7
|
+
* - Classic: `whenNot(input, predicate, handler)` -> returns a result or the input
|
|
8
|
+
* - Curried: `whenNot(predicate, handler)` -> returns a function waiting for the input
|
|
9
|
+
* - Classic predicate: `whenNot(input, isType, handler)` -> narrows input types
|
|
10
|
+
* - Curried predicate: `whenNot(isType, handler)` -> narrows input types
|
|
11
|
+
*
|
|
12
|
+
* If the predicate fails, the handler runs and the result is wrapped for chaining.
|
|
13
|
+
* The input is not mutated.
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* pipe(
|
|
17
|
+
* 2,
|
|
18
|
+
* P.whenNot(
|
|
19
|
+
* (value) => value > 3,
|
|
20
|
+
* (value) => value * 2,
|
|
21
|
+
* ),
|
|
22
|
+
* P.otherwise((value) => value),
|
|
23
|
+
* ); // 4
|
|
24
|
+
*
|
|
25
|
+
* A.map(
|
|
26
|
+
* <const>["alpha", 2],
|
|
27
|
+
* innerPipe(
|
|
28
|
+
* P.whenNot(
|
|
29
|
+
* isType("string"),
|
|
30
|
+
* (value) => value + 1,
|
|
31
|
+
* ),
|
|
32
|
+
* P.otherwise((value) => value),
|
|
33
|
+
* ),
|
|
34
|
+
* ); // ["alpha", 3]
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @remarks
|
|
38
|
+
* - Predicate overloads (type guards) narrow the output type
|
|
39
|
+
*
|
|
40
|
+
* @see [`P.otherwise`](https://utils.duplojs.dev/en/v1/api/pattern/otherwise) For fallbacks
|
|
41
|
+
* @see https://utils.duplojs.dev/en/v1/api/pattern/whenNot
|
|
42
|
+
*
|
|
43
|
+
* @namespace P
|
|
44
|
+
*
|
|
45
|
+
*/
|
|
46
|
+
export declare function whenNot<GenericInput extends unknown, GenericInputValue extends Exclude<IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput, PatternResult>, GenericInputPatternResult extends Extract<GenericInput, PatternResult>, GenericPredicatedInput extends GenericInputValue, GenericOutput extends AnyValue | EscapeVoid>(predicate: (input: GenericInputValue) => input is GenericPredicatedInput, theFunction: (predicatedInput: Exclude<GenericInputValue, GenericPredicatedInput>) => GenericOutput): (input: (GenericInput | GenericInputPatternResult | GenericInputValue)) => (GenericInputPatternResult | Exclude<BreakGenericLink<GenericInput>, Exclude<GenericInputValue, GenericPredicatedInput> | PatternResult> | PatternResult<GenericOutput>);
|
|
47
|
+
export declare function whenNot<GenericInput extends unknown, GenericInputValue extends Exclude<IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput, PatternResult>, GenericInputPatternResult extends Extract<GenericInput, PatternResult>, GenericOutput extends AnyValue | EscapeVoid>(predicate: (input: GenericInputValue) => boolean, theFunction: (predicatedInput: GenericInputValue) => GenericOutput): (input: (GenericInput | GenericInputPatternResult | GenericInputValue)) => (GenericInputPatternResult | GenericInputValue | PatternResult<GenericOutput>);
|
|
48
|
+
export declare function whenNot<GenericInput extends unknown, GenericInputValue extends Exclude<IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput, PatternResult>, GenericInputPatternResult extends Extract<GenericInput, PatternResult>, GenericPredicatedInput extends GenericInputValue, GenericOutput extends AnyValue | EscapeVoid>(input: (GenericInput | GenericInputPatternResult | GenericInputValue), predicate: (input: GenericInputValue) => input is GenericPredicatedInput, theFunction: (predicatedInput: Exclude<GenericInputValue, GenericPredicatedInput>) => GenericOutput): (GenericInputPatternResult | Exclude<BreakGenericLink<GenericInput>, Exclude<GenericInputValue, GenericPredicatedInput> | PatternResult> | PatternResult<GenericOutput>);
|
|
49
|
+
export declare function whenNot<GenericInput extends unknown, GenericInputValue extends Exclude<IsEqual<GenericInput, unknown> extends true ? AnyValue : GenericInput, PatternResult>, GenericInputPatternResult extends Extract<GenericInput, PatternResult>, GenericOutput extends AnyValue | EscapeVoid>(input: (GenericInput | GenericInputPatternResult | GenericInputValue), predicate: (input: GenericInputValue) => boolean, theFunction: (predicatedInput: GenericInputValue) => GenericOutput): (GenericInputPatternResult | GenericInputValue | PatternResult<GenericOutput>);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isResult, result } from './result.mjs';
|
|
2
|
+
|
|
3
|
+
function whenNot(...args) {
|
|
4
|
+
if (args.length === 2) {
|
|
5
|
+
const [predicate, theFunction] = args;
|
|
6
|
+
return (input) => whenNot(input, predicate, theFunction);
|
|
7
|
+
}
|
|
8
|
+
const [input, predicate, theFunction] = args;
|
|
9
|
+
if (!isResult(input) && !predicate(input)) {
|
|
10
|
+
return result(theFunction(input));
|
|
11
|
+
}
|
|
12
|
+
return input;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { whenNot };
|