typia 3.6.4 → 3.6.5

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 (138) hide show
  1. package/lib/functional/$is_uuid.js +1 -1
  2. package/lib/functional/$is_uuid.js.map +1 -1
  3. package/package.json +1 -1
  4. package/src/IRandomGenerator.ts +16 -16
  5. package/src/IValidation.ts +21 -21
  6. package/src/Primitive.ts +104 -104
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +87 -87
  9. package/src/executable/TypiaSetupWizard.ts +142 -142
  10. package/src/executable/setup/CommandExecutor.ts +8 -8
  11. package/src/executable/typia.ts +38 -38
  12. package/src/factories/CommentFactory.ts +10 -10
  13. package/src/factories/ExpressionFactory.ts +77 -77
  14. package/src/factories/IdentifierFactory.ts +73 -73
  15. package/src/factories/LiteralFactory.ts +44 -44
  16. package/src/factories/MetadataCollection.ts +122 -122
  17. package/src/factories/MetadataFactory.ts +51 -51
  18. package/src/factories/MetadataTagFactory.ts +265 -265
  19. package/src/factories/StatementFactory.ts +60 -60
  20. package/src/factories/TemplateFactory.ts +56 -56
  21. package/src/factories/TypeFactory.ts +129 -129
  22. package/src/factories/TypiaFileFactory.ts +117 -117
  23. package/src/factories/ValueFactory.ts +12 -12
  24. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  25. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  26. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  27. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  28. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  29. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  30. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  31. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  32. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  33. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  34. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  35. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  36. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  37. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  38. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  39. package/src/functional/$any.ts +3 -3
  40. package/src/functional/$every.ts +11 -11
  41. package/src/functional/$guard.ts +35 -35
  42. package/src/functional/$is_between.ts +7 -7
  43. package/src/functional/$is_email.ts +5 -5
  44. package/src/functional/$is_ipv4.ts +5 -5
  45. package/src/functional/$is_ipv6.ts +5 -5
  46. package/src/functional/$is_url.ts +5 -5
  47. package/src/functional/$is_uuid.ts +5 -4
  48. package/src/functional/$join.ts +50 -50
  49. package/src/functional/$number.ts +12 -12
  50. package/src/functional/$report.ts +15 -15
  51. package/src/functional/$rest.ts +3 -3
  52. package/src/functional/$string.ts +37 -37
  53. package/src/functional/$tail.ts +6 -6
  54. package/src/functional/Namespace.ts +121 -121
  55. package/src/index.ts +4 -4
  56. package/src/metadata/IJsDocTagInfo.ts +10 -10
  57. package/src/metadata/IMetadata.ts +25 -25
  58. package/src/metadata/IMetadataApplication.ts +7 -7
  59. package/src/metadata/IMetadataConstant.ts +16 -16
  60. package/src/metadata/IMetadataEntry.ts +6 -6
  61. package/src/metadata/IMetadataObject.ts +29 -29
  62. package/src/metadata/IMetadataProperty.ts +11 -11
  63. package/src/metadata/IMetadataTag.ts +113 -113
  64. package/src/metadata/Metadata.ts +534 -534
  65. package/src/metadata/MetadataConstant.ts +3 -3
  66. package/src/metadata/MetadataObject.ts +131 -131
  67. package/src/metadata/MetadataProperty.ts +64 -64
  68. package/src/programmers/ApplicationProgrammer.ts +55 -55
  69. package/src/programmers/IsProgrammer.ts +200 -200
  70. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  71. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  72. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  73. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  74. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  75. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  76. package/src/programmers/helpers/RandomJoiner.ts +149 -149
  77. package/src/programmers/helpers/RandomRanger.ts +216 -216
  78. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  79. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  80. package/src/programmers/helpers/UnionExplorer.ts +274 -274
  81. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  82. package/src/programmers/internal/application_array.ts +37 -37
  83. package/src/programmers/internal/application_boolean.ts +17 -17
  84. package/src/programmers/internal/application_constant.ts +29 -29
  85. package/src/programmers/internal/application_default.ts +17 -17
  86. package/src/programmers/internal/application_default_string.ts +32 -32
  87. package/src/programmers/internal/application_native.ts +29 -29
  88. package/src/programmers/internal/application_number.ts +70 -70
  89. package/src/programmers/internal/application_object.ts +153 -153
  90. package/src/programmers/internal/application_schema.ts +184 -184
  91. package/src/programmers/internal/application_string.ts +41 -41
  92. package/src/programmers/internal/application_templates.ts +27 -27
  93. package/src/programmers/internal/application_tuple.ts +29 -29
  94. package/src/programmers/internal/check_array.ts +22 -22
  95. package/src/programmers/internal/check_array_length.ts +44 -44
  96. package/src/programmers/internal/check_bigint.ts +64 -64
  97. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  98. package/src/programmers/internal/check_everything.ts +28 -28
  99. package/src/programmers/internal/check_native.ts +21 -21
  100. package/src/programmers/internal/check_number.ts +145 -145
  101. package/src/programmers/internal/check_object.ts +48 -48
  102. package/src/programmers/internal/check_string.ts +24 -24
  103. package/src/programmers/internal/check_string_tags.ts +63 -63
  104. package/src/programmers/internal/check_template.ts +50 -50
  105. package/src/programmers/internal/check_union_array_like.ts +260 -260
  106. package/src/programmers/internal/check_union_tuple.ts +33 -33
  107. package/src/programmers/internal/decode_union_object.ts +73 -73
  108. package/src/programmers/internal/feature_object_entries.ts +59 -59
  109. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  110. package/src/programmers/internal/prune_object_properties.ts +60 -60
  111. package/src/programmers/internal/stringify_dynamic_properties.ts +165 -165
  112. package/src/programmers/internal/stringify_native.ts +8 -8
  113. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  114. package/src/programmers/internal/template_to_pattern.ts +15 -15
  115. package/src/schemas/IJsonApplication.ts +9 -9
  116. package/src/schemas/IJsonComponents.ts +26 -26
  117. package/src/schemas/IJsonSchema.ts +127 -127
  118. package/src/transform.ts +21 -21
  119. package/src/transformers/CallExpressionTransformer.ts +172 -172
  120. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  121. package/src/transformers/FileTransformer.ts +49 -49
  122. package/src/transformers/IProject.ts +11 -11
  123. package/src/transformers/ITransformOptions.ts +62 -62
  124. package/src/transformers/ImportTransformer.ts +60 -60
  125. package/src/transformers/NodeTransformer.ts +19 -19
  126. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +120 -120
  127. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  128. package/src/typings/Atomic.ts +17 -17
  129. package/src/typings/ClassProperties.ts +5 -5
  130. package/src/typings/OmitNever.ts +3 -3
  131. package/src/typings/SpecialFields.ts +3 -3
  132. package/src/typings/Writable.ts +11 -11
  133. package/src/utils/ArrayUtil.ts +49 -49
  134. package/src/utils/Escaper.ts +50 -50
  135. package/src/utils/MapUtil.ts +14 -14
  136. package/src/utils/PatternUtil.ts +30 -30
  137. package/src/utils/RandomGenerator.ts +90 -90
  138. package/src/utils/Singleton.ts +17 -17
@@ -1,127 +1,127 @@
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?: number;
51
- exclusiveMaximum?: number;
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
- /**
64
- * @type int
65
- */
66
- exclusiveMinimum?: number;
67
- /**
68
- * @type int
69
- */
70
- exclusiveMaximum?: number;
71
- /**
72
- * @type int
73
- */
74
- multipleOf?: number;
75
- }
76
- export interface IBoolean extends IAtomic<"boolean"> {}
77
-
78
- /* -----------------------------------------------------------
79
- OBJECTS
80
- ----------------------------------------------------------- */
81
- export interface IArray extends ISignificant<"array"> {
82
- items: IJsonSchema;
83
- /**
84
- * @type uint
85
- */
86
- minItems?: number;
87
- /**
88
- * @type uint
89
- */
90
- maxItems?: number;
91
- "x-typia-tuple"?: ITuple;
92
- }
93
- export interface ITuple extends ISignificant<"array"> {
94
- items: IJsonSchema[];
95
- }
96
- export interface IReference extends IAttribute {
97
- $ref: string;
98
- }
99
- export interface IRecursiveReference extends IAttribute {
100
- $recursiveRef: string;
101
- }
102
- export interface INullOnly extends IAttribute {
103
- type: "null";
104
- }
105
-
106
- /* -----------------------------------------------------------
107
- MISCELLANEOUS
108
- ----------------------------------------------------------- */
109
- export interface IOneOf extends IAttribute {
110
- oneOf: IJsonSchema[];
111
- }
112
- export interface IUnknown {}
113
-
114
- export interface ISignificant<Literal extends string> extends IAttribute {
115
- type: Literal;
116
- nullable: boolean;
117
- }
118
- export interface IAttribute {
119
- deprecated?: boolean;
120
- title?: string;
121
- description?: string;
122
- "x-typia-metaTags"?: IMetadataTag[];
123
- "x-typia-jsDocTags"?: IJsDocTagInfo[];
124
- "x-typia-required"?: boolean;
125
- "x-typia-rest"?: boolean;
126
- }
127
- }
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?: number;
51
+ exclusiveMaximum?: number;
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
+ /**
64
+ * @type int
65
+ */
66
+ exclusiveMinimum?: number;
67
+ /**
68
+ * @type int
69
+ */
70
+ exclusiveMaximum?: number;
71
+ /**
72
+ * @type int
73
+ */
74
+ multipleOf?: number;
75
+ }
76
+ export interface IBoolean extends IAtomic<"boolean"> {}
77
+
78
+ /* -----------------------------------------------------------
79
+ OBJECTS
80
+ ----------------------------------------------------------- */
81
+ export interface IArray extends ISignificant<"array"> {
82
+ items: IJsonSchema;
83
+ /**
84
+ * @type uint
85
+ */
86
+ minItems?: number;
87
+ /**
88
+ * @type uint
89
+ */
90
+ maxItems?: number;
91
+ "x-typia-tuple"?: ITuple;
92
+ }
93
+ export interface ITuple extends ISignificant<"array"> {
94
+ items: IJsonSchema[];
95
+ }
96
+ export interface IReference extends IAttribute {
97
+ $ref: string;
98
+ }
99
+ export interface IRecursiveReference extends IAttribute {
100
+ $recursiveRef: string;
101
+ }
102
+ export interface INullOnly extends IAttribute {
103
+ type: "null";
104
+ }
105
+
106
+ /* -----------------------------------------------------------
107
+ MISCELLANEOUS
108
+ ----------------------------------------------------------- */
109
+ export interface IOneOf extends IAttribute {
110
+ oneOf: IJsonSchema[];
111
+ }
112
+ export interface IUnknown {}
113
+
114
+ export interface ISignificant<Literal extends string> extends IAttribute {
115
+ type: Literal;
116
+ nullable: boolean;
117
+ }
118
+ export interface IAttribute {
119
+ deprecated?: boolean;
120
+ title?: string;
121
+ description?: string;
122
+ "x-typia-metaTags"?: IMetadataTag[];
123
+ "x-typia-jsDocTags"?: IJsDocTagInfo[];
124
+ "x-typia-required"?: boolean;
125
+ "x-typia-rest"?: boolean;
126
+ }
127
+ }
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,172 +1,172 @@
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/CreateRandomGenerator";
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 { MetadataTransformer } from "./features/miscellaneous/MetadataTransformer";
21
- import { PruneTransformer } from "./features/miscellaneous/PruneTransformer";
22
- import { RandomTransformer } from "./features/miscellaneous/RandomTransformer";
23
- import { ValidateCloneTransformer } from "./features/miscellaneous/ValidateCloneTransformer";
24
- import { ValidatePruneTransformer } from "./features/miscellaneous/ValidatePruneTransformer";
25
- import { AssertParseTransformer } from "./features/parsers/AssertParseTransformer";
26
- import { CreateAssertParseTransformer } from "./features/parsers/CreateAssertParseTransformer";
27
- import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransformer";
28
- import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
29
- import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
30
- import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
31
- import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
32
- import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
33
- import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
34
- import { CreateStringifyTransformer } from "./features/stringifiers/CreateStringifyTransformer";
35
- import { CreateValidateStringifyTransformer } from "./features/stringifiers/CreateValidateStringifyProgrammer";
36
- import { IsStringifyTransformer } from "./features/stringifiers/IsStringifyTransformer";
37
- import { StringifyTransformer } from "./features/stringifiers/StringifyTransformer";
38
- import { ValidateStringifyTransformer } from "./features/stringifiers/ValidateStringifyTransformer";
39
- import { AssertTransformer } from "./features/validators/AssertTransformer";
40
- import { CreateAssertTransformer } from "./features/validators/CreateAssertTransformer";
41
- import { CreateIsTransformer } from "./features/validators/CreateIsTransformer";
42
- import { CreateValidateTransformer } from "./features/validators/CreateValidateTransformer";
43
- import { IsTransformer } from "./features/validators/IsTransformer";
44
- import { ValidateTransformer } from "./features/validators/ValidateTransformer";
45
-
46
- export namespace CallExpressionTransformer {
47
- export function transform(
48
- project: IProject,
49
- expression: ts.CallExpression,
50
- ): ts.Expression {
51
- //----
52
- // VALIDATIONS
53
- //----
54
- // SIGNATURE DECLARATION
55
- const declaration: ts.Declaration | undefined =
56
- project.checker.getResolvedSignature(expression)?.declaration;
57
- if (!declaration) return expression;
58
-
59
- // FILE PATH
60
- const file: string = path.resolve(declaration.getSourceFile().fileName);
61
- if (
62
- file.indexOf(LIB_PATH) === -1 &&
63
- file !== SRC_PATH &&
64
- file !== CLI_PATH
65
- )
66
- return expression;
67
-
68
- //----
69
- // TRANSFORMATION
70
- //----
71
- // FUNCTION NAME
72
- const { name } = project.checker.getTypeAtLocation(declaration).symbol;
73
-
74
- // FIND TRANSFORMER
75
- const functor: (() => Task) | undefined = FUNCTORS[name];
76
- if (functor === undefined) return expression;
77
-
78
- // RETURNS WITH TRANSFORMATION
79
- return functor()(project, expression.expression, expression);
80
- }
81
- }
82
-
83
- type Task = (
84
- project: IProject,
85
- modulo: ts.LeftHandSideExpression,
86
- expression: ts.CallExpression,
87
- ) => ts.Expression;
88
-
89
- const LIB_PATH = path.join("node_modules", "typia", "lib", "module.d.ts");
90
- const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
91
- const CLI_PATH = path.resolve(
92
- path.join(__dirname, "..", "..", "..", "src", "module.ts"),
93
- );
94
-
95
- const FUNCTORS: Record<string, () => Task> = {
96
- //----
97
- // SINGLE FUNCTIONS
98
- //----
99
- // BASIC VALIDATORS
100
- assert: () => AssertTransformer.transform(false),
101
- assertType: () => AssertTransformer.transform(false),
102
- is: () => IsTransformer.transform(false),
103
- validate: () => ValidateTransformer.transform(false),
104
-
105
- // STRICT VALIDATORS
106
- assertEquals: () => AssertTransformer.transform(true),
107
- equals: () => IsTransformer.transform(true),
108
- validateEquals: () => ValidateTransformer.transform(true),
109
-
110
- // PARSE FUNCTIONS
111
- isParse: () => IsParseTransformer.transform,
112
- assertParse: () => AssertParseTransformer.transform,
113
- validateParse: () => ValidateParseTransformer.transform,
114
-
115
- // STRINGIFY FUNCTIONS
116
- application: () => ApplicationTransformer.transform,
117
- stringify: () => StringifyTransformer.transform,
118
- assertStringify: () => AssertStringifyTransformer.transform,
119
- isStringify: () => IsStringifyTransformer.transform,
120
- validateStringify: () => ValidateStringifyTransformer.transform,
121
-
122
- // MISC
123
- metadata: () => MetadataTransformer.transform,
124
- random: () => RandomTransformer.transform,
125
-
126
- clone: () => CloneTransformer.transform,
127
- assertClone: () => AssertCloneTransformer.transform,
128
- isClone: () => IsCloneTransformer.transform,
129
- validateClone: () => ValidateCloneTransformer.transform,
130
-
131
- prune: () => PruneTransformer.transform,
132
- assertPrune: () => AssertPruneTransformer.transform,
133
- isPrune: () => IsPruneTransformer.transform,
134
- validatePrune: () => ValidatePruneTransformer.transform,
135
-
136
- //----
137
- // FACTORY FUNCTIONS
138
- //----
139
- // BASIC VALIDATORS
140
- createAssert: () => CreateAssertTransformer.transform(false),
141
- createAssertType: () => CreateAssertTransformer.transform(false),
142
- createIs: () => CreateIsTransformer.transform(false),
143
- createValidate: () => CreateValidateTransformer.transform(false),
144
-
145
- // STRICT VALIDATORS
146
- createAssertEquals: () => CreateAssertTransformer.transform(true),
147
- createEquals: () => CreateIsTransformer.transform(true),
148
- createValidateEquals: () => CreateValidateTransformer.transform(true),
149
-
150
- // PARSE FUNCTIONS
151
- createIsParse: () => CreateIsParseTransformer.transform,
152
- createAssertParse: () => CreateAssertParseTransformer.transform,
153
- createValidateParse: () => CreateValidateParseTransformer.transform,
154
-
155
- // STRINGIFY FUNCTIONS
156
- createStringify: () => CreateStringifyTransformer.transform,
157
- createAssertStringify: () => CreateAssertStringifyTransformer.transform,
158
- createIsStringify: () => CreateIsStringifyTransformer.transform,
159
- createValidateStringify: () => CreateValidateStringifyTransformer.transform,
160
-
161
- // MISC
162
- createRandom: () => CreateRandomTransformer.transform,
163
- createClone: () => CreateCloneTransformer.transform,
164
- createAssertClone: () => CreateAssertCloneTransformer.transform,
165
- createIsClone: () => CreateIsCloneTransformer.transform,
166
- createValidateClone: () => CreateValidateCloneTransformer.transform,
167
-
168
- createPrune: () => CreatePruneTransformer.transform,
169
- createAssertPrune: () => CreateAssertPruneTransformer.transform,
170
- createIsPrune: () => CreateIsPruneTransformer.transform,
171
- createValidatePrune: () => CreateValidatePruneTransformer.transform,
172
- };
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/CreateRandomGenerator";
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 { MetadataTransformer } from "./features/miscellaneous/MetadataTransformer";
21
+ import { PruneTransformer } from "./features/miscellaneous/PruneTransformer";
22
+ import { RandomTransformer } from "./features/miscellaneous/RandomTransformer";
23
+ import { ValidateCloneTransformer } from "./features/miscellaneous/ValidateCloneTransformer";
24
+ import { ValidatePruneTransformer } from "./features/miscellaneous/ValidatePruneTransformer";
25
+ import { AssertParseTransformer } from "./features/parsers/AssertParseTransformer";
26
+ import { CreateAssertParseTransformer } from "./features/parsers/CreateAssertParseTransformer";
27
+ import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransformer";
28
+ import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
29
+ import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
30
+ import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
31
+ import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
32
+ import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
33
+ import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
34
+ import { CreateStringifyTransformer } from "./features/stringifiers/CreateStringifyTransformer";
35
+ import { CreateValidateStringifyTransformer } from "./features/stringifiers/CreateValidateStringifyProgrammer";
36
+ import { IsStringifyTransformer } from "./features/stringifiers/IsStringifyTransformer";
37
+ import { StringifyTransformer } from "./features/stringifiers/StringifyTransformer";
38
+ import { ValidateStringifyTransformer } from "./features/stringifiers/ValidateStringifyTransformer";
39
+ import { AssertTransformer } from "./features/validators/AssertTransformer";
40
+ import { CreateAssertTransformer } from "./features/validators/CreateAssertTransformer";
41
+ import { CreateIsTransformer } from "./features/validators/CreateIsTransformer";
42
+ import { CreateValidateTransformer } from "./features/validators/CreateValidateTransformer";
43
+ import { IsTransformer } from "./features/validators/IsTransformer";
44
+ import { ValidateTransformer } from "./features/validators/ValidateTransformer";
45
+
46
+ export namespace CallExpressionTransformer {
47
+ export function transform(
48
+ project: IProject,
49
+ expression: ts.CallExpression,
50
+ ): ts.Expression {
51
+ //----
52
+ // VALIDATIONS
53
+ //----
54
+ // SIGNATURE DECLARATION
55
+ const declaration: ts.Declaration | undefined =
56
+ project.checker.getResolvedSignature(expression)?.declaration;
57
+ if (!declaration) return expression;
58
+
59
+ // FILE PATH
60
+ const file: string = path.resolve(declaration.getSourceFile().fileName);
61
+ if (
62
+ file.indexOf(LIB_PATH) === -1 &&
63
+ file !== SRC_PATH &&
64
+ file !== CLI_PATH
65
+ )
66
+ return expression;
67
+
68
+ //----
69
+ // TRANSFORMATION
70
+ //----
71
+ // FUNCTION NAME
72
+ const { name } = project.checker.getTypeAtLocation(declaration).symbol;
73
+
74
+ // FIND TRANSFORMER
75
+ const functor: (() => Task) | undefined = FUNCTORS[name];
76
+ if (functor === undefined) return expression;
77
+
78
+ // RETURNS WITH TRANSFORMATION
79
+ return functor()(project, expression.expression, expression);
80
+ }
81
+ }
82
+
83
+ type Task = (
84
+ project: IProject,
85
+ modulo: ts.LeftHandSideExpression,
86
+ expression: ts.CallExpression,
87
+ ) => ts.Expression;
88
+
89
+ const LIB_PATH = path.join("node_modules", "typia", "lib", "module.d.ts");
90
+ const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
91
+ const CLI_PATH = path.resolve(
92
+ path.join(__dirname, "..", "..", "..", "src", "module.ts"),
93
+ );
94
+
95
+ const FUNCTORS: Record<string, () => Task> = {
96
+ //----
97
+ // SINGLE FUNCTIONS
98
+ //----
99
+ // BASIC VALIDATORS
100
+ assert: () => AssertTransformer.transform(false),
101
+ assertType: () => AssertTransformer.transform(false),
102
+ is: () => IsTransformer.transform(false),
103
+ validate: () => ValidateTransformer.transform(false),
104
+
105
+ // STRICT VALIDATORS
106
+ assertEquals: () => AssertTransformer.transform(true),
107
+ equals: () => IsTransformer.transform(true),
108
+ validateEquals: () => ValidateTransformer.transform(true),
109
+
110
+ // PARSE FUNCTIONS
111
+ isParse: () => IsParseTransformer.transform,
112
+ assertParse: () => AssertParseTransformer.transform,
113
+ validateParse: () => ValidateParseTransformer.transform,
114
+
115
+ // STRINGIFY FUNCTIONS
116
+ application: () => ApplicationTransformer.transform,
117
+ stringify: () => StringifyTransformer.transform,
118
+ assertStringify: () => AssertStringifyTransformer.transform,
119
+ isStringify: () => IsStringifyTransformer.transform,
120
+ validateStringify: () => ValidateStringifyTransformer.transform,
121
+
122
+ // MISC
123
+ metadata: () => MetadataTransformer.transform,
124
+ random: () => RandomTransformer.transform,
125
+
126
+ clone: () => CloneTransformer.transform,
127
+ assertClone: () => AssertCloneTransformer.transform,
128
+ isClone: () => IsCloneTransformer.transform,
129
+ validateClone: () => ValidateCloneTransformer.transform,
130
+
131
+ prune: () => PruneTransformer.transform,
132
+ assertPrune: () => AssertPruneTransformer.transform,
133
+ isPrune: () => IsPruneTransformer.transform,
134
+ validatePrune: () => ValidatePruneTransformer.transform,
135
+
136
+ //----
137
+ // FACTORY FUNCTIONS
138
+ //----
139
+ // BASIC VALIDATORS
140
+ createAssert: () => CreateAssertTransformer.transform(false),
141
+ createAssertType: () => CreateAssertTransformer.transform(false),
142
+ createIs: () => CreateIsTransformer.transform(false),
143
+ createValidate: () => CreateValidateTransformer.transform(false),
144
+
145
+ // STRICT VALIDATORS
146
+ createAssertEquals: () => CreateAssertTransformer.transform(true),
147
+ createEquals: () => CreateIsTransformer.transform(true),
148
+ createValidateEquals: () => CreateValidateTransformer.transform(true),
149
+
150
+ // PARSE FUNCTIONS
151
+ createIsParse: () => CreateIsParseTransformer.transform,
152
+ createAssertParse: () => CreateAssertParseTransformer.transform,
153
+ createValidateParse: () => CreateValidateParseTransformer.transform,
154
+
155
+ // STRINGIFY FUNCTIONS
156
+ createStringify: () => CreateStringifyTransformer.transform,
157
+ createAssertStringify: () => CreateAssertStringifyTransformer.transform,
158
+ createIsStringify: () => CreateIsStringifyTransformer.transform,
159
+ createValidateStringify: () => CreateValidateStringifyTransformer.transform,
160
+
161
+ // MISC
162
+ createRandom: () => CreateRandomTransformer.transform,
163
+ createClone: () => CreateCloneTransformer.transform,
164
+ createAssertClone: () => CreateAssertCloneTransformer.transform,
165
+ createIsClone: () => CreateIsCloneTransformer.transform,
166
+ createValidateClone: () => CreateValidateCloneTransformer.transform,
167
+
168
+ createPrune: () => CreatePruneTransformer.transform,
169
+ createAssertPrune: () => CreateAssertPruneTransformer.transform,
170
+ createIsPrune: () => CreateIsPruneTransformer.transform,
171
+ createValidatePrune: () => CreateValidatePruneTransformer.transform,
172
+ };