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