type-plus 4.5.0 → 4.5.1
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/cjs/ComposableTypes.d.ts +0 -6
- package/cjs/JSONTypes.js +0 -1
- package/cjs/JSONTypes.js.map +1 -1
- package/cjs/UnionKeys.d.ts +0 -4
- package/cjs/array/CommonPropKeys.d.ts +0 -7
- package/cjs/array/CreateTuple.d.ts +0 -3
- package/cjs/array/Filter.d.ts +1 -1
- package/cjs/array/FindFirst.d.ts +0 -3
- package/cjs/array/IntersectOfProps.d.ts +0 -7
- package/cjs/array/Last.d.ts +0 -3
- package/cjs/array/Tail.d.ts +0 -3
- package/cjs/array/UnionOfProps.d.ts +0 -7
- package/cjs/array/UnionOfValues.d.ts +0 -7
- package/cjs/assertion/assertType.d.ts +0 -4
- package/cjs/assertion/assertType.js +0 -8
- package/cjs/assertion/assertType.js.map +1 -1
- package/cjs/functional/ChainFn.d.ts +0 -3
- package/cjs/functional/compose.d.ts +0 -3
- package/cjs/functional/compose.js +0 -3
- package/cjs/functional/compose.js.map +1 -1
- package/cjs/index.js +0 -2
- package/cjs/index.js.map +1 -1
- package/cjs/math/Add.d.ts +0 -6
- package/cjs/math/Digit.d.ts +0 -3
- package/cjs/math/IsPositive.d.ts +0 -5
- package/cjs/math/IsWhole.d.ts +0 -5
- package/cjs/math/Subtract.d.ts +0 -3
- package/cjs/nodejs/isNodeError.d.ts +0 -5
- package/cjs/nodejs/isNodeError.js +0 -5
- package/cjs/nodejs/isNodeError.js.map +1 -1
- package/cjs/nominal-types/Brand.d.ts +0 -10
- package/cjs/nominal-types/Brand.js +0 -3
- package/cjs/nominal-types/Brand.js.map +1 -1
- package/cjs/nominal-types/Flavor.d.ts +0 -12
- package/cjs/nominal-types/Flavor.js +0 -3
- package/cjs/nominal-types/Flavor.js.map +1 -1
- package/cjs/object/ExcludePropType.d.ts +0 -3
- package/cjs/object/IsDisjoint.d.ts +0 -4
- package/cjs/object/KeyTypes.d.ts +0 -5
- package/cjs/object/KeyofOptional.d.ts +0 -3
- package/cjs/object/KnownKeys.js +0 -3
- package/cjs/object/KnownKeys.js.map +1 -1
- package/cjs/object/Partial.d.ts +0 -9
- package/cjs/object/RecursiveIntersect.d.ts +0 -11
- package/cjs/object/Required.js +0 -1
- package/cjs/object/Required.js.map +1 -1
- package/cjs/object/facade.d.ts +0 -3
- package/cjs/object/facade.js +0 -3
- package/cjs/object/facade.js.map +1 -1
- package/cjs/object/mapProperties.d.ts +0 -8
- package/cjs/object/mapProperties.js +0 -8
- package/cjs/object/mapProperties.js.map +1 -1
- package/cjs/object/omit.d.ts +0 -3
- package/cjs/object/pick.d.ts +0 -7
- package/cjs/object/record.d.ts +0 -3
- package/cjs/object/record.js +0 -3
- package/cjs/object/record.js.map +1 -1
- package/cjs/object/reduceKey.d.ts +0 -3
- package/cjs/object/reduceKey.js +0 -3
- package/cjs/object/reduceKey.js.map +1 -1
- package/cjs/object/split.d.ts +0 -4
- package/cjs/predicates/CanAssign.d.ts +0 -3
- package/cjs/predicates/Equal.d.ts +0 -6
- package/cjs/predicates/isType.js +0 -6
- package/cjs/predicates/isType.js.map +1 -1
- package/cjs/promise/PromiseValue.d.ts +0 -3
- package/cjs/promise/PromiseValueMerge.d.ts +0 -3
- package/cjs/promise/isPromise.js +0 -1
- package/cjs/promise/isPromise.js.map +1 -1
- package/cjs/utils/Widen.d.ts +0 -4
- package/esm/JSONTypes.js +0 -1
- package/esm/JSONTypes.js.map +1 -1
- package/esm/assertion/assertType.js +0 -8
- package/esm/assertion/assertType.js.map +1 -1
- package/esm/functional/compose.js +0 -3
- package/esm/functional/compose.js.map +1 -1
- package/esm/index.js +0 -2
- package/esm/index.js.map +1 -1
- package/esm/nodejs/isNodeError.js +0 -5
- package/esm/nodejs/isNodeError.js.map +1 -1
- package/esm/nominal-types/Brand.js +0 -3
- package/esm/nominal-types/Brand.js.map +1 -1
- package/esm/nominal-types/Flavor.js +0 -3
- package/esm/nominal-types/Flavor.js.map +1 -1
- package/esm/object/KnownKeys.js +0 -3
- package/esm/object/KnownKeys.js.map +1 -1
- package/esm/object/Required.js +0 -1
- package/esm/object/Required.js.map +1 -1
- package/esm/object/facade.js +0 -3
- package/esm/object/facade.js.map +1 -1
- package/esm/object/mapProperties.js +0 -8
- package/esm/object/mapProperties.js.map +1 -1
- package/esm/object/record.js +0 -3
- package/esm/object/record.js.map +1 -1
- package/esm/object/reduceKey.js +0 -3
- package/esm/object/reduceKey.js.map +1 -1
- package/esm/predicates/isType.js +0 -6
- package/esm/predicates/isType.js.map +1 -1
- package/esm/promise/isPromise.js +0 -1
- package/esm/promise/isPromise.js.map +1 -1
- package/package.json +1 -1
- package/ts/array/Filter.spec.ts +54 -21
- package/ts/array/Filter.ts +17 -12
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
import { KeyTypes } from './KeyTypes';
|
|
2
2
|
export declare function reduceByKey<S extends Record<KeyTypes, any>, T>(subject: S, callbackfn: (previousValue: T, key: keyof S, currentIndex: number, array: string[]) => T, initialValue: T): T;
|
|
3
|
-
/**
|
|
4
|
-
* @deprecated renamed to reduceByKey
|
|
5
|
-
*/
|
|
6
3
|
export declare const reduceKey: typeof reduceByKey;
|
package/cjs/object/reduceKey.js
CHANGED
|
@@ -5,8 +5,5 @@ function reduceByKey(subject, callbackfn, initialValue) {
|
|
|
5
5
|
return Object.keys(subject).reduce(callbackfn, initialValue);
|
|
6
6
|
}
|
|
7
7
|
exports.reduceByKey = reduceByKey;
|
|
8
|
-
/**
|
|
9
|
-
* @deprecated renamed to reduceByKey
|
|
10
|
-
*/
|
|
11
8
|
exports.reduceKey = reduceByKey;
|
|
12
9
|
//# sourceMappingURL=reduceKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reduceKey.js","sourceRoot":"","sources":["../../ts/object/reduceKey.ts"],"names":[],"mappings":";;;AAEA,SAAgB,WAAW,CACzB,OAAU,EACV,UAAwF,EACxF,YAAe;IACf,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAiB,EAAE,YAAY,CAAC,CAAA;AACrE,CAAC;AALD,kCAKC;
|
|
1
|
+
{"version":3,"file":"reduceKey.js","sourceRoot":"","sources":["../../ts/object/reduceKey.ts"],"names":[],"mappings":";;;AAEA,SAAgB,WAAW,CACzB,OAAU,EACV,UAAwF,EACxF,YAAe;IACf,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAiB,EAAE,YAAY,CAAC,CAAA;AACrE,CAAC;AALD,kCAKC;AAKY,QAAA,SAAS,GAAG,WAAW,CAAA"}
|
package/cjs/object/split.d.ts
CHANGED
|
@@ -5,10 +5,6 @@ declare type Splitter<T extends AnyRecord> = Partial<{
|
|
|
5
5
|
export declare type Split<T extends AnyRecord, S extends AnyRecord> = {
|
|
6
6
|
[k in keyof S]: NonNullable<T[k]> | S[k];
|
|
7
7
|
};
|
|
8
|
-
/**
|
|
9
|
-
* Split an object into multiple objects.
|
|
10
|
-
* @returns [...entries, remaining]
|
|
11
|
-
*/
|
|
12
8
|
export declare function split<T extends AnyRecord, S1 extends Splitter<T>>(target: T, split1: S1): [
|
|
13
9
|
Split<T, S1>,
|
|
14
10
|
Omit<T, keyof S1>
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { NotExtendable } from './Extends';
|
|
2
2
|
import { IsEmptyObject } from './IsEmptyObject';
|
|
3
|
-
/**
|
|
4
|
-
* Can `A` assign to `B`
|
|
5
|
-
*/
|
|
6
3
|
export declare type CanAssign<A, B, Then = true, Else = false> = IsEmptyObject<A> extends true ? Record<string, unknown> extends B ? Then : Else : boolean extends A ? (boolean extends B ? Then : Else) : A extends B ? Then : Else;
|
|
7
4
|
export declare type IsAssign<A, B, Then = true, Else = false> = CanAssign<A, B, Then, Else>;
|
|
8
5
|
export declare function canAssign<T>(canAssign: false): <S>(subject: NotExtendable<S, T>) => true;
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Checks if two types are equal.
|
|
3
|
-
* Borrow from `typepark`.
|
|
4
|
-
* The simple `A extends B ? B extends A ? true : false : false`
|
|
5
|
-
* does not work with boolean type.
|
|
6
|
-
*/
|
|
7
1
|
export declare type Equal<A, B, Then = true, Else = false> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Then : Else;
|
|
8
2
|
export declare type IsEqual<A, B> = Equal<A, B>;
|
|
9
3
|
export declare type NotEqual<A, B, Then = true, Else = false> = (<T>() => T extends A ? 1 : 2) extends (<T>() => T extends B ? 1 : 2) ? Else : Then;
|
package/cjs/predicates/isType.js
CHANGED
|
@@ -18,11 +18,5 @@ isType.t = function (subject) {
|
|
|
18
18
|
isType.f = function (subject) {
|
|
19
19
|
return subject === undefined || subject === false;
|
|
20
20
|
};
|
|
21
|
-
/**
|
|
22
|
-
* are types A and B equals/not equals.
|
|
23
|
-
* Slightly easier to use then `isType.t<>()` and `isType.f<>()`,
|
|
24
|
-
* when doing type level only equality comparison as you don't have to import `Equal<>`.
|
|
25
|
-
*/
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
21
|
isType.equal = function () { };
|
|
28
22
|
//# sourceMappingURL=isType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isType.js","sourceRoot":"","sources":["../../ts/predicates/isType.ts"],"names":[],"mappings":";;;AAAA,kCAAwD;AAMxD,SAAgB,MAAM,CAAC,OAAgB,EAAE,SAAsD;IAC7F,IAAI,SAAS,EAAE;QACb,IAAI,IAAA,qBAAa,EAAC,SAAS,CAAC;YAC1B,OAAO,OAAO,YAAY,SAAS,CAAA;;YAEnC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAA;KAC5B;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AARD,wBAQC;AAED,MAAM,CAAC,CAAC,GAAG,UAA0B,OAAW;IAC9C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAA;AAClD,CAAC,CAAA;AACD,MAAM,CAAC,CAAC,GAAG,UAA2B,OAAW;IAC/C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,CAAA;AACnD,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"isType.js","sourceRoot":"","sources":["../../ts/predicates/isType.ts"],"names":[],"mappings":";;;AAAA,kCAAwD;AAMxD,SAAgB,MAAM,CAAC,OAAgB,EAAE,SAAsD;IAC7F,IAAI,SAAS,EAAE;QACb,IAAI,IAAA,qBAAa,EAAC,SAAS,CAAC;YAC1B,OAAO,OAAO,YAAY,SAAS,CAAA;;YAEnC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAA;KAC5B;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AARD,wBAQC;AAED,MAAM,CAAC,CAAC,GAAG,UAA0B,OAAW;IAC9C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAA;AAClD,CAAC,CAAA;AACD,MAAM,CAAC,CAAC,GAAG,UAA2B,OAAW;IAC/C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,CAAA;AACnD,CAAC,CAAA;AAQD,MAAM,CAAC,KAAK,GAAG,cAA2C,CAAC,CAAA"}
|
|
@@ -1,5 +1,2 @@
|
|
|
1
1
|
import { PromiseValue } from './PromiseValue';
|
|
2
|
-
/**
|
|
3
|
-
* Merging value types from multiple promises.
|
|
4
|
-
*/
|
|
5
2
|
export declare type PromiseValueMerge<P1 extends Promise<any>, P2 extends Promise<any>, P3 extends Promise<any> = any, P4 extends Promise<any> = any, P5 extends Promise<any> = any, P6 extends Promise<any> = any, P7 extends Promise<any> = any, P8 extends Promise<any> = any, P9 extends Promise<any> = any> = Promise<PromiseValue<P1> & PromiseValue<P2> & PromiseValue<P3> & PromiseValue<P4> & PromiseValue<P5> & PromiseValue<P6> & PromiseValue<P7> & PromiseValue<P8> & PromiseValue<P9>>;
|
package/cjs/promise/isPromise.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isPromise.js","sourceRoot":"","sources":["../../ts/promise/isPromise.ts"],"names":[],"mappings":";;;AAAA,SAAgB,SAAS,CAAU,OAAgB;
|
|
1
|
+
{"version":3,"file":"isPromise.js","sourceRoot":"","sources":["../../ts/promise/isPromise.ts"],"names":[],"mappings":";;;AAAA,SAAgB,SAAS,CAAU,OAAgB;IAEjD,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,CAAA;AAC3D,CAAC;AAHD,8BAGC"}
|
package/cjs/utils/Widen.d.ts
CHANGED
package/esm/JSONTypes.js
CHANGED
package/esm/JSONTypes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONTypes.js","sourceRoot":"","sources":["../ts/JSONTypes.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAA;AAEhC,SAAS,GAAG,CAAsB,GAAc,EAAE,GAAG,KAA6B;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAQ,CAAA;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAC7D,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"JSONTypes.js","sourceRoot":"","sources":["../ts/JSONTypes.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAA;AAEhC,SAAS,GAAG,CAAsB,GAAc,EAAE,GAAG,KAA6B;IAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAQ,CAAA;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAA;IAC7D,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;IAExB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAM,CAAA;AACnC,CAAC"}
|
|
@@ -44,7 +44,6 @@ assertType.isTrue = function (subject) {
|
|
|
44
44
|
throw TypeError(`subject is not true`);
|
|
45
45
|
};
|
|
46
46
|
assertType.noTrue = function (subject) {
|
|
47
|
-
// @ts-ignore
|
|
48
47
|
if (subject === true)
|
|
49
48
|
throw TypeError(`subject is true`);
|
|
50
49
|
};
|
|
@@ -53,7 +52,6 @@ assertType.isFalse = function (subject) {
|
|
|
53
52
|
throw TypeError(`subject is not false`);
|
|
54
53
|
};
|
|
55
54
|
assertType.noFalse = function (subject) {
|
|
56
|
-
// @ts-ignore
|
|
57
55
|
if (subject === false)
|
|
58
56
|
throw TypeError(`subject is false`);
|
|
59
57
|
};
|
|
@@ -87,12 +85,6 @@ assertType.noError = function (subject) {
|
|
|
87
85
|
};
|
|
88
86
|
assertType.isNever = function (subject) {
|
|
89
87
|
};
|
|
90
|
-
/**
|
|
91
|
-
* creates a custom assertion function with standard TypeError.
|
|
92
|
-
* Currently this requires explicity type annotation,
|
|
93
|
-
* thus making it hard to use:
|
|
94
|
-
* https://github.com/microsoft/TypeScript/issues/41047
|
|
95
|
-
*/
|
|
96
88
|
assertType.custom = function (validator) {
|
|
97
89
|
return function (subject) {
|
|
98
90
|
if (!validator(subject))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertType.js","sourceRoot":"","sources":["../../ts/assertion/assertType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAkB,aAAa,EAAE,MAAM,UAAU,CAAA;AAUxD,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,SAA+B;IAC1E,IAAI,SAAS,EAAE;QACb,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACtF,MAAM,IAAI,SAAS,CAAC,4BAA4B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;KACxE;IACD,OAAM;AACR,CAAC;AAED,UAAU,CAAC,WAAW,GAAG,UAAU,OAAkB;IACnD,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,MAAM,SAAS,CAAC,0BAA0B,CAAC,CAAA;AACjF,CAAC,CAAA;AACD,UAAU,CAAC,WAAW,GAAG,UAAa,OAA8B;IAClE,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,MAAM,SAAS,CAAC,sBAAsB,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,UAAU,CAAC,MAAM,GAAG,UAAU,OAAa;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAA;AAC9D,CAAC,CAAA;AACD,UAAU,CAAC,MAAM,GAAG,UAAa,OAAyB;IACxD,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED,UAAU,CAAC,QAAQ,GAAG,UAAU,OAAe;IAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAA;AAC3E,CAAC,CAAA;AACD,UAAU,CAAC,QAAQ,GAAG,UAAa,OAA2B;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAA;AACvE,CAAC,CAAA;AAED,UAAU,CAAC,SAAS,GAAG,UAAU,OAAgB;IAC/C,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,MAAM,SAAS,CAAC,wBAAwB,CAAC,CAAA;AAC7E,CAAC,CAAA;AACD,UAAU,CAAC,SAAS,GAAG,UAAa,OAA4B;IAC9D,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,MAAM,SAAS,CAAC,oBAAoB,CAAC,CAAA;AACzE,CAAC,CAAA;AAED,UAAU,CAAC,MAAM,GAAG,UAAU,OAAa;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAA;AAC9D,CAAC,CAAA;AACD,UAAU,CAAC,MAAM,GAAG,UAAa,OAAyB;
|
|
1
|
+
{"version":3,"file":"assertType.js","sourceRoot":"","sources":["../../ts/assertion/assertType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAkB,aAAa,EAAE,MAAM,UAAU,CAAA;AAUxD,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,SAA+B;IAC1E,IAAI,SAAS,EAAE;QACb,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YACtF,MAAM,IAAI,SAAS,CAAC,4BAA4B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;KACxE;IACD,OAAM;AACR,CAAC;AAED,UAAU,CAAC,WAAW,GAAG,UAAU,OAAkB;IACnD,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,MAAM,SAAS,CAAC,0BAA0B,CAAC,CAAA;AACjF,CAAC,CAAA;AACD,UAAU,CAAC,WAAW,GAAG,UAAa,OAA8B;IAClE,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,MAAM,SAAS,CAAC,sBAAsB,CAAC,CAAA;AAC7E,CAAC,CAAA;AAED,UAAU,CAAC,MAAM,GAAG,UAAU,OAAa;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAA;AAC9D,CAAC,CAAA;AACD,UAAU,CAAC,MAAM,GAAG,UAAa,OAAyB;IACxD,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED,UAAU,CAAC,QAAQ,GAAG,UAAU,OAAe;IAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAA;AAC3E,CAAC,CAAA;AACD,UAAU,CAAC,QAAQ,GAAG,UAAa,OAA2B;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAA;AACvE,CAAC,CAAA;AAED,UAAU,CAAC,SAAS,GAAG,UAAU,OAAgB;IAC/C,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,MAAM,SAAS,CAAC,wBAAwB,CAAC,CAAA;AAC7E,CAAC,CAAA;AACD,UAAU,CAAC,SAAS,GAAG,UAAa,OAA4B;IAC9D,IAAI,OAAO,OAAO,KAAK,SAAS;QAAE,MAAM,SAAS,CAAC,oBAAoB,CAAC,CAAA;AACzE,CAAC,CAAA;AAED,UAAU,CAAC,MAAM,GAAG,UAAU,OAAa;IACzC,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAA;AAC9D,CAAC,CAAA;AACD,UAAU,CAAC,MAAM,GAAG,UAAa,OAAyB;IAExD,IAAI,OAAO,KAAK,IAAI;QAAE,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED,UAAU,CAAC,OAAO,GAAG,UAAU,OAAc;IAC3C,IAAI,OAAO,KAAK,KAAK;QAAE,MAAM,SAAS,CAAC,sBAAsB,CAAC,CAAA;AAChE,CAAC,CAAA;AACD,UAAU,CAAC,OAAO,GAAG,UAAa,OAA0B;IAE1D,IAAI,OAAO,KAAK,KAAK;QAAE,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAA;AAC5D,CAAC,CAAA;AAED,UAAU,CAAC,QAAQ,GAAG,UAAU,OAAe;IAC7C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,uBAAuB,CAAC,CAAA;AAC3E,CAAC,CAAA;AACD,UAAU,CAAC,QAAQ,GAAG,UAAa,OAA2B;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAA;AACvE,CAAC,CAAA;AAED,UAAU,CAAC,UAAU,GAAG,UAAU,OAAoB;IACpD,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,MAAM,SAAS,CAAC,yBAAyB,CAAC,CAAA;AAC/E,CAAC,CAAA;AACD,UAAU,CAAC,UAAU,GAAG,UAAa,OAAgC;IACnE,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAA;AAC3E,CAAC,CAAA;AAED,UAAU,CAAC,aAAa,GAAG,UAAU,OAAuB;IAC1D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAAE,MAAM,SAAS,CAAC,8BAA8B,CAAC,CAAA;AAC9E,CAAC,CAAA;AAED,UAAU,CAAC,OAAO,GAAG,UAAU,OAAc;IAC3C,IAAI,CAAC,CAAC,OAAO,YAAY,KAAK,CAAC;QAAE,MAAM,SAAS,CAAC,yBAAyB,CAAC,CAAA;AAC7E,CAAC,CAAA;AACD,UAAU,CAAC,OAAO,GAAG,UAAa,OAA0B;IAC1D,IAAI,OAAO,YAAY,KAAK;QAAE,MAAM,SAAS,CAAC,qBAAqB,CAAC,CAAA;AACtE,CAAC,CAAA;AAED,UAAU,CAAC,OAAO,GAAG,UAAU,OAAc;AAC7C,CAAC,CAAA;AAQD,UAAU,CAAC,MAAM,GAAG,UAClB,SAA4B;IAE5B,OAAO,UAAU,OAAO;QACtB,IAAI,CAAC,SAAS,CAAC,OAAc,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACrG,OAAM;IACR,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../ts/functional/compose.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../ts/functional/compose.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,OAAO,CAA2B,GAAG,GAAO;IAC1D,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAQ,CAAA;AACpF,CAAC"}
|
package/esm/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// import * as types from './types'
|
|
2
1
|
export { required, requiredDeep } from 'unpartial';
|
|
3
2
|
export * from './array';
|
|
4
3
|
export * from './assertion';
|
|
@@ -14,5 +13,4 @@ export * from './predicates';
|
|
|
14
13
|
export * from './promise';
|
|
15
14
|
export * from './testing';
|
|
16
15
|
export * from './utils';
|
|
17
|
-
// export { types, types as T }
|
|
18
16
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAClD,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AAEvB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAE5B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AAIzB,cAAc,SAAS,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isNodeError.js","sourceRoot":"","sources":["../../ts/nodejs/isNodeError.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"isNodeError.js","sourceRoot":"","sources":["../../ts/nodejs/isNodeError.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,aAAa,CAA6B,IAAO,EAAE,GAAY;IAC7E,OAAO,CAAC,CAAC,GAAG,IAAK,GAAW,CAAC,IAAI,KAAK,IAAI,CAAA;AAC5C,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
// By Drew Colthorp, <https://spin.atomicobject.com/2018/01/15/typescript-flexible-nominal-typing/#comment-604580>
|
|
2
|
-
// <https://gist.github.com/dcolthorp/aa21cf87d847ae9942106435bf47565d>
|
|
3
1
|
import { typeSym, valueSym } from './types';
|
|
4
2
|
export function brand(type, subject) {
|
|
5
3
|
if (subject === undefined)
|
|
6
4
|
return function (subject) { return brand(type, subject); };
|
|
7
5
|
if (typeof subject === 'object' && subject !== null) {
|
|
8
|
-
// if subject is not an object, the branding will exist only in type-level.
|
|
9
6
|
subject[typeSym] = type;
|
|
10
7
|
}
|
|
11
8
|
return subject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Brand.js","sourceRoot":"","sources":["../../ts/nominal-types/Brand.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Brand.js","sourceRoot":"","sources":["../../ts/nominal-types/Brand.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAmB3C,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,OAAiB;IACnD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,UAAa,OAAU,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAA;IAE1F,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE;QAElD,OAAiC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KACnD;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
// By Drew Colthorp, <https://spin.atomicobject.com/2018/01/15/typescript-flexible-nominal-typing/#comment-604580>
|
|
2
|
-
// <https://gist.github.com/dcolthorp/aa21cf87d847ae9942106435bf47565d>
|
|
3
1
|
import { typeSym } from './types';
|
|
4
2
|
export function flavor(type, subject) {
|
|
5
3
|
if (subject === undefined)
|
|
6
4
|
return function (subject) { return flavor(type, subject); };
|
|
7
5
|
if (typeof subject === 'object' && subject !== null) {
|
|
8
|
-
// if subject is not an object, the branding will exist only in type-level.
|
|
9
6
|
subject[typeSym] = type;
|
|
10
7
|
}
|
|
11
8
|
return subject;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flavor.js","sourceRoot":"","sources":["../../ts/nominal-types/Flavor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Flavor.js","sourceRoot":"","sources":["../../ts/nominal-types/Flavor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAoBjC,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,OAAiB;IACpD,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,UAAa,OAAU,IAAI,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAA;IAC3F,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE;QAElD,OAAiC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KACnD;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
package/esm/object/KnownKeys.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KnownKeys.js","sourceRoot":"","sources":["../../ts/object/KnownKeys.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"KnownKeys.js","sourceRoot":"","sources":["../../ts/object/KnownKeys.ts"],"names":[],"mappings":""}
|
package/esm/object/Required.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Required.js","sourceRoot":"","sources":["../../ts/object/Required.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Required.js","sourceRoot":"","sources":["../../ts/object/Required.ts"],"names":[],"mappings":""}
|
package/esm/object/facade.js
CHANGED
|
@@ -2,17 +2,14 @@ export function facade(subject, ...props) {
|
|
|
2
2
|
return props.reduce((p, k) => {
|
|
3
3
|
const prop = subject[k];
|
|
4
4
|
if (typeof prop === 'function') {
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
6
5
|
p[k] = prop.bind(subject);
|
|
7
6
|
}
|
|
8
7
|
else {
|
|
9
8
|
Object.defineProperty(p, k, {
|
|
10
9
|
get() {
|
|
11
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
12
10
|
return subject[k];
|
|
13
11
|
},
|
|
14
12
|
set(value) {
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-assignment
|
|
16
13
|
return subject[k] = value;
|
|
17
14
|
},
|
|
18
15
|
});
|
package/esm/object/facade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../ts/object/facade.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,MAAM,CAAsB,OAAU,EAAE,GAAG,KAAkB;IAC3E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../ts/object/facade.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,MAAM,CAAsB,OAAU,EAAE,GAAG,KAAkB;IAC3E,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;YAE9B,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAC1B;aACI;YACH,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;gBAC1B,GAAG;oBAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;gBACnB,CAAC;gBACD,GAAG,CAAC,KAAU;oBAEZ,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;gBAC3B,CAAC;aACF,CAAC,CAAA;SACH;QACD,OAAO,CAAC,CAAA;IACV,CAAC,EAAE,EAAO,CAAC,CAAA;AACb,CAAC"}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
import { reduceByKey } from './reduceKey';
|
|
2
|
-
/**
|
|
3
|
-
* An Object-specific version of `map`.
|
|
4
|
-
* Original source:
|
|
5
|
-
* <https://stackoverflow.com/questions/53964071/how-to-dynamically-create-mapped-type-in-typescript>
|
|
6
|
-
*
|
|
7
|
-
* `ramda` has a similar function (`mapObjIndexed()`) with different parameter order.
|
|
8
|
-
* I keep this parameter order because this parameter order provides better type inference.
|
|
9
|
-
*/
|
|
10
2
|
export function mapProperties(subject, callbackfn) {
|
|
11
3
|
return reduceByKey(subject, (p, key) => (p[key] = callbackfn(subject[key], key, subject),
|
|
12
4
|
p), {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapProperties.js","sourceRoot":"","sources":["../../ts/object/mapProperties.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"mapProperties.js","sourceRoot":"","sources":["../../ts/object/mapProperties.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAWzC,MAAM,UAAU,aAAa,CAI3B,OAAgB,EAChB,UAAqF;IAErF,OAAO,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CACtC,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC;QAC/C,CAAC,CAAC,EAAE,EAA0C,CAAC,CAAA;AACnD,CAAC"}
|
package/esm/object/record.js
CHANGED
package/esm/object/record.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../ts/object/record.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../ts/object/record.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,MAAM,CAAwB,KAAoB;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC"}
|
package/esm/object/reduceKey.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reduceKey.js","sourceRoot":"","sources":["../../ts/object/reduceKey.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,OAAU,EACV,UAAwF,EACxF,YAAe;IACf,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAiB,EAAE,YAAY,CAAC,CAAA;AACrE,CAAC;
|
|
1
|
+
{"version":3,"file":"reduceKey.js","sourceRoot":"","sources":["../../ts/object/reduceKey.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CACzB,OAAU,EACV,UAAwF,EACxF,YAAe;IACf,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAiB,EAAE,YAAY,CAAC,CAAA;AACrE,CAAC;AAKD,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAA"}
|
package/esm/predicates/isType.js
CHANGED
|
@@ -14,11 +14,5 @@ isType.t = function (subject) {
|
|
|
14
14
|
isType.f = function (subject) {
|
|
15
15
|
return subject === undefined || subject === false;
|
|
16
16
|
};
|
|
17
|
-
/**
|
|
18
|
-
* are types A and B equals/not equals.
|
|
19
|
-
* Slightly easier to use then `isType.t<>()` and `isType.f<>()`,
|
|
20
|
-
* when doing type level only equality comparison as you don't have to import `Equal<>`.
|
|
21
|
-
*/
|
|
22
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
23
17
|
isType.equal = function () { };
|
|
24
18
|
//# sourceMappingURL=isType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isType.js","sourceRoot":"","sources":["../../ts/predicates/isType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,MAAM,UAAU,CAAA;AAMxD,MAAM,UAAU,MAAM,CAAC,OAAgB,EAAE,SAAsD;IAC7F,IAAI,SAAS,EAAE;QACb,IAAI,aAAa,CAAC,SAAS,CAAC;YAC1B,OAAO,OAAO,YAAY,SAAS,CAAA;;YAEnC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAA;KAC5B;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,CAAC,GAAG,UAA0B,OAAW;IAC9C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAA;AAClD,CAAC,CAAA;AACD,MAAM,CAAC,CAAC,GAAG,UAA2B,OAAW;IAC/C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,CAAA;AACnD,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"isType.js","sourceRoot":"","sources":["../../ts/predicates/isType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,MAAM,UAAU,CAAA;AAMxD,MAAM,UAAU,MAAM,CAAC,OAAgB,EAAE,SAAsD;IAC7F,IAAI,SAAS,EAAE;QACb,IAAI,aAAa,CAAC,SAAS,CAAC;YAC1B,OAAO,OAAO,YAAY,SAAS,CAAA;;YAEnC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAA;KAC5B;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,CAAC,GAAG,UAA0B,OAAW;IAC9C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,CAAA;AAClD,CAAC,CAAA;AACD,MAAM,CAAC,CAAC,GAAG,UAA2B,OAAW;IAC/C,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,CAAA;AACnD,CAAC,CAAA;AAQD,MAAM,CAAC,KAAK,GAAG,cAA2C,CAAC,CAAA"}
|
package/esm/promise/isPromise.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isPromise.js","sourceRoot":"","sources":["../../ts/promise/isPromise.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAU,OAAgB;
|
|
1
|
+
{"version":3,"file":"isPromise.js","sourceRoot":"","sources":["../../ts/promise/isPromise.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAU,OAAgB;IAEjD,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,UAAU,CAAA;AAC3D,CAAC"}
|
package/package.json
CHANGED
package/ts/array/Filter.spec.ts
CHANGED
|
@@ -1,21 +1,54 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
import { Filter, isType } from '..'
|
|
2
|
+
|
|
3
|
+
describe('Filter<A, C>', () => {
|
|
4
|
+
describe('A is array', () => {
|
|
5
|
+
test('array matching criteria gets itself', () => {
|
|
6
|
+
type Actual = Filter<string[], string>
|
|
7
|
+
isType.equal<true, string[], Actual>()
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
test('array not matching criteria gets never[]', () => {
|
|
11
|
+
type Actual = Filter<string[], number>
|
|
12
|
+
isType.equal<true, never[], Actual>()
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
test('remove unmatched type form array', () => {
|
|
16
|
+
type Actual = Filter<Array<string | number>, string>
|
|
17
|
+
|
|
18
|
+
isType.equal<true, string[], Actual>()
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('remove undefined and null', () => {
|
|
22
|
+
type Actual = Filter<Array<string | undefined | null>, string>
|
|
23
|
+
isType.equal<true, string[], Actual>()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
test('can filter with undefined and null', () => {
|
|
27
|
+
type Actual = Filter<Array<string | undefined | null>, undefined | null>
|
|
28
|
+
// Array<undefined | null> is destructured to undefined[] | null[] by TypeScript
|
|
29
|
+
isType.equal<true, undefined[] | null[], Actual>()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('work with never[]', () => {
|
|
33
|
+
type Actual = Filter<never[], undefined>
|
|
34
|
+
isType.equal<true, never[], Actual>()
|
|
35
|
+
})
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
describe(`A is Tuple`, () => {
|
|
39
|
+
test('matching criteria', () => {
|
|
40
|
+
type Actual = Filter<[1, 2, 3, 4], 2 | 4>
|
|
41
|
+
isType.equal<true, [2, 4], Actual>()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('no match gets never[]', () => {
|
|
45
|
+
type Actual = Filter<[1, 2, 3, 4], 5>
|
|
46
|
+
isType.equal<true, never[], Actual>()
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test('matching undefined and null', () => {
|
|
50
|
+
type Actual = Filter<[1, undefined, 3, null], undefined | null>
|
|
51
|
+
isType.equal<true, [undefined, null], Actual>()
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
})
|
package/ts/array/Filter.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
export type Filter<A extends Array<any>, Criteria> =
|
|
2
|
-
number extends A['length']
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
?
|
|
6
|
-
: (
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
export type Filter<A extends Array<any>, Criteria> =
|
|
2
|
+
number extends A['length']
|
|
3
|
+
// array
|
|
4
|
+
? (A[0] extends Criteria
|
|
5
|
+
? A
|
|
6
|
+
: (Criteria extends A[0] ? Array<Criteria> : never[])
|
|
7
|
+
)
|
|
8
|
+
// tuple
|
|
9
|
+
: (A['length'] extends 0
|
|
10
|
+
? never
|
|
11
|
+
: (A extends [infer Head, ...infer Tail]
|
|
12
|
+
? (Tail['length'] extends 0
|
|
13
|
+
? (Head extends Criteria ? [Head] : never[])
|
|
14
|
+
: (Head extends Criteria
|
|
15
|
+
? [Head, ...Filter<Tail, Criteria>]
|
|
16
|
+
: Filter<Tail, Criteria>))
|
|
17
|
+
: never))
|