typia 4.0.0-dev.20230519-3 → 4.0.0-dev.20230527

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