type-plus 7.2.1 → 7.3.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/README.md +3 -0
- package/cjs/array/array.some.d.ts +1 -1
- package/cjs/merge.d.ts +55 -0
- package/cjs/merge.d.ts.map +1 -0
- package/cjs/merge.js +18 -0
- package/cjs/merge.js.map +1 -0
- package/cjs/mix_types/any_or_never_type.d.ts +18 -10
- package/cjs/mix_types/any_or_never_type.d.ts.map +1 -1
- package/cjs/object/AnyRecord.d.ts +2 -1
- package/cjs/object/AnyRecord.d.ts.map +1 -1
- package/cjs/object/index.d.ts +1 -0
- package/cjs/object/index.d.ts.map +1 -1
- package/cjs/object/index.js.map +1 -1
- package/cjs/object/left_join.d.ts +10 -38
- package/cjs/object/left_join.d.ts.map +1 -1
- package/cjs/object/left_join.js +0 -15
- package/cjs/object/left_join.js.map +1 -1
- package/cjs/object/optional_key.d.ts +35 -0
- package/cjs/object/optional_key.d.ts.map +1 -0
- package/cjs/object/optional_key.js +3 -0
- package/cjs/object/optional_key.js.map +1 -0
- package/cjs/testing/test_type.d.ts +36 -8
- package/cjs/testing/test_type.d.ts.map +1 -1
- package/cjs/testing/test_type.js.map +1 -1
- package/esm/array/array.some.d.ts +1 -1
- package/esm/merge.d.ts +55 -0
- package/esm/merge.d.ts.map +1 -0
- package/esm/merge.js +14 -0
- package/esm/merge.js.map +1 -0
- package/esm/mix_types/any_or_never_type.d.ts +18 -10
- package/esm/mix_types/any_or_never_type.d.ts.map +1 -1
- package/esm/object/AnyRecord.d.ts +2 -1
- package/esm/object/AnyRecord.d.ts.map +1 -1
- package/esm/object/index.d.ts +1 -0
- package/esm/object/index.d.ts.map +1 -1
- package/esm/object/index.js.map +1 -1
- package/esm/object/left_join.d.ts +10 -38
- package/esm/object/left_join.d.ts.map +1 -1
- package/esm/object/left_join.js +1 -13
- package/esm/object/left_join.js.map +1 -1
- package/esm/object/optional_key.d.ts +35 -0
- package/esm/object/optional_key.d.ts.map +1 -0
- package/esm/object/optional_key.js +2 -0
- package/esm/object/optional_key.js.map +1 -0
- package/esm/testing/test_type.d.ts +36 -8
- package/esm/testing/test_type.d.ts.map +1 -1
- package/esm/testing/test_type.js.map +1 -1
- package/package.json +4 -3
- package/ts/any/readme.md +20 -3
- package/ts/array/array.some.ts +1 -1
- package/ts/merge.ts +72 -0
- package/ts/mix_types/any_or_never_type.ts +18 -10
- package/ts/mix_types/readme.md +34 -0
- package/ts/object/AnyRecord.ts +3 -1
- package/ts/object/index.ts +1 -1
- package/ts/object/left_join.ts +15 -38
- package/ts/object/optional_key.ts +38 -0
- package/ts/object/readme.md +37 -0
- package/ts/testing/test_type.ts +37 -8
package/README.md
CHANGED
|
@@ -325,6 +325,7 @@ You can learn more in their respective sections:
|
|
|
325
325
|
- [undefined](./ts/undefined/readme.md)
|
|
326
326
|
- [unknown](./ts/unknown/readme.md)
|
|
327
327
|
- [void](./ts/void/readme.md)
|
|
328
|
+
- [mix types](./ts/mix-types/readme.md)
|
|
328
329
|
|
|
329
330
|
### any
|
|
330
331
|
|
|
@@ -1351,6 +1352,7 @@ Whenever possible, I add attribution to the person who created those **codes** i
|
|
|
1351
1352
|
- [expect-type]: Compile-time tests for types
|
|
1352
1353
|
- [hotscript]: Higher-order TypeScript
|
|
1353
1354
|
- [spec.ts]: write tests for your types!
|
|
1355
|
+
- [ts-calc]: compute with typescript type system, part of [hotscript]
|
|
1354
1356
|
- [ts-essentials]: all essential TypeScript types in one place.
|
|
1355
1357
|
- [ts-expect]: Checks values in TypeScript match expectations.
|
|
1356
1358
|
- [ts-toolbelt]: TypeScript's largest utility library.
|
|
@@ -1374,6 +1376,7 @@ Whenever possible, I add attribution to the person who created those **codes** i
|
|
|
1374
1376
|
[npm_image]: https://img.shields.io/npm/v/type-plus.svg?style=flat
|
|
1375
1377
|
[npm_url]: https://npmjs.org/package/type-plus
|
|
1376
1378
|
[spec.ts]: https://github.com/aleclarson/spec.ts
|
|
1379
|
+
[ts-calc]: https://github.com/ecyrbe/ts-calc
|
|
1377
1380
|
[ts-essentials]: https://github.com/ts-essentials/ts-essentials
|
|
1378
1381
|
[ts-expect]: https://github.com/TypeStrong/ts-expect
|
|
1379
1382
|
[ts-toolbelt]: https://github.com/millsp/ts-toolbelt
|
package/cjs/merge.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { NonComposableTypes } from './composable_types.js';
|
|
2
|
+
import type { AnyRecord } from './object/AnyRecord.js';
|
|
3
|
+
import type { IsDisjoint } from './object/IsDisjoint.js';
|
|
4
|
+
import type { KeyTypes } from './object/KeyTypes.js';
|
|
5
|
+
import type { OptionalKeys } from './object/OptionalKeys.js';
|
|
6
|
+
import type { Properties } from './object/properties.js';
|
|
7
|
+
import type { IsLiteral } from './predicates/literal.js';
|
|
8
|
+
/**
|
|
9
|
+
* Left join type `A` with type `B`.
|
|
10
|
+
*
|
|
11
|
+
* It handles cases like A or B are `Record`,
|
|
12
|
+
* joining between required and optional props, etc.
|
|
13
|
+
*/
|
|
14
|
+
export type Merge<A, B> = [A, B] extends [NonComposableTypes, unknown] ? B : [A, B] extends [unknown, NonComposableTypes] ? A : 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 ? ([OptionalKeys<A>, OptionalKeys<B>] extends [infer PKA extends KeyTypes, infer PKB extends KeyTypes] ? {
|
|
15
|
+
[k in PKA & PKB]?: A[k] | B[k] | undefined;
|
|
16
|
+
} & {
|
|
17
|
+
[k in Exclude<KA & KB, PKA | PKB>]: Merge.JoinProps<A[k], B[k]>;
|
|
18
|
+
} & {
|
|
19
|
+
[k in Exclude<KA, PKA | KB>]: A[k];
|
|
20
|
+
} & {
|
|
21
|
+
[k in Exclude<KB, PKB>]: B[k];
|
|
22
|
+
} & {
|
|
23
|
+
[k in Exclude<KA & PKB, PKA>]: Exclude<A[k] | Partial<B[k]>, undefined>;
|
|
24
|
+
} : never) : Properties<{
|
|
25
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
26
|
+
} & {
|
|
27
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
28
|
+
} & {
|
|
29
|
+
[k in KA & KB]: A[k] | B[k];
|
|
30
|
+
}>) : (IsLiteral<KB> extends true ? {
|
|
31
|
+
[k in Exclude<KA, KB>]: A[k];
|
|
32
|
+
} & {
|
|
33
|
+
[k in keyof B]: B[k];
|
|
34
|
+
} : {
|
|
35
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
36
|
+
} & {
|
|
37
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
38
|
+
} & {
|
|
39
|
+
[k in KA & KB]: A[k] | B[k];
|
|
40
|
+
})) : never) : never : never;
|
|
41
|
+
export declare namespace Merge {
|
|
42
|
+
type JoinProps<A, B> = A extends NonComposableTypes ? B : (B extends NonComposableTypes ? A : A & B);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Left join `a` with `b`.
|
|
46
|
+
*
|
|
47
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function merge<A, B>(a: A, b: B): Merge<A, B>;
|
|
55
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":"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"}
|
package/cjs/merge.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.merge = 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 merge(a, b) {
|
|
15
|
+
return { ...a, ...b };
|
|
16
|
+
}
|
|
17
|
+
exports.merge = merge;
|
|
18
|
+
//# sourceMappingURL=merge.js.map
|
package/cjs/merge.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":";;;AA2DA;;;;;;;;;EASE;AACF,SAAgB,KAAK,CAAO,CAAI,EAAE,CAAI;IACrC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC;AAFD,sBAEC"}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { AnyType } from '../any/any_type.js';
|
|
2
|
+
import type { NeverType } from '../never/never_type.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Parse `T` to ensure it is either exactly `any` or exactly `never`.
|
|
5
|
+
*
|
|
6
|
+
* 🐾 *parse*
|
|
7
|
+
* 🩳 *shortcut*
|
|
5
8
|
*
|
|
6
9
|
* @example
|
|
7
10
|
* ```ts
|
|
8
|
-
* type R =
|
|
11
|
+
* type R = AnyOrNeverType<any> // any
|
|
12
|
+
* type R = AnyOrNeverType<never> // never
|
|
13
|
+
* type R = AnyOrNeverType<never, 1, 2> // 1
|
|
9
14
|
*
|
|
10
|
-
* type R =
|
|
11
|
-
* type R =
|
|
12
|
-
* type R =
|
|
15
|
+
* type R = AnyOrNeverType<unknown> // never
|
|
16
|
+
* type R = AnyOrNeverType<unknown, 1, 2> // 2
|
|
17
|
+
* type R = AnyOrNeverType<string | boolean> // never
|
|
13
18
|
* ```
|
|
14
19
|
*/
|
|
15
|
-
export type AnyOrNeverType<T, Then = T, Else = never> =
|
|
20
|
+
export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
22
|
+
* Validate if `T` is either exactly `any` or exactly `never`.
|
|
23
|
+
*
|
|
24
|
+
* 🎭 *validate*
|
|
25
|
+
* 🩳 *shortcut*
|
|
18
26
|
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```ts
|
|
@@ -25,5 +33,5 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
|
|
|
25
33
|
* type R = IsAnyOrNever<unknown> // false
|
|
26
34
|
* ```
|
|
27
35
|
*/
|
|
28
|
-
export type IsAnyOrNever<T, Then = true, Else = false> =
|
|
36
|
+
export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
29
37
|
//# sourceMappingURL=any_or_never_type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA"}
|
package/cjs/object/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type { KeysWithDiffType } from './KeysWithDiffType.js';
|
|
|
9
9
|
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
|
+
export type * from './optional_key.js';
|
|
12
13
|
export type { RecursiveIntersect } from './RecursiveIntersect.js';
|
|
13
14
|
export type { RecursiveRequired } from './RecursiveRequired.js';
|
|
14
15
|
export type { RequiredExcept, RequiredPick } from './Required.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,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"}
|
|
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,mBAAmB,mBAAmB,CAAA;AACtC,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.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":";;;;;;;;;;;;;;;;AAkBA,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"}
|
|
@@ -1,43 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IsEqual } from '../equal/equal.js';
|
|
2
2
|
import type { AnyRecord } from './AnyRecord.js';
|
|
3
3
|
import type { IsDisjoint } from './IsDisjoint.js';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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];
|
|
4
|
+
import type { KeysWithDiffType } from './KeysWithDiffType.js';
|
|
5
|
+
import type { Properties } from './properties.js';
|
|
6
|
+
export type ANotB<A extends AnyRecord, B extends AnyRecord> = IsEqual<A, B> extends true ? never : IsDisjoint<A, B> extends true ? A : {
|
|
7
|
+
[k in Exclude<keyof A, keyof B> | KeysWithDiffType<A, B>]: A[k];
|
|
8
|
+
};
|
|
9
|
+
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];
|
|
23
12
|
} & {
|
|
24
13
|
[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>;
|
|
14
|
+
}>;
|
|
43
15
|
//# sourceMappingURL=left_join.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"left_join.d.ts","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"left_join.d.ts","sourceRoot":"","sources":["../../ts/object/left_join.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;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,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;AAEzE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GACxF,CAAC,GACD,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,IAAI,GAC7B,CAAC,GAAG,CAAC,GACL,UAAU,CAAC;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,CAAA"}
|
package/cjs/object/left_join.js
CHANGED
|
@@ -1,18 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
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
3
|
//# sourceMappingURL=left_join.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"left_join.js","sourceRoot":"","sources":["../../ts/object/left_join.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { AnyRecord } from './AnyRecord.js';
|
|
2
|
+
import type { KeyTypes } from './KeyTypes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Validate if the key `K` in `T` is optional.
|
|
5
|
+
*
|
|
6
|
+
* 🎭 *validate*
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* IsOptionalKey({ a: 1 }, 'a') // false
|
|
11
|
+
* IsOptionalKey({ a?: 1 }, 'a') // true
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export type IsOptionalKey<T, K, Then = true, Else = false> = K extends OptionalKeys<T> ? Then : Else;
|
|
15
|
+
/**
|
|
16
|
+
* Gets the optional keys of `T`.
|
|
17
|
+
*
|
|
18
|
+
* 🦴 *utilities*
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* OptionalKeys<{ a: 1 }> // never
|
|
23
|
+
* OptionalKeys<{ a?: 1, b: number }> // 'a'
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export type OptionalKeys<T> = T extends unknown ? {
|
|
27
|
+
[k in keyof T]-?: Record<KeyTypes, any> extends Pick<T, k> ? k : never;
|
|
28
|
+
}[keyof T] : never;
|
|
29
|
+
/**
|
|
30
|
+
* Parse `T` to keep only the optional properties.
|
|
31
|
+
*/
|
|
32
|
+
export type OptionalProps<T extends AnyRecord> = T extends unknown ? {
|
|
33
|
+
[k in OptionalKeys<T>]?: T[k];
|
|
34
|
+
} : never;
|
|
35
|
+
//# sourceMappingURL=optional_key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional_key.d.ts","sourceRoot":"","sources":["../../ts/object/optional_key.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAEpG;;;;;;;;;;GAUG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,GAC5C;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,MAAM,CAAC,CAAC,GACnF,KAAK,CAAA;AAER;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,OAAO,GAC/D;KAAG,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAAE,GACjC,KAAK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional_key.js","sourceRoot":"","sources":["../../ts/object/optional_key.ts"],"names":[],"mappings":""}
|
|
@@ -209,22 +209,27 @@ interface TestType {
|
|
|
209
209
|
/**
|
|
210
210
|
* A quick way to inspect a type.
|
|
211
211
|
*
|
|
212
|
-
* The handler
|
|
212
|
+
* The handler receives a `InspectedType` object.
|
|
213
|
+
* It contains `value` which is typed to `T`,
|
|
214
|
+
* and many other properties to inspect the behavior of `T`.
|
|
213
215
|
*
|
|
214
|
-
*
|
|
216
|
+
* The handler is not being call,
|
|
217
|
+
* it is use to hold the type in value for inspection.
|
|
218
|
+
*
|
|
219
|
+
* 🧪 *testing*
|
|
220
|
+
* 🦴 *utilities*
|
|
215
221
|
*
|
|
216
222
|
* @example
|
|
217
223
|
* ```ts
|
|
218
|
-
* testType.inspect<SomeType>(t =>
|
|
219
|
-
*
|
|
220
|
-
* //
|
|
221
|
-
*
|
|
222
|
-
* ...try out the `r` which is `SomeType` here...
|
|
224
|
+
* testType.inspect<SomeType>(t => {
|
|
225
|
+
* type T = typeof t.value // resolve and inspect the type `T`
|
|
226
|
+
* t.extend_boolean // result of `T extends boolean`
|
|
227
|
+
* })
|
|
223
228
|
* ```
|
|
224
229
|
*
|
|
225
230
|
* After trying out the type, remove the line.
|
|
226
231
|
*/
|
|
227
|
-
inspect<T>(handler: (t: T) => unknown):
|
|
232
|
+
inspect<T>(handler: (t: InspectedType<T>) => unknown): T;
|
|
228
233
|
}
|
|
229
234
|
/**
|
|
230
235
|
* Test utilities for types.
|
|
@@ -234,5 +239,28 @@ interface TestType {
|
|
|
234
239
|
* so that the type can be further inspected.
|
|
235
240
|
*/
|
|
236
241
|
export declare const testType: TestType;
|
|
242
|
+
export type InspectedType<T> = {
|
|
243
|
+
value: T;
|
|
244
|
+
extends_any: T extends any ? true : false;
|
|
245
|
+
extends_unknown: T extends unknown ? true : false;
|
|
246
|
+
extends_void: T extends void ? true : false;
|
|
247
|
+
extends_never: T extends never ? true : false;
|
|
248
|
+
extends_undefined: T extends undefined ? true : false;
|
|
249
|
+
extends_null: T extends null ? true : false;
|
|
250
|
+
extends_boolean: T extends boolean ? true : false;
|
|
251
|
+
extends_true: T extends true ? true : false;
|
|
252
|
+
extends_false: T extends false ? true : false;
|
|
253
|
+
extends_number: T extends number ? true : false;
|
|
254
|
+
extends_1: T extends 1 ? true : false;
|
|
255
|
+
extends_bigint: T extends bigint ? true : false;
|
|
256
|
+
extends_1n: T extends 1n ? true : false;
|
|
257
|
+
extends_string: T extends string ? true : false;
|
|
258
|
+
extends_a: T extends 'a' ? true : false;
|
|
259
|
+
extends_symbol: T extends symbol ? true : false;
|
|
260
|
+
extends_object: T extends object ? true : false;
|
|
261
|
+
extends_function: T extends Function ? true : false;
|
|
262
|
+
extends_array_unknown: T extends unknown[] ? true : false;
|
|
263
|
+
extends_tuple_empty: T extends [] ? true : false;
|
|
264
|
+
};
|
|
237
265
|
export {};
|
|
238
266
|
//# sourceMappingURL=test_type.d.ts.map
|
|
@@ -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":";;;AA4OA;;;;;;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/merge.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { NonComposableTypes } from './composable_types.js';
|
|
2
|
+
import type { AnyRecord } from './object/AnyRecord.js';
|
|
3
|
+
import type { IsDisjoint } from './object/IsDisjoint.js';
|
|
4
|
+
import type { KeyTypes } from './object/KeyTypes.js';
|
|
5
|
+
import type { OptionalKeys } from './object/OptionalKeys.js';
|
|
6
|
+
import type { Properties } from './object/properties.js';
|
|
7
|
+
import type { IsLiteral } from './predicates/literal.js';
|
|
8
|
+
/**
|
|
9
|
+
* Left join type `A` with type `B`.
|
|
10
|
+
*
|
|
11
|
+
* It handles cases like A or B are `Record`,
|
|
12
|
+
* joining between required and optional props, etc.
|
|
13
|
+
*/
|
|
14
|
+
export type Merge<A, B> = [A, B] extends [NonComposableTypes, unknown] ? B : [A, B] extends [unknown, NonComposableTypes] ? A : 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 ? ([OptionalKeys<A>, OptionalKeys<B>] extends [infer PKA extends KeyTypes, infer PKB extends KeyTypes] ? {
|
|
15
|
+
[k in PKA & PKB]?: A[k] | B[k] | undefined;
|
|
16
|
+
} & {
|
|
17
|
+
[k in Exclude<KA & KB, PKA | PKB>]: Merge.JoinProps<A[k], B[k]>;
|
|
18
|
+
} & {
|
|
19
|
+
[k in Exclude<KA, PKA | KB>]: A[k];
|
|
20
|
+
} & {
|
|
21
|
+
[k in Exclude<KB, PKB>]: B[k];
|
|
22
|
+
} & {
|
|
23
|
+
[k in Exclude<KA & PKB, PKA>]: Exclude<A[k] | Partial<B[k]>, undefined>;
|
|
24
|
+
} : never) : Properties<{
|
|
25
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
26
|
+
} & {
|
|
27
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
28
|
+
} & {
|
|
29
|
+
[k in KA & KB]: A[k] | B[k];
|
|
30
|
+
}>) : (IsLiteral<KB> extends true ? {
|
|
31
|
+
[k in Exclude<KA, KB>]: A[k];
|
|
32
|
+
} & {
|
|
33
|
+
[k in keyof B]: B[k];
|
|
34
|
+
} : {
|
|
35
|
+
[k in Exclude<KA, KA & KB>]: A[k];
|
|
36
|
+
} & {
|
|
37
|
+
[k in Exclude<KB, KA & KB>]: B[k];
|
|
38
|
+
} & {
|
|
39
|
+
[k in KA & KB]: A[k] | B[k];
|
|
40
|
+
})) : never) : never : never;
|
|
41
|
+
export declare namespace Merge {
|
|
42
|
+
type JoinProps<A, B> = A extends NonComposableTypes ? B : (B extends NonComposableTypes ? A : A & B);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Left join `a` with `b`.
|
|
46
|
+
*
|
|
47
|
+
* This returns the proper type of `{ ...a, ...b }`
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* leftJoin({ a: 1 }, {} as { a?: string | undefined }) // { a: number | string }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function merge<A, B>(a: A, b: B): Merge<A, B>;
|
|
55
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":"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"}
|
package/esm/merge.js
ADDED
|
@@ -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 merge(a, b) {
|
|
12
|
+
return { ...a, ...b };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=merge.js.map
|
package/esm/merge.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../ts/merge.ts"],"names":[],"mappings":"AA2DA;;;;;;;;;EASE;AACF,MAAM,UAAU,KAAK,CAAO,CAAI,EAAE,CAAI;IACrC,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAS,CAAA;AAC7B,CAAC"}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { AnyType } from '../any/any_type.js';
|
|
2
|
+
import type { NeverType } from '../never/never_type.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Parse `T` to ensure it is either exactly `any` or exactly `never`.
|
|
5
|
+
*
|
|
6
|
+
* 🐾 *parse*
|
|
7
|
+
* 🩳 *shortcut*
|
|
5
8
|
*
|
|
6
9
|
* @example
|
|
7
10
|
* ```ts
|
|
8
|
-
* type R =
|
|
11
|
+
* type R = AnyOrNeverType<any> // any
|
|
12
|
+
* type R = AnyOrNeverType<never> // never
|
|
13
|
+
* type R = AnyOrNeverType<never, 1, 2> // 1
|
|
9
14
|
*
|
|
10
|
-
* type R =
|
|
11
|
-
* type R =
|
|
12
|
-
* type R =
|
|
15
|
+
* type R = AnyOrNeverType<unknown> // never
|
|
16
|
+
* type R = AnyOrNeverType<unknown, 1, 2> // 2
|
|
17
|
+
* type R = AnyOrNeverType<string | boolean> // never
|
|
13
18
|
* ```
|
|
14
19
|
*/
|
|
15
|
-
export type AnyOrNeverType<T, Then = T, Else = never> =
|
|
20
|
+
export type AnyOrNeverType<T, Then = T, Else = never> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
16
21
|
/**
|
|
17
|
-
*
|
|
22
|
+
* Validate if `T` is either exactly `any` or exactly `never`.
|
|
23
|
+
*
|
|
24
|
+
* 🎭 *validate*
|
|
25
|
+
* 🩳 *shortcut*
|
|
18
26
|
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```ts
|
|
@@ -25,5 +33,5 @@ export type AnyOrNeverType<T, Then = T, Else = never> = IsNever<T, Then, IsAny<T
|
|
|
25
33
|
* type R = IsAnyOrNever<unknown> // false
|
|
26
34
|
* ```
|
|
27
35
|
*/
|
|
28
|
-
export type IsAnyOrNever<T, Then = true, Else = false> =
|
|
36
|
+
export type IsAnyOrNever<T, Then = true, Else = false> = NeverType<T, Then, AnyType<T, Then, Else>>;
|
|
29
37
|
//# sourceMappingURL=any_or_never_type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"any_or_never_type.d.ts","sourceRoot":"","sources":["../../ts/mix_types/any_or_never_type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAElG;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"AnyRecord.d.ts","sourceRoot":"","sources":["../../ts/object/AnyRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA"}
|
package/esm/object/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export type { KeysWithDiffType } from './KeysWithDiffType.js';
|
|
|
9
9
|
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
|
+
export type * from './optional_key.js';
|
|
12
13
|
export type { RecursiveIntersect } from './RecursiveIntersect.js';
|
|
13
14
|
export type { RecursiveRequired } from './RecursiveRequired.js';
|
|
14
15
|
export type { RequiredExcept, RequiredPick } from './Required.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,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"}
|
|
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,mBAAmB,mBAAmB,CAAA;AACtC,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"}
|