type-plus 7.1.1 → 7.2.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/object/ANotB.d.ts +0 -6
- package/cjs/object/ANotB.d.ts.map +1 -1
- package/cjs/object/index.d.ts +3 -2
- package/cjs/object/index.d.ts.map +1 -1
- package/cjs/object/index.js +1 -0
- package/cjs/object/index.js.map +1 -1
- package/cjs/object/left_join.d.ts +43 -0
- package/cjs/object/left_join.d.ts.map +1 -0
- package/cjs/object/left_join.js +18 -0
- package/cjs/object/left_join.js.map +1 -0
- package/cjs/predicates/index.d.ts +1 -1
- package/cjs/predicates/index.d.ts.map +1 -1
- package/cjs/predicates/literal.d.ts +22 -0
- package/cjs/predicates/literal.d.ts.map +1 -0
- package/cjs/predicates/literal.js +3 -0
- package/cjs/predicates/literal.js.map +1 -0
- package/cjs/testing/test_type.d.ts +19 -0
- package/cjs/testing/test_type.d.ts.map +1 -1
- package/cjs/testing/test_type.js.map +1 -1
- package/esm/object/ANotB.d.ts +0 -6
- package/esm/object/ANotB.d.ts.map +1 -1
- package/esm/object/index.d.ts +3 -2
- package/esm/object/index.d.ts.map +1 -1
- package/esm/object/index.js +1 -0
- package/esm/object/index.js.map +1 -1
- package/esm/object/left_join.d.ts +43 -0
- package/esm/object/left_join.d.ts.map +1 -0
- package/esm/object/left_join.js +14 -0
- package/esm/object/left_join.js.map +1 -0
- package/esm/predicates/index.d.ts +1 -1
- package/esm/predicates/index.d.ts.map +1 -1
- package/esm/predicates/literal.d.ts +22 -0
- package/esm/predicates/literal.d.ts.map +1 -0
- package/esm/predicates/literal.js +2 -0
- package/esm/predicates/literal.js.map +1 -0
- package/esm/testing/test_type.d.ts +19 -0
- package/esm/testing/test_type.d.ts.map +1 -1
- package/esm/testing/test_type.js.map +1 -1
- package/package.json +1 -1
- package/ts/object/ANotB.ts +0 -7
- package/ts/object/index.ts +4 -2
- package/ts/object/left_join.ts +42 -0
- package/ts/predicates/index.ts +1 -5
- package/ts/predicates/literal.ts +35 -0
- package/ts/testing/test_type.ts +19 -0
package/cjs/object/ANotB.d.ts
CHANGED
|
@@ -2,14 +2,8 @@ import type { IsEqual } from '../equal/equal.js';
|
|
|
2
2
|
import type { AnyRecord } from './AnyRecord.js';
|
|
3
3
|
import type { IsDisjoint } from './IsDisjoint.js';
|
|
4
4
|
import type { KeysWithDiffType } from './KeysWithDiffType.js';
|
|
5
|
-
import type { Properties } from './properties.js';
|
|
6
5
|
export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? never : IsDisjoint<A, B> extends true ? A : {
|
|
7
6
|
[k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k];
|
|
8
7
|
};
|
|
9
8
|
export type BNotA<A extends AnyRecord, B extends AnyRecord> = ANotB<B, A>;
|
|
10
|
-
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? A : IsDisjoint<A, B> extends true ? A & B : Properties<{
|
|
11
|
-
[k in Exclude<keyof A, keyof B>]: A[k];
|
|
12
|
-
} & {
|
|
13
|
-
[k in keyof B]: B[k];
|
|
14
|
-
}>;
|
|
15
9
|
//# sourceMappingURL=ANotB.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ANotB.d.ts","sourceRoot":"","sources":["../../ts/object/ANotB.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"ANotB.d.ts","sourceRoot":"","sources":["../../ts/object/ANotB.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GACrF,KAAK,GACL,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC7B,CAAC,GACD;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
|
package/cjs/object/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { ANotB, BNotA
|
|
1
|
+
export type { ANotB, BNotA } from './ANotB.js';
|
|
2
2
|
export type { AnyRecord } from './AnyRecord.js';
|
|
3
3
|
export type { ExcludePropType } from './ExcludePropType.js';
|
|
4
4
|
export type { IsDisjoint } from './IsDisjoint.js';
|
|
@@ -10,7 +10,6 @@ export type { KnownKeys } from './KnownKeys.js';
|
|
|
10
10
|
export type { OptionalKeys } from './OptionalKeys.js';
|
|
11
11
|
export type { Partial, PartialExcept, PartialOmit, PartialPick } from './Partial.js';
|
|
12
12
|
export type { RecursiveIntersect } from './RecursiveIntersect.js';
|
|
13
|
-
export type { RecursivePartial } from './recursive_partial.js';
|
|
14
13
|
export type { RecursiveRequired } from './RecursiveRequired.js';
|
|
15
14
|
export type { RequiredExcept, RequiredPick } from './Required.js';
|
|
16
15
|
export type { RequiredKeys } from './RequiredKeys.js';
|
|
@@ -24,12 +23,14 @@ export * from './forEachKey.js';
|
|
|
24
23
|
export * from './getField.js';
|
|
25
24
|
export * from './hasKey.js';
|
|
26
25
|
export * from './hasProperty.js';
|
|
26
|
+
export * from './left_join.js';
|
|
27
27
|
export * from './mapKey.js';
|
|
28
28
|
export * from './mapProperties.js';
|
|
29
29
|
export * from './omit.js';
|
|
30
30
|
export * from './pick.js';
|
|
31
31
|
export type { Properties } from './properties.js';
|
|
32
32
|
export * from './record.js';
|
|
33
|
+
export type { RecursivePartial } from './recursive_partial.js';
|
|
33
34
|
export * from './reduceKey.js';
|
|
34
35
|
export * from './replaceProperty.js';
|
|
35
36
|
export * from './someKey.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
|
package/cjs/object/index.js
CHANGED
|
@@ -22,6 +22,7 @@ __exportStar(require("./forEachKey.js"), exports);
|
|
|
22
22
|
__exportStar(require("./getField.js"), exports);
|
|
23
23
|
__exportStar(require("./hasKey.js"), exports);
|
|
24
24
|
__exportStar(require("./hasProperty.js"), exports);
|
|
25
|
+
__exportStar(require("./left_join.js"), exports);
|
|
25
26
|
__exportStar(require("./mapKey.js"), exports);
|
|
26
27
|
__exportStar(require("./mapProperties.js"), exports);
|
|
27
28
|
__exportStar(require("./omit.js"), exports);
|
package/cjs/object/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAiBA,gDAA6B;AAC7B,8CAA2B;AAC3B,iDAA8B;AAC9B,+CAA4B;AAC5B,kDAA+B;AAC/B,gDAA6B;AAC7B,8CAA2B;AAC3B,mDAAgC;AAChC,iDAA8B;AAC9B,8CAA2B;AAC3B,qDAAkC;AAClC,4CAAyB;AACzB,4CAAyB;AAEzB,8CAA2B;AAE3B,iDAA8B;AAC9B,uDAAoC;AACpC,+CAA4B;AAC5B,6CAA0B;AAC1B,gEAA6C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { IsLiteral } from '../predicates/index.js';
|
|
2
|
+
import type { AnyRecord } from './AnyRecord.js';
|
|
3
|
+
import type { IsDisjoint } from './IsDisjoint.js';
|
|
4
|
+
import type { KeyTypes } from './KeyTypes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Left join type `A` with type `B`.
|
|
7
|
+
*
|
|
8
|
+
* It handles cases like A or B are `Record`,
|
|
9
|
+
* joining between required and optional props, etc.
|
|
10
|
+
*/
|
|
11
|
+
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsDisjoint<A, B> extends true ? A & B : [keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes] ? IsLiteral<KA> extends true ? IsLiteral<KB> extends true ? {
|
|
12
|
+
[k in Exclude<KA, KB>]: A[k];
|
|
13
|
+
} & {
|
|
14
|
+
[k in KB]: undefined extends B[k] ? Exclude<A[k] | B[k], undefined> : B[k];
|
|
15
|
+
} : {
|
|
16
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
17
|
+
} & {
|
|
18
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
19
|
+
} & {
|
|
20
|
+
[k in KA & KB]: A[k] | B[k];
|
|
21
|
+
} : IsLiteral<KB> extends true ? {
|
|
22
|
+
[k in Exclude<KA, KB>]: A[k];
|
|
23
|
+
} & {
|
|
24
|
+
[k in keyof B]: B[k];
|
|
25
|
+
} : {
|
|
26
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
27
|
+
} & {
|
|
28
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
29
|
+
} & {
|
|
30
|
+
[k in KA & KB]: A[k] | B[k];
|
|
31
|
+
} : never;
|
|
32
|
+
/**
|
|
33
|
+
* Left join `a` with `b`.
|
|
34
|
+
*
|
|
35
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function leftJoin<A extends AnyRecord, B extends AnyRecord>(a: A, b: B): LeftJoin<A, B>;
|
|
43
|
+
//# sourceMappingURL=left_join.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"left_join.d.ts","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC3F,CAAC,GAAG,CAAC,GACL,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,SAAS,QAAQ,CAAC,GACjF,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GACzB,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GACzB;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAClC,CAAC,IAAI,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACzE,GACD;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC/E,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACF,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GAC1B;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3D;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC/E,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACF,KAAK,CAAA;AAER;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAE7F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.leftJoin = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Left join `a` with `b`.
|
|
6
|
+
*
|
|
7
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function leftJoin(a, b) {
|
|
15
|
+
return { ...a, ...b };
|
|
16
|
+
}
|
|
17
|
+
exports.leftJoin = leftJoin;
|
|
18
|
+
//# sourceMappingURL=left_join.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":";;;AA6BA;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAA2C,CAAI,EAAE,CAAI;IAC5E,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC;AAFD,4BAEC"}
|
|
@@ -2,6 +2,6 @@ export * from './CanAssign.js';
|
|
|
2
2
|
export type { Extendable, IsExtend, IsNotExtend, NotExtendable } from './Extends.js';
|
|
3
3
|
export type { If } from './If.js';
|
|
4
4
|
export type { IsEmptyObject } from './IsEmptyObject.js';
|
|
5
|
+
export type { IsLiteral } from './literal.js';
|
|
5
6
|
export type { And, Not, Or, Xor } from './logical.js';
|
|
6
|
-
export type IsLiteral<T extends number | string, Then = true, Else = false> = number extends T ? Else : string extends T ? Else : Then;
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/predicates/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/predicates/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate if specified type is a scalar literal.
|
|
3
|
+
*
|
|
4
|
+
* 🎭 *validate*
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* type R = IsLiteral<string> // false
|
|
9
|
+
* type R = IsLiteral<number> // false
|
|
10
|
+
* type R = IsLiteral<boolean> // false
|
|
11
|
+
* type R = IsLiteral<bigint> // false
|
|
12
|
+
* type R = IsLiteral<symbol> // false
|
|
13
|
+
*
|
|
14
|
+
* type R = IsLiteral<'a'> // true
|
|
15
|
+
* type R = IsLiteral<1> // true
|
|
16
|
+
* type R = IsLiteral<true> // true
|
|
17
|
+
* type R = IsLiteral<1n> // true
|
|
18
|
+
* type R = IsLiteral<typeof someSymbol> // true
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export type IsLiteral<T extends number | boolean | bigint | string | symbol, Then = true, Else = false> = number extends T ? Else : string extends T ? Else : boolean extends T ? Else : symbol extends T ? Else : bigint extends T ? Else : Then;
|
|
22
|
+
//# sourceMappingURL=literal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../ts/predicates/literal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,SAAS,CACpB,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EACrD,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,KAAK,IACT,MAAM,SAAS,CAAC,GACjB,IAAI,GACJ,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,OAAO,SAAS,CAAC,GACjB,IAAI,GACJ,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,IAAI,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../ts/predicates/literal.ts"],"names":[],"mappings":""}
|
|
@@ -206,6 +206,25 @@ interface TestType {
|
|
|
206
206
|
* @return `expected` as `T` for type inspection.
|
|
207
207
|
*/
|
|
208
208
|
void<T>(expected: IsVoid<T>): T;
|
|
209
|
+
/**
|
|
210
|
+
* A quick way to inspect a type.
|
|
211
|
+
*
|
|
212
|
+
* The handler is not being call.
|
|
213
|
+
*
|
|
214
|
+
* It just make it easy to inspect a specific type.
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```ts
|
|
218
|
+
* testType.inspect<SomeType>(t => ...try out the `t` which is `SomeType` here...)
|
|
219
|
+
*
|
|
220
|
+
* // instead of
|
|
221
|
+
* const r: SomeType = {} as any
|
|
222
|
+
* ...try out the `r` which is `SomeType` here...
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* After trying out the type, remove the line.
|
|
226
|
+
*/
|
|
227
|
+
inspect<T>(handler: (t: T) => unknown): (t: T) => unknown;
|
|
209
228
|
}
|
|
210
229
|
/**
|
|
211
230
|
* Test utilities for types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":";;;AAuOA;;;;;;GAMG;AACU,QAAA,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAc,EAAE;IACjD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;QAC5B,OAAO,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvC,CAAC;CACD,CAAC,CAAA"}
|
package/esm/object/ANotB.d.ts
CHANGED
|
@@ -2,14 +2,8 @@ import type { IsEqual } from '../equal/equal.js';
|
|
|
2
2
|
import type { AnyRecord } from './AnyRecord.js';
|
|
3
3
|
import type { IsDisjoint } from './IsDisjoint.js';
|
|
4
4
|
import type { KeysWithDiffType } from './KeysWithDiffType.js';
|
|
5
|
-
import type { Properties } from './properties.js';
|
|
6
5
|
export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? never : IsDisjoint<A, B> extends true ? A : {
|
|
7
6
|
[k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k];
|
|
8
7
|
};
|
|
9
8
|
export type BNotA<A extends AnyRecord, B extends AnyRecord> = ANotB<B, A>;
|
|
10
|
-
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? A : IsDisjoint<A, B> extends true ? A & B : Properties<{
|
|
11
|
-
[k in Exclude<keyof A, keyof B>]: A[k];
|
|
12
|
-
} & {
|
|
13
|
-
[k in keyof B]: B[k];
|
|
14
|
-
}>;
|
|
15
9
|
//# sourceMappingURL=ANotB.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ANotB.d.ts","sourceRoot":"","sources":["../../ts/object/ANotB.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"ANotB.d.ts","sourceRoot":"","sources":["../../ts/object/ANotB.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GACrF,KAAK,GACL,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC7B,CAAC,GACD;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA"}
|
package/esm/object/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { ANotB, BNotA
|
|
1
|
+
export type { ANotB, BNotA } from './ANotB.js';
|
|
2
2
|
export type { AnyRecord } from './AnyRecord.js';
|
|
3
3
|
export type { ExcludePropType } from './ExcludePropType.js';
|
|
4
4
|
export type { IsDisjoint } from './IsDisjoint.js';
|
|
@@ -10,7 +10,6 @@ export type { KnownKeys } from './KnownKeys.js';
|
|
|
10
10
|
export type { OptionalKeys } from './OptionalKeys.js';
|
|
11
11
|
export type { Partial, PartialExcept, PartialOmit, PartialPick } from './Partial.js';
|
|
12
12
|
export type { RecursiveIntersect } from './RecursiveIntersect.js';
|
|
13
|
-
export type { RecursivePartial } from './recursive_partial.js';
|
|
14
13
|
export type { RecursiveRequired } from './RecursiveRequired.js';
|
|
15
14
|
export type { RequiredExcept, RequiredPick } from './Required.js';
|
|
16
15
|
export type { RequiredKeys } from './RequiredKeys.js';
|
|
@@ -24,12 +23,14 @@ export * from './forEachKey.js';
|
|
|
24
23
|
export * from './getField.js';
|
|
25
24
|
export * from './hasKey.js';
|
|
26
25
|
export * from './hasProperty.js';
|
|
26
|
+
export * from './left_join.js';
|
|
27
27
|
export * from './mapKey.js';
|
|
28
28
|
export * from './mapProperties.js';
|
|
29
29
|
export * from './omit.js';
|
|
30
30
|
export * from './pick.js';
|
|
31
31
|
export type { Properties } from './properties.js';
|
|
32
32
|
export * from './record.js';
|
|
33
|
+
export type { RecursivePartial } from './recursive_partial.js';
|
|
33
34
|
export * from './reduceKey.js';
|
|
34
35
|
export * from './replaceProperty.js';
|
|
35
36
|
export * from './someKey.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
|
package/esm/object/index.js
CHANGED
package/esm/object/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../ts/object/index.ts"],"names":[],"mappings":"AAiBA,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AAEzB,cAAc,aAAa,CAAA;AAE3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,sBAAsB,CAAA;AACpC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { IsLiteral } from '../predicates/index.js';
|
|
2
|
+
import type { AnyRecord } from './AnyRecord.js';
|
|
3
|
+
import type { IsDisjoint } from './IsDisjoint.js';
|
|
4
|
+
import type { KeyTypes } from './KeyTypes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Left join type `A` with type `B`.
|
|
7
|
+
*
|
|
8
|
+
* It handles cases like A or B are `Record`,
|
|
9
|
+
* joining between required and optional props, etc.
|
|
10
|
+
*/
|
|
11
|
+
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsDisjoint<A, B> extends true ? A & B : [keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes] ? IsLiteral<KA> extends true ? IsLiteral<KB> extends true ? {
|
|
12
|
+
[k in Exclude<KA, KB>]: A[k];
|
|
13
|
+
} & {
|
|
14
|
+
[k in KB]: undefined extends B[k] ? Exclude<A[k] | B[k], undefined> : B[k];
|
|
15
|
+
} : {
|
|
16
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
17
|
+
} & {
|
|
18
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
19
|
+
} & {
|
|
20
|
+
[k in KA & KB]: A[k] | B[k];
|
|
21
|
+
} : IsLiteral<KB> extends true ? {
|
|
22
|
+
[k in Exclude<KA, KB>]: A[k];
|
|
23
|
+
} & {
|
|
24
|
+
[k in keyof B]: B[k];
|
|
25
|
+
} : {
|
|
26
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
27
|
+
} & {
|
|
28
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
29
|
+
} & {
|
|
30
|
+
[k in KA & KB]: A[k] | B[k];
|
|
31
|
+
} : never;
|
|
32
|
+
/**
|
|
33
|
+
* Left join `a` with `b`.
|
|
34
|
+
*
|
|
35
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function leftJoin<A extends AnyRecord, B extends AnyRecord>(a: A, b: B): LeftJoin<A, B>;
|
|
43
|
+
//# sourceMappingURL=left_join.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"left_join.d.ts","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC3F,CAAC,GAAG,CAAC,GACL,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,MAAM,EAAE,SAAS,QAAQ,CAAC,GACjF,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GACzB,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GACzB;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAClC,CAAC,IAAI,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACzE,GACD;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC/E,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACF,SAAS,CAAC,EAAE,CAAC,SAAS,IAAI,GAC1B;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3D;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAC/E,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC1B,GACF,KAAK,CAAA;AAER;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAE7F"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Left join `a` with `b`.
|
|
3
|
+
*
|
|
4
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export function leftJoin(a, b) {
|
|
12
|
+
return { ...a, ...b };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=left_join.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAA2C,CAAI,EAAE,CAAI;IAC5E,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC"}
|
|
@@ -2,6 +2,6 @@ export * from './CanAssign.js';
|
|
|
2
2
|
export type { Extendable, IsExtend, IsNotExtend, NotExtendable } from './Extends.js';
|
|
3
3
|
export type { If } from './If.js';
|
|
4
4
|
export type { IsEmptyObject } from './IsEmptyObject.js';
|
|
5
|
+
export type { IsLiteral } from './literal.js';
|
|
5
6
|
export type { And, Not, Or, Xor } from './logical.js';
|
|
6
|
-
export type IsLiteral<T extends number | string, Then = true, Else = false> = number extends T ? Else : string extends T ? Else : Then;
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/predicates/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ts/predicates/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACpF,YAAY,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AACjC,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate if specified type is a scalar literal.
|
|
3
|
+
*
|
|
4
|
+
* 🎭 *validate*
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* type R = IsLiteral<string> // false
|
|
9
|
+
* type R = IsLiteral<number> // false
|
|
10
|
+
* type R = IsLiteral<boolean> // false
|
|
11
|
+
* type R = IsLiteral<bigint> // false
|
|
12
|
+
* type R = IsLiteral<symbol> // false
|
|
13
|
+
*
|
|
14
|
+
* type R = IsLiteral<'a'> // true
|
|
15
|
+
* type R = IsLiteral<1> // true
|
|
16
|
+
* type R = IsLiteral<true> // true
|
|
17
|
+
* type R = IsLiteral<1n> // true
|
|
18
|
+
* type R = IsLiteral<typeof someSymbol> // true
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export type IsLiteral<T extends number | boolean | bigint | string | symbol, Then = true, Else = false> = number extends T ? Else : string extends T ? Else : boolean extends T ? Else : symbol extends T ? Else : bigint extends T ? Else : Then;
|
|
22
|
+
//# sourceMappingURL=literal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../ts/predicates/literal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,SAAS,CACpB,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EACrD,IAAI,GAAG,IAAI,EACX,IAAI,GAAG,KAAK,IACT,MAAM,SAAS,CAAC,GACjB,IAAI,GACJ,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,OAAO,SAAS,CAAC,GACjB,IAAI,GACJ,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,MAAM,SAAS,CAAC,GAChB,IAAI,GACJ,IAAI,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../ts/predicates/literal.ts"],"names":[],"mappings":""}
|
|
@@ -206,6 +206,25 @@ interface TestType {
|
|
|
206
206
|
* @return `expected` as `T` for type inspection.
|
|
207
207
|
*/
|
|
208
208
|
void<T>(expected: IsVoid<T>): T;
|
|
209
|
+
/**
|
|
210
|
+
* A quick way to inspect a type.
|
|
211
|
+
*
|
|
212
|
+
* The handler is not being call.
|
|
213
|
+
*
|
|
214
|
+
* It just make it easy to inspect a specific type.
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```ts
|
|
218
|
+
* testType.inspect<SomeType>(t => ...try out the `t` which is `SomeType` here...)
|
|
219
|
+
*
|
|
220
|
+
* // instead of
|
|
221
|
+
* const r: SomeType = {} as any
|
|
222
|
+
* ...try out the `r` which is `SomeType` here...
|
|
223
|
+
* ```
|
|
224
|
+
*
|
|
225
|
+
* After trying out the type, remove the line.
|
|
226
|
+
*/
|
|
227
|
+
inspect<T>(handler: (t: T) => unknown): (t: T) => unknown;
|
|
209
228
|
}
|
|
210
229
|
/**
|
|
211
230
|
* Test utilities for types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"test_type.d.ts","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test_type.js","sourceRoot":"","sources":["../../ts/testing/test_type.ts"],"names":[],"mappings":"AAuOA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,EAAc,EAAE;IACjD,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS;QAC5B,OAAO,CAAC,QAAiB,EAAE,EAAE,CAAC,QAAQ,CAAA;IACvC,CAAC;CACD,CAAC,CAAA"}
|
package/package.json
CHANGED
package/ts/object/ANotB.ts
CHANGED
|
@@ -2,7 +2,6 @@ import type { IsEqual } from '../equal/equal.js'
|
|
|
2
2
|
import type { AnyRecord } from './AnyRecord.js'
|
|
3
3
|
import type { IsDisjoint } from './IsDisjoint.js'
|
|
4
4
|
import type { KeysWithDiffType } from './KeysWithDiffType.js'
|
|
5
|
-
import type { Properties } from './properties.js'
|
|
6
5
|
|
|
7
6
|
export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true
|
|
8
7
|
? never
|
|
@@ -11,9 +10,3 @@ export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> exte
|
|
|
11
10
|
: { [k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k] }
|
|
12
11
|
|
|
13
12
|
export type BNotA<A extends AnyRecord, B extends AnyRecord> = ANotB<B, A>
|
|
14
|
-
|
|
15
|
-
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true
|
|
16
|
-
? A
|
|
17
|
-
: IsDisjoint<A, B> extends true
|
|
18
|
-
? A & B
|
|
19
|
-
: Properties<{ [k in Exclude<keyof A, keyof B>]: A[k] } & { [k in keyof B]: B[k] }>
|
package/ts/object/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { ANotB, BNotA
|
|
1
|
+
export type { ANotB, BNotA } from './ANotB.js'
|
|
2
2
|
export type { AnyRecord } from './AnyRecord.js'
|
|
3
3
|
export type { ExcludePropType } from './ExcludePropType.js'
|
|
4
4
|
export type { IsDisjoint } from './IsDisjoint.js'
|
|
@@ -10,7 +10,6 @@ export type { KnownKeys } from './KnownKeys.js'
|
|
|
10
10
|
export type { OptionalKeys } from './OptionalKeys.js'
|
|
11
11
|
export type { Partial, PartialExcept, PartialOmit, PartialPick } from './Partial.js'
|
|
12
12
|
export type { RecursiveIntersect } from './RecursiveIntersect.js'
|
|
13
|
-
export type { RecursivePartial } from './recursive_partial.js'
|
|
14
13
|
export type { RecursiveRequired } from './RecursiveRequired.js'
|
|
15
14
|
export type { RequiredExcept, RequiredPick } from './Required.js'
|
|
16
15
|
export type { RequiredKeys } from './RequiredKeys.js'
|
|
@@ -24,14 +23,17 @@ export * from './forEachKey.js'
|
|
|
24
23
|
export * from './getField.js'
|
|
25
24
|
export * from './hasKey.js'
|
|
26
25
|
export * from './hasProperty.js'
|
|
26
|
+
export * from './left_join.js'
|
|
27
27
|
export * from './mapKey.js'
|
|
28
28
|
export * from './mapProperties.js'
|
|
29
29
|
export * from './omit.js'
|
|
30
30
|
export * from './pick.js'
|
|
31
31
|
export type { Properties } from './properties.js'
|
|
32
32
|
export * from './record.js'
|
|
33
|
+
export type { RecursivePartial } from './recursive_partial.js'
|
|
33
34
|
export * from './reduceKey.js'
|
|
34
35
|
export * from './replaceProperty.js'
|
|
35
36
|
export * from './someKey.js'
|
|
36
37
|
export * from './split.js'
|
|
37
38
|
export * from './typeOverrideIncompatible.js'
|
|
39
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { IsLiteral } from '../predicates/index.js'
|
|
2
|
+
import type { AnyRecord } from './AnyRecord.js'
|
|
3
|
+
import type { IsDisjoint } from './IsDisjoint.js'
|
|
4
|
+
import type { KeyTypes } from './KeyTypes.js'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Left join type `A` with type `B`.
|
|
8
|
+
*
|
|
9
|
+
* It handles cases like A or B are `Record`,
|
|
10
|
+
* joining between required and optional props, etc.
|
|
11
|
+
*/
|
|
12
|
+
export type LeftJoin<A extends AnyRecord, B extends AnyRecord> = IsDisjoint<A, B> extends true
|
|
13
|
+
? A & B
|
|
14
|
+
: [keyof A, keyof B] extends [infer KA extends KeyTypes, infer KB extends KeyTypes]
|
|
15
|
+
? IsLiteral<KA> extends true
|
|
16
|
+
? IsLiteral<KB> extends true
|
|
17
|
+
? { [k in Exclude<KA, KB>]: A[k] } & {
|
|
18
|
+
[k in KB]: undefined extends B[k] ? Exclude<A[k] | B[k], undefined> : B[k]
|
|
19
|
+
}
|
|
20
|
+
: { [k in Exclude<KA, KA & KB>]: A[k] } & { [k in Exclude<KB, KA & KB>]: B[k] } & {
|
|
21
|
+
[k in KA & KB]: A[k] | B[k]
|
|
22
|
+
}
|
|
23
|
+
: IsLiteral<KB> extends true
|
|
24
|
+
? { [k in Exclude<KA, KB>]: A[k] } & { [k in keyof B]: B[k] }
|
|
25
|
+
: { [k in Exclude<KA, KA & KB>]: A[k] } & { [k in Exclude<KB, KA & KB>]: B[k] } & {
|
|
26
|
+
[k in KA & KB]: A[k] | B[k]
|
|
27
|
+
}
|
|
28
|
+
: never
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Left join `a` with `b`.
|
|
32
|
+
*
|
|
33
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export function leftJoin<A extends AnyRecord, B extends AnyRecord>(a: A, b: B): LeftJoin<A, B> {
|
|
41
|
+
return { ...a, ...b } as any
|
|
42
|
+
}
|
package/ts/predicates/index.ts
CHANGED
|
@@ -2,10 +2,6 @@ export * from './CanAssign.js'
|
|
|
2
2
|
export type { Extendable, IsExtend, IsNotExtend, NotExtendable } from './Extends.js'
|
|
3
3
|
export type { If } from './If.js'
|
|
4
4
|
export type { IsEmptyObject } from './IsEmptyObject.js'
|
|
5
|
+
export type { IsLiteral } from './literal.js'
|
|
5
6
|
export type { And, Not, Or, Xor } from './logical.js'
|
|
6
7
|
|
|
7
|
-
export type IsLiteral<T extends number | string, Then = true, Else = false> = number extends T
|
|
8
|
-
? Else
|
|
9
|
-
: string extends T
|
|
10
|
-
? Else
|
|
11
|
-
: Then
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate if specified type is a scalar literal.
|
|
3
|
+
*
|
|
4
|
+
* 🎭 *validate*
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* type R = IsLiteral<string> // false
|
|
9
|
+
* type R = IsLiteral<number> // false
|
|
10
|
+
* type R = IsLiteral<boolean> // false
|
|
11
|
+
* type R = IsLiteral<bigint> // false
|
|
12
|
+
* type R = IsLiteral<symbol> // false
|
|
13
|
+
*
|
|
14
|
+
* type R = IsLiteral<'a'> // true
|
|
15
|
+
* type R = IsLiteral<1> // true
|
|
16
|
+
* type R = IsLiteral<true> // true
|
|
17
|
+
* type R = IsLiteral<1n> // true
|
|
18
|
+
* type R = IsLiteral<typeof someSymbol> // true
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export type IsLiteral<
|
|
22
|
+
T extends number | boolean | bigint | string | symbol,
|
|
23
|
+
Then = true,
|
|
24
|
+
Else = false
|
|
25
|
+
> = number extends T
|
|
26
|
+
? Else
|
|
27
|
+
: string extends T
|
|
28
|
+
? Else
|
|
29
|
+
: boolean extends T
|
|
30
|
+
? Else
|
|
31
|
+
: symbol extends T
|
|
32
|
+
? Else
|
|
33
|
+
: bigint extends T
|
|
34
|
+
? Else
|
|
35
|
+
: Then
|
package/ts/testing/test_type.ts
CHANGED
|
@@ -208,6 +208,25 @@ interface TestType {
|
|
|
208
208
|
* @return `expected` as `T` for type inspection.
|
|
209
209
|
*/
|
|
210
210
|
void<T>(expected: IsVoid<T>): T
|
|
211
|
+
/**
|
|
212
|
+
* A quick way to inspect a type.
|
|
213
|
+
*
|
|
214
|
+
* The handler is not being call.
|
|
215
|
+
*
|
|
216
|
+
* It just make it easy to inspect a specific type.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```ts
|
|
220
|
+
* testType.inspect<SomeType>(t => ...try out the `t` which is `SomeType` here...)
|
|
221
|
+
*
|
|
222
|
+
* // instead of
|
|
223
|
+
* const r: SomeType = {} as any
|
|
224
|
+
* ...try out the `r` which is `SomeType` here...
|
|
225
|
+
* ```
|
|
226
|
+
*
|
|
227
|
+
* After trying out the type, remove the line.
|
|
228
|
+
*/
|
|
229
|
+
inspect<T>(handler: (t: T) => unknown): (t: T) => unknown
|
|
211
230
|
}
|
|
212
231
|
|
|
213
232
|
/**
|