typia 3.7.5-dev.20230413 → 3.7.6

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 (231) hide show
  1. package/README.md +35 -228
  2. package/lib/executable/TypiaSetupWizard.d.ts +1 -0
  3. package/lib/executable/TypiaSetupWizard.js +62 -30
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/setup/PackageManager.d.ts +1 -1
  6. package/lib/executable/typia.d.ts +1 -1
  7. package/lib/executable/typia.js +1 -1
  8. package/lib/executable/typia.js.map +1 -1
  9. package/lib/factories/IdentifierFactory.d.ts +1 -1
  10. package/lib/factories/IdentifierFactory.js +1 -1
  11. package/lib/factories/IdentifierFactory.js.map +1 -1
  12. package/lib/factories/TypiaFileFactory.js +9 -4
  13. package/lib/factories/TypiaFileFactory.js.map +1 -1
  14. package/lib/programmers/internal/check_string_tags.js +2 -2
  15. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  16. package/lib/programmers/internal/check_template.js +1 -1
  17. package/lib/programmers/internal/check_template.js.map +1 -1
  18. package/package.json +11 -12
  19. package/src/CustomValidatorMap.ts +126 -126
  20. package/src/IRandomGenerator.ts +33 -33
  21. package/src/IValidation.ts +21 -21
  22. package/src/Primitive.ts +104 -104
  23. package/src/TypeGuardError.ts +36 -36
  24. package/src/executable/TypiaGenerateWizard.ts +85 -85
  25. package/src/executable/TypiaSetupWizard.ts +47 -14
  26. package/src/executable/setup/ArgumentParser.ts +45 -45
  27. package/src/executable/setup/CommandExecutor.ts +8 -8
  28. package/src/executable/setup/FileRetriever.ts +22 -22
  29. package/src/executable/setup/PackageManager.ts +1 -1
  30. package/src/executable/setup/PluginConfigurator.ts +59 -59
  31. package/src/executable/typia.ts +54 -53
  32. package/src/factories/CommentFactory.ts +10 -10
  33. package/src/factories/ExpressionFactory.ts +77 -77
  34. package/src/factories/IdentifierFactory.ts +81 -59
  35. package/src/factories/LiteralFactory.ts +44 -44
  36. package/src/factories/MetadataCollection.ts +122 -122
  37. package/src/factories/MetadataFactory.ts +51 -51
  38. package/src/factories/MetadataTagFactory.ts +302 -302
  39. package/src/factories/StatementFactory.ts +60 -60
  40. package/src/factories/TemplateFactory.ts +56 -56
  41. package/src/factories/TypeFactory.ts +129 -129
  42. package/src/factories/TypiaFileFactory.ts +12 -3
  43. package/src/factories/ValueFactory.ts +12 -12
  44. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  45. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  46. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  47. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  48. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  49. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  50. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  51. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  52. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  53. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  54. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  55. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  56. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  57. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  58. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  59. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  60. package/src/functional/$any.ts +3 -3
  61. package/src/functional/$dictionary.ts +20 -20
  62. package/src/functional/$every.ts +11 -11
  63. package/src/functional/$guard.ts +35 -35
  64. package/src/functional/$is_between.ts +7 -7
  65. package/src/functional/$is_custom.ts +14 -14
  66. package/src/functional/$is_date.ts +4 -4
  67. package/src/functional/$is_datetime.ts +3 -3
  68. package/src/functional/$is_email.ts +5 -5
  69. package/src/functional/$is_ipv4.ts +5 -5
  70. package/src/functional/$is_ipv6.ts +5 -5
  71. package/src/functional/$is_url.ts +5 -5
  72. package/src/functional/$is_uuid.ts +5 -5
  73. package/src/functional/$join.ts +50 -50
  74. package/src/functional/$number.ts +12 -12
  75. package/src/functional/$report.ts +15 -15
  76. package/src/functional/$rest.ts +3 -3
  77. package/src/functional/$string.ts +37 -37
  78. package/src/functional/$tail.ts +6 -6
  79. package/src/functional/Namespace.ts +127 -127
  80. package/src/index.ts +4 -4
  81. package/src/metadata/ICommentTag.ts +4 -4
  82. package/src/metadata/IJsDocTagInfo.ts +10 -10
  83. package/src/metadata/IMetadata.ts +25 -25
  84. package/src/metadata/IMetadataApplication.ts +7 -7
  85. package/src/metadata/IMetadataConstant.ts +16 -16
  86. package/src/metadata/IMetadataEntry.ts +6 -6
  87. package/src/metadata/IMetadataObject.ts +29 -29
  88. package/src/metadata/IMetadataProperty.ts +11 -11
  89. package/src/metadata/IMetadataTag.ts +105 -105
  90. package/src/metadata/Metadata.ts +534 -534
  91. package/src/metadata/MetadataConstant.ts +3 -3
  92. package/src/metadata/MetadataObject.ts +131 -131
  93. package/src/metadata/MetadataProperty.ts +64 -64
  94. package/src/module.ts +2043 -2043
  95. package/src/programmers/ApplicationProgrammer.ts +55 -55
  96. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  97. package/src/programmers/AssertParseProgrammer.ts +65 -65
  98. package/src/programmers/AssertProgrammer.ts +284 -284
  99. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  100. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  101. package/src/programmers/CheckerProgrammer.ts +922 -922
  102. package/src/programmers/CloneProgrammer.ts +388 -388
  103. package/src/programmers/FeatureProgrammer.ts +512 -512
  104. package/src/programmers/IsCloneProgrammer.ts +80 -80
  105. package/src/programmers/IsParseProgrammer.ts +74 -74
  106. package/src/programmers/IsProgrammer.ts +206 -206
  107. package/src/programmers/IsPruneProgrammer.ts +75 -75
  108. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  109. package/src/programmers/LiteralsProgrammer.ts +65 -65
  110. package/src/programmers/PruneProgrammer.ts +343 -343
  111. package/src/programmers/RandomProgrammer.ts +413 -413
  112. package/src/programmers/StringifyProgrammer.ts +801 -801
  113. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  114. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  115. package/src/programmers/ValidateProgrammer.ts +317 -317
  116. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  117. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  118. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  119. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  120. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  121. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  122. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  123. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  124. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  125. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  126. package/src/programmers/helpers/RandomRanger.ts +216 -216
  127. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  128. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  129. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  130. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  131. package/src/programmers/internal/application_array.ts +37 -37
  132. package/src/programmers/internal/application_boolean.ts +17 -17
  133. package/src/programmers/internal/application_constant.ts +29 -29
  134. package/src/programmers/internal/application_default.ts +17 -17
  135. package/src/programmers/internal/application_default_string.ts +32 -32
  136. package/src/programmers/internal/application_native.ts +32 -32
  137. package/src/programmers/internal/application_number.ts +73 -73
  138. package/src/programmers/internal/application_object.ts +153 -153
  139. package/src/programmers/internal/application_schema.ts +184 -184
  140. package/src/programmers/internal/application_string.ts +45 -45
  141. package/src/programmers/internal/application_templates.ts +27 -27
  142. package/src/programmers/internal/application_tuple.ts +29 -29
  143. package/src/programmers/internal/check_array.ts +30 -30
  144. package/src/programmers/internal/check_array_length.ts +35 -35
  145. package/src/programmers/internal/check_bigint.ts +82 -82
  146. package/src/programmers/internal/check_custom.ts +33 -33
  147. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  148. package/src/programmers/internal/check_everything.ts +28 -28
  149. package/src/programmers/internal/check_native.ts +21 -21
  150. package/src/programmers/internal/check_number.ts +177 -177
  151. package/src/programmers/internal/check_object.ts +55 -55
  152. package/src/programmers/internal/check_string.ts +25 -25
  153. package/src/programmers/internal/check_string_tags.ts +9 -15
  154. package/src/programmers/internal/check_template.ts +6 -9
  155. package/src/programmers/internal/check_union_array_like.ts +272 -272
  156. package/src/programmers/internal/check_union_tuple.ts +35 -35
  157. package/src/programmers/internal/decode_union_object.ts +73 -73
  158. package/src/programmers/internal/feature_object_entries.ts +63 -63
  159. package/src/programmers/internal/get_comment_tags.ts +23 -23
  160. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  161. package/src/programmers/internal/prune_object_properties.ts +60 -60
  162. package/src/programmers/internal/random_custom.ts +30 -30
  163. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  164. package/src/programmers/internal/stringify_native.ts +8 -8
  165. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  166. package/src/programmers/internal/template_to_pattern.ts +15 -15
  167. package/src/schemas/IJsonApplication.ts +9 -9
  168. package/src/schemas/IJsonComponents.ts +26 -26
  169. package/src/schemas/IJsonSchema.ts +121 -121
  170. package/src/transform.ts +21 -21
  171. package/src/transformers/CallExpressionTransformer.ts +174 -174
  172. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  173. package/src/transformers/FileTransformer.ts +49 -49
  174. package/src/transformers/IProject.ts +11 -11
  175. package/src/transformers/ITransformOptions.ts +62 -62
  176. package/src/transformers/ImportTransformer.ts +66 -66
  177. package/src/transformers/NodeTransformer.ts +19 -19
  178. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  179. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  180. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  181. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  182. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  183. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  185. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  187. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  189. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  193. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  194. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  195. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  197. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  199. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  200. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  201. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  202. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  203. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  204. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  205. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  206. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  207. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  208. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  209. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  210. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  211. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  212. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  213. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  214. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  215. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  216. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  217. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  218. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  219. package/src/transformers/internal/GenericTransformer.ts +99 -99
  220. package/src/typings/Atomic.ts +17 -17
  221. package/src/typings/ClassProperties.ts +5 -5
  222. package/src/typings/Customizable.ts +5 -5
  223. package/src/typings/OmitNever.ts +3 -3
  224. package/src/typings/SpecialFields.ts +3 -3
  225. package/src/typings/Writable.ts +11 -11
  226. package/src/utils/ArrayUtil.ts +49 -49
  227. package/src/utils/Escaper.ts +50 -50
  228. package/src/utils/MapUtil.ts +14 -14
  229. package/src/utils/PatternUtil.ts +30 -30
  230. package/src/utils/RandomGenerator.ts +96 -96
  231. package/src/utils/Singleton.ts +17 -17
@@ -1,60 +1,60 @@
1
- import ts from "typescript";
2
-
3
- export namespace StatementFactory {
4
- export function constant(name: string, initializer?: ts.Expression) {
5
- return ts.factory.createVariableStatement(
6
- undefined,
7
- ts.factory.createVariableDeclarationList(
8
- [
9
- ts.factory.createVariableDeclaration(
10
- name,
11
- undefined,
12
- undefined,
13
- initializer,
14
- ),
15
- ],
16
- ts.NodeFlags.Const,
17
- ),
18
- );
19
- }
20
-
21
- export function transpile(script: string) {
22
- return ts.factory.createExpressionStatement(
23
- ts.factory.createIdentifier(ts.transpile(script)),
24
- );
25
- }
26
-
27
- // export function require(variable: string, location: string) {
28
- // return ts.factory.createImportDeclaration(
29
- // undefined,
30
- // undefined,
31
- // ts.factory.createImportClause(
32
- // false,
33
- // undefined,
34
- // ts.factory.createNamespaceImport(
35
- // ts.factory.createIdentifier(variable),
36
- // ),
37
- // ),
38
- // ts.factory.createStringLiteral(location),
39
- // );
40
- // }
41
-
42
- // export function importModulo(variable: string, location: string) {
43
- // return ts.factory.createImportDeclaration(
44
- // undefined,
45
- // undefined,
46
- // ts.factory.createImportClause(
47
- // false,
48
- // undefined,
49
- // ts.factory.createNamedImports([
50
- // ts.factory.createImportSpecifier(
51
- // false,
52
- // undefined,
53
- // ts.factory.createIdentifier(variable),
54
- // ),
55
- // ]),
56
- // ),
57
- // ts.factory.createStringLiteral(location),
58
- // );
59
- // }
60
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace StatementFactory {
4
+ export function constant(name: string, initializer?: ts.Expression) {
5
+ return ts.factory.createVariableStatement(
6
+ undefined,
7
+ ts.factory.createVariableDeclarationList(
8
+ [
9
+ ts.factory.createVariableDeclaration(
10
+ name,
11
+ undefined,
12
+ undefined,
13
+ initializer,
14
+ ),
15
+ ],
16
+ ts.NodeFlags.Const,
17
+ ),
18
+ );
19
+ }
20
+
21
+ export function transpile(script: string) {
22
+ return ts.factory.createExpressionStatement(
23
+ ts.factory.createIdentifier(ts.transpile(script)),
24
+ );
25
+ }
26
+
27
+ // export function require(variable: string, location: string) {
28
+ // return ts.factory.createImportDeclaration(
29
+ // undefined,
30
+ // undefined,
31
+ // ts.factory.createImportClause(
32
+ // false,
33
+ // undefined,
34
+ // ts.factory.createNamespaceImport(
35
+ // ts.factory.createIdentifier(variable),
36
+ // ),
37
+ // ),
38
+ // ts.factory.createStringLiteral(location),
39
+ // );
40
+ // }
41
+
42
+ // export function importModulo(variable: string, location: string) {
43
+ // return ts.factory.createImportDeclaration(
44
+ // undefined,
45
+ // undefined,
46
+ // ts.factory.createImportClause(
47
+ // false,
48
+ // undefined,
49
+ // ts.factory.createNamedImports([
50
+ // ts.factory.createImportSpecifier(
51
+ // false,
52
+ // undefined,
53
+ // ts.factory.createIdentifier(variable),
54
+ // ),
55
+ // ]),
56
+ // ),
57
+ // ts.factory.createStringLiteral(location),
58
+ // );
59
+ // }
60
+ }
@@ -1,56 +1,56 @@
1
- import ts from "typescript";
2
-
3
- export namespace TemplateFactory {
4
- export function generate(expressions: ts.Expression[]): ts.Expression {
5
- if (expressions.every((exp) => ts.isStringLiteral(exp)))
6
- return ts.factory.createStringLiteral(
7
- (expressions as ts.StringLiteral[])
8
- .map((str) => str.text)
9
- .join(""),
10
- );
11
-
12
- const it: IIerator = {
13
- value: "",
14
- index: 0,
15
- };
16
- gather(expressions, it);
17
-
18
- const head: ts.TemplateHead = ts.factory.createTemplateHead(it.value);
19
- const spans: ts.TemplateSpan[] = [];
20
-
21
- while (true) {
22
- const elem: ts.Expression = expressions[it.index++]!;
23
- gather(expressions, it);
24
-
25
- const broken: boolean = it.index === expressions.length;
26
- spans.push(
27
- ts.factory.createTemplateSpan(
28
- elem,
29
- broken
30
- ? ts.factory.createTemplateTail(it.value)
31
- : ts.factory.createTemplateMiddle(it.value),
32
- ),
33
- );
34
- if (broken === true) break;
35
- }
36
- return ts.factory.createTemplateExpression(head, spans);
37
- }
38
-
39
- function gather(expressions: ts.Expression[], it: IIerator): void {
40
- const found: number = expressions.findIndex(
41
- (elem, index) => index >= it.index && !ts.isStringLiteral(elem),
42
- );
43
-
44
- const last: number = found !== -1 ? found : expressions.length;
45
- it.value = expressions
46
- .slice(it.index, last)
47
- .map((elem) => (elem as ts.StringLiteral).text)
48
- .reduce((x, y) => x + y, "");
49
- it.index = last;
50
- }
51
-
52
- interface IIerator {
53
- value: string;
54
- index: number;
55
- }
56
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace TemplateFactory {
4
+ export function generate(expressions: ts.Expression[]): ts.Expression {
5
+ if (expressions.every((exp) => ts.isStringLiteral(exp)))
6
+ return ts.factory.createStringLiteral(
7
+ (expressions as ts.StringLiteral[])
8
+ .map((str) => str.text)
9
+ .join(""),
10
+ );
11
+
12
+ const it: IIerator = {
13
+ value: "",
14
+ index: 0,
15
+ };
16
+ gather(expressions, it);
17
+
18
+ const head: ts.TemplateHead = ts.factory.createTemplateHead(it.value);
19
+ const spans: ts.TemplateSpan[] = [];
20
+
21
+ while (true) {
22
+ const elem: ts.Expression = expressions[it.index++]!;
23
+ gather(expressions, it);
24
+
25
+ const broken: boolean = it.index === expressions.length;
26
+ spans.push(
27
+ ts.factory.createTemplateSpan(
28
+ elem,
29
+ broken
30
+ ? ts.factory.createTemplateTail(it.value)
31
+ : ts.factory.createTemplateMiddle(it.value),
32
+ ),
33
+ );
34
+ if (broken === true) break;
35
+ }
36
+ return ts.factory.createTemplateExpression(head, spans);
37
+ }
38
+
39
+ function gather(expressions: ts.Expression[], it: IIerator): void {
40
+ const found: number = expressions.findIndex(
41
+ (elem, index) => index >= it.index && !ts.isStringLiteral(elem),
42
+ );
43
+
44
+ const last: number = found !== -1 ? found : expressions.length;
45
+ it.value = expressions
46
+ .slice(it.index, last)
47
+ .map((elem) => (elem as ts.StringLiteral).text)
48
+ .reduce((x, y) => x + y, "");
49
+ it.index = last;
50
+ }
51
+
52
+ interface IIerator {
53
+ value: string;
54
+ index: number;
55
+ }
56
+ }
@@ -1,129 +1,129 @@
1
- import ts from "typescript";
2
-
3
- export namespace TypeFactory {
4
- export function resolve(
5
- checker: ts.TypeChecker,
6
- type: ts.Type,
7
- ): ts.Type | null {
8
- return getReturnType(checker, type, "toJSON");
9
- }
10
-
11
- export function isFunction(type: ts.Type): boolean {
12
- return getFunction(type) !== null;
13
- }
14
-
15
- function getFunction(type: ts.Type) {
16
- const node = type.symbol?.declarations?.[0];
17
- if (node === undefined) return null;
18
-
19
- return ts.isFunctionLike(node)
20
- ? node
21
- : ts.isPropertyAssignment(node) || ts.isPropertyDeclaration(node)
22
- ? ts.isFunctionLike(node.initializer)
23
- ? node.initializer
24
- : null
25
- : null;
26
- }
27
-
28
- export function getReturnType(
29
- checker: ts.TypeChecker,
30
- type: ts.Type,
31
- name: string,
32
- ): ts.Type | null {
33
- // FIND TO-JSON METHOD
34
- const symbol: ts.Symbol | undefined = type.getProperty(name);
35
- if (!symbol) return null;
36
- else if (!symbol.valueDeclaration) return null;
37
-
38
- // GET FUNCTION DECLARATION
39
- const functor: ts.Type = checker.getTypeOfSymbolAtLocation(
40
- symbol,
41
- symbol.valueDeclaration,
42
- );
43
-
44
- // RETURNS THE RETURN-TYPE
45
- const signature: ts.Signature | undefined = checker.getSignaturesOfType(
46
- functor,
47
- ts.SignatureKind.Call,
48
- )[0];
49
- return signature ? signature.getReturnType() : null;
50
- }
51
-
52
- export function getFullName(
53
- checker: ts.TypeChecker,
54
- type: ts.Type,
55
- symbol?: ts.Symbol,
56
- ): string {
57
- // PRIMITIVE
58
- symbol ??= type.aliasSymbol ?? type.getSymbol();
59
- if (symbol === undefined) return checker.typeToString(type);
60
-
61
- // UNION OR INTERSECT
62
- if (type.aliasSymbol === undefined && type.isUnionOrIntersection()) {
63
- const joiner: string = type.isIntersection() ? " & " : " | ";
64
- return type.types
65
- .map((child) => getFullName(checker, child))
66
- .join(joiner);
67
- }
68
-
69
- //----
70
- // SPECIALIZATION
71
- //----
72
- const name: string = get_name(symbol);
73
-
74
- // CHECK GENERIC
75
- const generic: readonly ts.Type[] = type.aliasSymbol
76
- ? type.aliasTypeArguments || []
77
- : checker.getTypeArguments(type as ts.TypeReference);
78
- return generic.length
79
- ? name === "Promise"
80
- ? getFullName(checker, generic[0]!)
81
- : `${name}<${generic
82
- .map((child) => getFullName(checker, child))
83
- .join(", ")}>`
84
- : name;
85
- }
86
-
87
- function explore_name(name: string, decl: ts.Node): string {
88
- return ts.isModuleBlock(decl)
89
- ? explore_name(
90
- `${decl.parent.name.getFullText().trim()}.${name}`,
91
- decl.parent.parent,
92
- )
93
- : name;
94
- }
95
-
96
- function get_name(symbol: ts.Symbol): string {
97
- const parent = symbol.getDeclarations()?.[0]?.parent;
98
- return parent
99
- ? explore_name(symbol.escapedName.toString(), parent)
100
- : "__type";
101
- }
102
-
103
- export const keyword = (
104
- type:
105
- | "void"
106
- | "any"
107
- | "unknown"
108
- | "boolean"
109
- | "number"
110
- | "bigint"
111
- | "string",
112
- ) => {
113
- return ts.factory.createKeywordTypeNode(
114
- type === "void"
115
- ? ts.SyntaxKind.VoidKeyword
116
- : type === "any"
117
- ? ts.SyntaxKind.AnyKeyword
118
- : type === "unknown"
119
- ? ts.SyntaxKind.UnknownKeyword
120
- : type === "boolean"
121
- ? ts.SyntaxKind.BooleanKeyword
122
- : type === "number"
123
- ? ts.SyntaxKind.NumberKeyword
124
- : type === "bigint"
125
- ? ts.SyntaxKind.BigIntKeyword
126
- : ts.SyntaxKind.StringKeyword,
127
- );
128
- };
129
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace TypeFactory {
4
+ export function resolve(
5
+ checker: ts.TypeChecker,
6
+ type: ts.Type,
7
+ ): ts.Type | null {
8
+ return getReturnType(checker, type, "toJSON");
9
+ }
10
+
11
+ export function isFunction(type: ts.Type): boolean {
12
+ return getFunction(type) !== null;
13
+ }
14
+
15
+ function getFunction(type: ts.Type) {
16
+ const node = type.symbol?.declarations?.[0];
17
+ if (node === undefined) return null;
18
+
19
+ return ts.isFunctionLike(node)
20
+ ? node
21
+ : ts.isPropertyAssignment(node) || ts.isPropertyDeclaration(node)
22
+ ? ts.isFunctionLike(node.initializer)
23
+ ? node.initializer
24
+ : null
25
+ : null;
26
+ }
27
+
28
+ export function getReturnType(
29
+ checker: ts.TypeChecker,
30
+ type: ts.Type,
31
+ name: string,
32
+ ): ts.Type | null {
33
+ // FIND TO-JSON METHOD
34
+ const symbol: ts.Symbol | undefined = type.getProperty(name);
35
+ if (!symbol) return null;
36
+ else if (!symbol.valueDeclaration) return null;
37
+
38
+ // GET FUNCTION DECLARATION
39
+ const functor: ts.Type = checker.getTypeOfSymbolAtLocation(
40
+ symbol,
41
+ symbol.valueDeclaration,
42
+ );
43
+
44
+ // RETURNS THE RETURN-TYPE
45
+ const signature: ts.Signature | undefined = checker.getSignaturesOfType(
46
+ functor,
47
+ ts.SignatureKind.Call,
48
+ )[0];
49
+ return signature ? signature.getReturnType() : null;
50
+ }
51
+
52
+ export function getFullName(
53
+ checker: ts.TypeChecker,
54
+ type: ts.Type,
55
+ symbol?: ts.Symbol,
56
+ ): string {
57
+ // PRIMITIVE
58
+ symbol ??= type.aliasSymbol ?? type.getSymbol();
59
+ if (symbol === undefined) return checker.typeToString(type);
60
+
61
+ // UNION OR INTERSECT
62
+ if (type.aliasSymbol === undefined && type.isUnionOrIntersection()) {
63
+ const joiner: string = type.isIntersection() ? " & " : " | ";
64
+ return type.types
65
+ .map((child) => getFullName(checker, child))
66
+ .join(joiner);
67
+ }
68
+
69
+ //----
70
+ // SPECIALIZATION
71
+ //----
72
+ const name: string = get_name(symbol);
73
+
74
+ // CHECK GENERIC
75
+ const generic: readonly ts.Type[] = type.aliasSymbol
76
+ ? type.aliasTypeArguments || []
77
+ : checker.getTypeArguments(type as ts.TypeReference);
78
+ return generic.length
79
+ ? name === "Promise"
80
+ ? getFullName(checker, generic[0]!)
81
+ : `${name}<${generic
82
+ .map((child) => getFullName(checker, child))
83
+ .join(", ")}>`
84
+ : name;
85
+ }
86
+
87
+ function explore_name(name: string, decl: ts.Node): string {
88
+ return ts.isModuleBlock(decl)
89
+ ? explore_name(
90
+ `${decl.parent.name.getFullText().trim()}.${name}`,
91
+ decl.parent.parent,
92
+ )
93
+ : name;
94
+ }
95
+
96
+ function get_name(symbol: ts.Symbol): string {
97
+ const parent = symbol.getDeclarations()?.[0]?.parent;
98
+ return parent
99
+ ? explore_name(symbol.escapedName.toString(), parent)
100
+ : "__type";
101
+ }
102
+
103
+ export const keyword = (
104
+ type:
105
+ | "void"
106
+ | "any"
107
+ | "unknown"
108
+ | "boolean"
109
+ | "number"
110
+ | "bigint"
111
+ | "string",
112
+ ) => {
113
+ return ts.factory.createKeywordTypeNode(
114
+ type === "void"
115
+ ? ts.SyntaxKind.VoidKeyword
116
+ : type === "any"
117
+ ? ts.SyntaxKind.AnyKeyword
118
+ : type === "unknown"
119
+ ? ts.SyntaxKind.UnknownKeyword
120
+ : type === "boolean"
121
+ ? ts.SyntaxKind.BooleanKeyword
122
+ : type === "number"
123
+ ? ts.SyntaxKind.NumberKeyword
124
+ : type === "bigint"
125
+ ? ts.SyntaxKind.BigIntKeyword
126
+ : ts.SyntaxKind.StringKeyword,
127
+ );
128
+ };
129
+ }
@@ -35,7 +35,16 @@ export namespace TypiaFileFactory {
35
35
  }
36
36
 
37
37
  // CREATE PROGRAM
38
- const { config } = ts.readConfigFile(props.project, ts.sys.readFile);
38
+ const { options: compilerOptions } = ts.parseJsonConfigFileContent(
39
+ ts.readConfigFile(props.project, ts.sys.readFile).config,
40
+ {
41
+ fileExists: ts.sys.fileExists,
42
+ readFile: ts.sys.readFile,
43
+ readDirectory: ts.sys.readDirectory,
44
+ useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
45
+ },
46
+ path.dirname(props.project),
47
+ );
39
48
 
40
49
  const program: ts.Program = ts.createProgram(
41
50
  await (async () => {
@@ -43,7 +52,7 @@ export namespace TypiaFileFactory {
43
52
  await gather(props)(container)(props.input)(props.output);
44
53
  return container;
45
54
  })(),
46
- config.compilerOptions,
55
+ compilerOptions,
47
56
  );
48
57
 
49
58
  // DO TRANSFORM
@@ -59,7 +68,7 @@ export namespace TypiaFileFactory {
59
68
  ImportTransformer.transform(props.input)(props.output),
60
69
  transform(
61
70
  program,
62
- (config.compilerOptions.plugins ?? []).find(
71
+ ((compilerOptions.plugins as any[]) ?? []).find(
63
72
  (p: any) =>
64
73
  p.transform === "typia/lib/transform" ||
65
74
  p.transform === "../src/transform.ts",
@@ -1,12 +1,12 @@
1
- import ts from "typescript";
2
-
3
- export namespace ValueFactory {
4
- export const NULL = () => ts.factory.createNull();
5
- export const UNDEFINED = () => ts.factory.createIdentifier("undefined");
6
- export const BOOLEAN = (value: boolean) =>
7
- value ? ts.factory.createTrue() : ts.factory.createFalse();
8
- export const INPUT = (str: string = "input") =>
9
- ts.factory.createIdentifier(str);
10
- export const TYPEOF = (input: ts.Expression) =>
11
- ts.factory.createTypeOfExpression(input);
12
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace ValueFactory {
4
+ export const NULL = () => ts.factory.createNull();
5
+ export const UNDEFINED = () => ts.factory.createIdentifier("undefined");
6
+ export const BOOLEAN = (value: boolean) =>
7
+ value ? ts.factory.createTrue() : ts.factory.createFalse();
8
+ export const INPUT = (str: string = "input") =>
9
+ ts.factory.createIdentifier(str);
10
+ export const TYPEOF = (input: ts.Expression) =>
11
+ ts.factory.createTypeOfExpression(input);
12
+ }
@@ -1,12 +1,12 @@
1
- import { Metadata } from "../../../metadata/Metadata";
2
-
3
- export namespace MetadataHelper {
4
- export function literal_to_metadata(key: string): Metadata {
5
- const metadata: Metadata = Metadata.initialize();
6
- metadata.constants.push({
7
- type: "string",
8
- values: [key],
9
- });
10
- return metadata;
11
- }
12
- }
1
+ import { Metadata } from "../../../metadata/Metadata";
2
+
3
+ export namespace MetadataHelper {
4
+ export function literal_to_metadata(key: string): Metadata {
5
+ const metadata: Metadata = Metadata.initialize();
6
+ metadata.constants.push({
7
+ type: "string",
8
+ values: [key],
9
+ });
10
+ return metadata;
11
+ }
12
+ }