typia 3.7.3 → 3.7.4-dev.20230410-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.
Files changed (233) hide show
  1. package/README.md +5 -56
  2. package/lib/executable/TypiaGenerateWizard.js +7 -7
  3. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  4. package/lib/executable/TypiaSetupWizard.js +2 -4
  5. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  6. package/lib/executable/setup/ArgumentParser.d.ts +1 -1
  7. package/lib/executable/setup/ArgumentParser.js +76 -81
  8. package/lib/executable/setup/ArgumentParser.js.map +1 -1
  9. package/lib/executable/setup/FileRetriever.d.ts +0 -1
  10. package/lib/executable/setup/FileRetriever.js +0 -75
  11. package/lib/executable/setup/FileRetriever.js.map +1 -1
  12. package/lib/executable/setup/PackageManager.d.ts +0 -5
  13. package/lib/executable/setup/PackageManager.js +1 -11
  14. package/lib/executable/setup/PackageManager.js.map +1 -1
  15. package/lib/executable/setup/PluginConfigurator.d.ts +1 -2
  16. package/lib/executable/setup/PluginConfigurator.js +31 -54
  17. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  18. package/lib/executable/typia.js +52 -13
  19. package/lib/executable/typia.js.map +1 -1
  20. package/package.json +8 -8
  21. package/src/CustomValidatorMap.ts +126 -126
  22. package/src/IRandomGenerator.ts +33 -33
  23. package/src/IValidation.ts +21 -21
  24. package/src/Primitive.ts +104 -104
  25. package/src/TypeGuardError.ts +36 -36
  26. package/src/executable/TypiaGenerateWizard.ts +85 -87
  27. package/src/executable/TypiaSetupWizard.ts +149 -152
  28. package/src/executable/setup/ArgumentParser.ts +58 -91
  29. package/src/executable/setup/CommandExecutor.ts +8 -8
  30. package/src/executable/setup/FileRetriever.ts +22 -33
  31. package/src/executable/setup/PackageManager.ts +72 -92
  32. package/src/executable/setup/PluginConfigurator.ts +59 -99
  33. package/src/executable/typia.ts +46 -38
  34. package/src/factories/CommentFactory.ts +10 -10
  35. package/src/factories/ExpressionFactory.ts +77 -77
  36. package/src/factories/IdentifierFactory.ts +81 -81
  37. package/src/factories/LiteralFactory.ts +44 -44
  38. package/src/factories/MetadataCollection.ts +122 -122
  39. package/src/factories/MetadataFactory.ts +51 -51
  40. package/src/factories/MetadataTagFactory.ts +302 -302
  41. package/src/factories/StatementFactory.ts +60 -60
  42. package/src/factories/TemplateFactory.ts +56 -56
  43. package/src/factories/TypeFactory.ts +129 -129
  44. package/src/factories/TypiaFileFactory.ts +120 -120
  45. package/src/factories/ValueFactory.ts +12 -12
  46. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  47. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  48. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  49. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  50. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  51. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  52. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  53. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  54. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  55. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  56. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  57. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  58. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  59. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  60. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  61. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  62. package/src/functional/$any.ts +3 -3
  63. package/src/functional/$dictionary.ts +20 -20
  64. package/src/functional/$every.ts +11 -11
  65. package/src/functional/$guard.ts +35 -35
  66. package/src/functional/$is_between.ts +7 -7
  67. package/src/functional/$is_custom.ts +14 -14
  68. package/src/functional/$is_date.ts +4 -4
  69. package/src/functional/$is_datetime.ts +3 -3
  70. package/src/functional/$is_email.ts +5 -5
  71. package/src/functional/$is_ipv4.ts +5 -5
  72. package/src/functional/$is_ipv6.ts +5 -5
  73. package/src/functional/$is_url.ts +5 -5
  74. package/src/functional/$is_uuid.ts +5 -5
  75. package/src/functional/$join.ts +50 -50
  76. package/src/functional/$number.ts +12 -12
  77. package/src/functional/$report.ts +15 -15
  78. package/src/functional/$rest.ts +3 -3
  79. package/src/functional/$string.ts +37 -37
  80. package/src/functional/$tail.ts +6 -6
  81. package/src/functional/Namespace.ts +127 -127
  82. package/src/index.ts +4 -4
  83. package/src/metadata/ICommentTag.ts +4 -4
  84. package/src/metadata/IJsDocTagInfo.ts +10 -10
  85. package/src/metadata/IMetadata.ts +25 -25
  86. package/src/metadata/IMetadataApplication.ts +7 -7
  87. package/src/metadata/IMetadataConstant.ts +16 -16
  88. package/src/metadata/IMetadataEntry.ts +6 -6
  89. package/src/metadata/IMetadataObject.ts +29 -29
  90. package/src/metadata/IMetadataProperty.ts +11 -11
  91. package/src/metadata/IMetadataTag.ts +105 -105
  92. package/src/metadata/Metadata.ts +534 -534
  93. package/src/metadata/MetadataConstant.ts +3 -3
  94. package/src/metadata/MetadataObject.ts +131 -131
  95. package/src/metadata/MetadataProperty.ts +64 -64
  96. package/src/module.ts +2043 -2043
  97. package/src/programmers/ApplicationProgrammer.ts +55 -55
  98. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  99. package/src/programmers/AssertParseProgrammer.ts +65 -65
  100. package/src/programmers/AssertProgrammer.ts +284 -284
  101. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  102. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  103. package/src/programmers/CheckerProgrammer.ts +922 -922
  104. package/src/programmers/CloneProgrammer.ts +388 -388
  105. package/src/programmers/FeatureProgrammer.ts +512 -512
  106. package/src/programmers/IsCloneProgrammer.ts +80 -80
  107. package/src/programmers/IsParseProgrammer.ts +74 -74
  108. package/src/programmers/IsProgrammer.ts +206 -206
  109. package/src/programmers/IsPruneProgrammer.ts +75 -75
  110. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  111. package/src/programmers/LiteralsProgrammer.ts +65 -65
  112. package/src/programmers/PruneProgrammer.ts +343 -343
  113. package/src/programmers/RandomProgrammer.ts +413 -413
  114. package/src/programmers/StringifyProgrammer.ts +801 -801
  115. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  116. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  117. package/src/programmers/ValidateProgrammer.ts +317 -317
  118. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  119. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  120. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  121. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  122. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  123. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  124. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  125. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  126. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  127. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  128. package/src/programmers/helpers/RandomRanger.ts +216 -216
  129. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  130. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  131. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  132. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  133. package/src/programmers/internal/application_array.ts +37 -37
  134. package/src/programmers/internal/application_boolean.ts +17 -17
  135. package/src/programmers/internal/application_constant.ts +29 -29
  136. package/src/programmers/internal/application_default.ts +17 -17
  137. package/src/programmers/internal/application_default_string.ts +32 -32
  138. package/src/programmers/internal/application_native.ts +32 -32
  139. package/src/programmers/internal/application_number.ts +73 -73
  140. package/src/programmers/internal/application_object.ts +153 -153
  141. package/src/programmers/internal/application_schema.ts +184 -184
  142. package/src/programmers/internal/application_string.ts +45 -45
  143. package/src/programmers/internal/application_templates.ts +27 -27
  144. package/src/programmers/internal/application_tuple.ts +29 -29
  145. package/src/programmers/internal/check_array.ts +30 -30
  146. package/src/programmers/internal/check_array_length.ts +35 -35
  147. package/src/programmers/internal/check_bigint.ts +82 -82
  148. package/src/programmers/internal/check_custom.ts +33 -33
  149. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  150. package/src/programmers/internal/check_everything.ts +28 -28
  151. package/src/programmers/internal/check_native.ts +21 -21
  152. package/src/programmers/internal/check_number.ts +177 -177
  153. package/src/programmers/internal/check_object.ts +55 -55
  154. package/src/programmers/internal/check_string.ts +25 -25
  155. package/src/programmers/internal/check_string_tags.ts +73 -73
  156. package/src/programmers/internal/check_template.ts +59 -59
  157. package/src/programmers/internal/check_union_array_like.ts +272 -272
  158. package/src/programmers/internal/check_union_tuple.ts +35 -35
  159. package/src/programmers/internal/decode_union_object.ts +73 -73
  160. package/src/programmers/internal/feature_object_entries.ts +63 -63
  161. package/src/programmers/internal/get_comment_tags.ts +23 -23
  162. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  163. package/src/programmers/internal/prune_object_properties.ts +60 -60
  164. package/src/programmers/internal/random_custom.ts +30 -30
  165. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  166. package/src/programmers/internal/stringify_native.ts +8 -8
  167. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  168. package/src/programmers/internal/template_to_pattern.ts +15 -15
  169. package/src/schemas/IJsonApplication.ts +9 -9
  170. package/src/schemas/IJsonComponents.ts +26 -26
  171. package/src/schemas/IJsonSchema.ts +121 -121
  172. package/src/transform.ts +21 -21
  173. package/src/transformers/CallExpressionTransformer.ts +174 -174
  174. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  175. package/src/transformers/FileTransformer.ts +49 -49
  176. package/src/transformers/IProject.ts +11 -11
  177. package/src/transformers/ITransformOptions.ts +62 -62
  178. package/src/transformers/ImportTransformer.ts +66 -66
  179. package/src/transformers/NodeTransformer.ts +19 -19
  180. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  181. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  182. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  183. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  185. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  187. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  189. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  191. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  193. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  194. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  196. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  197. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  199. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  201. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  202. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  203. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  204. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  205. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  206. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  207. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  208. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  209. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  210. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  211. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  212. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  213. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  214. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  215. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  216. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  217. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  218. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  219. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  220. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  221. package/src/transformers/internal/GenericTransformer.ts +99 -99
  222. package/src/typings/Atomic.ts +17 -17
  223. package/src/typings/ClassProperties.ts +5 -5
  224. package/src/typings/Customizable.ts +5 -5
  225. package/src/typings/OmitNever.ts +3 -3
  226. package/src/typings/SpecialFields.ts +3 -3
  227. package/src/typings/Writable.ts +11 -11
  228. package/src/utils/ArrayUtil.ts +49 -49
  229. package/src/utils/Escaper.ts +50 -50
  230. package/src/utils/MapUtil.ts +14 -14
  231. package/src/utils/PatternUtil.ts +30 -30
  232. package/src/utils/RandomGenerator.ts +96 -96
  233. 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
+ }