@kakasoo/deep-strict-types 1.0.0
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/LICENSE +21 -0
- package/README.md +1 -0
- package/bin/src/index.d.ts +11 -0
- package/bin/src/index.d.ts.map +1 -0
- package/bin/src/index.js +27 -0
- package/bin/src/index.js.map +1 -0
- package/bin/src/types/DeepDateToString.d.ts +4 -0
- package/bin/src/types/DeepDateToString.d.ts.map +1 -0
- package/bin/src/types/DeepDateToString.js +3 -0
- package/bin/src/types/DeepDateToString.js.map +1 -0
- package/bin/src/types/DeepStrictObjectKeys.d.ts +18 -0
- package/bin/src/types/DeepStrictObjectKeys.d.ts.map +1 -0
- package/bin/src/types/DeepStrictObjectKeys.js +3 -0
- package/bin/src/types/DeepStrictObjectKeys.js.map +1 -0
- package/bin/src/types/DeepStrictOmit.d.ts +20 -0
- package/bin/src/types/DeepStrictOmit.d.ts.map +1 -0
- package/bin/src/types/DeepStrictOmit.js +3 -0
- package/bin/src/types/DeepStrictOmit.js.map +1 -0
- package/bin/src/types/DeepStrictPick.d.ts +19 -0
- package/bin/src/types/DeepStrictPick.d.ts.map +1 -0
- package/bin/src/types/DeepStrictPick.js +3 -0
- package/bin/src/types/DeepStrictPick.js.map +1 -0
- package/bin/src/types/DeepStrictUnbrand.d.ts +7 -0
- package/bin/src/types/DeepStrictUnbrand.d.ts.map +1 -0
- package/bin/src/types/DeepStrictUnbrand.js +3 -0
- package/bin/src/types/DeepStrictUnbrand.js.map +1 -0
- package/bin/src/types/ElementOf.d.ts +5 -0
- package/bin/src/types/ElementOf.d.ts.map +1 -0
- package/bin/src/types/ElementOf.js +3 -0
- package/bin/src/types/ElementOf.js.map +1 -0
- package/bin/src/types/Equal.d.ts +10 -0
- package/bin/src/types/Equal.d.ts.map +1 -0
- package/bin/src/types/Equal.js +3 -0
- package/bin/src/types/Equal.js.map +1 -0
- package/bin/src/types/GetMember.d.ts +14 -0
- package/bin/src/types/GetMember.d.ts.map +1 -0
- package/bin/src/types/GetMember.js +3 -0
- package/bin/src/types/GetMember.js.map +1 -0
- package/bin/src/types/IsAny.d.ts +5 -0
- package/bin/src/types/IsAny.d.ts.map +1 -0
- package/bin/src/types/IsAny.js +3 -0
- package/bin/src/types/IsAny.js.map +1 -0
- package/bin/src/types/IsUnion.d.ts +11 -0
- package/bin/src/types/IsUnion.d.ts.map +1 -0
- package/bin/src/types/IsUnion.js +3 -0
- package/bin/src/types/IsUnion.js.map +1 -0
- package/package.json +30 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Kyungsu Kang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# DeepStrictTypes
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./types/DeepDateToString";
|
|
2
|
+
export * from "./types/DeepStrictObjectKeys";
|
|
3
|
+
export * from "./types/DeepStrictOmit";
|
|
4
|
+
export * from "./types/DeepStrictPick";
|
|
5
|
+
export * from "./types/DeepStrictUnbrand";
|
|
6
|
+
export * from "./types/ElementOf";
|
|
7
|
+
export * from "./types/Equal";
|
|
8
|
+
export * from "./types/GetMember";
|
|
9
|
+
export * from "./types/IsAny";
|
|
10
|
+
export * from "./types/IsUnion";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
|
package/bin/src/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types/DeepDateToString"), exports);
|
|
18
|
+
__exportStar(require("./types/DeepStrictObjectKeys"), exports);
|
|
19
|
+
__exportStar(require("./types/DeepStrictOmit"), exports);
|
|
20
|
+
__exportStar(require("./types/DeepStrictPick"), exports);
|
|
21
|
+
__exportStar(require("./types/DeepStrictUnbrand"), exports);
|
|
22
|
+
__exportStar(require("./types/ElementOf"), exports);
|
|
23
|
+
__exportStar(require("./types/Equal"), exports);
|
|
24
|
+
__exportStar(require("./types/GetMember"), exports);
|
|
25
|
+
__exportStar(require("./types/IsAny"), exports);
|
|
26
|
+
__exportStar(require("./types/IsUnion"), exports);
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,+DAA6C;AAC7C,yDAAuC;AACvC,yDAAuC;AACvC,4DAA0C;AAC1C,oDAAkC;AAClC,gDAA8B;AAC9B,oDAAkC;AAClC,gDAA8B;AAC9B,kDAAgC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type DeepDateToString<T> = T extends Array<infer I extends object> ? Array<DeepDateToString<I>> : T extends Date ? string : {
|
|
2
|
+
[K in keyof T]: T[K] extends infer I ? I extends Date ? string : I extends object ? DeepDateToString<I> : I : never;
|
|
3
|
+
};
|
|
4
|
+
//# sourceMappingURL=DeepDateToString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepDateToString.d.ts","sourceRoot":"","sources":["../../../src/types/DeepDateToString.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,GACnE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAC1B,CAAC,SAAS,IAAI,GACd,MAAM,GACN;KACK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAC9B,CAAC,SAAS,IAAI,GACV,MAAM,GACN,CAAC,SAAS,MAAM,GAChB,gBAAgB,CAAC,CAAC,CAAC,GACnB,CAAC,GACL,KAAK;CACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepDateToString.js","sourceRoot":"","sources":["../../../src/types/DeepDateToString.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { IsAny } from "./IsAny";
|
|
2
|
+
import type { IsUnion } from "./IsUnion";
|
|
3
|
+
type __ValueType = number | boolean | string | null | undefined | symbol | bigint | Date;
|
|
4
|
+
type __DeepStrictObjectKeys<T extends object, P extends keyof T = keyof T> = P extends string ? IsUnion<T[P]> extends true ? P : T[P] extends Array<infer Element extends object> ? P | `${P}[*].${__DeepStrictObjectKeys<Element>}` : T[P] extends __ValueType ? P : IsAny<T[P]> extends true ? P : T[P] extends object ? T[P] extends Array<infer _Element> ? P : T[P] extends Record<string, never> ? `${P}` : `${P}` | `${P}.${__DeepStrictObjectKeys<T[P]>}` : never : never;
|
|
5
|
+
/**
|
|
6
|
+
* @title 중첩된 객체 혹은 배열의 모든 키를 표기하는 타입.
|
|
7
|
+
*
|
|
8
|
+
* 중첩된 객체의 모든 키를 뽑는 타입으로, 만약 중첩된 객체가 있을 경우 점 기호를 기준으로 객체를 표현한다.
|
|
9
|
+
* 배열인 경우에는 `[*]` 기호를 이용하여 표기한다.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* type Example1 = DeepStrictObjectKeys<{ a: { b: 1; c: 2 } }>; // "a" | "a.b" | "a.c"
|
|
13
|
+
* type Example2 = DeepStrictObjectKeys<{ a: { b: 1; c: { d: number }[] } }>; // "a" | "a.b" | "a.c" | "a.c[*].d"
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export type DeepStrictObjectKeys<T extends object, P extends keyof T = keyof T> = T extends Array<infer Element> ? Element extends object ? `[*].${DeepStrictObjectKeys<Element>}` : `[*].${keyof Element extends string ? keyof Element : never}` : __DeepStrictObjectKeys<T, P>;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=DeepStrictObjectKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictObjectKeys.d.ts","sourceRoot":"","sources":["../../../src/types/DeepStrictObjectKeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,KAAK,WAAW,GACV,MAAM,GACN,OAAO,GACP,MAAM,GACN,IAAI,GACJ,SAAS,GACT,MAAM,GACN,MAAM,GACN,IAAI,CAAC;AAEX,KAAK,sBAAsB,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAC3B,CAAC,SAAS,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,OAAO,SAAS,MAAM,CAAC,GAChD,CAAC,GAAG,GAAG,CAAC,OAAO,sBAAsB,CAAC,OAAO,CAAC,EAAE,GAChD,CAAC,CAAC,CAAC,CAAC,SAAS,WAAW,GACxB,CAAC,GACD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACxB,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACnB,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,QAAQ,CAAC,GAC9B,CAAC,GACD,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAClC,GAAG,CAAC,EAAE,GACN,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GACnD,KAAK,GACT,KAAK,CAAC;AAEZ;;;;;;;;;;GAUG;AACH,MAAM,MAAM,oBAAoB,CAC5B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAC3B,CAAC,SAAS,KAAK,CAAC,MAAM,OAAO,CAAC,GAC5B,OAAO,SAAS,MAAM,GAClB,OAAO,oBAAoB,CAAC,OAAO,CAAC,EAAE,GACtC,OAAO,MAAM,OAAO,SAAS,MAAM,GAAG,MAAM,OAAO,GAAG,KAAK,EAAE,GACjE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictObjectKeys.js","sourceRoot":"","sources":["../../../src/types/DeepStrictObjectKeys.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DeepStrictObjectKeys } from "./DeepStrictObjectKeys";
|
|
2
|
+
import type { DeepStrictUnbrand } from "./DeepStrictUnbrand";
|
|
3
|
+
import type { GetElementMember } from "./GetMember";
|
|
4
|
+
type __DeepStrictOmit<T extends object, K extends DeepStrictObjectKeys<T>> = {
|
|
5
|
+
[key in keyof T as key extends K ? never : key]: T[key] extends Array<infer Element extends object> ? key extends string ? Element extends Date ? Array<Element> : Array<__DeepStrictOmit<Element, GetElementMember<K, key> extends DeepStrictObjectKeys<Element> ? GetElementMember<K, key> : never>> : never : T[key] extends Array<infer Element> ? Array<Element> : T[key] extends object ? key extends string ? T[key] extends Date ? T[key] : __DeepStrictOmit<T[key], GetElementMember<K, key> extends DeepStrictObjectKeys<T[key]> ? GetElementMember<K, key> : never> : never : T[key];
|
|
6
|
+
};
|
|
7
|
+
export type _DeepStrictOmit<T extends object, K extends DeepStrictObjectKeys<T>> = T extends Array<infer Element extends object> ? Array<_DeepStrictOmit<Element, GetElementMember<K, ""> extends DeepStrictObjectKeys<Element> ? GetElementMember<K, ""> : never>> : __DeepStrictOmit<T, K>;
|
|
8
|
+
/**
|
|
9
|
+
* @title 인터페이스에서 특정 키를 제거하는 타입.
|
|
10
|
+
* {@link DeepStrictObjectKeys} 을 이용해서 제거할 키를 고를 수 있다.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* type Example1 = DeepStrictOmit<{ a: { b: 1; c: 2 } }, "a.b">;
|
|
14
|
+
* type Example2 = DeepStrictOmit<{ a: { b: 1; c: { d: number }[] } }, "a.c[*].d">;
|
|
15
|
+
* type Example3 = DeepStrictOmit<{ a: 1 }[], "[*].a">;
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export type DeepStrictOmit<T extends object, K extends DeepStrictObjectKeys<DeepStrictUnbrand<T>>> = _DeepStrictOmit<DeepStrictUnbrand<T>, K>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=DeepStrictOmit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictOmit.d.ts","sourceRoot":"","sources":["../../../src/types/DeepStrictOmit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,IAAI;KACxE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,CACjE,MAAM,OAAO,SAAS,MAAM,CAC/B,GACK,GAAG,SAAS,MAAM,GACd,OAAO,SAAS,IAAI,GAChB,KAAK,CAAC,OAAO,CAAC,GACd,KAAK,CACD,gBAAgB,CACZ,OAAO,EACP,gBAAgB,CACZ,CAAC,EACD,GAAG,CACN,SAAS,oBAAoB,CAAC,OAAO,CAAC,GACjC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,GACxB,KAAK,CACd,CACJ,GACL,KAAK,GACT,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,MAAM,OAAO,CAAC,GACnC,KAAK,CAAC,OAAO,CAAC,GACd,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,GACrB,GAAG,SAAS,MAAM,GACd,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GACf,CAAC,CAAC,GAAG,CAAC,GACN,gBAAgB,CACZ,CAAC,CAAC,GAAG,CAAC,EACN,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,oBAAoB,CACjD,CAAC,CAAC,GAAG,CAAC,CACT,GACK,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,GACxB,KAAK,CACd,GACL,KAAK,GACT,CAAC,CAAC,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,IACjC,CAAC,SAAS,KAAK,CAAC,MAAM,OAAO,SAAS,MAAM,CAAC,GAC3C,KAAK,CACD,eAAe,CACX,OAAO,EACP,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,oBAAoB,CAAC,OAAO,CAAC,GACvD,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC,GACvB,KAAK,CACd,CACJ,GACD,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7B;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IACpD,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictOmit.js","sourceRoot":"","sources":["../../../src/types/DeepStrictOmit.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DeepStrictObjectKeys } from "./DeepStrictObjectKeys";
|
|
2
|
+
import type { DeepStrictOmit } from "./DeepStrictOmit";
|
|
3
|
+
import type { DeepStrictUnbrand } from "./DeepStrictUnbrand";
|
|
4
|
+
import type { ElementOf } from "./ElementOf";
|
|
5
|
+
type RemoveLastProperty<S extends string> = S extends `${infer First}.${infer Last}` ? First extends `${infer ObjectPart}[*]` ? ObjectPart | `${First}.${RemoveLastProperty<Last>}` : `${First}` | `${First}.${RemoveLastProperty<Last>}` : never;
|
|
6
|
+
type RemoveAfterDot<T extends object, K extends string> = K extends `${infer First}.${infer Last}` ? First extends keyof T ? T[First] extends Array<any> ? `${First}[*].${string}` : T[First] extends object ? `${First}.${RemoveAfterDot<T[First], Last>}` : never : First extends "[*]" ? T extends Array<any> ? RemoveAfterDot<ElementOf<T>, Last> : never : First extends `${infer Second extends string}[*]` ? Second extends keyof T ? T[Second] extends object ? RemoveAfterDot<T[Second], Last> : never : never : never : K extends keyof T ? T[K] extends Array<any> ? `${K}[*].${string}` : `${K}.${string}` : never;
|
|
7
|
+
/**
|
|
8
|
+
* @title 인터페이스에서 특정 키만을 뽑는 타입.
|
|
9
|
+
* {@link DeepStrictObjectKeys} 을 이용해서 뽑을 키를 고를 수 있다.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* type Example1 = DeepStrictPick<{ a: { b: 1; c: 2 } }, "a.b">;
|
|
13
|
+
* type Example2 = DeepStrictPick<{ a: { b: 1; c: { d: number }[] } }, "a.c[*].d">;
|
|
14
|
+
* type Example3 = DeepStrictPick<{ a: 1 }[], "[*].a">;
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export type DeepStrictPick<T extends object, K extends DeepStrictObjectKeys<T>> = DeepStrictOmit<T, Exclude<DeepStrictObjectKeys<DeepStrictUnbrand<T>>, K | RemoveLastProperty<K> | RemoveAfterDot<DeepStrictUnbrand<T>, K>>>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=DeepStrictPick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictPick.d.ts","sourceRoot":"","sources":["../../../src/types/DeepStrictPick.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,IACpC,CAAC,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GAClC,KAAK,SAAS,GAAG,MAAM,UAAU,KAAK,GAClC,UAAU,GAAG,GAAG,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,GACnD,GAAG,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,GACvD,KAAK,CAAC;AAEhB,KAAK,cAAc,CACf,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,IAChB,CAAC,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GACtC,KAAK,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GACvB,GAAG,KAAK,OAAO,MAAM,EAAE,GACvB,CAAC,CAAC,KAAK,CAAC,SAAS,MAAM,GACvB,GAAG,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,GAC5C,KAAK,GACT,KAAK,SAAS,KAAK,GACnB,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GAChB,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAClC,KAAK,GACT,KAAK,SAAS,GAAG,MAAM,MAAM,SAAS,MAAM,KAAK,GACjD,MAAM,SAAS,MAAM,CAAC,GAClB,CAAC,CAAC,MAAM,CAAC,SAAS,MAAM,GACpB,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAC/B,KAAK,GACT,KAAK,GACT,KAAK,GACT,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,GACnB,GAAG,CAAC,OAAO,MAAM,EAAE,GACnB,GAAG,CAAC,IAAI,MAAM,EAAE,GACpB,KAAK,CAAC;AAEZ;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,IACjC,cAAc,CACd,CAAC,EACD,OAAO,CACH,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAC1C,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACtE,CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictPick.js","sourceRoot":"","sources":["../../../src/types/DeepStrictPick.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type Primitive = string | number | boolean | symbol | null | undefined;
|
|
2
|
+
type Unbrand<T extends Primitive & NonNullable<unknown>> = T extends Primitive & NonNullable<unknown> ? Extract<Primitive, T> : never;
|
|
3
|
+
export type DeepStrictUnbrand<T> = T extends Array<Date> ? Array<Date> : T extends Array<infer I extends object> ? Array<DeepStrictUnbrand<I>> : T extends Primitive & NonNullable<unknown> ? Unbrand<T> : T extends Date ? T : {
|
|
4
|
+
[K in keyof T]: T[K] extends Unbrand<infer I> ? Extract<I, T[K]> : T[K] extends object ? DeepStrictUnbrand<T[K]> : T[K];
|
|
5
|
+
};
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=DeepStrictUnbrand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictUnbrand.d.ts","sourceRoot":"","sources":["../../../src/types/DeepStrictUnbrand.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AACvE,KAAK,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,SAAS,GAC1E,WAAW,CAAC,OAAO,CAAC,GAClB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,GACrB,KAAK,CAAC;AAEZ,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,GAClD,KAAK,CAAC,IAAI,CAAC,GACX,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,GACvC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC3B,CAAC,SAAS,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC,GACV,CAAC,SAAS,IAAI,GACd,CAAC,GACD;KACK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAChB,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GACnB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACvB,CAAC,CAAC,CAAC,CAAC;CACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeepStrictUnbrand.js","sourceRoot":"","sources":["../../../src/types/DeepStrictUnbrand.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElementOf.d.ts","sourceRoot":"","sources":["../../../src/types/ElementOf.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,OAAO,CAAC,GACtE,OAAO,GACP,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElementOf.js","sourceRoot":"","sources":["../../../src/types/ElementOf.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Equal.d.ts","sourceRoot":"","sources":["../../../src/types/Equal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Equal.js","sourceRoot":"","sources":["../../../src/types/Equal.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title 어떤 키로부터 멤버만을 조회하는 타입.
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* type b = GetMember<"a.b", "a">;
|
|
6
|
+
* type b_c = GetMember<"a.b.c", "a">;
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export type GetMember<T extends string, O extends string> = T extends `${O}.${infer Rest}` ? Rest : never;
|
|
10
|
+
/**
|
|
11
|
+
* @title 어떤 키로부터 요소 멤버의 키를 조회하는 타입.
|
|
12
|
+
*/
|
|
13
|
+
export type GetElementMember<T extends string, First extends string> = T extends `${First}[*].${infer Rest}` ? Rest : GetMember<T, First>;
|
|
14
|
+
//# sourceMappingURL=GetMember.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetMember.d.ts","sourceRoot":"","sources":["../../../src/types/GetMember.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,SAAS,CACjB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,IAChB,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,gBAAgB,CACxB,CAAC,SAAS,MAAM,EAChB,KAAK,SAAS,MAAM,IACpB,CAAC,SAAS,GAAG,KAAK,OAAO,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetMember.js","sourceRoot":"","sources":["../../../src/types/GetMember.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsAny.d.ts","sourceRoot":"","sources":["../../../src/types/IsAny.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsAny.js","sourceRoot":"","sources":["../../../src/types/IsAny.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Equal } from "./Equal";
|
|
2
|
+
/**
|
|
3
|
+
* 제네릭 타입 `T`가 자기 자신의 요소와 동일한지를 검증한다.
|
|
4
|
+
*/
|
|
5
|
+
type IsPartitionSameEntire<T, P = T> = T extends any ? P extends T ? false : true : never;
|
|
6
|
+
/**
|
|
7
|
+
* @title 유니온 타입을 검증하는 타입.
|
|
8
|
+
*/
|
|
9
|
+
export type IsUnion<T> = Equal<IsPartitionSameEntire<T>, boolean> extends true ? true : false;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=IsUnion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsUnion.d.ts","sourceRoot":"","sources":["../../../src/types/IsUnion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC;;GAEG;AACH,KAAK,qBAAqB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,GAC9C,CAAC,SAAS,CAAC,GACP,KAAK,GACL,IAAI,GACR,KAAK,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,GACxE,IAAI,GACJ,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IsUnion.js","sourceRoot":"","sources":["../../../src/types/IsUnion.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kakasoo/deep-strict-types",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"private": false,
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"./bin/src"
|
|
11
|
+
],
|
|
12
|
+
"main": "bin/src/index.js",
|
|
13
|
+
"types": "bin/src/index.d.ts",
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "rimraf dist && tsc",
|
|
16
|
+
"build:test": "rimraf bin && tsc -p test/tsconfig.json --watch",
|
|
17
|
+
"prepare": "ts-patch install && typia patch",
|
|
18
|
+
"test": "node --watch bin/test/*.js"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [],
|
|
21
|
+
"author": "",
|
|
22
|
+
"license": "ISC",
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^22.5.0",
|
|
25
|
+
"rimraf": "^6.0.1",
|
|
26
|
+
"ts-patch": "^3.2.1",
|
|
27
|
+
"typescript": "^5.5.2",
|
|
28
|
+
"typia": "^6.9.0"
|
|
29
|
+
}
|
|
30
|
+
}
|