typia 3.4.13 → 3.4.14

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 (157) hide show
  1. package/README.md +9 -8
  2. package/lib/factories/internal/iterate_metadata_object.js +4 -2
  3. package/lib/factories/internal/iterate_metadata_object.js.map +1 -1
  4. package/package.json +1 -1
  5. package/src/IValidation.ts +21 -21
  6. package/src/Primitive.ts +82 -82
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/internal/CommandParser.ts +15 -15
  9. package/src/executable/internal/TypiaSetupWizard.ts +175 -175
  10. package/src/executable/typia.ts +46 -46
  11. package/src/factories/CommentFactory.ts +10 -10
  12. package/src/factories/ExpressionFactory.ts +66 -66
  13. package/src/factories/IdentifierFactory.ts +72 -72
  14. package/src/factories/LiteralFactory.ts +44 -44
  15. package/src/factories/MetadataCollection.ts +122 -122
  16. package/src/factories/MetadataFactory.ts +46 -46
  17. package/src/factories/MetadataTagFactory.ts +347 -347
  18. package/src/factories/StatementFactory.ts +60 -60
  19. package/src/factories/TemplateFactory.ts +56 -56
  20. package/src/factories/TypeFactory.ts +101 -101
  21. package/src/factories/ValueFactory.ts +12 -12
  22. package/src/factories/internal/MetadataHelper.ts +12 -12
  23. package/src/factories/internal/emplace_metadata_object.ts +140 -140
  24. package/src/factories/internal/explore_metadata.ts +91 -91
  25. package/src/factories/internal/iterate_metadata.ts +80 -80
  26. package/src/factories/internal/iterate_metadata_array.ts +29 -29
  27. package/src/factories/internal/iterate_metadata_atomic.ts +59 -59
  28. package/src/factories/internal/iterate_metadata_coalesce.ts +33 -33
  29. package/src/factories/internal/iterate_metadata_constant.ts +58 -58
  30. package/src/factories/internal/iterate_metadata_map.ts +41 -41
  31. package/src/factories/internal/iterate_metadata_native.ts +227 -227
  32. package/src/factories/internal/iterate_metadata_object.ts +48 -45
  33. package/src/factories/internal/iterate_metadata_resolve.ts +27 -27
  34. package/src/factories/internal/iterate_metadata_set.ts +33 -33
  35. package/src/factories/internal/iterate_metadata_template.ts +38 -38
  36. package/src/factories/internal/iterate_metadata_tuple.ts +45 -45
  37. package/src/factories/internal/iterate_metadata_union.ts +59 -59
  38. package/src/functional/$every.ts +11 -11
  39. package/src/functional/$guard.ts +35 -35
  40. package/src/functional/$is_email.ts +5 -5
  41. package/src/functional/$is_ipv4.ts +5 -5
  42. package/src/functional/$is_ipv6.ts +5 -5
  43. package/src/functional/$is_url.ts +5 -5
  44. package/src/functional/$is_uuid.ts +5 -5
  45. package/src/functional/$join.ts +50 -50
  46. package/src/functional/$number.ts +19 -19
  47. package/src/functional/$report.ts +15 -15
  48. package/src/functional/$rest.ts +3 -3
  49. package/src/functional/$string.ts +37 -37
  50. package/src/functional/$tail.ts +6 -6
  51. package/src/index.ts +4 -4
  52. package/src/metadata/IJsDocTagInfo.ts +10 -10
  53. package/src/metadata/IMetadata.ts +25 -25
  54. package/src/metadata/IMetadataApplication.ts +7 -7
  55. package/src/metadata/IMetadataConstant.ts +16 -16
  56. package/src/metadata/IMetadataEntry.ts +6 -6
  57. package/src/metadata/IMetadataObject.ts +29 -29
  58. package/src/metadata/IMetadataProperty.ts +11 -11
  59. package/src/metadata/IMetadataTag.ts +122 -122
  60. package/src/metadata/Metadata.ts +477 -477
  61. package/src/metadata/MetadataConstant.ts +3 -3
  62. package/src/metadata/MetadataObject.ts +131 -131
  63. package/src/metadata/MetadataProperty.ts +64 -64
  64. package/src/module.ts +1535 -1535
  65. package/src/programmers/ApplicationProgrammer.ts +55 -55
  66. package/src/programmers/AssertParseProgrammer.ts +45 -45
  67. package/src/programmers/AssertProgrammer.ts +444 -444
  68. package/src/programmers/AssertStringifyProgrammer.ts +45 -45
  69. package/src/programmers/CheckerProgrammer.ts +804 -804
  70. package/src/programmers/FeatureProgrammer.ts +327 -327
  71. package/src/programmers/IsParseProgrammer.ts +51 -51
  72. package/src/programmers/IsProgrammer.ts +172 -172
  73. package/src/programmers/IsStringifyProgrammer.ts +49 -49
  74. package/src/programmers/StringifyProgrammer.ts +756 -756
  75. package/src/programmers/ValidateParseProgrammer.ts +49 -49
  76. package/src/programmers/ValidateProgrammer.ts +236 -236
  77. package/src/programmers/ValidateStringifyProgrammer.ts +60 -60
  78. package/src/programmers/helpers/AtomicPredicator.ts +15 -15
  79. package/src/programmers/helpers/FunctionImporeter.ts +31 -31
  80. package/src/programmers/helpers/IExpressionEntry.ts +10 -10
  81. package/src/programmers/helpers/OptionPredicator.ts +11 -11
  82. package/src/programmers/helpers/StringifyJoinder.ts +111 -111
  83. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  84. package/src/programmers/helpers/UnionExplorer.ts +437 -437
  85. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  86. package/src/programmers/internal/application_array.ts +45 -45
  87. package/src/programmers/internal/application_boolean.ts +17 -17
  88. package/src/programmers/internal/application_constant.ts +29 -29
  89. package/src/programmers/internal/application_default.ts +17 -17
  90. package/src/programmers/internal/application_default_string.ts +32 -32
  91. package/src/programmers/internal/application_native.ts +29 -29
  92. package/src/programmers/internal/application_number.ts +76 -76
  93. package/src/programmers/internal/application_object.ts +103 -103
  94. package/src/programmers/internal/application_schema.ts +221 -221
  95. package/src/programmers/internal/application_string.ts +49 -49
  96. package/src/programmers/internal/application_templates.ts +27 -27
  97. package/src/programmers/internal/application_tuple.ts +25 -25
  98. package/src/programmers/internal/check_array.ts +44 -44
  99. package/src/programmers/internal/check_dynamic_properties.ts +146 -146
  100. package/src/programmers/internal/check_everything.ts +25 -25
  101. package/src/programmers/internal/check_length.ts +46 -46
  102. package/src/programmers/internal/check_native.ts +9 -9
  103. package/src/programmers/internal/check_number.ts +178 -178
  104. package/src/programmers/internal/check_object.ts +42 -42
  105. package/src/programmers/internal/check_string.ts +24 -24
  106. package/src/programmers/internal/check_string_tags.ts +63 -63
  107. package/src/programmers/internal/check_template.ts +50 -50
  108. package/src/programmers/internal/decode_union_object.ts +73 -73
  109. package/src/programmers/internal/feature_object_entries.ts +49 -49
  110. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  111. package/src/programmers/internal/stringify_dynamic_properties.ts +164 -164
  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 +24 -24
  117. package/src/schemas/IJsonSchema.ts +92 -92
  118. package/src/transform.ts +20 -20
  119. package/src/transformers/CallExpressionTransformer.ts +124 -124
  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 +4 -4
  124. package/src/transformers/NodeTransformer.ts +19 -19
  125. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +114 -114
  126. package/src/transformers/features/miscellaneous/CreateInstanceTransformer.ts +41 -41
  127. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  128. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
  129. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
  130. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
  131. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
  132. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
  133. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
  134. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
  135. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
  136. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
  137. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
  138. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
  139. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
  140. package/src/transformers/features/stringifiers/StringifyTransformer.ts +36 -36
  141. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
  142. package/src/transformers/features/validators/AssertTransformer.ts +43 -43
  143. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
  144. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
  145. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
  146. package/src/transformers/features/validators/IsTransformer.ts +43 -43
  147. package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
  148. package/src/typings/Atomic.ts +17 -17
  149. package/src/typings/ClassProperties.ts +5 -5
  150. package/src/typings/OmitNever.ts +3 -3
  151. package/src/typings/SpecialFields.ts +3 -3
  152. package/src/typings/Writable.ts +11 -11
  153. package/src/utils/ArrayUtil.ts +49 -49
  154. package/src/utils/Escaper.ts +50 -50
  155. package/src/utils/MapUtil.ts +14 -14
  156. package/src/utils/PatternUtil.ts +30 -30
  157. package/src/utils/Singleton.ts +17 -17
@@ -1,92 +1,92 @@
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<"bigint">
12
- | IEnumeration<"string">
13
- | IBoolean
14
- | INumber
15
- | IBigInt
16
- | IString
17
- | IArray
18
- | ITuple
19
- | IOneOf
20
- | IReference
21
- | IRecursiveReference
22
- | INullOnly;
23
-
24
- /* -----------------------------------------------------------
25
- ATOMICS
26
- ----------------------------------------------------------- */
27
- export interface IEnumeration<Literal extends Atomic.Literal>
28
- extends IAtomic<Literal> {
29
- enum: Array<Atomic.Mapper[Literal]>;
30
- }
31
- export interface IAtomic<Literal extends Atomic.Literal>
32
- extends ISignificant<Literal> {
33
- default?: Atomic.Mapper[Literal];
34
- }
35
- export interface IString extends IAtomic<"string"> {
36
- minLength?: number;
37
- maxLength?: number;
38
- pattern?: string;
39
- format?: string;
40
- }
41
- export interface INumber extends IAtomic<"number" | "integer"> {
42
- minimum?: number;
43
- maximum?: number;
44
- exclusiveMinimum?: number;
45
- exclusiveMaximum?: number;
46
- multipleOf?: number;
47
- }
48
- export interface IBoolean extends IAtomic<"boolean"> {}
49
- export interface IBigInt extends IAtomic<"bigint"> {}
50
-
51
- /* -----------------------------------------------------------
52
- OBJECTS
53
- ----------------------------------------------------------- */
54
- export interface IArray extends ISignificant<"array"> {
55
- items: IJsonSchema;
56
- minItems?: number;
57
- maxItems?: number;
58
- }
59
- export interface ITuple extends ISignificant<"array"> {
60
- items: IJsonSchema[];
61
- }
62
- export interface IReference extends IAttribute {
63
- $ref: string;
64
- }
65
- export interface IRecursiveReference extends IAttribute {
66
- $recursiveRef: string;
67
- }
68
- export interface INullOnly extends IAttribute {
69
- type: "null";
70
- }
71
-
72
- /* -----------------------------------------------------------
73
- MISCELLANEOUS
74
- ----------------------------------------------------------- */
75
- export interface IOneOf extends IAttribute {
76
- oneOf: IJsonSchema[];
77
- }
78
- export interface IUnknown {}
79
-
80
- export interface ISignificant<Literal extends string> extends IAttribute {
81
- type: Literal;
82
- nullable: boolean;
83
- }
84
- export interface IAttribute {
85
- deprecated?: boolean;
86
- title?: string;
87
- description?: string;
88
- "x-typia-metaTags"?: IMetadataTag[];
89
- "x-typia-jsDocTags"?: IJsDocTagInfo[];
90
- "x-typia-required"?: boolean;
91
- }
92
- }
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<"bigint">
12
+ | IEnumeration<"string">
13
+ | IBoolean
14
+ | INumber
15
+ | IBigInt
16
+ | IString
17
+ | IArray
18
+ | ITuple
19
+ | IOneOf
20
+ | IReference
21
+ | IRecursiveReference
22
+ | INullOnly;
23
+
24
+ /* -----------------------------------------------------------
25
+ ATOMICS
26
+ ----------------------------------------------------------- */
27
+ export interface IEnumeration<Literal extends Atomic.Literal>
28
+ extends IAtomic<Literal> {
29
+ enum: Array<Atomic.Mapper[Literal]>;
30
+ }
31
+ export interface IAtomic<Literal extends Atomic.Literal>
32
+ extends ISignificant<Literal> {
33
+ default?: Atomic.Mapper[Literal];
34
+ }
35
+ export interface IString extends IAtomic<"string"> {
36
+ minLength?: number;
37
+ maxLength?: number;
38
+ pattern?: string;
39
+ format?: string;
40
+ }
41
+ export interface INumber extends IAtomic<"number" | "integer"> {
42
+ minimum?: number;
43
+ maximum?: number;
44
+ exclusiveMinimum?: number;
45
+ exclusiveMaximum?: number;
46
+ multipleOf?: number;
47
+ }
48
+ export interface IBoolean extends IAtomic<"boolean"> {}
49
+ export interface IBigInt extends IAtomic<"bigint"> {}
50
+
51
+ /* -----------------------------------------------------------
52
+ OBJECTS
53
+ ----------------------------------------------------------- */
54
+ export interface IArray extends ISignificant<"array"> {
55
+ items: IJsonSchema;
56
+ minItems?: number;
57
+ maxItems?: number;
58
+ }
59
+ export interface ITuple extends ISignificant<"array"> {
60
+ items: IJsonSchema[];
61
+ }
62
+ export interface IReference extends IAttribute {
63
+ $ref: string;
64
+ }
65
+ export interface IRecursiveReference extends IAttribute {
66
+ $recursiveRef: string;
67
+ }
68
+ export interface INullOnly extends IAttribute {
69
+ type: "null";
70
+ }
71
+
72
+ /* -----------------------------------------------------------
73
+ MISCELLANEOUS
74
+ ----------------------------------------------------------- */
75
+ export interface IOneOf extends IAttribute {
76
+ oneOf: IJsonSchema[];
77
+ }
78
+ export interface IUnknown {}
79
+
80
+ export interface ISignificant<Literal extends string> extends IAttribute {
81
+ type: Literal;
82
+ nullable: boolean;
83
+ }
84
+ export interface IAttribute {
85
+ deprecated?: boolean;
86
+ title?: string;
87
+ description?: string;
88
+ "x-typia-metaTags"?: IMetadataTag[];
89
+ "x-typia-jsDocTags"?: IJsDocTagInfo[];
90
+ "x-typia-required"?: boolean;
91
+ }
92
+ }
package/src/transform.ts CHANGED
@@ -1,20 +1,20 @@
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 default 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
- }
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 default 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
+ }
@@ -1,124 +1,124 @@
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 { MetadataTransformer } from "./features/miscellaneous/MetadataTransformer";
7
- import { AssertParseTransformer } from "./features/parsers/AssertParseTransformer";
8
- import { CreateAssertParseTransformer } from "./features/parsers/CreateAssertParseTransformer";
9
- import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransformer";
10
- import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
11
- import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
12
- import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
13
- import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
14
- import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
15
- import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
16
- import { CreateStringifyTransformer } from "./features/stringifiers/CreateStringifyTransformer";
17
- import { CreateValidateStringifyTransformer } from "./features/stringifiers/CreateValidateStringifyProgrammer";
18
- import { IsStringifyTransformer } from "./features/stringifiers/IsStringifyTransformer";
19
- import { StringifyTransformer } from "./features/stringifiers/StringifyTransformer";
20
- import { ValidateStringifyTransformer } from "./features/stringifiers/ValidateStringifyTransformer";
21
- import { AssertTransformer } from "./features/validators/AssertTransformer";
22
- import { CreateAssertTransformer } from "./features/validators/CreateAssertTransformer";
23
- import { CreateIsTransformer } from "./features/validators/CreateIsTransformer";
24
- import { CreateValidateTransformer } from "./features/validators/CreateValidateTransformer";
25
- import { IsTransformer } from "./features/validators/IsTransformer";
26
- import { ValidateTransformer } from "./features/validators/ValidateTransformer";
27
-
28
- export namespace CallExpressionTransformer {
29
- export function transform(
30
- project: IProject,
31
- expression: ts.CallExpression,
32
- ): ts.Expression {
33
- //----
34
- // VALIDATIONS
35
- //----
36
- // SIGNATURE DECLARATION
37
- const declaration: ts.Declaration | undefined =
38
- project.checker.getResolvedSignature(expression)?.declaration;
39
- if (!declaration) return expression;
40
-
41
- // FILE PATH
42
- const file: string = path.resolve(declaration.getSourceFile().fileName);
43
- if (file.indexOf(LIB_PATH) === -1 && file !== SRC_PATH)
44
- return expression;
45
-
46
- //----
47
- // TRANSFORMATION
48
- //----
49
- // FUNCTION NAME
50
- const { name } = project.checker.getTypeAtLocation(declaration).symbol;
51
-
52
- // FIND TRANSFORMER
53
- const functor: (() => Task) | undefined = FUNCTORS[name];
54
- if (functor === undefined) return expression;
55
-
56
- // RETURNS WITH TRANSFORMATION
57
- return functor()(project, expression.expression, expression);
58
- }
59
- }
60
-
61
- type Task = (
62
- project: IProject,
63
- modulo: ts.LeftHandSideExpression,
64
- expression: ts.CallExpression,
65
- ) => ts.Expression;
66
-
67
- const LIB_PATH = path.join("node_modules", "typia", "lib", "module.d.ts");
68
- const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
69
-
70
- const FUNCTORS: Record<string, () => Task> = {
71
- //----
72
- // SINGLE FUNCTIONS
73
- //----
74
- // BASIC VALIDATORS
75
- assert: () => AssertTransformer.transform(false),
76
- assertType: () => AssertTransformer.transform(false),
77
- is: () => IsTransformer.transform(false),
78
- validate: () => ValidateTransformer.transform(false),
79
-
80
- // STRICT VALIDATORS
81
- assertEquals: () => AssertTransformer.transform(true),
82
- equals: () => IsTransformer.transform(true),
83
- validateEquals: () => ValidateTransformer.transform(true),
84
-
85
- // PARSE FUNCTIONS
86
- isParse: () => IsParseTransformer.transform,
87
- assertParse: () => AssertParseTransformer.transform,
88
- validateParse: () => ValidateParseTransformer.transform,
89
-
90
- // STRINGIFY FUNCTIONS
91
- stringify: () => StringifyTransformer.transform,
92
- assertStringify: () => AssertStringifyTransformer.transform,
93
- isStringify: () => IsStringifyTransformer.transform,
94
- validateStringify: () => ValidateStringifyTransformer.transform,
95
-
96
- // MISC
97
- application: () => ApplicationTransformer.transform,
98
- metadata: () => MetadataTransformer.transform,
99
-
100
- //----
101
- // FACTORY FUNCTIONS
102
- //----
103
- // BASIC VALIDATORS
104
- createAssert: () => CreateAssertTransformer.transform(false),
105
- createAssertType: () => CreateAssertTransformer.transform(false),
106
- createIs: () => CreateIsTransformer.transform(false),
107
- createValidate: () => CreateValidateTransformer.transform(false),
108
-
109
- // STRICT VALIDATORS
110
- createAssertEquals: () => CreateAssertTransformer.transform(true),
111
- createEquals: () => CreateIsTransformer.transform(true),
112
- createValidateEquals: () => CreateValidateTransformer.transform(true),
113
-
114
- // PARSE FUNCTIONS
115
- createIsParse: () => CreateIsParseTransformer.transform,
116
- createAssertParse: () => CreateAssertParseTransformer.transform,
117
- createValidateParse: () => CreateValidateParseTransformer.transform,
118
-
119
- // STRINGIFY FUNCTIONS
120
- createStringify: () => CreateStringifyTransformer.transform,
121
- createAssertStringify: () => CreateAssertStringifyTransformer.transform,
122
- createIsStringify: () => CreateIsStringifyTransformer.transform,
123
- createValidateStringify: () => CreateValidateStringifyTransformer.transform,
124
- };
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 { MetadataTransformer } from "./features/miscellaneous/MetadataTransformer";
7
+ import { AssertParseTransformer } from "./features/parsers/AssertParseTransformer";
8
+ import { CreateAssertParseTransformer } from "./features/parsers/CreateAssertParseTransformer";
9
+ import { CreateIsParseTransformer } from "./features/parsers/CreateIsParseTransformer";
10
+ import { CreateValidateParseTransformer } from "./features/parsers/CreateValidateParseTransformer";
11
+ import { IsParseTransformer } from "./features/parsers/IsParseTransformer";
12
+ import { ValidateParseTransformer } from "./features/parsers/ValidateParseTransformer";
13
+ import { AssertStringifyTransformer } from "./features/stringifiers/AssertStringifyTransformer";
14
+ import { CreateAssertStringifyTransformer } from "./features/stringifiers/CreateAssertStringifyTransformer";
15
+ import { CreateIsStringifyTransformer } from "./features/stringifiers/CreateIsStringifyTransformer";
16
+ import { CreateStringifyTransformer } from "./features/stringifiers/CreateStringifyTransformer";
17
+ import { CreateValidateStringifyTransformer } from "./features/stringifiers/CreateValidateStringifyProgrammer";
18
+ import { IsStringifyTransformer } from "./features/stringifiers/IsStringifyTransformer";
19
+ import { StringifyTransformer } from "./features/stringifiers/StringifyTransformer";
20
+ import { ValidateStringifyTransformer } from "./features/stringifiers/ValidateStringifyTransformer";
21
+ import { AssertTransformer } from "./features/validators/AssertTransformer";
22
+ import { CreateAssertTransformer } from "./features/validators/CreateAssertTransformer";
23
+ import { CreateIsTransformer } from "./features/validators/CreateIsTransformer";
24
+ import { CreateValidateTransformer } from "./features/validators/CreateValidateTransformer";
25
+ import { IsTransformer } from "./features/validators/IsTransformer";
26
+ import { ValidateTransformer } from "./features/validators/ValidateTransformer";
27
+
28
+ export namespace CallExpressionTransformer {
29
+ export function transform(
30
+ project: IProject,
31
+ expression: ts.CallExpression,
32
+ ): ts.Expression {
33
+ //----
34
+ // VALIDATIONS
35
+ //----
36
+ // SIGNATURE DECLARATION
37
+ const declaration: ts.Declaration | undefined =
38
+ project.checker.getResolvedSignature(expression)?.declaration;
39
+ if (!declaration) return expression;
40
+
41
+ // FILE PATH
42
+ const file: string = path.resolve(declaration.getSourceFile().fileName);
43
+ if (file.indexOf(LIB_PATH) === -1 && file !== SRC_PATH)
44
+ return expression;
45
+
46
+ //----
47
+ // TRANSFORMATION
48
+ //----
49
+ // FUNCTION NAME
50
+ const { name } = project.checker.getTypeAtLocation(declaration).symbol;
51
+
52
+ // FIND TRANSFORMER
53
+ const functor: (() => Task) | undefined = FUNCTORS[name];
54
+ if (functor === undefined) return expression;
55
+
56
+ // RETURNS WITH TRANSFORMATION
57
+ return functor()(project, expression.expression, expression);
58
+ }
59
+ }
60
+
61
+ type Task = (
62
+ project: IProject,
63
+ modulo: ts.LeftHandSideExpression,
64
+ expression: ts.CallExpression,
65
+ ) => ts.Expression;
66
+
67
+ const LIB_PATH = path.join("node_modules", "typia", "lib", "module.d.ts");
68
+ const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
69
+
70
+ const FUNCTORS: Record<string, () => Task> = {
71
+ //----
72
+ // SINGLE FUNCTIONS
73
+ //----
74
+ // BASIC VALIDATORS
75
+ assert: () => AssertTransformer.transform(false),
76
+ assertType: () => AssertTransformer.transform(false),
77
+ is: () => IsTransformer.transform(false),
78
+ validate: () => ValidateTransformer.transform(false),
79
+
80
+ // STRICT VALIDATORS
81
+ assertEquals: () => AssertTransformer.transform(true),
82
+ equals: () => IsTransformer.transform(true),
83
+ validateEquals: () => ValidateTransformer.transform(true),
84
+
85
+ // PARSE FUNCTIONS
86
+ isParse: () => IsParseTransformer.transform,
87
+ assertParse: () => AssertParseTransformer.transform,
88
+ validateParse: () => ValidateParseTransformer.transform,
89
+
90
+ // STRINGIFY FUNCTIONS
91
+ stringify: () => StringifyTransformer.transform,
92
+ assertStringify: () => AssertStringifyTransformer.transform,
93
+ isStringify: () => IsStringifyTransformer.transform,
94
+ validateStringify: () => ValidateStringifyTransformer.transform,
95
+
96
+ // MISC
97
+ application: () => ApplicationTransformer.transform,
98
+ metadata: () => MetadataTransformer.transform,
99
+
100
+ //----
101
+ // FACTORY FUNCTIONS
102
+ //----
103
+ // BASIC VALIDATORS
104
+ createAssert: () => CreateAssertTransformer.transform(false),
105
+ createAssertType: () => CreateAssertTransformer.transform(false),
106
+ createIs: () => CreateIsTransformer.transform(false),
107
+ createValidate: () => CreateValidateTransformer.transform(false),
108
+
109
+ // STRICT VALIDATORS
110
+ createAssertEquals: () => CreateAssertTransformer.transform(true),
111
+ createEquals: () => CreateIsTransformer.transform(true),
112
+ createValidateEquals: () => CreateValidateTransformer.transform(true),
113
+
114
+ // PARSE FUNCTIONS
115
+ createIsParse: () => CreateIsParseTransformer.transform,
116
+ createAssertParse: () => CreateAssertParseTransformer.transform,
117
+ createValidateParse: () => CreateValidateParseTransformer.transform,
118
+
119
+ // STRINGIFY FUNCTIONS
120
+ createStringify: () => CreateStringifyTransformer.transform,
121
+ createAssertStringify: () => CreateAssertStringifyTransformer.transform,
122
+ createIsStringify: () => CreateIsStringifyTransformer.transform,
123
+ createValidateStringify: () => CreateValidateStringifyTransformer.transform,
124
+ };
@@ -1,66 +1,66 @@
1
- // import path from "path";
2
- // import ts from "typescript";
3
- // import { AssertProgrammer } from "../programmers/AssertProgrammer";
4
- // import { IsProgrammer } from "../programmers/IsProgrammer";
5
- // import { StringifyProgrammer } from "../programmers/StringifyProgrammer";
6
- // import { IProject } from "../structures/IProject";
7
-
8
- // export namespace ExpressionWithArgumentTransformer {
9
- // export function transform(
10
- // project: IProject,
11
- // expression: ts.ExpressionWithTypeArguments,
12
- // ): ts.Expression {
13
- // //----
14
- // // VALIDATIONS
15
- // //----
16
- // // SYMBOL DECLARATION
17
- // const symbol: ts.Symbol | undefined =
18
- // project.checker.getSymbolAtLocation(expression.expression);
19
- // const declaration: ts.Declaration | undefined = symbol?.declarations
20
- // ? symbol.declarations[0]
21
- // : undefined;
22
- // if (!declaration) return expression;
23
-
24
- // // FILE PATH
25
- // const file: string = path.resolve(declaration.getSourceFile().fileName);
26
- // if (file !== LIB_PATH && file !== SRC_PATH) return expression;
27
-
28
- // // ARGUMENTS
29
- // if (expression.typeArguments?.length !== 1) return expression;
30
-
31
- // //----
32
- // // TRANSFORMATION
33
- // //----
34
- // // GET MODULO AND TYPE
35
- // const modulo: ts.LeftHandSideExpression = expression.expression;
36
- // const type: ts.Type = project.checker.getTypeFromTypeNode(
37
- // expression.typeArguments[0]!,
38
- // );
39
-
40
- // // FUNCTION NAME
41
- // const { name } = project.checker.getTypeAtLocation(declaration).symbol;
42
-
43
- // // FIND TRANSFORMER
44
- // const functor: (() => Task) | undefined = FUNCTORS[name];
45
- // if (functor === undefined) return expression;
46
-
47
- // // RETURNS WITH TRANSFORMATION
48
- // return functor()(project, modulo, type);
49
- // }
50
- // }
51
-
52
- // type Task = (
53
- // project: IProject,
54
- // modulo: ts.LeftHandSideExpression,
55
- // type: ts.Type,
56
- // ) => ts.ArrowFunction;
57
-
58
- // const LIB_PATH = path.resolve(path.join(__dirname, "..", "module.d.ts"));
59
- // const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
60
-
61
- // const FUNCTORS: Record<string, () => Task> = {
62
- // assert: () => AssertProgrammer.generate,
63
- // is: () => (project, _modulo, type) => IsProgrammer.generate(project, type),
64
- // stringify: () => (project, modulo, type) =>
65
- // StringifyProgrammer.generate(modulo)(project, type),
66
- // };
1
+ // import path from "path";
2
+ // import ts from "typescript";
3
+ // import { AssertProgrammer } from "../programmers/AssertProgrammer";
4
+ // import { IsProgrammer } from "../programmers/IsProgrammer";
5
+ // import { StringifyProgrammer } from "../programmers/StringifyProgrammer";
6
+ // import { IProject } from "../structures/IProject";
7
+
8
+ // export namespace ExpressionWithArgumentTransformer {
9
+ // export function transform(
10
+ // project: IProject,
11
+ // expression: ts.ExpressionWithTypeArguments,
12
+ // ): ts.Expression {
13
+ // //----
14
+ // // VALIDATIONS
15
+ // //----
16
+ // // SYMBOL DECLARATION
17
+ // const symbol: ts.Symbol | undefined =
18
+ // project.checker.getSymbolAtLocation(expression.expression);
19
+ // const declaration: ts.Declaration | undefined = symbol?.declarations
20
+ // ? symbol.declarations[0]
21
+ // : undefined;
22
+ // if (!declaration) return expression;
23
+
24
+ // // FILE PATH
25
+ // const file: string = path.resolve(declaration.getSourceFile().fileName);
26
+ // if (file !== LIB_PATH && file !== SRC_PATH) return expression;
27
+
28
+ // // ARGUMENTS
29
+ // if (expression.typeArguments?.length !== 1) return expression;
30
+
31
+ // //----
32
+ // // TRANSFORMATION
33
+ // //----
34
+ // // GET MODULO AND TYPE
35
+ // const modulo: ts.LeftHandSideExpression = expression.expression;
36
+ // const type: ts.Type = project.checker.getTypeFromTypeNode(
37
+ // expression.typeArguments[0]!,
38
+ // );
39
+
40
+ // // FUNCTION NAME
41
+ // const { name } = project.checker.getTypeAtLocation(declaration).symbol;
42
+
43
+ // // FIND TRANSFORMER
44
+ // const functor: (() => Task) | undefined = FUNCTORS[name];
45
+ // if (functor === undefined) return expression;
46
+
47
+ // // RETURNS WITH TRANSFORMATION
48
+ // return functor()(project, modulo, type);
49
+ // }
50
+ // }
51
+
52
+ // type Task = (
53
+ // project: IProject,
54
+ // modulo: ts.LeftHandSideExpression,
55
+ // type: ts.Type,
56
+ // ) => ts.ArrowFunction;
57
+
58
+ // const LIB_PATH = path.resolve(path.join(__dirname, "..", "module.d.ts"));
59
+ // const SRC_PATH = path.resolve(path.join(__dirname, "..", "module.ts"));
60
+
61
+ // const FUNCTORS: Record<string, () => Task> = {
62
+ // assert: () => AssertProgrammer.generate,
63
+ // is: () => (project, _modulo, type) => IsProgrammer.generate(project, type),
64
+ // stringify: () => (project, modulo, type) =>
65
+ // StringifyProgrammer.generate(modulo)(project, type),
66
+ // };