@nestia/fetcher 1.1.1 → 1.2.0-dev.20230504

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,14 +28,21 @@
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>;
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>[] : {
35
- [P in keyof Instance]: Instance[P] extends Function ? never : _Primitive<Instance[P]>;
31
+ export type Primitive<T> = Equal<T, PrimitiveMain<T>> extends true ? T : PrimitiveMain<T>;
32
+ type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
33
+ type PrimitiveMain<Instance> = ValueOf<Instance> extends object ? Instance extends object ? Instance extends NativeClass ? {} : 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 ? PrimitiveTuple<Instance> : PrimitiveMain<T>[] : {
35
+ [P in keyof Instance]: Instance[P] extends Function ? never : PrimitiveMain<Instance[P]>;
36
36
  };
37
- type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true ? boolean : _IsValueOf<Instance, Number> extends true ? number : _IsValueOf<Instance, String> extends true ? string : Instance;
38
- type _IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object ? Object extends IValueOf<infer Primitive> ? Instance extends Primitive ? false : true : false : false;
37
+ type PrimitiveTuple<T extends readonly any[]> = T extends [infer F] ? [PrimitiveMain<F>] : T extends [infer F, ...infer Rest extends readonly any[]] ? [PrimitiveMain<F>, ...PrimitiveTuple<Rest>] : T extends [(infer F)?] ? [PrimitiveMain<F>?] : T extends [(infer F)?, ...infer Rest extends readonly any[]] ? [PrimitiveMain<F>?, ...PrimitiveTuple<Rest>] : [];
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 NativeClass = 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;
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;
41
48
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/fetcher",
3
- "version": "1.1.1",
3
+ "version": "1.2.0-dev.20230504",
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,47 +28,85 @@
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, PrimitiveMain<T>> extends true
32
+ ? T
33
+ : PrimitiveMain<T>;
37
34
 
38
- type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
35
+ type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
39
36
 
40
- type _Primitive<Instance> = _ValueOf<Instance> extends object
37
+ type PrimitiveMain<Instance> = ValueOf<Instance> extends object
41
38
  ? Instance extends object
42
- ? Instance extends IJsonable<infer Raw>
43
- ? _ValueOf<Raw> extends object
39
+ ? Instance extends NativeClass
40
+ ? {}
41
+ : Instance extends IJsonable<infer Raw>
42
+ ? ValueOf<Raw> extends object
44
43
  ? Raw extends object
45
- ? _PrimitiveObject<Raw> // object would be primitified
44
+ ? PrimitiveObject<Raw> // object would be primitified
46
45
  : never // cannot be
47
- : _ValueOf<Raw> // atomic value
48
- : _PrimitiveObject<Instance> // object would be primitified
46
+ : ValueOf<Raw> // atomic value
47
+ : PrimitiveObject<Instance> // object would be primitified
49
48
  : never // cannot be
50
- : _ValueOf<Instance>;
49
+ : ValueOf<Instance>;
51
50
 
52
- type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
53
- ? _Primitive<T>[]
51
+ type PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
52
+ ? IsTuple<Instance> extends true
53
+ ? PrimitiveTuple<Instance>
54
+ : PrimitiveMain<T>[]
54
55
  : {
55
56
  [P in keyof Instance]: Instance[P] extends Function
56
57
  ? never
57
- : _Primitive<Instance[P]>;
58
+ : PrimitiveMain<Instance[P]>;
58
59
  };
59
60
 
60
- type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
61
+ type PrimitiveTuple<T extends readonly any[]> = T extends [infer F]
62
+ ? [PrimitiveMain<F>]
63
+ : T extends [infer F, ...infer Rest extends readonly any[]]
64
+ ? [PrimitiveMain<F>, ...PrimitiveTuple<Rest>]
65
+ : T extends [(infer F)?]
66
+ ? [PrimitiveMain<F>?]
67
+ : T extends [(infer F)?, ...infer Rest extends readonly any[]]
68
+ ? [PrimitiveMain<F>?, ...PrimitiveTuple<Rest>]
69
+ : [];
70
+
71
+ type ValueOf<Instance> = IsValueOf<Instance, Boolean> extends true
61
72
  ? boolean
62
- : _IsValueOf<Instance, Number> extends true
73
+ : IsValueOf<Instance, Number> extends true
63
74
  ? number
64
- : _IsValueOf<Instance, String> extends true
75
+ : IsValueOf<Instance, String> extends true
65
76
  ? string
66
77
  : Instance;
67
78
 
68
- type _IsValueOf<
69
- Instance,
70
- Object extends IValueOf<any>,
71
- > = Instance extends Object
79
+ type NativeClass =
80
+ | Set<any>
81
+ | Map<any, any>
82
+ | WeakSet<any>
83
+ | WeakMap<any, any>
84
+ | Uint8Array
85
+ | Uint8ClampedArray
86
+ | Uint16Array
87
+ | Uint32Array
88
+ | BigUint64Array
89
+ | Int8Array
90
+ | Int16Array
91
+ | Int32Array
92
+ | BigInt64Array
93
+ | Float32Array
94
+ | Float64Array
95
+ | ArrayBuffer
96
+ | SharedArrayBuffer
97
+ | DataView;
98
+
99
+ type IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
100
+ never,
101
+ ]
102
+ ? false
103
+ : T extends readonly any[]
104
+ ? number extends T["length"]
105
+ ? false
106
+ : true
107
+ : false;
108
+
109
+ type IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object
72
110
  ? Object extends IValueOf<infer Primitive>
73
111
  ? Instance extends Primitive
74
112
  ? false
@@ -82,4 +120,4 @@ interface IValueOf<T> {
82
120
 
83
121
  interface IJsonable<T> {
84
122
  toJSON(): T;
85
- }
123
+ }