typia 3.7.5 → 3.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/README.md +35 -260
  2. package/lib/factories/TypiaFileFactory.js +9 -4
  3. package/lib/factories/TypiaFileFactory.js.map +1 -1
  4. package/lib/module.js +1 -1
  5. package/lib/module.js.map +1 -1
  6. package/lib/programmers/internal/check_string_tags.js +2 -2
  7. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  8. package/lib/programmers/internal/check_template.js +1 -1
  9. package/lib/programmers/internal/check_template.js.map +1 -1
  10. package/package.json +1 -1
  11. package/src/CustomValidatorMap.ts +126 -126
  12. package/src/IRandomGenerator.ts +33 -33
  13. package/src/IValidation.ts +21 -21
  14. package/src/Primitive.ts +104 -104
  15. package/src/TypeGuardError.ts +36 -36
  16. package/src/executable/TypiaGenerateWizard.ts +85 -85
  17. package/src/executable/setup/ArgumentParser.ts +45 -45
  18. package/src/executable/setup/CommandExecutor.ts +8 -8
  19. package/src/executable/setup/FileRetriever.ts +22 -22
  20. package/src/executable/setup/PluginConfigurator.ts +59 -59
  21. package/src/executable/typia.ts +54 -54
  22. package/src/factories/CommentFactory.ts +10 -10
  23. package/src/factories/ExpressionFactory.ts +77 -77
  24. package/src/factories/IdentifierFactory.ts +81 -81
  25. package/src/factories/LiteralFactory.ts +44 -44
  26. package/src/factories/MetadataCollection.ts +122 -122
  27. package/src/factories/MetadataFactory.ts +51 -51
  28. package/src/factories/MetadataTagFactory.ts +302 -302
  29. package/src/factories/StatementFactory.ts +60 -60
  30. package/src/factories/TemplateFactory.ts +56 -56
  31. package/src/factories/TypeFactory.ts +129 -129
  32. package/src/factories/TypiaFileFactory.ts +12 -3
  33. package/src/factories/ValueFactory.ts +12 -12
  34. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  35. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  36. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  37. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  38. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  39. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  40. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  41. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  42. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  43. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  44. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  45. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  46. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  47. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  48. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  49. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  50. package/src/functional/$any.ts +3 -3
  51. package/src/functional/$dictionary.ts +20 -20
  52. package/src/functional/$every.ts +11 -11
  53. package/src/functional/$guard.ts +35 -35
  54. package/src/functional/$is_between.ts +7 -7
  55. package/src/functional/$is_custom.ts +14 -14
  56. package/src/functional/$is_date.ts +4 -4
  57. package/src/functional/$is_datetime.ts +3 -3
  58. package/src/functional/$is_email.ts +5 -5
  59. package/src/functional/$is_ipv4.ts +5 -5
  60. package/src/functional/$is_ipv6.ts +5 -5
  61. package/src/functional/$is_url.ts +5 -5
  62. package/src/functional/$is_uuid.ts +5 -5
  63. package/src/functional/$join.ts +50 -50
  64. package/src/functional/$number.ts +12 -12
  65. package/src/functional/$report.ts +15 -15
  66. package/src/functional/$rest.ts +3 -3
  67. package/src/functional/$string.ts +37 -37
  68. package/src/functional/$tail.ts +6 -6
  69. package/src/functional/Namespace.ts +127 -127
  70. package/src/index.ts +4 -4
  71. package/src/metadata/ICommentTag.ts +4 -4
  72. package/src/metadata/IJsDocTagInfo.ts +10 -10
  73. package/src/metadata/IMetadata.ts +25 -25
  74. package/src/metadata/IMetadataApplication.ts +7 -7
  75. package/src/metadata/IMetadataConstant.ts +16 -16
  76. package/src/metadata/IMetadataEntry.ts +6 -6
  77. package/src/metadata/IMetadataObject.ts +29 -29
  78. package/src/metadata/IMetadataProperty.ts +11 -11
  79. package/src/metadata/IMetadataTag.ts +105 -105
  80. package/src/metadata/Metadata.ts +534 -534
  81. package/src/metadata/MetadataConstant.ts +3 -3
  82. package/src/metadata/MetadataObject.ts +131 -131
  83. package/src/metadata/MetadataProperty.ts +64 -64
  84. package/src/module.ts +2043 -2043
  85. package/src/programmers/ApplicationProgrammer.ts +55 -55
  86. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  87. package/src/programmers/AssertParseProgrammer.ts +65 -65
  88. package/src/programmers/AssertProgrammer.ts +284 -284
  89. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  90. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  91. package/src/programmers/CheckerProgrammer.ts +922 -922
  92. package/src/programmers/CloneProgrammer.ts +388 -388
  93. package/src/programmers/FeatureProgrammer.ts +512 -512
  94. package/src/programmers/IsCloneProgrammer.ts +80 -80
  95. package/src/programmers/IsParseProgrammer.ts +74 -74
  96. package/src/programmers/IsProgrammer.ts +206 -206
  97. package/src/programmers/IsPruneProgrammer.ts +75 -75
  98. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  99. package/src/programmers/LiteralsProgrammer.ts +65 -65
  100. package/src/programmers/PruneProgrammer.ts +343 -343
  101. package/src/programmers/RandomProgrammer.ts +413 -413
  102. package/src/programmers/StringifyProgrammer.ts +801 -801
  103. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  104. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  105. package/src/programmers/ValidateProgrammer.ts +317 -317
  106. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  107. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  108. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  109. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  110. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  111. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  112. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  113. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  114. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  115. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  116. package/src/programmers/helpers/RandomRanger.ts +216 -216
  117. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  118. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  119. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  120. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  121. package/src/programmers/internal/application_array.ts +37 -37
  122. package/src/programmers/internal/application_boolean.ts +17 -17
  123. package/src/programmers/internal/application_constant.ts +29 -29
  124. package/src/programmers/internal/application_default.ts +17 -17
  125. package/src/programmers/internal/application_default_string.ts +32 -32
  126. package/src/programmers/internal/application_native.ts +32 -32
  127. package/src/programmers/internal/application_number.ts +73 -73
  128. package/src/programmers/internal/application_object.ts +153 -153
  129. package/src/programmers/internal/application_schema.ts +184 -184
  130. package/src/programmers/internal/application_string.ts +45 -45
  131. package/src/programmers/internal/application_templates.ts +27 -27
  132. package/src/programmers/internal/application_tuple.ts +29 -29
  133. package/src/programmers/internal/check_array.ts +30 -30
  134. package/src/programmers/internal/check_array_length.ts +35 -35
  135. package/src/programmers/internal/check_bigint.ts +82 -82
  136. package/src/programmers/internal/check_custom.ts +33 -33
  137. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  138. package/src/programmers/internal/check_everything.ts +28 -28
  139. package/src/programmers/internal/check_native.ts +21 -21
  140. package/src/programmers/internal/check_number.ts +177 -177
  141. package/src/programmers/internal/check_object.ts +55 -55
  142. package/src/programmers/internal/check_string.ts +25 -25
  143. package/src/programmers/internal/check_string_tags.ts +9 -15
  144. package/src/programmers/internal/check_template.ts +6 -9
  145. package/src/programmers/internal/check_union_array_like.ts +272 -272
  146. package/src/programmers/internal/check_union_tuple.ts +35 -35
  147. package/src/programmers/internal/decode_union_object.ts +73 -73
  148. package/src/programmers/internal/feature_object_entries.ts +63 -63
  149. package/src/programmers/internal/get_comment_tags.ts +23 -23
  150. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  151. package/src/programmers/internal/prune_object_properties.ts +60 -60
  152. package/src/programmers/internal/random_custom.ts +30 -30
  153. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  154. package/src/programmers/internal/stringify_native.ts +8 -8
  155. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  156. package/src/programmers/internal/template_to_pattern.ts +15 -15
  157. package/src/schemas/IJsonApplication.ts +9 -9
  158. package/src/schemas/IJsonComponents.ts +26 -26
  159. package/src/schemas/IJsonSchema.ts +121 -121
  160. package/src/transform.ts +21 -21
  161. package/src/transformers/CallExpressionTransformer.ts +174 -174
  162. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  163. package/src/transformers/FileTransformer.ts +49 -49
  164. package/src/transformers/IProject.ts +11 -11
  165. package/src/transformers/ITransformOptions.ts +62 -62
  166. package/src/transformers/ImportTransformer.ts +66 -66
  167. package/src/transformers/NodeTransformer.ts +19 -19
  168. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  169. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  170. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  171. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  172. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  173. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  174. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  175. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  176. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  177. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  178. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  179. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  180. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  181. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  182. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  183. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  184. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  185. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  187. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  189. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  190. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  191. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  192. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  193. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  194. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  195. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  196. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  197. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  198. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  199. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  200. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  201. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  202. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  203. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  204. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  205. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  206. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  207. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  208. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  209. package/src/transformers/internal/GenericTransformer.ts +99 -99
  210. package/src/typings/Atomic.ts +17 -17
  211. package/src/typings/ClassProperties.ts +5 -5
  212. package/src/typings/Customizable.ts +5 -5
  213. package/src/typings/OmitNever.ts +3 -3
  214. package/src/typings/SpecialFields.ts +3 -3
  215. package/src/typings/Writable.ts +11 -11
  216. package/src/utils/ArrayUtil.ts +49 -49
  217. package/src/utils/Escaper.ts +50 -50
  218. package/src/utils/MapUtil.ts +14 -14
  219. package/src/utils/PatternUtil.ts +30 -30
  220. package/src/utils/RandomGenerator.ts +96 -96
  221. package/src/utils/Singleton.ts +17 -17
@@ -1,121 +1,121 @@
1
- import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
- import { IMetadataTag } from "../metadata/IMetadataTag";
3
-
4
- import { Atomic } from "../typings/Atomic";
5
-
6
- export type IJsonSchema = IJsonSchema.NotUnknown | IJsonSchema.IUnknown;
7
- export namespace IJsonSchema {
8
- export type NotUnknown =
9
- | IEnumeration<"boolean">
10
- | IEnumeration<"number">
11
- | IEnumeration<"string">
12
- | IBoolean
13
- | IInteger
14
- | INumber
15
- | IString
16
- | IArray
17
- | ITuple
18
- | IOneOf
19
- | IReference
20
- | IRecursiveReference
21
- | INullOnly;
22
-
23
- /* -----------------------------------------------------------
24
- ATOMICS
25
- ----------------------------------------------------------- */
26
- export interface IEnumeration<
27
- Literal extends Exclude<Atomic.Literal, "bigint">,
28
- > extends IAtomic<Literal> {
29
- enum: Array<Atomic.Mapper[Literal]>;
30
- }
31
- export interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">>
32
- extends ISignificant<Literal> {
33
- default?: Atomic.Mapper[Literal];
34
- }
35
- export interface IString extends IAtomic<"string"> {
36
- /**
37
- * @type uint
38
- */
39
- minLength?: number;
40
- /**
41
- * @type uint
42
- */
43
- maxLength?: number;
44
- pattern?: string;
45
- format?: string;
46
- }
47
- export interface INumber extends IAtomic<"number"> {
48
- minimum?: number;
49
- maximum?: number;
50
- exclusiveMinimum?: boolean;
51
- exclusiveMaximum?: boolean;
52
- multipleOf?: number;
53
- }
54
- export interface IInteger extends IAtomic<"integer"> {
55
- /**
56
- * @type int
57
- */
58
- minimum?: number;
59
- /**
60
- * @type int
61
- */
62
- maximum?: number;
63
- exclusiveMinimum?: boolean;
64
- exclusiveMaximum?: boolean;
65
- /**
66
- * @type int
67
- */
68
- multipleOf?: number;
69
- }
70
- export interface IBoolean extends IAtomic<"boolean"> {}
71
-
72
- /* -----------------------------------------------------------
73
- OBJECTS
74
- ----------------------------------------------------------- */
75
- export interface IArray extends ISignificant<"array"> {
76
- items: IJsonSchema;
77
- /**
78
- * @type uint
79
- */
80
- minItems?: number;
81
- /**
82
- * @type uint
83
- */
84
- maxItems?: number;
85
- "x-typia-tuple"?: ITuple;
86
- }
87
- export interface ITuple extends ISignificant<"array"> {
88
- items: IJsonSchema[];
89
- }
90
- export interface IReference extends IAttribute {
91
- $ref: string;
92
- }
93
- export interface IRecursiveReference extends IAttribute {
94
- $recursiveRef: string;
95
- }
96
- export interface INullOnly extends IAttribute {
97
- type: "null";
98
- }
99
-
100
- /* -----------------------------------------------------------
101
- MISCELLANEOUS
102
- ----------------------------------------------------------- */
103
- export interface IOneOf extends IAttribute {
104
- oneOf: IJsonSchema[];
105
- }
106
- export interface IUnknown {}
107
-
108
- export interface ISignificant<Literal extends string> extends IAttribute {
109
- type: Literal;
110
- nullable: boolean;
111
- }
112
- export interface IAttribute {
113
- deprecated?: boolean;
114
- title?: string;
115
- description?: string;
116
- "x-typia-metaTags"?: IMetadataTag[];
117
- "x-typia-jsDocTags"?: IJsDocTagInfo[];
118
- "x-typia-required"?: boolean;
119
- "x-typia-rest"?: boolean;
120
- }
121
- }
1
+ import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
+ import { IMetadataTag } from "../metadata/IMetadataTag";
3
+
4
+ import { Atomic } from "../typings/Atomic";
5
+
6
+ export type IJsonSchema = IJsonSchema.NotUnknown | IJsonSchema.IUnknown;
7
+ export namespace IJsonSchema {
8
+ export type NotUnknown =
9
+ | IEnumeration<"boolean">
10
+ | IEnumeration<"number">
11
+ | IEnumeration<"string">
12
+ | IBoolean
13
+ | IInteger
14
+ | INumber
15
+ | IString
16
+ | IArray
17
+ | ITuple
18
+ | IOneOf
19
+ | IReference
20
+ | IRecursiveReference
21
+ | INullOnly;
22
+
23
+ /* -----------------------------------------------------------
24
+ ATOMICS
25
+ ----------------------------------------------------------- */
26
+ export interface IEnumeration<
27
+ Literal extends Exclude<Atomic.Literal, "bigint">,
28
+ > extends IAtomic<Literal> {
29
+ enum: Array<Atomic.Mapper[Literal]>;
30
+ }
31
+ export interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">>
32
+ extends ISignificant<Literal> {
33
+ default?: Atomic.Mapper[Literal];
34
+ }
35
+ export interface IString extends IAtomic<"string"> {
36
+ /**
37
+ * @type uint
38
+ */
39
+ minLength?: number;
40
+ /**
41
+ * @type uint
42
+ */
43
+ maxLength?: number;
44
+ pattern?: string;
45
+ format?: string;
46
+ }
47
+ export interface INumber extends IAtomic<"number"> {
48
+ minimum?: number;
49
+ maximum?: number;
50
+ exclusiveMinimum?: boolean;
51
+ exclusiveMaximum?: boolean;
52
+ multipleOf?: number;
53
+ }
54
+ export interface IInteger extends IAtomic<"integer"> {
55
+ /**
56
+ * @type int
57
+ */
58
+ minimum?: number;
59
+ /**
60
+ * @type int
61
+ */
62
+ maximum?: number;
63
+ exclusiveMinimum?: boolean;
64
+ exclusiveMaximum?: boolean;
65
+ /**
66
+ * @type int
67
+ */
68
+ multipleOf?: number;
69
+ }
70
+ export interface IBoolean extends IAtomic<"boolean"> {}
71
+
72
+ /* -----------------------------------------------------------
73
+ OBJECTS
74
+ ----------------------------------------------------------- */
75
+ export interface IArray extends ISignificant<"array"> {
76
+ items: IJsonSchema;
77
+ /**
78
+ * @type uint
79
+ */
80
+ minItems?: number;
81
+ /**
82
+ * @type uint
83
+ */
84
+ maxItems?: number;
85
+ "x-typia-tuple"?: ITuple;
86
+ }
87
+ export interface ITuple extends ISignificant<"array"> {
88
+ items: IJsonSchema[];
89
+ }
90
+ export interface IReference extends IAttribute {
91
+ $ref: string;
92
+ }
93
+ export interface IRecursiveReference extends IAttribute {
94
+ $recursiveRef: string;
95
+ }
96
+ export interface INullOnly extends IAttribute {
97
+ type: "null";
98
+ }
99
+
100
+ /* -----------------------------------------------------------
101
+ MISCELLANEOUS
102
+ ----------------------------------------------------------- */
103
+ export interface IOneOf extends IAttribute {
104
+ oneOf: IJsonSchema[];
105
+ }
106
+ export interface IUnknown {}
107
+
108
+ export interface ISignificant<Literal extends string> extends IAttribute {
109
+ type: Literal;
110
+ nullable: boolean;
111
+ }
112
+ export interface IAttribute {
113
+ deprecated?: boolean;
114
+ title?: string;
115
+ description?: string;
116
+ "x-typia-metaTags"?: IMetadataTag[];
117
+ "x-typia-jsDocTags"?: IJsDocTagInfo[];
118
+ "x-typia-required"?: boolean;
119
+ "x-typia-rest"?: boolean;
120
+ }
121
+ }
package/src/transform.ts CHANGED
@@ -1,21 +1,21 @@
1
- import ts from "typescript";
2
-
3
- import { FileTransformer } from "./transformers/FileTransformer";
4
- import { IProject } from "./transformers/IProject";
5
- import { ITransformOptions } from "./transformers/ITransformOptions";
6
-
7
- export function transform(
8
- program: ts.Program,
9
- options?: ITransformOptions,
10
- ): ts.TransformerFactory<ts.SourceFile> {
11
- const project: IProject = {
12
- program,
13
- compilerOptions: program.getCompilerOptions(),
14
- checker: program.getTypeChecker(),
15
- printer: ts.createPrinter(),
16
- options: options || {},
17
- };
18
- return (context) => (file) =>
19
- FileTransformer.transform(project, context, file);
20
- }
21
- export default transform;
1
+ import ts from "typescript";
2
+
3
+ import { FileTransformer } from "./transformers/FileTransformer";
4
+ import { IProject } from "./transformers/IProject";
5
+ import { ITransformOptions } from "./transformers/ITransformOptions";
6
+
7
+ export function transform(
8
+ program: ts.Program,
9
+ options?: ITransformOptions,
10
+ ): ts.TransformerFactory<ts.SourceFile> {
11
+ const project: IProject = {
12
+ program,
13
+ compilerOptions: program.getCompilerOptions(),
14
+ checker: program.getTypeChecker(),
15
+ printer: ts.createPrinter(),
16
+ options: options || {},
17
+ };
18
+ return (context) => (file) =>
19
+ FileTransformer.transform(project, context, file);
20
+ }
21
+ export default transform;
@@ -1,174 +1,174 @@
1
- import path from "path";
2
- import ts from "typescript";
3
-
4
- import { IProject } from "./IProject";
5
- import { ApplicationTransformer } from "./features/miscellaneous/ApplicationTransformer";
6
- import { AssertCloneTransformer } from "./features/miscellaneous/AssertCloneTransformer";
7
- import { AssertPruneTransformer } from "./features/miscellaneous/AssertPruneTransformer";
8
- import { CloneTransformer } from "./features/miscellaneous/CloneTransformer";
9
- import { CreateAssertCloneTransformer } from "./features/miscellaneous/CreateAssertCloneTransformer";
10
- import { CreateAssertPruneTransformer } from "./features/miscellaneous/CreateAssertPruneTransformer";
11
- import { CreateCloneTransformer } from "./features/miscellaneous/CreateCloneTransformer";
12
- import { CreateIsCloneTransformer } from "./features/miscellaneous/CreateIsCloneTransformer";
13
- import { CreateIsPruneTransformer } from "./features/miscellaneous/CreateIsPruneTransformer";
14
- import { CreatePruneTransformer } from "./features/miscellaneous/CreatePruneTransformer";
15
- import { CreateRandomTransformer } from "./features/miscellaneous/CreateRandomTransformer";
16
- import { CreateValidateCloneTransformer } from "./features/miscellaneous/CreateValidateCloneTransformer";
17
- import { CreateValidatePruneTransformer } from "./features/miscellaneous/CreateValidatePruneTransformer";
18
- import { IsCloneTransformer } from "./features/miscellaneous/IsCloneTransformer";
19
- import { IsPruneTransformer } from "./features/miscellaneous/IsPruneTransformer";
20
- import { LiteralsTransformer } from "./features/miscellaneous/LiteralsTransformer";
21
- import { MetadataTransformer } from "./features/miscellaneous/MetadataTransformer";
22
- import { PruneTransformer } from "./features/miscellaneous/PruneTransformer";
23
- import { RandomTransformer } from "./features/miscellaneous/RandomTransformer";
24
- import { ValidateCloneTransformer } from "./features/miscellaneous/ValidateCloneTransformer";
25
- import { ValidatePruneTransformer } from "./features/miscellaneous/ValidatePruneTransformer";
26
- import { AssertParseTransformer } from "./features/parsers/AssertParseTransformer";
27
- import { CreateAssertParseTransformer } from "./features/parsers/CreateAssertParseTransformer";
28
- import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransformer";
29
- import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
30
- import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
31
- import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
32
- import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
33
- import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
34
- import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
35
- import { CreateStringifyTransformer } from "./features/stringifiers/CreateStringifyTransformer";
36
- import { CreateValidateStringifyTransformer } from "./features/stringifiers/CreateValidateStringifyProgrammer";
37
- import { IsStringifyTransformer } from "./features/stringifiers/IsStringifyTransformer";
38
- import { StringifyTransformer } from "./features/stringifiers/StringifyTransformer";
39
- import { ValidateStringifyTransformer } from "./features/stringifiers/ValidateStringifyTransformer";
40
- import { AssertTransformer } from "./features/validators/AssertTransformer";
41
- import { CreateAssertTransformer } from "./features/validators/CreateAssertTransformer";
42
- import { CreateIsTransformer } from "./features/validators/CreateIsTransformer";
43
- import { CreateValidateTransformer } from "./features/validators/CreateValidateTransformer";
44
- import { IsTransformer } from "./features/validators/IsTransformer";
45
- import { ValidateTransformer } from "./features/validators/ValidateTransformer";
46
-
47
- export namespace CallExpressionTransformer {
48
- export function transform(
49
- project: IProject,
50
- expression: ts.CallExpression,
51
- ): ts.Expression {
52
- //----
53
- // VALIDATIONS
54
- //----
55
- // SIGNATURE DECLARATION
56
- const declaration: ts.Declaration | undefined =
57
- project.checker.getResolvedSignature(expression)?.declaration;
58
- if (!declaration) return expression;
59
-
60
- // FILE PATH
61
- const file: string = path.resolve(declaration.getSourceFile().fileName);
62
- if (
63
- file.indexOf(LIB_PATH) === -1 &&
64
- file !== SRC_PATH &&
65
- file !== CLI_PATH
66
- )
67
- return expression;
68
-
69
- //----
70
- // TRANSFORMATION
71
- //----
72
- // FUNCTION NAME
73
- const { name } = project.checker.getTypeAtLocation(declaration).symbol;
74
-
75
- // FIND TRANSFORMER
76
- const functor: (() => Task) | undefined = FUNCTORS[name];
77
- if (functor === undefined) return expression;
78
-
79
- // RETURNS WITH TRANSFORMATION
80
- return functor()(project, expression.expression, expression);
81
- }
82
- }
83
-
84
- type Task = (
85
- project: IProject,
86
- modulo: ts.LeftHandSideExpression,
87
- expression: ts.CallExpression,
88
- ) => ts.Expression;
89
-
90
- const LIB_PATH = path.join("node_modules", "typia", "lib", "module.d.ts");
91
- const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
92
- const CLI_PATH = path.resolve(
93
- path.join(__dirname, "..", "..", "..", "src", "module.ts"),
94
- );
95
-
96
- const FUNCTORS: Record<string, () => Task> = {
97
- //----
98
- // SINGLE FUNCTIONS
99
- //----
100
- // BASIC VALIDATORS
101
- assert: () => AssertTransformer.transform(false),
102
- assertType: () => AssertTransformer.transform(false),
103
- is: () => IsTransformer.transform(false),
104
- validate: () => ValidateTransformer.transform(false),
105
-
106
- // STRICT VALIDATORS
107
- assertEquals: () => AssertTransformer.transform(true),
108
- equals: () => IsTransformer.transform(true),
109
- validateEquals: () => ValidateTransformer.transform(true),
110
-
111
- // PARSE FUNCTIONS
112
- isParse: () => IsParseTransformer.transform,
113
- assertParse: () => AssertParseTransformer.transform,
114
- validateParse: () => ValidateParseTransformer.transform,
115
-
116
- // STRINGIFY FUNCTIONS
117
- application: () => ApplicationTransformer.transform,
118
- stringify: () => StringifyTransformer.transform,
119
- assertStringify: () => AssertStringifyTransformer.transform,
120
- isStringify: () => IsStringifyTransformer.transform,
121
- validateStringify: () => ValidateStringifyTransformer.transform,
122
-
123
- // MISC
124
- metadata: () => MetadataTransformer.transform,
125
- random: () => RandomTransformer.transform,
126
- literals: () => LiteralsTransformer.transform,
127
-
128
- clone: () => CloneTransformer.transform,
129
- assertClone: () => AssertCloneTransformer.transform,
130
- isClone: () => IsCloneTransformer.transform,
131
- validateClone: () => ValidateCloneTransformer.transform,
132
-
133
- prune: () => PruneTransformer.transform,
134
- assertPrune: () => AssertPruneTransformer.transform,
135
- isPrune: () => IsPruneTransformer.transform,
136
- validatePrune: () => ValidatePruneTransformer.transform,
137
-
138
- //----
139
- // FACTORY FUNCTIONS
140
- //----
141
- // BASIC VALIDATORS
142
- createAssert: () => CreateAssertTransformer.transform(false),
143
- createAssertType: () => CreateAssertTransformer.transform(false),
144
- createIs: () => CreateIsTransformer.transform(false),
145
- createValidate: () => CreateValidateTransformer.transform(false),
146
-
147
- // STRICT VALIDATORS
148
- createAssertEquals: () => CreateAssertTransformer.transform(true),
149
- createEquals: () => CreateIsTransformer.transform(true),
150
- createValidateEquals: () => CreateValidateTransformer.transform(true),
151
-
152
- // PARSE FUNCTIONS
153
- createIsParse: () => CreateIsParseTransformer.transform,
154
- createAssertParse: () => CreateAssertParseTransformer.transform,
155
- createValidateParse: () => CreateValidateParseTransformer.transform,
156
-
157
- // STRINGIFY FUNCTIONS
158
- createStringify: () => CreateStringifyTransformer.transform,
159
- createAssertStringify: () => CreateAssertStringifyTransformer.transform,
160
- createIsStringify: () => CreateIsStringifyTransformer.transform,
161
- createValidateStringify: () => CreateValidateStringifyTransformer.transform,
162
-
163
- // MISC
164
- createRandom: () => CreateRandomTransformer.transform,
165
- createClone: () => CreateCloneTransformer.transform,
166
- createAssertClone: () => CreateAssertCloneTransformer.transform,
167
- createIsClone: () => CreateIsCloneTransformer.transform,
168
- createValidateClone: () => CreateValidateCloneTransformer.transform,
169
-
170
- createPrune: () => CreatePruneTransformer.transform,
171
- createAssertPrune: () => CreateAssertPruneTransformer.transform,
172
- createIsPrune: () => CreateIsPruneTransformer.transform,
173
- createValidatePrune: () => CreateValidatePruneTransformer.transform,
174
- };
1
+ import path from "path";
2
+ import ts from "typescript";
3
+
4
+ import { IProject } from "./IProject";
5
+ import { ApplicationTransformer } from "./features/miscellaneous/ApplicationTransformer";
6
+ import { AssertCloneTransformer } from "./features/miscellaneous/AssertCloneTransformer";
7
+ import { AssertPruneTransformer } from "./features/miscellaneous/AssertPruneTransformer";
8
+ import { CloneTransformer } from "./features/miscellaneous/CloneTransformer";
9
+ import { CreateAssertCloneTransformer } from "./features/miscellaneous/CreateAssertCloneTransformer";
10
+ import { CreateAssertPruneTransformer } from "./features/miscellaneous/CreateAssertPruneTransformer";
11
+ import { CreateCloneTransformer } from "./features/miscellaneous/CreateCloneTransformer";
12
+ import { CreateIsCloneTransformer } from "./features/miscellaneous/CreateIsCloneTransformer";
13
+ import { CreateIsPruneTransformer } from "./features/miscellaneous/CreateIsPruneTransformer";
14
+ import { CreatePruneTransformer } from "./features/miscellaneous/CreatePruneTransformer";
15
+ import { CreateRandomTransformer } from "./features/miscellaneous/CreateRandomTransformer";
16
+ import { CreateValidateCloneTransformer } from "./features/miscellaneous/CreateValidateCloneTransformer";
17
+ import { CreateValidatePruneTransformer } from "./features/miscellaneous/CreateValidatePruneTransformer";
18
+ import { IsCloneTransformer } from "./features/miscellaneous/IsCloneTransformer";
19
+ import { IsPruneTransformer } from "./features/miscellaneous/IsPruneTransformer";
20
+ import { LiteralsTransformer } from "./features/miscellaneous/LiteralsTransformer";
21
+ import { MetadataTransformer } from "./features/miscellaneous/MetadataTransformer";
22
+ import { PruneTransformer } from "./features/miscellaneous/PruneTransformer";
23
+ import { RandomTransformer } from "./features/miscellaneous/RandomTransformer";
24
+ import { ValidateCloneTransformer } from "./features/miscellaneous/ValidateCloneTransformer";
25
+ import { ValidatePruneTransformer } from "./features/miscellaneous/ValidatePruneTransformer";
26
+ import { AssertParseTransformer } from "./features/parsers/AssertParseTransformer";
27
+ import { CreateAssertParseTransformer } from "./features/parsers/CreateAssertParseTransformer";
28
+ import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransformer";
29
+ import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
30
+ import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
31
+ import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
32
+ import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
33
+ import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
34
+ import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
35
+ import { CreateStringifyTransformer } from "./features/stringifiers/CreateStringifyTransformer";
36
+ import { CreateValidateStringifyTransformer } from "./features/stringifiers/CreateValidateStringifyProgrammer";
37
+ import { IsStringifyTransformer } from "./features/stringifiers/IsStringifyTransformer";
38
+ import { StringifyTransformer } from "./features/stringifiers/StringifyTransformer";
39
+ import { ValidateStringifyTransformer } from "./features/stringifiers/ValidateStringifyTransformer";
40
+ import { AssertTransformer } from "./features/validators/AssertTransformer";
41
+ import { CreateAssertTransformer } from "./features/validators/CreateAssertTransformer";
42
+ import { CreateIsTransformer } from "./features/validators/CreateIsTransformer";
43
+ import { CreateValidateTransformer } from "./features/validators/CreateValidateTransformer";
44
+ import { IsTransformer } from "./features/validators/IsTransformer";
45
+ import { ValidateTransformer } from "./features/validators/ValidateTransformer";
46
+
47
+ export namespace CallExpressionTransformer {
48
+ export function transform(
49
+ project: IProject,
50
+ expression: ts.CallExpression,
51
+ ): ts.Expression {
52
+ //----
53
+ // VALIDATIONS
54
+ //----
55
+ // SIGNATURE DECLARATION
56
+ const declaration: ts.Declaration | undefined =
57
+ project.checker.getResolvedSignature(expression)?.declaration;
58
+ if (!declaration) return expression;
59
+
60
+ // FILE PATH
61
+ const file: string = path.resolve(declaration.getSourceFile().fileName);
62
+ if (
63
+ file.indexOf(LIB_PATH) === -1 &&
64
+ file !== SRC_PATH &&
65
+ file !== CLI_PATH
66
+ )
67
+ return expression;
68
+
69
+ //----
70
+ // TRANSFORMATION
71
+ //----
72
+ // FUNCTION NAME
73
+ const { name } = project.checker.getTypeAtLocation(declaration).symbol;
74
+
75
+ // FIND TRANSFORMER
76
+ const functor: (() => Task) | undefined = FUNCTORS[name];
77
+ if (functor === undefined) return expression;
78
+
79
+ // RETURNS WITH TRANSFORMATION
80
+ return functor()(project, expression.expression, expression);
81
+ }
82
+ }
83
+
84
+ type Task = (
85
+ project: IProject,
86
+ modulo: ts.LeftHandSideExpression,
87
+ expression: ts.CallExpression,
88
+ ) => ts.Expression;
89
+
90
+ const LIB_PATH = path.join("node_modules", "typia", "lib", "module.d.ts");
91
+ const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
92
+ const CLI_PATH = path.resolve(
93
+ path.join(__dirname, "..", "..", "..", "src", "module.ts"),
94
+ );
95
+
96
+ const FUNCTORS: Record<string, () => Task> = {
97
+ //----
98
+ // SINGLE FUNCTIONS
99
+ //----
100
+ // BASIC VALIDATORS
101
+ assert: () => AssertTransformer.transform(false),
102
+ assertType: () => AssertTransformer.transform(false),
103
+ is: () => IsTransformer.transform(false),
104
+ validate: () => ValidateTransformer.transform(false),
105
+
106
+ // STRICT VALIDATORS
107
+ assertEquals: () => AssertTransformer.transform(true),
108
+ equals: () => IsTransformer.transform(true),
109
+ validateEquals: () => ValidateTransformer.transform(true),
110
+
111
+ // PARSE FUNCTIONS
112
+ isParse: () => IsParseTransformer.transform,
113
+ assertParse: () => AssertParseTransformer.transform,
114
+ validateParse: () => ValidateParseTransformer.transform,
115
+
116
+ // STRINGIFY FUNCTIONS
117
+ application: () => ApplicationTransformer.transform,
118
+ stringify: () => StringifyTransformer.transform,
119
+ assertStringify: () => AssertStringifyTransformer.transform,
120
+ isStringify: () => IsStringifyTransformer.transform,
121
+ validateStringify: () => ValidateStringifyTransformer.transform,
122
+
123
+ // MISC
124
+ metadata: () => MetadataTransformer.transform,
125
+ random: () => RandomTransformer.transform,
126
+ literals: () => LiteralsTransformer.transform,
127
+
128
+ clone: () => CloneTransformer.transform,
129
+ assertClone: () => AssertCloneTransformer.transform,
130
+ isClone: () => IsCloneTransformer.transform,
131
+ validateClone: () => ValidateCloneTransformer.transform,
132
+
133
+ prune: () => PruneTransformer.transform,
134
+ assertPrune: () => AssertPruneTransformer.transform,
135
+ isPrune: () => IsPruneTransformer.transform,
136
+ validatePrune: () => ValidatePruneTransformer.transform,
137
+
138
+ //----
139
+ // FACTORY FUNCTIONS
140
+ //----
141
+ // BASIC VALIDATORS
142
+ createAssert: () => CreateAssertTransformer.transform(false),
143
+ createAssertType: () => CreateAssertTransformer.transform(false),
144
+ createIs: () => CreateIsTransformer.transform(false),
145
+ createValidate: () => CreateValidateTransformer.transform(false),
146
+
147
+ // STRICT VALIDATORS
148
+ createAssertEquals: () => CreateAssertTransformer.transform(true),
149
+ createEquals: () => CreateIsTransformer.transform(true),
150
+ createValidateEquals: () => CreateValidateTransformer.transform(true),
151
+
152
+ // PARSE FUNCTIONS
153
+ createIsParse: () => CreateIsParseTransformer.transform,
154
+ createAssertParse: () => CreateAssertParseTransformer.transform,
155
+ createValidateParse: () => CreateValidateParseTransformer.transform,
156
+
157
+ // STRINGIFY FUNCTIONS
158
+ createStringify: () => CreateStringifyTransformer.transform,
159
+ createAssertStringify: () => CreateAssertStringifyTransformer.transform,
160
+ createIsStringify: () => CreateIsStringifyTransformer.transform,
161
+ createValidateStringify: () => CreateValidateStringifyTransformer.transform,
162
+
163
+ // MISC
164
+ createRandom: () => CreateRandomTransformer.transform,
165
+ createClone: () => CreateCloneTransformer.transform,
166
+ createAssertClone: () => CreateAssertCloneTransformer.transform,
167
+ createIsClone: () => CreateIsCloneTransformer.transform,
168
+ createValidateClone: () => CreateValidateCloneTransformer.transform,
169
+
170
+ createPrune: () => CreatePruneTransformer.transform,
171
+ createAssertPrune: () => CreateAssertPruneTransformer.transform,
172
+ createIsPrune: () => CreateIsPruneTransformer.transform,
173
+ createValidatePrune: () => CreateValidatePruneTransformer.transform,
174
+ };