typia 5.2.2 → 5.2.3

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 (74) hide show
  1. package/lib/Primitive.d.ts +1 -1
  2. package/lib/executable/setup/CommandExecutor.js +2 -2
  3. package/lib/executable/setup/CommandExecutor.js.map +1 -1
  4. package/package.json +1 -2
  5. package/src/CamelCase.ts +116 -116
  6. package/src/PascalCase.ts +116 -116
  7. package/src/Primitive.ts +135 -135
  8. package/src/Resolved.ts +116 -116
  9. package/src/SnakeCase.ts +156 -156
  10. package/src/executable/TypiaSetupWizard.ts +142 -142
  11. package/src/executable/setup/CommandExecutor.ts +2 -2
  12. package/src/factories/JsonMetadataFactory.ts +50 -50
  13. package/src/factories/MetadataCollection.ts +282 -282
  14. package/src/functional/$convention.ts +40 -40
  15. package/src/functional/Namespace.ts +164 -164
  16. package/src/module.ts +662 -662
  17. package/src/notations.ts +855 -855
  18. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  19. package/src/programmers/helpers/NotationJoiner.ts +146 -146
  20. package/src/programmers/misc/MiscCloneProgrammer.ts +790 -790
  21. package/src/programmers/misc/MiscPruneProgrammer.ts +552 -552
  22. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +72 -72
  23. package/src/programmers/notations/NotationGeneralProgrammer.ts +720 -720
  24. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +79 -79
  25. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +88 -88
  26. package/src/transformers/CallExpressionTransformer.ts +380 -380
  27. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  28. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  29. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +12 -12
  30. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  31. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  32. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +12 -12
  33. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  34. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +12 -12
  35. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  36. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  37. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  38. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  39. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  40. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  41. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  42. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  43. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  44. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +12 -12
  45. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +12 -12
  46. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  47. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  48. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  49. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  50. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +12 -12
  51. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +12 -12
  52. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  53. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  54. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  55. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  56. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  57. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  58. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  59. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  60. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  61. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +17 -17
  62. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  63. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  64. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +17 -17
  65. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  66. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  67. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  68. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  69. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +12 -12
  70. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +12 -12
  71. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  72. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  73. package/src/utils/NamingConvention.ts +91 -91
  74. package/src/utils/StringUtil.ts +4 -4
@@ -1,380 +1,380 @@
1
- import path from "path";
2
- import ts from "typescript";
3
-
4
- import { NamingConvention } from "../utils/NamingConvention";
5
-
6
- import { IProject } from "./IProject";
7
- import { AssertTransformer } from "./features/AssertTransformer";
8
- import { CreateAssertTransformer } from "./features/CreateAssertTransformer";
9
- import { CreateIsTransformer } from "./features/CreateIsTransformer";
10
- import { CreateRandomTransformer } from "./features/CreateRandomTransformer";
11
- import { CreateValidateTransformer } from "./features/CreateValidateTransformer";
12
- import { IsTransformer } from "./features/IsTransformer";
13
- import { RandomTransformer } from "./features/RandomTransformer";
14
- import { ValidateTransformer } from "./features/ValidateTransformer";
15
- import { CreateHttpAssertHeadersTransformer } from "./features/http/CreateHttpAssertHeadersTransformer";
16
- import { CreateHttpAssertQueryTransformer } from "./features/http/CreateHttpAssertQueryTransformer";
17
- import { CreateHttpHeadersTransformer } from "./features/http/CreateHttpHeadersTransformer";
18
- import { CreateHttpIsHeadersTransformer } from "./features/http/CreateHttpIsHeadersTransformer";
19
- import { CreateHttpIsQueryTransformer } from "./features/http/CreateHttpIsQueryTransformer";
20
- import { CreateHttpParameterTransformer } from "./features/http/CreateHttpParameterTransformer";
21
- import { CreateHttpQueryTransformer } from "./features/http/CreateHttpQueryTransformer";
22
- import { CreateHttpValidateHeadersTransformer } from "./features/http/CreateHttpValidateHeadersTransformer";
23
- import { CreateHttpValidateQueryTransformer } from "./features/http/CreateHttpValidateQueryTransformer";
24
- import { HttpAssertHeadersTransformer } from "./features/http/HttpAssertHeadersTransformer";
25
- import { HttpAssertQueryTransformer } from "./features/http/HttpAssertQueryTransformer";
26
- import { HttpHeadersTransformer } from "./features/http/HttpHeadersTransformer";
27
- import { HttpIsHeadersTransformer } from "./features/http/HttpIsHeadersTransformer";
28
- import { HttpIsQueryTransformer } from "./features/http/HttpIsQueryTransformer";
29
- import { HttpParameterTransformer } from "./features/http/HttpParameterTransformer";
30
- import { HttpQueryTransformer } from "./features/http/HttpQueryTransformer";
31
- import { HttpValidateHeadersTransformer } from "./features/http/HttpValidateHeadersTransformer";
32
- import { HttpValidateQueryTransformer } from "./features/http/HttpValidateQueryTransformer";
33
- import { JsonApplicationTransformer } from "./features/json/JsonApplicationTransformer";
34
- import { JsonAssertParseTransformer } from "./features/json/JsonAssertParseTransformer";
35
- import { JsonAssertStringifyTransformer } from "./features/json/JsonAssertStringifyTransformer";
36
- import { JsonCreateAssertParseTransformer } from "./features/json/JsonCreateAssertParseTransformer";
37
- import { JsonCreateAssertStringifyTransformer } from "./features/json/JsonCreateAssertStringifyTransformer";
38
- import { JsonCreateIsParseTransformer } from "./features/json/JsonCreateIsParseTransformer";
39
- import { JsonCreateIsStringifyTransformer } from "./features/json/JsonCreateIsStringifyTransformer";
40
- import { JsonCreateStringifyTransformer } from "./features/json/JsonCreateStringifyTransformer";
41
- import { JsonCreateValidateParseTransformer } from "./features/json/JsonCreateValidateParseTransformer";
42
- import { JsonCreateValidateStringifyTransformer } from "./features/json/JsonCreateValidateStringifyProgrammer";
43
- import { JsonIsParseTransformer } from "./features/json/JsonIsParseTransformer";
44
- import { JsonIsStringifyTransformer } from "./features/json/JsonIsStringifyTransformer";
45
- import { JsonStringifyTransformer } from "./features/json/JsonStringifyTransformer";
46
- import { JsonValidateParseTransformer } from "./features/json/JsonValidateParseTransformer";
47
- import { JsonValidateStringifyTransformer } from "./features/json/JsonValidateStringifyTransformer";
48
- import { MetadataTransformer } from "./features/misc/MetadataTransformer";
49
- import { MiscAssertCloneTransformer } from "./features/misc/MiscAssertCloneTransformer";
50
- import { MiscAssertPruneTransformer } from "./features/misc/MiscAssertPruneTransformer";
51
- import { MiscCloneTransformer } from "./features/misc/MiscCloneTransformer";
52
- import { MiscCreateAssertCloneTransformer } from "./features/misc/MiscCreateAssertCloneTransformer";
53
- import { MiscCreateAssertPruneTransformer } from "./features/misc/MiscCreateAssertPruneTransformer";
54
- import { MiscCreateCloneTransformer } from "./features/misc/MiscCreateCloneTransformer";
55
- import { MiscCreateIsCloneTransformer } from "./features/misc/MiscCreateIsCloneTransformer";
56
- import { MiscCreateIsPruneTransformer } from "./features/misc/MiscCreateIsPruneTransformer";
57
- import { MiscCreatePruneTransformer } from "./features/misc/MiscCreatePruneTransformer";
58
- import { MiscCreateValidateCloneTransformer } from "./features/misc/MiscCreateValidateCloneTransformer";
59
- import { MiscCreateValidatePruneTransformer } from "./features/misc/MiscCreateValidatePruneTransformer";
60
- import { MiscIsCloneTransformer } from "./features/misc/MiscIsCloneTransformer";
61
- import { MiscIsPruneTransformer } from "./features/misc/MiscIsPruneTransformer";
62
- import { MiscLiteralsTransformer } from "./features/misc/MiscLiteralsTransformer";
63
- import { MiscPruneTransformer } from "./features/misc/MiscPruneTransformer";
64
- import { MiscValidateCloneTransformer } from "./features/misc/MiscValidateCloneTransformer";
65
- import { MiscValidatePruneTransformer } from "./features/misc/MiscValidatePruneTransformer";
66
- import { NotationAssertGeneralTransformer } from "./features/notations/NotationAssertGeneralTransformer";
67
- import { NotationCreateAssertGeneralTransformer } from "./features/notations/NotationCreateAssertGeneralTransformer";
68
- import { NotationCreateGeneralTransformer } from "./features/notations/NotationCreateGeneralTransformer";
69
- import { NotationCreateIsGeneralTransformer } from "./features/notations/NotationCreateIsGeneralTransformer";
70
- import { NotationCreateValidateGeneralTransformer } from "./features/notations/NotationCreateValidateGeneralTransformer";
71
- import { NotationGeneralTransformer } from "./features/notations/NotationGeneralTransformer";
72
- import { NotationIsGeneralTransformer } from "./features/notations/NotationIsGeneralTransformer";
73
- import { NotationValidateGeneralTransformer } from "./features/notations/NotationValidateGeneralTransformer";
74
- import { ProtobufAssertDecodeTransformer } from "./features/protobuf/ProtobufAssertDecodeTransformer";
75
- import { ProtobufAssertEncodeTransformer } from "./features/protobuf/ProtobufAssertEncodeTransformer";
76
- import { ProtobufCreateAssertDecodeTransformer } from "./features/protobuf/ProtobufCreateAssertDecodeTransformer";
77
- import { ProtobufCreateAssertEncodeTransformer } from "./features/protobuf/ProtobufCreateAssertEncodeTransformer";
78
- import { ProtobufCreateDecodeTransformer } from "./features/protobuf/ProtobufCreateDecodeTransformer";
79
- import { ProtobufCreateEncodeTransformer } from "./features/protobuf/ProtobufCreateEncodeTransformer";
80
- import { ProtobufCreateIsDecodeTransformer } from "./features/protobuf/ProtobufCreateIsDecodeTransformer";
81
- import { ProtobufCreateIsEncodeTransformer } from "./features/protobuf/ProtobufCreateIsEncodeTransformer";
82
- import { ProtobufCreateValidateDecodeTransformer } from "./features/protobuf/ProtobufCreateValidateDecodeTransformer";
83
- import { ProtobufCreateValidateEncodeTransformer } from "./features/protobuf/ProtobufCreateValidateEncodeTransformer";
84
- import { ProtobufDecodeTransformer } from "./features/protobuf/ProtobufDecodeTransformer";
85
- import { ProtobufEncodeTransformer } from "./features/protobuf/ProtobufEncodeTransformer";
86
- import { ProtobufIsDecodeTransformer } from "./features/protobuf/ProtobufIsDecodeTransformer";
87
- import { ProtobufIsEncodeTransformer } from "./features/protobuf/ProtobufIsEncodeTransformer";
88
- import { ProtobufMessageTransformer } from "./features/protobuf/ProtobufMessageTransformer";
89
- import { ProtobufValidateDecodeTransformer } from "./features/protobuf/ProtobufValidateDecodeTransformer";
90
- import { ProtobufValidateEncodeTransformer } from "./features/protobuf/ProtobufValidateEncodeTransformer";
91
-
92
- export namespace CallExpressionTransformer {
93
- export const transform =
94
- (project: IProject) =>
95
- (expression: ts.CallExpression): ts.Expression | null => {
96
- //----
97
- // VALIDATIONS
98
- //----
99
- // SIGNATURE DECLARATION
100
- const declaration: ts.Declaration | undefined =
101
- project.checker.getResolvedSignature(expression)?.declaration;
102
- if (!declaration) return expression;
103
-
104
- // FILE PATH
105
- const location: string = path.resolve(
106
- declaration.getSourceFile().fileName,
107
- );
108
- if (isTarget(location) === false) return expression;
109
-
110
- //----
111
- // TRANSFORMATION
112
- //----
113
- // FUNCTION NAME
114
- const module: string = location
115
- .split(path.sep)
116
- .at(-1)!
117
- .split(".")[0]!;
118
- const { name } =
119
- project.checker.getTypeAtLocation(declaration).symbol;
120
-
121
- // FIND TRANSFORMER
122
- const functor: (() => Task) | undefined = FUNCTORS[module]?.[name];
123
- if (functor === undefined) return expression;
124
-
125
- // RETURNS WITH TRANSFORMATION
126
- const result: ts.Expression | null = functor()(project)(
127
- expression.expression,
128
- )(expression);
129
- return result ?? expression;
130
- };
131
-
132
- const isTarget = (location: string): boolean => {
133
- const files: string[] = Object.keys(FUNCTORS);
134
- return files.some(
135
- (f) =>
136
- location.includes(
137
- path.join("node_modules", "typia", "lib", `${f}.d.ts`),
138
- ) ||
139
- location ===
140
- path.resolve(path.join(__dirname, "..", `${f}.ts`)) ||
141
- location ===
142
- path.resolve(
143
- path.join(
144
- __dirname,
145
- "..",
146
- "..",
147
- "..",
148
- "src",
149
- `${f}.ts`,
150
- ),
151
- ),
152
- );
153
- };
154
- }
155
-
156
- type Task = (
157
- project: IProject,
158
- ) => (
159
- modulo: ts.LeftHandSideExpression,
160
- ) => (expression: ts.CallExpression) => ts.Expression | null;
161
-
162
- const FUNCTORS: Record<string, Record<string, () => Task>> = {
163
- module: {
164
- // BASIC
165
- assert: () => AssertTransformer.transform(false),
166
- assertType: () => AssertTransformer.transform(false),
167
- is: () => IsTransformer.transform(false),
168
- validate: () => ValidateTransformer.transform(false),
169
-
170
- // STRICT
171
- assertEquals: () => AssertTransformer.transform(true),
172
- equals: () => IsTransformer.transform(true),
173
- validateEquals: () => ValidateTransformer.transform(true),
174
-
175
- // RANDOM + INTERNAL
176
- random: () => RandomTransformer.transform,
177
- metadata: () => (P) => () => MetadataTransformer.transform(P),
178
-
179
- // FACTORIES
180
- createAssert: () => CreateAssertTransformer.transform(false),
181
- createAssertType: () => CreateAssertTransformer.transform(false),
182
- createIs: () => CreateIsTransformer.transform(false),
183
- createValidate: () => CreateValidateTransformer.transform(false),
184
- createAssertEquals: () => CreateAssertTransformer.transform(true),
185
- createEquals: () => CreateIsTransformer.transform(true),
186
- createValidateEquals: () => CreateValidateTransformer.transform(true),
187
- createRandom: () => CreateRandomTransformer.transform,
188
- },
189
- http: {
190
- // HEADERS
191
- headers: () => HttpHeadersTransformer.transform,
192
- isHeaders: () => HttpIsHeadersTransformer.transform,
193
- assertHeaders: () => HttpAssertHeadersTransformer.transform,
194
- validateHeaders: () => HttpValidateHeadersTransformer.transform,
195
-
196
- // PARAMETER
197
- parameter: () => HttpParameterTransformer.transform,
198
-
199
- // QUERY
200
- query: () => HttpQueryTransformer.transform,
201
- isQuery: () => HttpIsQueryTransformer.transform,
202
- assertQuery: () => HttpAssertQueryTransformer.transform,
203
- validateQuery: () => HttpValidateQueryTransformer.transform,
204
-
205
- // FACTORIES
206
- createHeaders: () => CreateHttpHeadersTransformer.transform,
207
- createIsHeaders: () => CreateHttpIsHeadersTransformer.transform,
208
- createAssertHeaders: () => CreateHttpAssertHeadersTransformer.transform,
209
- createValidateHeaders: () =>
210
- CreateHttpValidateHeadersTransformer.transform,
211
- createParameter: () => CreateHttpParameterTransformer.transform,
212
- createQuery: () => CreateHttpQueryTransformer.transform,
213
- createIsQuery: () => CreateHttpIsQueryTransformer.transform,
214
- createAssertQuery: () => CreateHttpAssertQueryTransformer.transform,
215
- createValidateQuery: () => CreateHttpValidateQueryTransformer.transform,
216
- },
217
- json: {
218
- // SCHEMA
219
- application: () => (P) => () => JsonApplicationTransformer.transform(P),
220
-
221
- // PARSER
222
- isParse: () => JsonIsParseTransformer.transform,
223
- assertParse: () => JsonAssertParseTransformer.transform,
224
- validateParse: () => JsonValidateParseTransformer.transform,
225
-
226
- // STRINGIFY
227
- stringify: () => JsonStringifyTransformer.transform,
228
- assertStringify: () => JsonAssertStringifyTransformer.transform,
229
- isStringify: () => JsonIsStringifyTransformer.transform,
230
- validateStringify: () => JsonValidateStringifyTransformer.transform,
231
-
232
- // FACTORIES
233
- createIsParse: () => JsonCreateIsParseTransformer.transform,
234
- createAssertParse: () => JsonCreateAssertParseTransformer.transform,
235
- createValidateParse: () => JsonCreateValidateParseTransformer.transform,
236
- createStringify: () => JsonCreateStringifyTransformer.transform,
237
- createAssertStringify: () =>
238
- JsonCreateAssertStringifyTransformer.transform,
239
- createIsStringify: () => JsonCreateIsStringifyTransformer.transform,
240
- createValidateStringify: () =>
241
- JsonCreateValidateStringifyTransformer.transform,
242
- },
243
- protobuf: {
244
- // SCHEMA
245
- message: () => ProtobufMessageTransformer.transform,
246
-
247
- // ENCODE
248
- encode: () => ProtobufEncodeTransformer.transform,
249
- assertEncode: () => ProtobufAssertEncodeTransformer.transform,
250
- isEncode: () => ProtobufIsEncodeTransformer.transform,
251
- validateEncode: () => ProtobufValidateEncodeTransformer.transform,
252
-
253
- // DECODE
254
- decode: () => ProtobufDecodeTransformer.transform,
255
- assertDecode: () => ProtobufAssertDecodeTransformer.transform,
256
- isDecode: () => ProtobufIsDecodeTransformer.transform,
257
- validateDecode: () => ProtobufValidateDecodeTransformer.transform,
258
-
259
- // FACTORIES
260
- createEncode: () => ProtobufCreateEncodeTransformer.transform,
261
- createAssertEncode: () =>
262
- ProtobufCreateAssertEncodeTransformer.transform,
263
- createIsEncode: () => ProtobufCreateIsEncodeTransformer.transform,
264
- createValidateEncode: () =>
265
- ProtobufCreateValidateEncodeTransformer.transform,
266
- createDecode: () => ProtobufCreateDecodeTransformer.transform,
267
- createAssertDecode: () =>
268
- ProtobufCreateAssertDecodeTransformer.transform,
269
- createIsDecode: () => ProtobufCreateIsDecodeTransformer.transform,
270
- createValidateDecode: () =>
271
- ProtobufCreateValidateDecodeTransformer.transform,
272
- },
273
- misc: {
274
- literals: () => (project) => () =>
275
- MiscLiteralsTransformer.transform(project),
276
-
277
- // CLONE
278
- clone: () => MiscCloneTransformer.transform,
279
- assertClone: () => MiscAssertCloneTransformer.transform,
280
- isClone: () => MiscIsCloneTransformer.transform,
281
- validateClone: () => MiscValidateCloneTransformer.transform,
282
-
283
- // PRUNE
284
- prune: () => MiscPruneTransformer.transform,
285
- assertPrune: () => MiscAssertPruneTransformer.transform,
286
- isPrune: () => MiscIsPruneTransformer.transform,
287
- validatePrune: () => MiscValidatePruneTransformer.transform,
288
-
289
- // FACTORIES
290
- createClone: () => MiscCreateCloneTransformer.transform,
291
- createAssertClone: () => MiscCreateAssertCloneTransformer.transform,
292
- createIsClone: () => MiscCreateIsCloneTransformer.transform,
293
- createValidateClone: () => MiscCreateValidateCloneTransformer.transform,
294
- createPrune: () => MiscCreatePruneTransformer.transform,
295
- createAssertPrune: () => MiscCreateAssertPruneTransformer.transform,
296
- createIsPrune: () => MiscCreateIsPruneTransformer.transform,
297
- createValidatePrune: () => MiscCreateValidatePruneTransformer.transform,
298
- },
299
- notations: {
300
- // CAMEL
301
- camel: () =>
302
- NotationGeneralTransformer.transform(NamingConvention.camel),
303
- assertCamel: () =>
304
- NotationAssertGeneralTransformer.transform(NamingConvention.camel),
305
- isCamel: () =>
306
- NotationIsGeneralTransformer.transform(NamingConvention.camel),
307
- validateCamel: () =>
308
- NotationValidateGeneralTransformer.transform(
309
- NamingConvention.camel,
310
- ),
311
-
312
- // PASCAL
313
- pascal: () =>
314
- NotationGeneralTransformer.transform(NamingConvention.pascal),
315
- assertPascal: () =>
316
- NotationAssertGeneralTransformer.transform(NamingConvention.pascal),
317
- isPascal: () =>
318
- NotationIsGeneralTransformer.transform(NamingConvention.pascal),
319
- validatePascal: () =>
320
- NotationValidateGeneralTransformer.transform(
321
- NamingConvention.pascal,
322
- ),
323
-
324
- // SNAKE
325
- snake: () =>
326
- NotationGeneralTransformer.transform(NamingConvention.snake),
327
- assertSnake: () =>
328
- NotationAssertGeneralTransformer.transform(NamingConvention.snake),
329
- isSnake: () =>
330
- NotationIsGeneralTransformer.transform(NamingConvention.snake),
331
- validateSnake: () =>
332
- NotationValidateGeneralTransformer.transform(
333
- NamingConvention.snake,
334
- ),
335
-
336
- // FACTORIES
337
- createCamel: () =>
338
- NotationCreateGeneralTransformer.transform(NamingConvention.camel),
339
- createAssertCamel: () =>
340
- NotationCreateAssertGeneralTransformer.transform(
341
- NamingConvention.camel,
342
- ),
343
- createIsCamel: () =>
344
- NotationCreateIsGeneralTransformer.transform(
345
- NamingConvention.camel,
346
- ),
347
- createValidateCamel: () =>
348
- NotationCreateValidateGeneralTransformer.transform(
349
- NamingConvention.camel,
350
- ),
351
- createPascal: () =>
352
- NotationCreateGeneralTransformer.transform(NamingConvention.pascal),
353
- createAssertPascal: () =>
354
- NotationCreateAssertGeneralTransformer.transform(
355
- NamingConvention.pascal,
356
- ),
357
- createIsPascal: () =>
358
- NotationCreateIsGeneralTransformer.transform(
359
- NamingConvention.pascal,
360
- ),
361
- createValidatePascal: () =>
362
- NotationCreateValidateGeneralTransformer.transform(
363
- NamingConvention.pascal,
364
- ),
365
- createSnake: () =>
366
- NotationCreateGeneralTransformer.transform(NamingConvention.snake),
367
- createAssertSnake: () =>
368
- NotationCreateAssertGeneralTransformer.transform(
369
- NamingConvention.snake,
370
- ),
371
- createIsSnake: () =>
372
- NotationCreateIsGeneralTransformer.transform(
373
- NamingConvention.snake,
374
- ),
375
- createValidateSnake: () =>
376
- NotationCreateValidateGeneralTransformer.transform(
377
- NamingConvention.snake,
378
- ),
379
- },
380
- };
1
+ import path from "path";
2
+ import ts from "typescript";
3
+
4
+ import { NamingConvention } from "../utils/NamingConvention";
5
+
6
+ import { IProject } from "./IProject";
7
+ import { AssertTransformer } from "./features/AssertTransformer";
8
+ import { CreateAssertTransformer } from "./features/CreateAssertTransformer";
9
+ import { CreateIsTransformer } from "./features/CreateIsTransformer";
10
+ import { CreateRandomTransformer } from "./features/CreateRandomTransformer";
11
+ import { CreateValidateTransformer } from "./features/CreateValidateTransformer";
12
+ import { IsTransformer } from "./features/IsTransformer";
13
+ import { RandomTransformer } from "./features/RandomTransformer";
14
+ import { ValidateTransformer } from "./features/ValidateTransformer";
15
+ import { CreateHttpAssertHeadersTransformer } from "./features/http/CreateHttpAssertHeadersTransformer";
16
+ import { CreateHttpAssertQueryTransformer } from "./features/http/CreateHttpAssertQueryTransformer";
17
+ import { CreateHttpHeadersTransformer } from "./features/http/CreateHttpHeadersTransformer";
18
+ import { CreateHttpIsHeadersTransformer } from "./features/http/CreateHttpIsHeadersTransformer";
19
+ import { CreateHttpIsQueryTransformer } from "./features/http/CreateHttpIsQueryTransformer";
20
+ import { CreateHttpParameterTransformer } from "./features/http/CreateHttpParameterTransformer";
21
+ import { CreateHttpQueryTransformer } from "./features/http/CreateHttpQueryTransformer";
22
+ import { CreateHttpValidateHeadersTransformer } from "./features/http/CreateHttpValidateHeadersTransformer";
23
+ import { CreateHttpValidateQueryTransformer } from "./features/http/CreateHttpValidateQueryTransformer";
24
+ import { HttpAssertHeadersTransformer } from "./features/http/HttpAssertHeadersTransformer";
25
+ import { HttpAssertQueryTransformer } from "./features/http/HttpAssertQueryTransformer";
26
+ import { HttpHeadersTransformer } from "./features/http/HttpHeadersTransformer";
27
+ import { HttpIsHeadersTransformer } from "./features/http/HttpIsHeadersTransformer";
28
+ import { HttpIsQueryTransformer } from "./features/http/HttpIsQueryTransformer";
29
+ import { HttpParameterTransformer } from "./features/http/HttpParameterTransformer";
30
+ import { HttpQueryTransformer } from "./features/http/HttpQueryTransformer";
31
+ import { HttpValidateHeadersTransformer } from "./features/http/HttpValidateHeadersTransformer";
32
+ import { HttpValidateQueryTransformer } from "./features/http/HttpValidateQueryTransformer";
33
+ import { JsonApplicationTransformer } from "./features/json/JsonApplicationTransformer";
34
+ import { JsonAssertParseTransformer } from "./features/json/JsonAssertParseTransformer";
35
+ import { JsonAssertStringifyTransformer } from "./features/json/JsonAssertStringifyTransformer";
36
+ import { JsonCreateAssertParseTransformer } from "./features/json/JsonCreateAssertParseTransformer";
37
+ import { JsonCreateAssertStringifyTransformer } from "./features/json/JsonCreateAssertStringifyTransformer";
38
+ import { JsonCreateIsParseTransformer } from "./features/json/JsonCreateIsParseTransformer";
39
+ import { JsonCreateIsStringifyTransformer } from "./features/json/JsonCreateIsStringifyTransformer";
40
+ import { JsonCreateStringifyTransformer } from "./features/json/JsonCreateStringifyTransformer";
41
+ import { JsonCreateValidateParseTransformer } from "./features/json/JsonCreateValidateParseTransformer";
42
+ import { JsonCreateValidateStringifyTransformer } from "./features/json/JsonCreateValidateStringifyProgrammer";
43
+ import { JsonIsParseTransformer } from "./features/json/JsonIsParseTransformer";
44
+ import { JsonIsStringifyTransformer } from "./features/json/JsonIsStringifyTransformer";
45
+ import { JsonStringifyTransformer } from "./features/json/JsonStringifyTransformer";
46
+ import { JsonValidateParseTransformer } from "./features/json/JsonValidateParseTransformer";
47
+ import { JsonValidateStringifyTransformer } from "./features/json/JsonValidateStringifyTransformer";
48
+ import { MetadataTransformer } from "./features/misc/MetadataTransformer";
49
+ import { MiscAssertCloneTransformer } from "./features/misc/MiscAssertCloneTransformer";
50
+ import { MiscAssertPruneTransformer } from "./features/misc/MiscAssertPruneTransformer";
51
+ import { MiscCloneTransformer } from "./features/misc/MiscCloneTransformer";
52
+ import { MiscCreateAssertCloneTransformer } from "./features/misc/MiscCreateAssertCloneTransformer";
53
+ import { MiscCreateAssertPruneTransformer } from "./features/misc/MiscCreateAssertPruneTransformer";
54
+ import { MiscCreateCloneTransformer } from "./features/misc/MiscCreateCloneTransformer";
55
+ import { MiscCreateIsCloneTransformer } from "./features/misc/MiscCreateIsCloneTransformer";
56
+ import { MiscCreateIsPruneTransformer } from "./features/misc/MiscCreateIsPruneTransformer";
57
+ import { MiscCreatePruneTransformer } from "./features/misc/MiscCreatePruneTransformer";
58
+ import { MiscCreateValidateCloneTransformer } from "./features/misc/MiscCreateValidateCloneTransformer";
59
+ import { MiscCreateValidatePruneTransformer } from "./features/misc/MiscCreateValidatePruneTransformer";
60
+ import { MiscIsCloneTransformer } from "./features/misc/MiscIsCloneTransformer";
61
+ import { MiscIsPruneTransformer } from "./features/misc/MiscIsPruneTransformer";
62
+ import { MiscLiteralsTransformer } from "./features/misc/MiscLiteralsTransformer";
63
+ import { MiscPruneTransformer } from "./features/misc/MiscPruneTransformer";
64
+ import { MiscValidateCloneTransformer } from "./features/misc/MiscValidateCloneTransformer";
65
+ import { MiscValidatePruneTransformer } from "./features/misc/MiscValidatePruneTransformer";
66
+ import { NotationAssertGeneralTransformer } from "./features/notations/NotationAssertGeneralTransformer";
67
+ import { NotationCreateAssertGeneralTransformer } from "./features/notations/NotationCreateAssertGeneralTransformer";
68
+ import { NotationCreateGeneralTransformer } from "./features/notations/NotationCreateGeneralTransformer";
69
+ import { NotationCreateIsGeneralTransformer } from "./features/notations/NotationCreateIsGeneralTransformer";
70
+ import { NotationCreateValidateGeneralTransformer } from "./features/notations/NotationCreateValidateGeneralTransformer";
71
+ import { NotationGeneralTransformer } from "./features/notations/NotationGeneralTransformer";
72
+ import { NotationIsGeneralTransformer } from "./features/notations/NotationIsGeneralTransformer";
73
+ import { NotationValidateGeneralTransformer } from "./features/notations/NotationValidateGeneralTransformer";
74
+ import { ProtobufAssertDecodeTransformer } from "./features/protobuf/ProtobufAssertDecodeTransformer";
75
+ import { ProtobufAssertEncodeTransformer } from "./features/protobuf/ProtobufAssertEncodeTransformer";
76
+ import { ProtobufCreateAssertDecodeTransformer } from "./features/protobuf/ProtobufCreateAssertDecodeTransformer";
77
+ import { ProtobufCreateAssertEncodeTransformer } from "./features/protobuf/ProtobufCreateAssertEncodeTransformer";
78
+ import { ProtobufCreateDecodeTransformer } from "./features/protobuf/ProtobufCreateDecodeTransformer";
79
+ import { ProtobufCreateEncodeTransformer } from "./features/protobuf/ProtobufCreateEncodeTransformer";
80
+ import { ProtobufCreateIsDecodeTransformer } from "./features/protobuf/ProtobufCreateIsDecodeTransformer";
81
+ import { ProtobufCreateIsEncodeTransformer } from "./features/protobuf/ProtobufCreateIsEncodeTransformer";
82
+ import { ProtobufCreateValidateDecodeTransformer } from "./features/protobuf/ProtobufCreateValidateDecodeTransformer";
83
+ import { ProtobufCreateValidateEncodeTransformer } from "./features/protobuf/ProtobufCreateValidateEncodeTransformer";
84
+ import { ProtobufDecodeTransformer } from "./features/protobuf/ProtobufDecodeTransformer";
85
+ import { ProtobufEncodeTransformer } from "./features/protobuf/ProtobufEncodeTransformer";
86
+ import { ProtobufIsDecodeTransformer } from "./features/protobuf/ProtobufIsDecodeTransformer";
87
+ import { ProtobufIsEncodeTransformer } from "./features/protobuf/ProtobufIsEncodeTransformer";
88
+ import { ProtobufMessageTransformer } from "./features/protobuf/ProtobufMessageTransformer";
89
+ import { ProtobufValidateDecodeTransformer } from "./features/protobuf/ProtobufValidateDecodeTransformer";
90
+ import { ProtobufValidateEncodeTransformer } from "./features/protobuf/ProtobufValidateEncodeTransformer";
91
+
92
+ export namespace CallExpressionTransformer {
93
+ export const transform =
94
+ (project: IProject) =>
95
+ (expression: ts.CallExpression): ts.Expression | null => {
96
+ //----
97
+ // VALIDATIONS
98
+ //----
99
+ // SIGNATURE DECLARATION
100
+ const declaration: ts.Declaration | undefined =
101
+ project.checker.getResolvedSignature(expression)?.declaration;
102
+ if (!declaration) return expression;
103
+
104
+ // FILE PATH
105
+ const location: string = path.resolve(
106
+ declaration.getSourceFile().fileName,
107
+ );
108
+ if (isTarget(location) === false) return expression;
109
+
110
+ //----
111
+ // TRANSFORMATION
112
+ //----
113
+ // FUNCTION NAME
114
+ const module: string = location
115
+ .split(path.sep)
116
+ .at(-1)!
117
+ .split(".")[0]!;
118
+ const { name } =
119
+ project.checker.getTypeAtLocation(declaration).symbol;
120
+
121
+ // FIND TRANSFORMER
122
+ const functor: (() => Task) | undefined = FUNCTORS[module]?.[name];
123
+ if (functor === undefined) return expression;
124
+
125
+ // RETURNS WITH TRANSFORMATION
126
+ const result: ts.Expression | null = functor()(project)(
127
+ expression.expression,
128
+ )(expression);
129
+ return result ?? expression;
130
+ };
131
+
132
+ const isTarget = (location: string): boolean => {
133
+ const files: string[] = Object.keys(FUNCTORS);
134
+ return files.some(
135
+ (f) =>
136
+ location.includes(
137
+ path.join("node_modules", "typia", "lib", `${f}.d.ts`),
138
+ ) ||
139
+ location ===
140
+ path.resolve(path.join(__dirname, "..", `${f}.ts`)) ||
141
+ location ===
142
+ path.resolve(
143
+ path.join(
144
+ __dirname,
145
+ "..",
146
+ "..",
147
+ "..",
148
+ "src",
149
+ `${f}.ts`,
150
+ ),
151
+ ),
152
+ );
153
+ };
154
+ }
155
+
156
+ type Task = (
157
+ project: IProject,
158
+ ) => (
159
+ modulo: ts.LeftHandSideExpression,
160
+ ) => (expression: ts.CallExpression) => ts.Expression | null;
161
+
162
+ const FUNCTORS: Record<string, Record<string, () => Task>> = {
163
+ module: {
164
+ // BASIC
165
+ assert: () => AssertTransformer.transform(false),
166
+ assertType: () => AssertTransformer.transform(false),
167
+ is: () => IsTransformer.transform(false),
168
+ validate: () => ValidateTransformer.transform(false),
169
+
170
+ // STRICT
171
+ assertEquals: () => AssertTransformer.transform(true),
172
+ equals: () => IsTransformer.transform(true),
173
+ validateEquals: () => ValidateTransformer.transform(true),
174
+
175
+ // RANDOM + INTERNAL
176
+ random: () => RandomTransformer.transform,
177
+ metadata: () => (P) => () => MetadataTransformer.transform(P),
178
+
179
+ // FACTORIES
180
+ createAssert: () => CreateAssertTransformer.transform(false),
181
+ createAssertType: () => CreateAssertTransformer.transform(false),
182
+ createIs: () => CreateIsTransformer.transform(false),
183
+ createValidate: () => CreateValidateTransformer.transform(false),
184
+ createAssertEquals: () => CreateAssertTransformer.transform(true),
185
+ createEquals: () => CreateIsTransformer.transform(true),
186
+ createValidateEquals: () => CreateValidateTransformer.transform(true),
187
+ createRandom: () => CreateRandomTransformer.transform,
188
+ },
189
+ http: {
190
+ // HEADERS
191
+ headers: () => HttpHeadersTransformer.transform,
192
+ isHeaders: () => HttpIsHeadersTransformer.transform,
193
+ assertHeaders: () => HttpAssertHeadersTransformer.transform,
194
+ validateHeaders: () => HttpValidateHeadersTransformer.transform,
195
+
196
+ // PARAMETER
197
+ parameter: () => HttpParameterTransformer.transform,
198
+
199
+ // QUERY
200
+ query: () => HttpQueryTransformer.transform,
201
+ isQuery: () => HttpIsQueryTransformer.transform,
202
+ assertQuery: () => HttpAssertQueryTransformer.transform,
203
+ validateQuery: () => HttpValidateQueryTransformer.transform,
204
+
205
+ // FACTORIES
206
+ createHeaders: () => CreateHttpHeadersTransformer.transform,
207
+ createIsHeaders: () => CreateHttpIsHeadersTransformer.transform,
208
+ createAssertHeaders: () => CreateHttpAssertHeadersTransformer.transform,
209
+ createValidateHeaders: () =>
210
+ CreateHttpValidateHeadersTransformer.transform,
211
+ createParameter: () => CreateHttpParameterTransformer.transform,
212
+ createQuery: () => CreateHttpQueryTransformer.transform,
213
+ createIsQuery: () => CreateHttpIsQueryTransformer.transform,
214
+ createAssertQuery: () => CreateHttpAssertQueryTransformer.transform,
215
+ createValidateQuery: () => CreateHttpValidateQueryTransformer.transform,
216
+ },
217
+ json: {
218
+ // SCHEMA
219
+ application: () => (P) => () => JsonApplicationTransformer.transform(P),
220
+
221
+ // PARSER
222
+ isParse: () => JsonIsParseTransformer.transform,
223
+ assertParse: () => JsonAssertParseTransformer.transform,
224
+ validateParse: () => JsonValidateParseTransformer.transform,
225
+
226
+ // STRINGIFY
227
+ stringify: () => JsonStringifyTransformer.transform,
228
+ assertStringify: () => JsonAssertStringifyTransformer.transform,
229
+ isStringify: () => JsonIsStringifyTransformer.transform,
230
+ validateStringify: () => JsonValidateStringifyTransformer.transform,
231
+
232
+ // FACTORIES
233
+ createIsParse: () => JsonCreateIsParseTransformer.transform,
234
+ createAssertParse: () => JsonCreateAssertParseTransformer.transform,
235
+ createValidateParse: () => JsonCreateValidateParseTransformer.transform,
236
+ createStringify: () => JsonCreateStringifyTransformer.transform,
237
+ createAssertStringify: () =>
238
+ JsonCreateAssertStringifyTransformer.transform,
239
+ createIsStringify: () => JsonCreateIsStringifyTransformer.transform,
240
+ createValidateStringify: () =>
241
+ JsonCreateValidateStringifyTransformer.transform,
242
+ },
243
+ protobuf: {
244
+ // SCHEMA
245
+ message: () => ProtobufMessageTransformer.transform,
246
+
247
+ // ENCODE
248
+ encode: () => ProtobufEncodeTransformer.transform,
249
+ assertEncode: () => ProtobufAssertEncodeTransformer.transform,
250
+ isEncode: () => ProtobufIsEncodeTransformer.transform,
251
+ validateEncode: () => ProtobufValidateEncodeTransformer.transform,
252
+
253
+ // DECODE
254
+ decode: () => ProtobufDecodeTransformer.transform,
255
+ assertDecode: () => ProtobufAssertDecodeTransformer.transform,
256
+ isDecode: () => ProtobufIsDecodeTransformer.transform,
257
+ validateDecode: () => ProtobufValidateDecodeTransformer.transform,
258
+
259
+ // FACTORIES
260
+ createEncode: () => ProtobufCreateEncodeTransformer.transform,
261
+ createAssertEncode: () =>
262
+ ProtobufCreateAssertEncodeTransformer.transform,
263
+ createIsEncode: () => ProtobufCreateIsEncodeTransformer.transform,
264
+ createValidateEncode: () =>
265
+ ProtobufCreateValidateEncodeTransformer.transform,
266
+ createDecode: () => ProtobufCreateDecodeTransformer.transform,
267
+ createAssertDecode: () =>
268
+ ProtobufCreateAssertDecodeTransformer.transform,
269
+ createIsDecode: () => ProtobufCreateIsDecodeTransformer.transform,
270
+ createValidateDecode: () =>
271
+ ProtobufCreateValidateDecodeTransformer.transform,
272
+ },
273
+ misc: {
274
+ literals: () => (project) => () =>
275
+ MiscLiteralsTransformer.transform(project),
276
+
277
+ // CLONE
278
+ clone: () => MiscCloneTransformer.transform,
279
+ assertClone: () => MiscAssertCloneTransformer.transform,
280
+ isClone: () => MiscIsCloneTransformer.transform,
281
+ validateClone: () => MiscValidateCloneTransformer.transform,
282
+
283
+ // PRUNE
284
+ prune: () => MiscPruneTransformer.transform,
285
+ assertPrune: () => MiscAssertPruneTransformer.transform,
286
+ isPrune: () => MiscIsPruneTransformer.transform,
287
+ validatePrune: () => MiscValidatePruneTransformer.transform,
288
+
289
+ // FACTORIES
290
+ createClone: () => MiscCreateCloneTransformer.transform,
291
+ createAssertClone: () => MiscCreateAssertCloneTransformer.transform,
292
+ createIsClone: () => MiscCreateIsCloneTransformer.transform,
293
+ createValidateClone: () => MiscCreateValidateCloneTransformer.transform,
294
+ createPrune: () => MiscCreatePruneTransformer.transform,
295
+ createAssertPrune: () => MiscCreateAssertPruneTransformer.transform,
296
+ createIsPrune: () => MiscCreateIsPruneTransformer.transform,
297
+ createValidatePrune: () => MiscCreateValidatePruneTransformer.transform,
298
+ },
299
+ notations: {
300
+ // CAMEL
301
+ camel: () =>
302
+ NotationGeneralTransformer.transform(NamingConvention.camel),
303
+ assertCamel: () =>
304
+ NotationAssertGeneralTransformer.transform(NamingConvention.camel),
305
+ isCamel: () =>
306
+ NotationIsGeneralTransformer.transform(NamingConvention.camel),
307
+ validateCamel: () =>
308
+ NotationValidateGeneralTransformer.transform(
309
+ NamingConvention.camel,
310
+ ),
311
+
312
+ // PASCAL
313
+ pascal: () =>
314
+ NotationGeneralTransformer.transform(NamingConvention.pascal),
315
+ assertPascal: () =>
316
+ NotationAssertGeneralTransformer.transform(NamingConvention.pascal),
317
+ isPascal: () =>
318
+ NotationIsGeneralTransformer.transform(NamingConvention.pascal),
319
+ validatePascal: () =>
320
+ NotationValidateGeneralTransformer.transform(
321
+ NamingConvention.pascal,
322
+ ),
323
+
324
+ // SNAKE
325
+ snake: () =>
326
+ NotationGeneralTransformer.transform(NamingConvention.snake),
327
+ assertSnake: () =>
328
+ NotationAssertGeneralTransformer.transform(NamingConvention.snake),
329
+ isSnake: () =>
330
+ NotationIsGeneralTransformer.transform(NamingConvention.snake),
331
+ validateSnake: () =>
332
+ NotationValidateGeneralTransformer.transform(
333
+ NamingConvention.snake,
334
+ ),
335
+
336
+ // FACTORIES
337
+ createCamel: () =>
338
+ NotationCreateGeneralTransformer.transform(NamingConvention.camel),
339
+ createAssertCamel: () =>
340
+ NotationCreateAssertGeneralTransformer.transform(
341
+ NamingConvention.camel,
342
+ ),
343
+ createIsCamel: () =>
344
+ NotationCreateIsGeneralTransformer.transform(
345
+ NamingConvention.camel,
346
+ ),
347
+ createValidateCamel: () =>
348
+ NotationCreateValidateGeneralTransformer.transform(
349
+ NamingConvention.camel,
350
+ ),
351
+ createPascal: () =>
352
+ NotationCreateGeneralTransformer.transform(NamingConvention.pascal),
353
+ createAssertPascal: () =>
354
+ NotationCreateAssertGeneralTransformer.transform(
355
+ NamingConvention.pascal,
356
+ ),
357
+ createIsPascal: () =>
358
+ NotationCreateIsGeneralTransformer.transform(
359
+ NamingConvention.pascal,
360
+ ),
361
+ createValidatePascal: () =>
362
+ NotationCreateValidateGeneralTransformer.transform(
363
+ NamingConvention.pascal,
364
+ ),
365
+ createSnake: () =>
366
+ NotationCreateGeneralTransformer.transform(NamingConvention.snake),
367
+ createAssertSnake: () =>
368
+ NotationCreateAssertGeneralTransformer.transform(
369
+ NamingConvention.snake,
370
+ ),
371
+ createIsSnake: () =>
372
+ NotationCreateIsGeneralTransformer.transform(
373
+ NamingConvention.snake,
374
+ ),
375
+ createValidateSnake: () =>
376
+ NotationCreateValidateGeneralTransformer.transform(
377
+ NamingConvention.snake,
378
+ ),
379
+ },
380
+ };