typia 3.8.0-dev.20230426-4 → 3.8.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.
Files changed (154) hide show
  1. package/lib/programmers/ApplicationProgrammer.js +1 -1
  2. package/lib/programmers/ApplicationProgrammer.js.map +1 -1
  3. package/package.json +2 -2
  4. package/src/Primitive.ts +120 -120
  5. package/src/executable/TypiaGenerateWizard.ts +85 -85
  6. package/src/executable/TypiaSetupWizard.ts +133 -133
  7. package/src/executable/setup/CommandExecutor.ts +8 -8
  8. package/src/executable/setup/PackageManager.ts +71 -71
  9. package/src/executable/typia.ts +52 -52
  10. package/src/factories/CommentFactory.ts +14 -14
  11. package/src/factories/ExpressionFactory.ts +70 -70
  12. package/src/factories/IdentifierFactory.ts +63 -63
  13. package/src/factories/LiteralFactory.ts +39 -39
  14. package/src/factories/MetadataCollection.ts +121 -121
  15. package/src/factories/MetadataFactory.ts +62 -62
  16. package/src/factories/MetadataTagFactory.ts +297 -297
  17. package/src/factories/StatementFactory.ts +24 -24
  18. package/src/factories/TemplateFactory.ts +58 -58
  19. package/src/factories/TypeFactory.ts +124 -124
  20. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  21. package/src/factories/internal/metadata/emplace_metadata_object.ts +140 -140
  22. package/src/factories/internal/metadata/iterate_metadata.ts +67 -67
  23. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  24. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  25. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  26. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  27. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +44 -44
  28. package/src/factories/internal/metadata/iterate_metadata_union.ts +57 -57
  29. package/src/functional/$any.ts +2 -2
  30. package/src/functional/$is_between.ts +2 -2
  31. package/src/functional/$is_custom.ts +14 -14
  32. package/src/functional/$is_date.ts +3 -3
  33. package/src/functional/$is_datetime.ts +2 -2
  34. package/src/functional/$is_email.ts +4 -4
  35. package/src/functional/$is_ipv4.ts +4 -4
  36. package/src/functional/$is_ipv6.ts +4 -4
  37. package/src/functional/$is_url.ts +4 -4
  38. package/src/functional/$is_uuid.ts +4 -4
  39. package/src/functional/$join.ts +46 -46
  40. package/src/functional/$number.ts +12 -12
  41. package/src/functional/$rest.ts +3 -3
  42. package/src/functional/$string.ts +37 -37
  43. package/src/functional/$tail.ts +5 -5
  44. package/src/metadata/Metadata.ts +533 -533
  45. package/src/metadata/MetadataConstant.ts +3 -3
  46. package/src/metadata/MetadataObject.ts +127 -127
  47. package/src/module.ts +2043 -2043
  48. package/src/programmers/ApplicationProgrammer.ts +62 -62
  49. package/src/programmers/AssertCloneProgrammer.ts +79 -79
  50. package/src/programmers/AssertParseProgrammer.ts +74 -74
  51. package/src/programmers/AssertProgrammer.ts +285 -285
  52. package/src/programmers/AssertPruneProgrammer.ts +76 -76
  53. package/src/programmers/AssertStringifyProgrammer.ts +74 -74
  54. package/src/programmers/CheckerProgrammer.ts +875 -875
  55. package/src/programmers/CloneProgrammer.ts +389 -389
  56. package/src/programmers/FeatureProgrammer.ts +500 -500
  57. package/src/programmers/IsCloneProgrammer.ts +86 -86
  58. package/src/programmers/IsParseProgrammer.ts +80 -80
  59. package/src/programmers/IsProgrammer.ts +212 -212
  60. package/src/programmers/IsPruneProgrammer.ts +81 -81
  61. package/src/programmers/IsStringifyProgrammer.ts +84 -84
  62. package/src/programmers/LiteralsProgrammer.ts +65 -65
  63. package/src/programmers/PruneProgrammer.ts +347 -347
  64. package/src/programmers/RandomProgrammer.ts +423 -423
  65. package/src/programmers/StringifyProgrammer.ts +798 -798
  66. package/src/programmers/TypiaProgrammer.ts +129 -129
  67. package/src/programmers/ValidateCloneProgrammer.ts +93 -93
  68. package/src/programmers/ValidateParseProgrammer.ts +78 -78
  69. package/src/programmers/ValidateProgrammer.ts +316 -316
  70. package/src/programmers/ValidatePruneProgrammer.ts +86 -86
  71. package/src/programmers/ValidateStringifyProgrammer.ts +92 -92
  72. package/src/programmers/helpers/CloneJoiner.ts +131 -131
  73. package/src/programmers/helpers/FunctionImporeter.ts +54 -54
  74. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  75. package/src/programmers/helpers/PruneJoiner.ts +144 -144
  76. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  77. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  78. package/src/programmers/helpers/UnionExplorer.ts +275 -275
  79. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  80. package/src/programmers/internal/application_array.ts +36 -36
  81. package/src/programmers/internal/application_boolean.ts +17 -17
  82. package/src/programmers/internal/application_constant.ts +30 -30
  83. package/src/programmers/internal/application_default_string.ts +33 -33
  84. package/src/programmers/internal/application_native.ts +32 -32
  85. package/src/programmers/internal/application_number.ts +73 -73
  86. package/src/programmers/internal/application_object.ts +154 -154
  87. package/src/programmers/internal/application_schema.ts +213 -213
  88. package/src/programmers/internal/application_string.ts +45 -45
  89. package/src/programmers/internal/application_templates.ts +26 -26
  90. package/src/programmers/internal/application_tuple.ts +29 -29
  91. package/src/programmers/internal/check_array.ts +30 -30
  92. package/src/programmers/internal/check_custom.ts +31 -31
  93. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  94. package/src/programmers/internal/check_everything.ts +28 -28
  95. package/src/programmers/internal/check_native.ts +21 -21
  96. package/src/programmers/internal/check_string_tags.ts +67 -67
  97. package/src/programmers/internal/check_union_array_like.ts +271 -271
  98. package/src/programmers/internal/check_union_tuple.ts +33 -33
  99. package/src/programmers/internal/random_custom.ts +29 -29
  100. package/src/programmers/internal/stringify_dynamic_properties.ts +167 -167
  101. package/src/programmers/internal/stringify_native.ts +7 -7
  102. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  103. package/src/schemas/IJsonSchema.ts +129 -129
  104. package/src/transform.ts +17 -17
  105. package/src/transformers/CallExpressionTransformer.ts +177 -177
  106. package/src/transformers/FileTransformer.ts +47 -47
  107. package/src/transformers/NodeTransformer.ts +13 -13
  108. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +114 -114
  109. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  110. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  111. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  112. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  113. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  114. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  115. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  116. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  117. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  118. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  119. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  120. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  121. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  122. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  123. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  124. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +52 -52
  125. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  126. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  127. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  128. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  129. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  130. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  131. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  132. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  133. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  134. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  135. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  136. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  137. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  138. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  139. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  140. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  141. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  142. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  143. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  144. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  145. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  146. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  147. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  148. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  149. package/src/transformers/internal/GenericTransformer.ts +97 -97
  150. package/src/utils/ArrayUtil.ts +44 -44
  151. package/src/utils/Escaper.ts +45 -45
  152. package/src/utils/MapUtil.ts +12 -12
  153. package/src/utils/PatternUtil.ts +30 -30
  154. package/src/utils/RandomGenerator.ts +81 -81
@@ -29,7 +29,7 @@ var ApplicationProgrammer;
29
29
  };
30
30
  };
31
31
  })(IOptions = ApplicationProgrammer.IOptions || (ApplicationProgrammer.IOptions = {}));
32
- ApplicationProgrammer.generate = function (metadatas, options) { return ApplicationProgrammer.generate(metadatas, options); };
32
+ ApplicationProgrammer.generate = function (metadatas, options) { return ApplicationProgrammer.write(options)(metadatas); };
33
33
  ApplicationProgrammer.write = function (options) {
34
34
  return function (metadatas) {
35
35
  var fullOptions = IOptions.complement(options);
@@ -1 +1 @@
1
- {"version":3,"file":"ApplicationProgrammer.js","sourceRoot":"","sources":["../../src/programmers/ApplicationProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAKA,oEAAmE;AAEnE,IAAiB,qBAAqB,CAsDrC;AAtDD,WAAiB,qBAAqB;IACrB,gCAAU,GAAG,qBAAqB,CAAC;IACnC,oCAAc,GAAG,sBAAsB,CAAC;IAUrD,IAAiB,QAAQ,CAUxB;IAVD,WAAiB,QAAQ;QACR,mBAAU,GAAG,UAAC,OAA2B;;YAClD,IAAM,OAAO,GAAsB,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,mCAAI,SAAS,CAAC;YACjE,OAAO;gBACH,OAAO,SAAA;gBACP,MAAM,EACF,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;oBACf,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAA,cAAc,CAAC,CAAC,CAAC,sBAAA,UAAU,CAAC;aAC5D,CAAC;QACN,CAAC,CAAC;IACN,CAAC,EAVgB,QAAQ,GAAR,8BAAQ,KAAR,8BAAQ,QAUxB;IAKY,8BAAQ,GAAG,UACpB,SAA0B,EAC1B,OAA2B,IACR,OAAA,sBAAA,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAA5B,CAA4B,CAAC;IAEvC,2BAAK,GACd,UAAC,OAA2B;QAC5B,OAAA,UAAC,SAA0B;YACvB,IAAM,WAAW,GAAa,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAM,UAAU,GAAoB;gBAChC,OAAO,EAAE,EAAE;aACd,CAAC;YACF,IAAM,SAAS,GAAG,IAAA,uCAAkB,EAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;YAEpE,kBACI,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;oBAC3B,IAAM,MAAM,GAAuB,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvD,IAAI,MAAM,KAAK,IAAI;wBACf,MAAM,IAAI,KAAK,CACX,oEAA6D,IAAI,CAAC,OAAO,EAAE,eAAK,CAAC,MAAG,CACvF,CAAC;oBACN,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAC,EACF,UAAU,YAAA,IACP,WAAW,EAChB;QACN,CAAC;IAnBD,CAmBC,CAAC;AACV,CAAC,EAtDgB,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAsDrC"}
1
+ {"version":3,"file":"ApplicationProgrammer.js","sourceRoot":"","sources":["../../src/programmers/ApplicationProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAKA,oEAAmE;AAEnE,IAAiB,qBAAqB,CAsDrC;AAtDD,WAAiB,qBAAqB;IACrB,gCAAU,GAAG,qBAAqB,CAAC;IACnC,oCAAc,GAAG,sBAAsB,CAAC;IAUrD,IAAiB,QAAQ,CAUxB;IAVD,WAAiB,QAAQ;QACR,mBAAU,GAAG,UAAC,OAA2B;;YAClD,IAAM,OAAO,GAAsB,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,mCAAI,SAAS,CAAC;YACjE,OAAO;gBACH,OAAO,SAAA;gBACP,MAAM,EACF,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM;oBACf,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAA,cAAc,CAAC,CAAC,CAAC,sBAAA,UAAU,CAAC;aAC5D,CAAC;QACN,CAAC,CAAC;IACN,CAAC,EAVgB,QAAQ,GAAR,8BAAQ,KAAR,8BAAQ,QAUxB;IAKY,8BAAQ,GAAG,UACpB,SAA0B,EAC1B,OAA2B,IACR,OAAA,sBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,EAAzB,CAAyB,CAAC;IAEpC,2BAAK,GACd,UAAC,OAA2B;QAC5B,OAAA,UAAC,SAA0B;YACvB,IAAM,WAAW,GAAa,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAM,UAAU,GAAoB;gBAChC,OAAO,EAAE,EAAE;aACd,CAAC;YACF,IAAM,SAAS,GAAG,IAAA,uCAAkB,EAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;YAEpE,kBACI,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,CAAC;oBAC3B,IAAM,MAAM,GAAuB,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvD,IAAI,MAAM,KAAK,IAAI;wBACf,MAAM,IAAI,KAAK,CACX,oEAA6D,IAAI,CAAC,OAAO,EAAE,eAAK,CAAC,MAAG,CACvF,CAAC;oBACN,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAC,EACF,UAAU,YAAA,IACP,WAAW,EAChB;QACN,CAAC;IAnBD,CAmBC,CAAC;AACV,CAAC,EAtDgB,qBAAqB,GAArB,6BAAqB,KAArB,6BAAqB,QAsDrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typia",
3
- "version": "3.8.0-dev.20230426-4",
3
+ "version": "3.8.1",
4
4
  "description": "Superfast runtime validators with only one line",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -67,7 +67,7 @@
67
67
  "bugs": {
68
68
  "url": "https://github.com/samchon/typia/issues"
69
69
  },
70
- "homepage": "https://github.com/samchon/typia#readme",
70
+ "homepage": "https://typia.io",
71
71
  "dependencies": {
72
72
  "commander": "^10.0.0",
73
73
  "comment-json": "^4.2.3",
package/src/Primitive.ts CHANGED
@@ -1,120 +1,120 @@
1
- /**
2
- * Primitive type.
3
- *
4
- * `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
5
- * primitive type.
6
- *
7
- * If the target argument is a built-in class who returns its origin primitive type through
8
- * the `valueOf()` method like the `String` or `Number`, its return type would be the
9
- * `string` or `number`.
10
- *
11
- * Otherwise, the target argument is a type of custom class, all of its custom method would
12
- * be erased and its prototype would be changed to the primitive `object`. Therefore, return
13
- * type of the TMP type finally be the primitive object.
14
- *
15
- * In addition, if the target argument is a type of custom class and it has a special
16
- * method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
17
- * but `Primitive<ReturnType<Instance.toJSON>>`.
18
- *
19
- * Before | After
20
- * ------------------------|----------------------------------------
21
- * `Boolean` | `boolean`
22
- * `Number` | `number`
23
- * `String` | `string`
24
- * `Class` | `object`
25
- * `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
26
- * Others | No change
27
- *
28
- * @template Instance Target argument type.
29
- * @author Jenogho Nam - https://github.com/samchon
30
- */
31
- export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
32
- ? T
33
- : _Primitive<T>;
34
-
35
- type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
36
-
37
- type _Primitive<Instance> = _ValueOf<Instance> extends object
38
- ? Instance extends object
39
- ? Instance extends _Native
40
- ? {}
41
- : Instance extends IJsonable<infer Raw>
42
- ? _ValueOf<Raw> extends object
43
- ? Raw extends object
44
- ? _PrimitiveObject<Raw> // object would be primitified
45
- : never // cannot be
46
- : _ValueOf<Raw> // atomic value
47
- : _PrimitiveObject<Instance> // object would be primitified
48
- : never // cannot be
49
- : _ValueOf<Instance>;
50
-
51
- type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
52
- ? _IsTuple<Instance> extends true
53
- ? _PrimitiveSpread<Instance>
54
- : _Primitive<T>[]
55
- : {
56
- [P in keyof Instance]: Instance[P] extends Function
57
- ? never
58
- : _Primitive<Instance[P]>;
59
- };
60
-
61
- type _PrimitiveSpread<T extends any[]> = T extends [infer F, ...infer Rest]
62
- ? [_Primitive<F>, ..._PrimitiveSpread<Rest>]
63
- : [];
64
-
65
- type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
66
- ? boolean
67
- : _IsValueOf<Instance, Number> extends true
68
- ? number
69
- : _IsValueOf<Instance, String> extends true
70
- ? string
71
- : Instance;
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
-
103
- type _IsValueOf<
104
- Instance,
105
- Object extends IValueOf<any>,
106
- > = Instance extends Object
107
- ? Object extends IValueOf<infer Primitive>
108
- ? Instance extends Primitive
109
- ? false
110
- : true // not Primitive, but Object
111
- : false // cannot be
112
- : false;
113
-
114
- interface IValueOf<T> {
115
- valueOf(): T;
116
- }
117
-
118
- interface IJsonable<T> {
119
- toJSON(): T;
120
- }
1
+ /**
2
+ * Primitive type.
3
+ *
4
+ * `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
5
+ * primitive type.
6
+ *
7
+ * If the target argument is a built-in class who returns its origin primitive type through
8
+ * the `valueOf()` method like the `String` or `Number`, its return type would be the
9
+ * `string` or `number`.
10
+ *
11
+ * Otherwise, the target argument is a type of custom class, all of its custom method would
12
+ * be erased and its prototype would be changed to the primitive `object`. Therefore, return
13
+ * type of the TMP type finally be the primitive object.
14
+ *
15
+ * In addition, if the target argument is a type of custom class and it has a special
16
+ * method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
17
+ * but `Primitive<ReturnType<Instance.toJSON>>`.
18
+ *
19
+ * Before | After
20
+ * ------------------------|----------------------------------------
21
+ * `Boolean` | `boolean`
22
+ * `Number` | `number`
23
+ * `String` | `string`
24
+ * `Class` | `object`
25
+ * `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
26
+ * Others | No change
27
+ *
28
+ * @template Instance Target argument type.
29
+ * @author Jenogho Nam - https://github.com/samchon
30
+ */
31
+ export type Primitive<T> = _Equal<T, _Primitive<T>> extends true
32
+ ? T
33
+ : _Primitive<T>;
34
+
35
+ type _Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
36
+
37
+ type _Primitive<Instance> = _ValueOf<Instance> extends object
38
+ ? Instance extends object
39
+ ? Instance extends _Native
40
+ ? {}
41
+ : Instance extends IJsonable<infer Raw>
42
+ ? _ValueOf<Raw> extends object
43
+ ? Raw extends object
44
+ ? _PrimitiveObject<Raw> // object would be primitified
45
+ : never // cannot be
46
+ : _ValueOf<Raw> // atomic value
47
+ : _PrimitiveObject<Instance> // object would be primitified
48
+ : never // cannot be
49
+ : _ValueOf<Instance>;
50
+
51
+ type _PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
52
+ ? _IsTuple<Instance> extends true
53
+ ? _PrimitiveSpread<Instance>
54
+ : _Primitive<T>[]
55
+ : {
56
+ [P in keyof Instance]: Instance[P] extends Function
57
+ ? never
58
+ : _Primitive<Instance[P]>;
59
+ };
60
+
61
+ type _PrimitiveSpread<T extends any[]> = T extends [infer F, ...infer Rest]
62
+ ? [_Primitive<F>, ..._PrimitiveSpread<Rest>]
63
+ : [];
64
+
65
+ type _ValueOf<Instance> = _IsValueOf<Instance, Boolean> extends true
66
+ ? boolean
67
+ : _IsValueOf<Instance, Number> extends true
68
+ ? number
69
+ : _IsValueOf<Instance, String> extends true
70
+ ? string
71
+ : Instance;
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
+
103
+ type _IsValueOf<
104
+ Instance,
105
+ Object extends IValueOf<any>,
106
+ > = Instance extends Object
107
+ ? Object extends IValueOf<infer Primitive>
108
+ ? Instance extends Primitive
109
+ ? false
110
+ : true // not Primitive, but Object
111
+ : false // cannot be
112
+ : false;
113
+
114
+ interface IValueOf<T> {
115
+ valueOf(): T;
116
+ }
117
+
118
+ interface IJsonable<T> {
119
+ toJSON(): T;
120
+ }
@@ -1,85 +1,85 @@
1
- import fs from "fs";
2
-
3
- import { TypiaProgrammer } from "../programmers/TypiaProgrammer";
4
-
5
- import { ArgumentParser } from "./setup/ArgumentParser";
6
- import { PackageManager } from "./setup/PackageManager";
7
-
8
- export namespace TypiaGenerateWizard {
9
- export async function generate(): Promise<void> {
10
- console.log("----------------------------------------");
11
- console.log(" Typia Generate Wizard");
12
- console.log("----------------------------------------");
13
-
14
- // LOAD PACKAGE.JSON INFO
15
- const pack: PackageManager = await PackageManager.mount();
16
- const options: IArguments = await ArgumentParser.parse(pack)(inquiry);
17
- await TypiaProgrammer.build(options);
18
- }
19
-
20
- const inquiry: ArgumentParser.Inquiry<IArguments> = async (
21
- _pack,
22
- command,
23
- prompt,
24
- action,
25
- ) => {
26
- // PREPARE ASSETS
27
- command.option("--input [path]", "input directory");
28
- command.option("--output [directory]", "output directory");
29
- command.option("--project [project]", "tsconfig.json file location");
30
-
31
- const questioned = { value: false };
32
-
33
- const input = (name: string) => async (message: string) => {
34
- const result = await prompt()({
35
- type: "input",
36
- name,
37
- message,
38
- default: "",
39
- });
40
- return result[name] as string;
41
- };
42
- const select =
43
- (name: string) =>
44
- (message: string) =>
45
- async <Choice extends string>(
46
- choices: Choice[],
47
- ): Promise<Choice> => {
48
- questioned.value = true;
49
- return (
50
- await prompt()({
51
- type: "list",
52
- name: name,
53
- message: message,
54
- choices: choices,
55
- })
56
- )[name];
57
- };
58
- const configure = async () => {
59
- const files: string[] = await (
60
- await fs.promises.readdir(process.cwd())
61
- ).filter(
62
- (str) =>
63
- str.substring(0, 8) === "tsconfig" &&
64
- str.substring(str.length - 5) === ".json",
65
- );
66
- if (files.length === 0)
67
- throw new Error(`Unable to find "tsconfig.json" file.`);
68
- else if (files.length === 1) return files[0];
69
- return select("tsconfig")("TS Config File")(files);
70
- };
71
-
72
- return action(async (options) => {
73
- options.input ??= await input("input")("input directory");
74
- options.output ??= await input("output")("output directory");
75
- options.project ??= await configure();
76
- return options as IArguments;
77
- });
78
- };
79
-
80
- export interface IArguments {
81
- input: string;
82
- output: string;
83
- project: string;
84
- }
85
- }
1
+ import fs from "fs";
2
+
3
+ import { TypiaProgrammer } from "../programmers/TypiaProgrammer";
4
+
5
+ import { ArgumentParser } from "./setup/ArgumentParser";
6
+ import { PackageManager } from "./setup/PackageManager";
7
+
8
+ export namespace TypiaGenerateWizard {
9
+ export async function generate(): Promise<void> {
10
+ console.log("----------------------------------------");
11
+ console.log(" Typia Generate Wizard");
12
+ console.log("----------------------------------------");
13
+
14
+ // LOAD PACKAGE.JSON INFO
15
+ const pack: PackageManager = await PackageManager.mount();
16
+ const options: IArguments = await ArgumentParser.parse(pack)(inquiry);
17
+ await TypiaProgrammer.build(options);
18
+ }
19
+
20
+ const inquiry: ArgumentParser.Inquiry<IArguments> = async (
21
+ _pack,
22
+ command,
23
+ prompt,
24
+ action,
25
+ ) => {
26
+ // PREPARE ASSETS
27
+ command.option("--input [path]", "input directory");
28
+ command.option("--output [directory]", "output directory");
29
+ command.option("--project [project]", "tsconfig.json file location");
30
+
31
+ const questioned = { value: false };
32
+
33
+ const input = (name: string) => async (message: string) => {
34
+ const result = await prompt()({
35
+ type: "input",
36
+ name,
37
+ message,
38
+ default: "",
39
+ });
40
+ return result[name] as string;
41
+ };
42
+ const select =
43
+ (name: string) =>
44
+ (message: string) =>
45
+ async <Choice extends string>(
46
+ choices: Choice[],
47
+ ): Promise<Choice> => {
48
+ questioned.value = true;
49
+ return (
50
+ await prompt()({
51
+ type: "list",
52
+ name: name,
53
+ message: message,
54
+ choices: choices,
55
+ })
56
+ )[name];
57
+ };
58
+ const configure = async () => {
59
+ const files: string[] = await (
60
+ await fs.promises.readdir(process.cwd())
61
+ ).filter(
62
+ (str) =>
63
+ str.substring(0, 8) === "tsconfig" &&
64
+ str.substring(str.length - 5) === ".json",
65
+ );
66
+ if (files.length === 0)
67
+ throw new Error(`Unable to find "tsconfig.json" file.`);
68
+ else if (files.length === 1) return files[0];
69
+ return select("tsconfig")("TS Config File")(files);
70
+ };
71
+
72
+ return action(async (options) => {
73
+ options.input ??= await input("input")("input directory");
74
+ options.output ??= await input("output")("output directory");
75
+ options.project ??= await configure();
76
+ return options as IArguments;
77
+ });
78
+ };
79
+
80
+ export interface IArguments {
81
+ input: string;
82
+ output: string;
83
+ project: string;
84
+ }
85
+ }