@nestia/fetcher 1.1.1 → 1.1.2

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.
@@ -28,13 +28,20 @@
28
28
  * @template Instance Target argument type.
29
29
  * @author Jenogho Nam - https://github.com/samchon
30
30
  */
31
- export type Primitive<Instance> = _Equal<Instance, _Primitive<Instance>> extends true ? Instance : _Primitive<Instance>;
31
+ export type Primitive<T> = _Equal<T, _Primitive<T>> extends true ? T : _Primitive<T>;
32
32
  type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
33
- type _Primitive<Instance> = _ValueOf<Instance> extends object ? Instance extends object ? Instance extends IJsonable<infer Raw> ? _ValueOf<Raw> extends object ? Raw extends object ? _PrimitiveObject<Raw> : never : _ValueOf<Raw> : _PrimitiveObject<Instance> : never : _ValueOf<Instance>;
34
- type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T> ? _Primitive<T>[] : {
33
+ type _Primitive<Instance> = _ValueOf<Instance> extends object ? Instance extends object ? Instance extends _Native ? {} : Instance extends IJsonable<infer Raw> ? _ValueOf<Raw> extends object ? Raw extends object ? _PrimitiveObject<Raw> : never : _ValueOf<Raw> : _PrimitiveObject<Instance> : never : _ValueOf<Instance>;
34
+ type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T> ? _IsTuple<Instance> extends true ? _PrimitiveSpread<Instance> : _Primitive<T>[] : {
35
35
  [P in keyof Instance]: Instance[P] extends Function ? never : _Primitive<Instance[P]>;
36
36
  };
37
+ type _PrimitiveSpread<T extends any[]> = T extends [infer F, ...infer Rest] ? [_Primitive<F>, ..._PrimitiveSpread<Rest>] : [];
37
38
  type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true ? boolean : _IsValueOf<Instance, Number> extends true ? number : _IsValueOf<Instance, String> extends true ? string : Instance;
39
+ type _Native = Set<any> | Map<any, any> | WeakSet<any> | WeakMap<any, any> | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | BigUint64Array | Int8Array | Int16Array | Int32Array | BigInt64Array | Float32Array | Float64Array | ArrayBuffer | SharedArrayBuffer | DataView;
40
+ type _IsTuple<T extends readonly any[] | {
41
+ length: number;
42
+ }> = [T] extends [
43
+ never
44
+ ] ? false : T extends readonly any[] ? number extends T["length"] ? false : true : false;
38
45
  type _IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object ? Object extends IValueOf<infer Primitive> ? Instance extends Primitive ? false : true : false : false;
39
46
  interface IValueOf<T> {
40
47
  valueOf(): T;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/fetcher",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Fetcher library of Nestia SDK",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
package/src/Primitive.ts CHANGED
@@ -28,18 +28,17 @@
28
28
  * @template Instance Target argument type.
29
29
  * @author Jenogho Nam - https://github.com/samchon
30
30
  */
31
- export type Primitive<Instance> = _Equal<
32
- Instance,
33
- _Primitive<Instance>
34
- > extends true
35
- ? Instance
36
- : _Primitive<Instance>;
31
+ export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
32
+ ? T
33
+ : _Primitive<T>;
37
34
 
38
35
  type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
39
36
 
40
37
  type _Primitive<Instance> = _ValueOf<Instance> extends object
41
38
  ? Instance extends object
42
- ? Instance extends IJsonable<infer Raw>
39
+ ? Instance extends _Native
40
+ ? {}
41
+ : Instance extends IJsonable<infer Raw>
43
42
  ? _ValueOf<Raw> extends object
44
43
  ? Raw extends object
45
44
  ? _PrimitiveObject<Raw> // object would be primitified
@@ -50,13 +49,19 @@ type _Primitive<Instance> = _ValueOf<Instance> extends object
50
49
  : _ValueOf<Instance>;
51
50
 
52
51
  type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
53
- ? _Primitive<T>[]
52
+ ? _IsTuple<Instance> extends true
53
+ ? _PrimitiveSpread<Instance>
54
+ : _Primitive<T>[]
54
55
  : {
55
56
  [P in keyof Instance]: Instance[P] extends Function
56
57
  ? never
57
58
  : _Primitive<Instance[P]>;
58
59
  };
59
60
 
61
+ type _PrimitiveSpread<T extends any[]> = T extends [infer F, ...infer Rest]
62
+ ? [_Primitive<F>, ..._PrimitiveSpread<Rest>]
63
+ : [];
64
+
60
65
  type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
61
66
  ? boolean
62
67
  : _IsValueOf<Instance, Number> extends true
@@ -65,6 +70,36 @@ type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
65
70
  ? string
66
71
  : Instance;
67
72
 
73
+ type _Native =
74
+ | Set<any>
75
+ | Map<any, any>
76
+ | WeakSet<any>
77
+ | WeakMap<any, any>
78
+ | Uint8Array
79
+ | Uint8ClampedArray
80
+ | Uint16Array
81
+ | Uint32Array
82
+ | BigUint64Array
83
+ | Int8Array
84
+ | Int16Array
85
+ | Int32Array
86
+ | BigInt64Array
87
+ | Float32Array
88
+ | Float64Array
89
+ | ArrayBuffer
90
+ | SharedArrayBuffer
91
+ | DataView;
92
+
93
+ type _IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
94
+ never,
95
+ ]
96
+ ? false
97
+ : T extends readonly any[]
98
+ ? number extends T["length"]
99
+ ? false
100
+ : true
101
+ : false;
102
+
68
103
  type _IsValueOf<
69
104
  Instance,
70
105
  Object extends IValueOf<any>,
@@ -82,4 +117,4 @@ interface IValueOf<T> {
82
117
 
83
118
  interface IJsonable<T> {
84
119
  toJSON(): T;
85
- }
120
+ }