typia 4.1.2-dev.20230630 → 4.1.3-dev.20230704

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 (246) hide show
  1. package/README.md +1 -0
  2. package/lib/factories/internal/metadata/emplace_metadata_object.js +24 -32
  3. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  4. package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -0
  5. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  6. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +2 -0
  7. package/lib/factories/internal/metadata/iterate_metadata_tag.js +50 -0
  8. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +1 -0
  9. package/lib/metadata/MetadataObject.js +2 -0
  10. package/lib/metadata/MetadataObject.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/CustomValidatorMap.ts +126 -126
  13. package/src/IRandomGenerator.ts +34 -34
  14. package/src/IValidation.ts +21 -21
  15. package/src/Primitive.ts +131 -131
  16. package/src/TypeGuardError.ts +36 -36
  17. package/src/executable/TypiaGenerateWizard.ts +85 -85
  18. package/src/executable/TypiaSetupWizard.ts +133 -133
  19. package/src/executable/setup/ArgumentParser.ts +45 -45
  20. package/src/executable/setup/CommandExecutor.ts +8 -8
  21. package/src/executable/setup/FileRetriever.ts +22 -22
  22. package/src/executable/setup/PackageManager.ts +71 -71
  23. package/src/executable/setup/PluginConfigurator.ts +70 -70
  24. package/src/executable/typia.ts +52 -52
  25. package/src/factories/CommentFactory.ts +64 -64
  26. package/src/factories/ExpressionFactory.ts +70 -70
  27. package/src/factories/IdentifierFactory.ts +59 -59
  28. package/src/factories/LiteralFactory.ts +39 -39
  29. package/src/factories/MetadataCollection.ts +254 -254
  30. package/src/factories/MetadataFactory.ts +30 -30
  31. package/src/factories/MetadataTagFactory.ts +355 -355
  32. package/src/factories/StatementFactory.ts +24 -24
  33. package/src/factories/TemplateFactory.ts +58 -58
  34. package/src/factories/TypeFactory.ts +124 -124
  35. package/src/factories/ValueFactory.ts +12 -12
  36. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  37. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  38. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  39. package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -35
  40. package/src/factories/internal/metadata/emplace_metadata_object.ts +137 -140
  41. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +53 -53
  42. package/src/factories/internal/metadata/explore_metadata.ts +40 -40
  43. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  44. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  45. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  46. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  47. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  48. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -130
  49. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  50. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +83 -83
  51. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  52. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  53. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  54. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  55. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  56. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  57. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -0
  58. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  59. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  60. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  61. package/src/functional/$any.ts +2 -2
  62. package/src/functional/$dictionary.ts +25 -25
  63. package/src/functional/$every.ts +11 -11
  64. package/src/functional/$guard.ts +35 -35
  65. package/src/functional/$is_between.ts +2 -2
  66. package/src/functional/$is_custom.ts +14 -14
  67. package/src/functional/$is_date.ts +3 -3
  68. package/src/functional/$is_datetime.ts +2 -2
  69. package/src/functional/$is_email.ts +4 -4
  70. package/src/functional/$is_ipv4.ts +4 -4
  71. package/src/functional/$is_ipv6.ts +4 -4
  72. package/src/functional/$is_url.ts +4 -4
  73. package/src/functional/$is_uuid.ts +4 -4
  74. package/src/functional/$join.ts +46 -46
  75. package/src/functional/$number.ts +12 -12
  76. package/src/functional/$report.ts +15 -15
  77. package/src/functional/$rest.ts +3 -3
  78. package/src/functional/$string.ts +37 -37
  79. package/src/functional/$tail.ts +5 -5
  80. package/src/functional/Namespace.ts +127 -127
  81. package/src/index.ts +4 -4
  82. package/src/metadata/ICommentTag.ts +4 -4
  83. package/src/metadata/IJsDocTagInfo.ts +10 -10
  84. package/src/metadata/IMetadata.ts +28 -28
  85. package/src/metadata/IMetadataAlias.ts +12 -12
  86. package/src/metadata/IMetadataApplication.ts +7 -7
  87. package/src/metadata/IMetadataArray.ts +10 -10
  88. package/src/metadata/IMetadataCollection.ts +11 -11
  89. package/src/metadata/IMetadataConstant.ts +16 -16
  90. package/src/metadata/IMetadataDictionary.ts +14 -14
  91. package/src/metadata/IMetadataEntry.ts +6 -6
  92. package/src/metadata/IMetadataObject.ts +18 -18
  93. package/src/metadata/IMetadataProperty.ts +11 -11
  94. package/src/metadata/IMetadataResolved.ts +6 -6
  95. package/src/metadata/IMetadataTag.ts +105 -105
  96. package/src/metadata/IMetadataTuple.ts +10 -10
  97. package/src/metadata/Metadata.ts +599 -599
  98. package/src/metadata/MetadataAlias.ts +61 -61
  99. package/src/metadata/MetadataArray.ts +55 -55
  100. package/src/metadata/MetadataConstant.ts +3 -3
  101. package/src/metadata/MetadataObject.ts +129 -118
  102. package/src/metadata/MetadataProperty.ts +64 -64
  103. package/src/metadata/MetadataResolved.ts +51 -51
  104. package/src/metadata/MetadataTuple.ts +53 -53
  105. package/src/module.ts +2038 -2038
  106. package/src/programmers/ApplicationProgrammer.ts +47 -47
  107. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  108. package/src/programmers/AssertParseProgrammer.ts +66 -66
  109. package/src/programmers/AssertProgrammer.ts +279 -279
  110. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  111. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  112. package/src/programmers/CheckerProgrammer.ts +1182 -1182
  113. package/src/programmers/CloneProgrammer.ts +587 -587
  114. package/src/programmers/FeatureProgrammer.ts +495 -495
  115. package/src/programmers/IsCloneProgrammer.ts +78 -78
  116. package/src/programmers/IsParseProgrammer.ts +72 -72
  117. package/src/programmers/IsProgrammer.ts +239 -239
  118. package/src/programmers/IsPruneProgrammer.ts +73 -73
  119. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  120. package/src/programmers/LiteralsProgrammer.ts +60 -60
  121. package/src/programmers/PruneProgrammer.ts +542 -542
  122. package/src/programmers/RandomProgrammer.ts +581 -581
  123. package/src/programmers/StringifyProgrammer.ts +978 -978
  124. package/src/programmers/TypiaProgrammer.ts +129 -129
  125. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  126. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  127. package/src/programmers/ValidateProgrammer.ts +305 -305
  128. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  129. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  130. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  131. package/src/programmers/helpers/CloneJoiner.ts +131 -131
  132. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  133. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  134. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  135. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  136. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  137. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  138. package/src/programmers/helpers/RandomRanger.ts +216 -216
  139. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  140. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  141. package/src/programmers/helpers/UnionExplorer.ts +301 -301
  142. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  143. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  144. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  145. package/src/programmers/internal/application_alias.ts +47 -47
  146. package/src/programmers/internal/application_array.ts +30 -30
  147. package/src/programmers/internal/application_boolean.ts +15 -15
  148. package/src/programmers/internal/application_constant.ts +26 -26
  149. package/src/programmers/internal/application_default.ts +17 -17
  150. package/src/programmers/internal/application_default_string.ts +33 -33
  151. package/src/programmers/internal/application_native.ts +39 -39
  152. package/src/programmers/internal/application_number.ts +74 -74
  153. package/src/programmers/internal/application_object.ts +162 -162
  154. package/src/programmers/internal/application_resolved.ts +55 -55
  155. package/src/programmers/internal/application_schema.ts +157 -157
  156. package/src/programmers/internal/application_string.ts +44 -44
  157. package/src/programmers/internal/application_templates.ts +25 -25
  158. package/src/programmers/internal/application_tuple.ts +57 -57
  159. package/src/programmers/internal/check_array.ts +30 -30
  160. package/src/programmers/internal/check_array_length.ts +35 -35
  161. package/src/programmers/internal/check_bigint.ts +82 -82
  162. package/src/programmers/internal/check_custom.ts +31 -31
  163. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  164. package/src/programmers/internal/check_everything.ts +28 -28
  165. package/src/programmers/internal/check_native.ts +21 -21
  166. package/src/programmers/internal/check_number.ts +177 -177
  167. package/src/programmers/internal/check_object.ts +55 -55
  168. package/src/programmers/internal/check_string.ts +25 -25
  169. package/src/programmers/internal/check_string_tags.ts +67 -67
  170. package/src/programmers/internal/check_template.ts +56 -56
  171. package/src/programmers/internal/check_union_array_like.ts +329 -329
  172. package/src/programmers/internal/decode_union_object.ts +73 -73
  173. package/src/programmers/internal/feature_object_entries.ts +63 -63
  174. package/src/programmers/internal/get_comment_tags.ts +23 -23
  175. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  176. package/src/programmers/internal/prune_object_properties.ts +60 -60
  177. package/src/programmers/internal/random_custom.ts +29 -29
  178. package/src/programmers/internal/stringify_dynamic_properties.ts +167 -167
  179. package/src/programmers/internal/stringify_native.ts +7 -7
  180. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  181. package/src/programmers/internal/template_to_pattern.ts +15 -15
  182. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  183. package/src/schemas/IJsonApplication.ts +8 -8
  184. package/src/schemas/IJsonComponents.ts +33 -33
  185. package/src/schemas/IJsonSchema.ts +133 -133
  186. package/src/transform.ts +27 -27
  187. package/src/transformers/CallExpressionTransformer.ts +179 -179
  188. package/src/transformers/FileTransformer.ts +47 -47
  189. package/src/transformers/IProject.ts +11 -11
  190. package/src/transformers/ITransformOptions.ts +62 -62
  191. package/src/transformers/ImportTransformer.ts +66 -66
  192. package/src/transformers/NodeTransformer.ts +13 -13
  193. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +104 -104
  194. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  199. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  201. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  203. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  204. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  205. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  206. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  207. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  208. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  209. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  210. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  211. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  212. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  213. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  214. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  215. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  216. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  217. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  218. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  219. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  220. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  221. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  222. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  223. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  224. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  225. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  226. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  227. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  228. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  229. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  230. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  231. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  232. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  233. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  234. package/src/transformers/internal/GenericTransformer.ts +97 -97
  235. package/src/typings/Atomic.ts +17 -17
  236. package/src/typings/ClassProperties.ts +5 -5
  237. package/src/typings/Customizable.ts +5 -5
  238. package/src/typings/OmitNever.ts +3 -3
  239. package/src/typings/SpecialFields.ts +3 -3
  240. package/src/typings/Writable.ts +11 -11
  241. package/src/utils/ArrayUtil.ts +45 -45
  242. package/src/utils/Escaper.ts +45 -45
  243. package/src/utils/MapUtil.ts +12 -12
  244. package/src/utils/PatternUtil.ts +30 -30
  245. package/src/utils/RandomGenerator.ts +81 -81
  246. package/src/utils/Singleton.ts +17 -17
@@ -1,66 +1,66 @@
1
- import path from "path";
2
- import ts from "typescript";
3
-
4
- export namespace ImportTransformer {
5
- export const transform =
6
- (from: string) =>
7
- (to: string) =>
8
- (context: ts.TransformationContext) =>
9
- (file: ts.SourceFile) =>
10
- transform_file(from)(to)(context)(file);
11
-
12
- const transform_file =
13
- (top: string) =>
14
- (to: string) =>
15
- (context: ts.TransformationContext) =>
16
- (file: ts.SourceFile): ts.SourceFile => {
17
- if (file.isDeclarationFile) return file;
18
-
19
- const from: string = get_directory_path(
20
- path.resolve(file.getSourceFile().fileName),
21
- );
22
- to = from.replace(top, to);
23
-
24
- return ts.visitEachChild(
25
- file,
26
- (node) => transform_node(top)(from)(to)(node),
27
- context,
28
- );
29
- };
30
-
31
- const transform_node =
32
- (top: string) => (from: string) => (to: string) => (node: ts.Node) => {
33
- if (
34
- !ts.isImportDeclaration(node) ||
35
- !ts.isStringLiteral(node.moduleSpecifier)
36
- )
37
- return node;
38
-
39
- const text: string = node.moduleSpecifier.text;
40
- if (text[0] !== ".") return node;
41
-
42
- const location: string = path.resolve(from, text);
43
- if (location.indexOf(top) === 0) return node;
44
-
45
- const replaced: string = (() => {
46
- const simple: string = path
47
- .relative(to, location)
48
- .split(path.sep)
49
- .join("/");
50
- return simple[0] === "." ? simple : `./${simple}`;
51
- })();
52
-
53
- return ts.factory.createImportDeclaration(
54
- undefined,
55
- node.importClause,
56
- ts.factory.createStringLiteral(replaced),
57
- node.assertClause,
58
- );
59
- };
60
- }
61
-
62
- const get_directory_path = (file: string): string => {
63
- const splitted: string[] = path.resolve(file).split(path.sep);
64
- splitted.pop();
65
- return path.resolve(splitted.join(path.sep));
66
- };
1
+ import path from "path";
2
+ import ts from "typescript";
3
+
4
+ export namespace ImportTransformer {
5
+ export const transform =
6
+ (from: string) =>
7
+ (to: string) =>
8
+ (context: ts.TransformationContext) =>
9
+ (file: ts.SourceFile) =>
10
+ transform_file(from)(to)(context)(file);
11
+
12
+ const transform_file =
13
+ (top: string) =>
14
+ (to: string) =>
15
+ (context: ts.TransformationContext) =>
16
+ (file: ts.SourceFile): ts.SourceFile => {
17
+ if (file.isDeclarationFile) return file;
18
+
19
+ const from: string = get_directory_path(
20
+ path.resolve(file.getSourceFile().fileName),
21
+ );
22
+ to = from.replace(top, to);
23
+
24
+ return ts.visitEachChild(
25
+ file,
26
+ (node) => transform_node(top)(from)(to)(node),
27
+ context,
28
+ );
29
+ };
30
+
31
+ const transform_node =
32
+ (top: string) => (from: string) => (to: string) => (node: ts.Node) => {
33
+ if (
34
+ !ts.isImportDeclaration(node) ||
35
+ !ts.isStringLiteral(node.moduleSpecifier)
36
+ )
37
+ return node;
38
+
39
+ const text: string = node.moduleSpecifier.text;
40
+ if (text[0] !== ".") return node;
41
+
42
+ const location: string = path.resolve(from, text);
43
+ if (location.indexOf(top) === 0) return node;
44
+
45
+ const replaced: string = (() => {
46
+ const simple: string = path
47
+ .relative(to, location)
48
+ .split(path.sep)
49
+ .join("/");
50
+ return simple[0] === "." ? simple : `./${simple}`;
51
+ })();
52
+
53
+ return ts.factory.createImportDeclaration(
54
+ undefined,
55
+ node.importClause,
56
+ ts.factory.createStringLiteral(replaced),
57
+ node.assertClause,
58
+ );
59
+ };
60
+ }
61
+
62
+ const get_directory_path = (file: string): string => {
63
+ const splitted: string[] = path.resolve(file).split(path.sep);
64
+ splitted.pop();
65
+ return path.resolve(splitted.join(path.sep));
66
+ };
@@ -1,13 +1,13 @@
1
- import ts from "typescript";
2
-
3
- import { CallExpressionTransformer } from "./CallExpressionTransformer";
4
- import { IProject } from "./IProject";
5
-
6
- export namespace NodeTransformer {
7
- export const transform =
8
- (project: IProject) =>
9
- (expression: ts.Node): ts.Node =>
10
- ts.isCallExpression(expression)
11
- ? CallExpressionTransformer.transform(project)(expression)
12
- : expression;
13
- }
1
+ import ts from "typescript";
2
+
3
+ import { CallExpressionTransformer } from "./CallExpressionTransformer";
4
+ import { IProject } from "./IProject";
5
+
6
+ export namespace NodeTransformer {
7
+ export const transform =
8
+ (project: IProject) =>
9
+ (expression: ts.Node): ts.Node =>
10
+ ts.isCallExpression(expression)
11
+ ? CallExpressionTransformer.transform(project)(expression)
12
+ : expression;
13
+ }
@@ -1,104 +1,104 @@
1
- import ts from "typescript";
2
-
3
- import { LiteralFactory } from "../../../factories/LiteralFactory";
4
- import { MetadataCollection } from "../../../factories/MetadataCollection";
5
- import { MetadataFactory } from "../../../factories/MetadataFactory";
6
-
7
- import { Metadata } from "../../../metadata/Metadata";
8
- import { IJsonApplication } from "../../../schemas/IJsonApplication";
9
-
10
- import { ApplicationProgrammer } from "../../../programmers/ApplicationProgrammer";
11
-
12
- import { IProject } from "../../IProject";
13
-
14
- export namespace ApplicationTransformer {
15
- export const transform =
16
- ({ checker }: IProject) =>
17
- (expression: ts.CallExpression): ts.Expression => {
18
- if (!expression.typeArguments?.length)
19
- throw new Error(NO_GENERIC_ARGUMENT);
20
-
21
- //----
22
- // GET ARGUMENTS
23
- //----
24
- // VALIDATE TUPLE ARGUMENTS
25
- const top: ts.Node = expression.typeArguments[0]!;
26
- if (!ts.isTupleTypeNode(top)) return expression;
27
- else if (top.elements.some((child) => !ts.isTypeNode(child)))
28
- return expression;
29
-
30
- // GET TYPES
31
- const types: ts.Type[] = top.elements.map((child) =>
32
- checker.getTypeFromTypeNode(child as ts.TypeNode),
33
- );
34
- if (types.some((t) => t.isTypeParameter()))
35
- throw new Error(GENERIC_ARGUMENT);
36
-
37
- // ADDITIONAL PARAMETERS
38
- const purpose: "swagger" | "ajv" = get_parameter(
39
- checker,
40
- "Purpose",
41
- expression.typeArguments[1],
42
- (str) => str === "swagger" || str === "ajv",
43
- () => "swagger",
44
- );
45
-
46
- //----
47
- // GENERATORS
48
- //----
49
- // METADATA
50
- const collection: MetadataCollection = new MetadataCollection({
51
- replace: MetadataCollection.replace,
52
- });
53
- const metadatas: Array<Metadata> = types.map((type) =>
54
- MetadataFactory.analyze(checker)({
55
- resolve: true,
56
- constant: true,
57
- absorb: false,
58
- validate: (meta) => {
59
- if (meta.atomics.find((str) => str === "bigint"))
60
- throw new Error(NO_BIGIT);
61
- },
62
- })(collection)(type),
63
- );
64
-
65
- // APPLICATION
66
- const app: IJsonApplication = ApplicationProgrammer.write({
67
- purpose,
68
- })(metadatas);
69
-
70
- // RETURNS WITH LITERAL EXPRESSION
71
- return LiteralFactory.generate(app);
72
- };
73
-
74
- const get_parameter = <T extends string>(
75
- checker: ts.TypeChecker,
76
- name: string,
77
- node: ts.TypeNode | undefined,
78
- predicator: (value: string) => boolean,
79
- defaulter: () => T,
80
- ): T => {
81
- if (!node) return defaulter();
82
-
83
- // CHECK LITERAL TYPE
84
- const type: ts.Type = checker.getTypeFromTypeNode(node);
85
- if (!type.isLiteral())
86
- throw new Error(
87
- `Error on typia.application(): generic argument "${name}" must be constant.`,
88
- );
89
-
90
- // GET VALUE AND VALIDATE IT
91
- const value = type.value;
92
- if (typeof value !== "string" || predicator(value) === false)
93
- throw new Error(
94
- `Error on typia.application(): invalid value on generic argument "${name}".`,
95
- );
96
- return value as T;
97
- };
98
- }
99
-
100
- const NO_GENERIC_ARGUMENT =
101
- "Error on typia.application(): no generic argument.";
102
- const GENERIC_ARGUMENT =
103
- "Error on typia.application(): non-specified generic argument(s).";
104
- const NO_BIGIT = "Error on typia.application(): does not allow bigint type.";
1
+ import ts from "typescript";
2
+
3
+ import { LiteralFactory } from "../../../factories/LiteralFactory";
4
+ import { MetadataCollection } from "../../../factories/MetadataCollection";
5
+ import { MetadataFactory } from "../../../factories/MetadataFactory";
6
+
7
+ import { Metadata } from "../../../metadata/Metadata";
8
+ import { IJsonApplication } from "../../../schemas/IJsonApplication";
9
+
10
+ import { ApplicationProgrammer } from "../../../programmers/ApplicationProgrammer";
11
+
12
+ import { IProject } from "../../IProject";
13
+
14
+ export namespace ApplicationTransformer {
15
+ export const transform =
16
+ ({ checker }: IProject) =>
17
+ (expression: ts.CallExpression): ts.Expression => {
18
+ if (!expression.typeArguments?.length)
19
+ throw new Error(NO_GENERIC_ARGUMENT);
20
+
21
+ //----
22
+ // GET ARGUMENTS
23
+ //----
24
+ // VALIDATE TUPLE ARGUMENTS
25
+ const top: ts.Node = expression.typeArguments[0]!;
26
+ if (!ts.isTupleTypeNode(top)) return expression;
27
+ else if (top.elements.some((child) => !ts.isTypeNode(child)))
28
+ return expression;
29
+
30
+ // GET TYPES
31
+ const types: ts.Type[] = top.elements.map((child) =>
32
+ checker.getTypeFromTypeNode(child as ts.TypeNode),
33
+ );
34
+ if (types.some((t) => t.isTypeParameter()))
35
+ throw new Error(GENERIC_ARGUMENT);
36
+
37
+ // ADDITIONAL PARAMETERS
38
+ const purpose: "swagger" | "ajv" = get_parameter(
39
+ checker,
40
+ "Purpose",
41
+ expression.typeArguments[1],
42
+ (str) => str === "swagger" || str === "ajv",
43
+ () => "swagger",
44
+ );
45
+
46
+ //----
47
+ // GENERATORS
48
+ //----
49
+ // METADATA
50
+ const collection: MetadataCollection = new MetadataCollection({
51
+ replace: MetadataCollection.replace,
52
+ });
53
+ const metadatas: Array<Metadata> = types.map((type) =>
54
+ MetadataFactory.analyze(checker)({
55
+ resolve: true,
56
+ constant: true,
57
+ absorb: false,
58
+ validate: (meta) => {
59
+ if (meta.atomics.find((str) => str === "bigint"))
60
+ throw new Error(NO_BIGIT);
61
+ },
62
+ })(collection)(type),
63
+ );
64
+
65
+ // APPLICATION
66
+ const app: IJsonApplication = ApplicationProgrammer.write({
67
+ purpose,
68
+ })(metadatas);
69
+
70
+ // RETURNS WITH LITERAL EXPRESSION
71
+ return LiteralFactory.generate(app);
72
+ };
73
+
74
+ const get_parameter = <T extends string>(
75
+ checker: ts.TypeChecker,
76
+ name: string,
77
+ node: ts.TypeNode | undefined,
78
+ predicator: (value: string) => boolean,
79
+ defaulter: () => T,
80
+ ): T => {
81
+ if (!node) return defaulter();
82
+
83
+ // CHECK LITERAL TYPE
84
+ const type: ts.Type = checker.getTypeFromTypeNode(node);
85
+ if (!type.isLiteral())
86
+ throw new Error(
87
+ `Error on typia.application(): generic argument "${name}" must be constant.`,
88
+ );
89
+
90
+ // GET VALUE AND VALIDATE IT
91
+ const value = type.value;
92
+ if (typeof value !== "string" || predicator(value) === false)
93
+ throw new Error(
94
+ `Error on typia.application(): invalid value on generic argument "${name}".`,
95
+ );
96
+ return value as T;
97
+ };
98
+ }
99
+
100
+ const NO_GENERIC_ARGUMENT =
101
+ "Error on typia.application(): no generic argument.";
102
+ const GENERIC_ARGUMENT =
103
+ "Error on typia.application(): non-specified generic argument(s).";
104
+ const NO_BIGIT = "Error on typia.application(): does not allow bigint type.";
@@ -1,9 +1,9 @@
1
- import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace AssertCloneTransformer {
6
- export const transform = GenericTransformer.scalar("assertClone")(
7
- (project) => (modulo) => AssertCloneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace AssertCloneTransformer {
6
+ export const transform = GenericTransformer.scalar("assertClone")(
7
+ (project) => (modulo) => AssertCloneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace AssertPruneTransformer {
6
- export const transform = GenericTransformer.scalar("assertPrune")(
7
- (project) => (modulo) => AssertPruneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace AssertPruneTransformer {
6
+ export const transform = GenericTransformer.scalar("assertPrune")(
7
+ (project) => (modulo) => AssertPruneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CloneTransformer {
6
- export const transform = GenericTransformer.scalar("clone")(
7
- (project) => (modulo) => CloneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CloneTransformer {
6
+ export const transform = GenericTransformer.scalar("clone")(
7
+ (project) => (modulo) => CloneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateAssertCloneTransformer {
6
- export const transform = GenericTransformer.factory("createAssertClone")(
7
- (project) => (modulo) => AssertCloneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { AssertCloneProgrammer } from "../../../programmers/AssertCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateAssertCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createAssertClone")(
7
+ (project) => (modulo) => AssertCloneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateAssertPruneTransformer {
6
- export const transform = GenericTransformer.factory("createAssertPrune")(
7
- (project) => (modulo) => AssertPruneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { AssertPruneProgrammer } from "../../../programmers/AssertPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateAssertPruneTransformer {
6
+ export const transform = GenericTransformer.factory("createAssertPrune")(
7
+ (project) => (modulo) => AssertPruneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateCloneTransformer {
6
- export const transform = GenericTransformer.factory("createClone")(
7
- (project) => (modulo) => CloneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { CloneProgrammer } from "../../../programmers/CloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createClone")(
7
+ (project) => (modulo) => CloneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { IsCloneProgrammer } from "../../../programmers/IsCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateIsCloneTransformer {
6
- export const transform = GenericTransformer.factory("createIsClone")(
7
- (project) => (modulo) => IsCloneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { IsCloneProgrammer } from "../../../programmers/IsCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateIsCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createIsClone")(
7
+ (project) => (modulo) => IsCloneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateIsPruneTransformer {
6
- export const transform = GenericTransformer.factory("createIsPrune")(
7
- (project) => (modulo) => IsPruneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { IsPruneProgrammer } from "../../../programmers/IsPruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateIsPruneTransformer {
6
+ export const transform = GenericTransformer.factory("createIsPrune")(
7
+ (project) => (modulo) => IsPruneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,9 +1,9 @@
1
- import { PruneProgrammer } from "../../../programmers/PruneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreatePruneTransformer {
6
- export const transform = GenericTransformer.factory("createPrune")(
7
- (project) => (modulo) => PruneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { PruneProgrammer } from "../../../programmers/PruneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreatePruneTransformer {
6
+ export const transform = GenericTransformer.factory("createPrune")(
7
+ (project) => (modulo) => PruneProgrammer.write(project)(modulo),
8
+ );
9
+ }
@@ -1,39 +1,39 @@
1
- import ts from "typescript";
2
-
3
- import { RandomProgrammer } from "../../../programmers/RandomProgrammer";
4
-
5
- import { IProject } from "../../IProject";
6
-
7
- export namespace CreateRandomTransformer {
8
- export const transform =
9
- (project: IProject) =>
10
- (modulo: ts.LeftHandSideExpression) =>
11
- (expression: ts.CallExpression): ts.Expression => {
12
- // CHECK GENERIC ARGUMENT EXISTENCE
13
- if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
14
-
15
- // GET TYPE INFO
16
- const node: ts.TypeNode = expression.typeArguments[0];
17
- const type: ts.Type = project.checker.getTypeFromTypeNode(node);
18
-
19
- if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
20
-
21
- // DO TRANSFORM
22
- return RandomProgrammer.write({
23
- ...project,
24
- options: {
25
- ...project.options,
26
- functional: false,
27
- numeric: false,
28
- },
29
- })(modulo)(expression.arguments?.[0])(
30
- type,
31
- node.getFullText().trim(),
32
- );
33
- };
34
- }
35
-
36
- const NOT_SPECIFIED =
37
- "Error on typia.createRandom(): generic argument is not specified.";
38
- const NO_GENERIC_ARGUMENT =
39
- "Error on typia.createRandom(): non-specified generic argument.";
1
+ import ts from "typescript";
2
+
3
+ import { RandomProgrammer } from "../../../programmers/RandomProgrammer";
4
+
5
+ import { IProject } from "../../IProject";
6
+
7
+ export namespace CreateRandomTransformer {
8
+ export const transform =
9
+ (project: IProject) =>
10
+ (modulo: ts.LeftHandSideExpression) =>
11
+ (expression: ts.CallExpression): ts.Expression => {
12
+ // CHECK GENERIC ARGUMENT EXISTENCE
13
+ if (!expression.typeArguments?.[0]) throw new Error(NOT_SPECIFIED);
14
+
15
+ // GET TYPE INFO
16
+ const node: ts.TypeNode = expression.typeArguments[0];
17
+ const type: ts.Type = project.checker.getTypeFromTypeNode(node);
18
+
19
+ if (type.isTypeParameter()) throw new Error(NO_GENERIC_ARGUMENT);
20
+
21
+ // DO TRANSFORM
22
+ return RandomProgrammer.write({
23
+ ...project,
24
+ options: {
25
+ ...project.options,
26
+ functional: false,
27
+ numeric: false,
28
+ },
29
+ })(modulo)(expression.arguments?.[0])(
30
+ type,
31
+ node.getFullText().trim(),
32
+ );
33
+ };
34
+ }
35
+
36
+ const NOT_SPECIFIED =
37
+ "Error on typia.createRandom(): generic argument is not specified.";
38
+ const NO_GENERIC_ARGUMENT =
39
+ "Error on typia.createRandom(): non-specified generic argument.";
@@ -1,9 +1,9 @@
1
- import { ValidateCloneProgrammer } from "../../../programmers/ValidateCloneProgrammer";
2
-
3
- import { GenericTransformer } from "../../internal/GenericTransformer";
4
-
5
- export namespace CreateValidateCloneTransformer {
6
- export const transform = GenericTransformer.factory("createValidateClone")(
7
- (project) => (modulo) => ValidateCloneProgrammer.write(project)(modulo),
8
- );
9
- }
1
+ import { ValidateCloneProgrammer } from "../../../programmers/ValidateCloneProgrammer";
2
+
3
+ import { GenericTransformer } from "../../internal/GenericTransformer";
4
+
5
+ export namespace CreateValidateCloneTransformer {
6
+ export const transform = GenericTransformer.factory("createValidateClone")(
7
+ (project) => (modulo) => ValidateCloneProgrammer.write(project)(modulo),
8
+ );
9
+ }