typia 3.7.5 → 3.8.0-dev.20230415

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 (235) hide show
  1. package/README.md +0 -32
  2. package/lib/executable/TypiaSetupWizard.d.ts +0 -1
  3. package/lib/executable/TypiaSetupWizard.js +26 -56
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/setup/PackageManager.d.ts +1 -1
  6. package/lib/executable/typia.d.ts +1 -1
  7. package/lib/executable/typia.js +1 -1
  8. package/lib/executable/typia.js.map +1 -1
  9. package/lib/factories/IdentifierFactory.d.ts +1 -1
  10. package/lib/factories/IdentifierFactory.js +1 -1
  11. package/lib/factories/IdentifierFactory.js.map +1 -1
  12. package/lib/metadata/Metadata.js +1 -1
  13. package/lib/metadata/Metadata.js.map +1 -1
  14. package/lib/module.js +1 -1
  15. package/lib/module.js.map +1 -1
  16. package/lib/programmers/CheckerProgrammer.js +1 -3
  17. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  18. package/lib/programmers/internal/check_string_tags.js +2 -2
  19. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  20. package/lib/programmers/internal/check_template.js +1 -1
  21. package/lib/programmers/internal/check_template.js.map +1 -1
  22. package/package.json +13 -12
  23. package/src/CustomValidatorMap.ts +126 -126
  24. package/src/IRandomGenerator.ts +33 -33
  25. package/src/IValidation.ts +21 -21
  26. package/src/Primitive.ts +104 -104
  27. package/src/TypeGuardError.ts +36 -36
  28. package/src/executable/TypiaGenerateWizard.ts +85 -85
  29. package/src/executable/TypiaSetupWizard.ts +118 -150
  30. package/src/executable/setup/ArgumentParser.ts +45 -45
  31. package/src/executable/setup/CommandExecutor.ts +8 -8
  32. package/src/executable/setup/FileRetriever.ts +22 -22
  33. package/src/executable/setup/PackageManager.ts +71 -71
  34. package/src/executable/setup/PluginConfigurator.ts +59 -59
  35. package/src/executable/typia.ts +52 -54
  36. package/src/factories/CommentFactory.ts +10 -10
  37. package/src/factories/ExpressionFactory.ts +77 -77
  38. package/src/factories/IdentifierFactory.ts +59 -81
  39. package/src/factories/LiteralFactory.ts +44 -44
  40. package/src/factories/MetadataCollection.ts +122 -122
  41. package/src/factories/MetadataFactory.ts +51 -51
  42. package/src/factories/MetadataTagFactory.ts +302 -302
  43. package/src/factories/StatementFactory.ts +60 -60
  44. package/src/factories/TemplateFactory.ts +56 -56
  45. package/src/factories/TypeFactory.ts +129 -129
  46. package/src/factories/TypiaFileFactory.ts +120 -120
  47. package/src/factories/ValueFactory.ts +12 -12
  48. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  49. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  50. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  51. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  52. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  53. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  54. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  55. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  56. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  57. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  58. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  59. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  60. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  61. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  62. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  63. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  64. package/src/functional/$any.ts +3 -3
  65. package/src/functional/$dictionary.ts +20 -20
  66. package/src/functional/$every.ts +11 -11
  67. package/src/functional/$guard.ts +35 -35
  68. package/src/functional/$is_between.ts +7 -7
  69. package/src/functional/$is_custom.ts +14 -14
  70. package/src/functional/$is_date.ts +4 -4
  71. package/src/functional/$is_datetime.ts +3 -3
  72. package/src/functional/$is_email.ts +5 -5
  73. package/src/functional/$is_ipv4.ts +5 -5
  74. package/src/functional/$is_ipv6.ts +5 -5
  75. package/src/functional/$is_url.ts +5 -5
  76. package/src/functional/$is_uuid.ts +5 -5
  77. package/src/functional/$join.ts +50 -50
  78. package/src/functional/$number.ts +12 -12
  79. package/src/functional/$report.ts +15 -15
  80. package/src/functional/$rest.ts +3 -3
  81. package/src/functional/$string.ts +37 -37
  82. package/src/functional/$tail.ts +6 -6
  83. package/src/functional/Namespace.ts +127 -127
  84. package/src/index.ts +4 -4
  85. package/src/metadata/ICommentTag.ts +4 -4
  86. package/src/metadata/IJsDocTagInfo.ts +10 -10
  87. package/src/metadata/IMetadata.ts +25 -25
  88. package/src/metadata/IMetadataApplication.ts +7 -7
  89. package/src/metadata/IMetadataConstant.ts +16 -16
  90. package/src/metadata/IMetadataEntry.ts +6 -6
  91. package/src/metadata/IMetadataObject.ts +29 -29
  92. package/src/metadata/IMetadataProperty.ts +11 -11
  93. package/src/metadata/IMetadataTag.ts +105 -105
  94. package/src/metadata/Metadata.ts +533 -534
  95. package/src/metadata/MetadataConstant.ts +3 -3
  96. package/src/metadata/MetadataObject.ts +131 -131
  97. package/src/metadata/MetadataProperty.ts +64 -64
  98. package/src/module.ts +2043 -2043
  99. package/src/programmers/ApplicationProgrammer.ts +55 -55
  100. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  101. package/src/programmers/AssertParseProgrammer.ts +65 -65
  102. package/src/programmers/AssertProgrammer.ts +284 -284
  103. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  104. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  105. package/src/programmers/CheckerProgrammer.ts +920 -922
  106. package/src/programmers/CloneProgrammer.ts +388 -388
  107. package/src/programmers/FeatureProgrammer.ts +512 -512
  108. package/src/programmers/IsCloneProgrammer.ts +80 -80
  109. package/src/programmers/IsParseProgrammer.ts +74 -74
  110. package/src/programmers/IsProgrammer.ts +206 -206
  111. package/src/programmers/IsPruneProgrammer.ts +75 -75
  112. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  113. package/src/programmers/LiteralsProgrammer.ts +65 -65
  114. package/src/programmers/PruneProgrammer.ts +343 -343
  115. package/src/programmers/RandomProgrammer.ts +413 -413
  116. package/src/programmers/StringifyProgrammer.ts +801 -801
  117. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  118. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  119. package/src/programmers/ValidateProgrammer.ts +317 -317
  120. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  121. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  122. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  123. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  124. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  125. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  126. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  127. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  128. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  129. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  130. package/src/programmers/helpers/RandomRanger.ts +216 -216
  131. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  132. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  133. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  134. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  135. package/src/programmers/internal/application_array.ts +37 -37
  136. package/src/programmers/internal/application_boolean.ts +17 -17
  137. package/src/programmers/internal/application_constant.ts +29 -29
  138. package/src/programmers/internal/application_default.ts +17 -17
  139. package/src/programmers/internal/application_default_string.ts +32 -32
  140. package/src/programmers/internal/application_native.ts +32 -32
  141. package/src/programmers/internal/application_number.ts +73 -73
  142. package/src/programmers/internal/application_object.ts +153 -153
  143. package/src/programmers/internal/application_schema.ts +184 -184
  144. package/src/programmers/internal/application_string.ts +45 -45
  145. package/src/programmers/internal/application_templates.ts +27 -27
  146. package/src/programmers/internal/application_tuple.ts +29 -29
  147. package/src/programmers/internal/check_array.ts +30 -30
  148. package/src/programmers/internal/check_array_length.ts +35 -35
  149. package/src/programmers/internal/check_bigint.ts +82 -82
  150. package/src/programmers/internal/check_custom.ts +33 -33
  151. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  152. package/src/programmers/internal/check_everything.ts +28 -28
  153. package/src/programmers/internal/check_native.ts +21 -21
  154. package/src/programmers/internal/check_number.ts +177 -177
  155. package/src/programmers/internal/check_object.ts +55 -55
  156. package/src/programmers/internal/check_string.ts +25 -25
  157. package/src/programmers/internal/check_string_tags.ts +67 -73
  158. package/src/programmers/internal/check_template.ts +56 -59
  159. package/src/programmers/internal/check_union_array_like.ts +272 -272
  160. package/src/programmers/internal/check_union_tuple.ts +35 -35
  161. package/src/programmers/internal/decode_union_object.ts +73 -73
  162. package/src/programmers/internal/feature_object_entries.ts +63 -63
  163. package/src/programmers/internal/get_comment_tags.ts +23 -23
  164. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  165. package/src/programmers/internal/prune_object_properties.ts +60 -60
  166. package/src/programmers/internal/random_custom.ts +30 -30
  167. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  168. package/src/programmers/internal/stringify_native.ts +8 -8
  169. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  170. package/src/programmers/internal/template_to_pattern.ts +15 -15
  171. package/src/schemas/IJsonApplication.ts +9 -9
  172. package/src/schemas/IJsonComponents.ts +26 -26
  173. package/src/schemas/IJsonSchema.ts +121 -121
  174. package/src/transform.ts +21 -21
  175. package/src/transformers/CallExpressionTransformer.ts +174 -174
  176. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  177. package/src/transformers/FileTransformer.ts +49 -49
  178. package/src/transformers/IProject.ts +11 -11
  179. package/src/transformers/ITransformOptions.ts +62 -62
  180. package/src/transformers/ImportTransformer.ts +66 -66
  181. package/src/transformers/NodeTransformer.ts +19 -19
  182. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  183. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  184. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  185. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  187. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  189. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  193. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  194. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  198. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  199. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  201. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  203. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  204. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  205. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  206. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  207. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  208. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  209. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  210. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  211. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  212. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  213. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  214. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  215. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  216. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  217. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  218. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  219. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  220. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  221. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  222. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  223. package/src/transformers/internal/GenericTransformer.ts +99 -99
  224. package/src/typings/Atomic.ts +17 -17
  225. package/src/typings/ClassProperties.ts +5 -5
  226. package/src/typings/Customizable.ts +5 -5
  227. package/src/typings/OmitNever.ts +3 -3
  228. package/src/typings/SpecialFields.ts +3 -3
  229. package/src/typings/Writable.ts +11 -11
  230. package/src/utils/ArrayUtil.ts +49 -49
  231. package/src/utils/Escaper.ts +50 -50
  232. package/src/utils/MapUtil.ts +14 -14
  233. package/src/utils/PatternUtil.ts +30 -30
  234. package/src/utils/RandomGenerator.ts +96 -96
  235. package/src/utils/Singleton.ts +17 -17
@@ -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
+ // };
@@ -1,49 +1,49 @@
1
- import ts from "typescript";
2
-
3
- import { IProject } from "./IProject";
4
- import { NodeTransformer } from "./NodeTransformer";
5
-
6
- export namespace FileTransformer {
7
- export function transform(
8
- project: IProject,
9
- context: ts.TransformationContext,
10
- file: ts.SourceFile,
11
- ): ts.SourceFile {
12
- // DO NOT TRANSFORM D.TS FILE
13
- if (file.isDeclarationFile) return file;
14
-
15
- // ITERATE NODES
16
- return ts.visitEachChild(
17
- file,
18
- (node) => iterate_node(project, context, node),
19
- context,
20
- );
21
- }
22
-
23
- function iterate_node(
24
- project: IProject,
25
- context: ts.TransformationContext,
26
- node: ts.Node,
27
- ): ts.Node {
28
- return ts.visitEachChild(
29
- try_transform_node(project, node),
30
- (child) => iterate_node(project, context, child),
31
- context,
32
- );
33
- }
34
-
35
- function try_transform_node(project: IProject, node: ts.Node): ts.Node {
36
- try {
37
- return NodeTransformer.transform(project, node);
38
- } catch (exp) {
39
- if (!(exp instanceof Error)) throw exp;
40
-
41
- const file: ts.SourceFile = node.getSourceFile();
42
- const { line, character } = file.getLineAndCharacterOfPosition(
43
- node.pos,
44
- );
45
- exp.message += ` - ${file.fileName}:${line + 1}:${character + 1}`;
46
- throw exp;
47
- }
48
- }
49
- }
1
+ import ts from "typescript";
2
+
3
+ import { IProject } from "./IProject";
4
+ import { NodeTransformer } from "./NodeTransformer";
5
+
6
+ export namespace FileTransformer {
7
+ export function transform(
8
+ project: IProject,
9
+ context: ts.TransformationContext,
10
+ file: ts.SourceFile,
11
+ ): ts.SourceFile {
12
+ // DO NOT TRANSFORM D.TS FILE
13
+ if (file.isDeclarationFile) return file;
14
+
15
+ // ITERATE NODES
16
+ return ts.visitEachChild(
17
+ file,
18
+ (node) => iterate_node(project, context, node),
19
+ context,
20
+ );
21
+ }
22
+
23
+ function iterate_node(
24
+ project: IProject,
25
+ context: ts.TransformationContext,
26
+ node: ts.Node,
27
+ ): ts.Node {
28
+ return ts.visitEachChild(
29
+ try_transform_node(project, node),
30
+ (child) => iterate_node(project, context, child),
31
+ context,
32
+ );
33
+ }
34
+
35
+ function try_transform_node(project: IProject, node: ts.Node): ts.Node {
36
+ try {
37
+ return NodeTransformer.transform(project, node);
38
+ } catch (exp) {
39
+ if (!(exp instanceof Error)) throw exp;
40
+
41
+ const file: ts.SourceFile = node.getSourceFile();
42
+ const { line, character } = file.getLineAndCharacterOfPosition(
43
+ node.pos,
44
+ );
45
+ exp.message += ` - ${file.fileName}:${line + 1}:${character + 1}`;
46
+ throw exp;
47
+ }
48
+ }
49
+ }
@@ -1,11 +1,11 @@
1
- import ts from "typescript";
2
-
3
- import { ITransformOptions } from "./ITransformOptions";
4
-
5
- export interface IProject {
6
- program: ts.Program;
7
- compilerOptions: ts.CompilerOptions;
8
- checker: ts.TypeChecker;
9
- printer: ts.Printer;
10
- options: ITransformOptions;
11
- }
1
+ import ts from "typescript";
2
+
3
+ import { ITransformOptions } from "./ITransformOptions";
4
+
5
+ export interface IProject {
6
+ program: ts.Program;
7
+ compilerOptions: ts.CompilerOptions;
8
+ checker: ts.TypeChecker;
9
+ printer: ts.Printer;
10
+ options: ITransformOptions;
11
+ }
@@ -1,62 +1,62 @@
1
- export interface ITransformOptions {
2
- /**
3
- * Whether to validate finite number or not.
4
- *
5
- * If configured true, number typed values would be validated by Number.isNaN().
6
- *
7
- * However, whatever you configure, it would be ignored when marshaling or parsing.
8
- *
9
- * - when marshaling, always be true
10
- * - assertStringify()
11
- * - validateEncode()
12
- * - when parsing, always be false
13
- * - assertParse()
14
- * - isDecode()
15
- *
16
- * @default false
17
- */
18
- finite?: boolean;
19
-
20
- /**
21
- * Whether to validate finite number or not.
22
- *
23
- * If configured true, number typed values would be validated by Number.isFinite().
24
- *
25
- * However, whatever you configure, it can be ignored in below case.
26
- *
27
- * - when `finite` option is true, this option would be ignored
28
- * - when marshaling, always be true
29
- * - assertStringify()
30
- * - validateEncode()
31
- * - when parsing, always be false
32
- * - assertParse()
33
- * - isDecode()
34
- *
35
- * @default false
36
- */
37
- numeric?: boolean;
38
-
39
- /**
40
- * Whether to validate functional type or not.
41
- *
42
- * However, whatever you configure, it becomes false when marshaling or parsing.
43
- *
44
- * @default false
45
- */
46
- functional?: boolean;
47
-
48
- /**
49
- * Whether to check undefined value or not.
50
- *
51
- * JavaScript can assign `undefined` value to a specific property and it is an
52
- * issue when validating without allowing superfluous properties. Should undefined
53
- * value assigned superfluous property be allowed or not?
54
- *
55
- * Note that, this option only works on {@link equals} function. Other function
56
- * like {@link assertEquals} or {@link validateEquals} would ignore this option
57
- * value and always allow the `undefined` value.
58
- *
59
- * @default true
60
- */
61
- undefined?: boolean;
62
- }
1
+ export interface ITransformOptions {
2
+ /**
3
+ * Whether to validate finite number or not.
4
+ *
5
+ * If configured true, number typed values would be validated by Number.isNaN().
6
+ *
7
+ * However, whatever you configure, it would be ignored when marshaling or parsing.
8
+ *
9
+ * - when marshaling, always be true
10
+ * - assertStringify()
11
+ * - validateEncode()
12
+ * - when parsing, always be false
13
+ * - assertParse()
14
+ * - isDecode()
15
+ *
16
+ * @default false
17
+ */
18
+ finite?: boolean;
19
+
20
+ /**
21
+ * Whether to validate finite number or not.
22
+ *
23
+ * If configured true, number typed values would be validated by Number.isFinite().
24
+ *
25
+ * However, whatever you configure, it can be ignored in below case.
26
+ *
27
+ * - when `finite` option is true, this option would be ignored
28
+ * - when marshaling, always be true
29
+ * - assertStringify()
30
+ * - validateEncode()
31
+ * - when parsing, always be false
32
+ * - assertParse()
33
+ * - isDecode()
34
+ *
35
+ * @default false
36
+ */
37
+ numeric?: boolean;
38
+
39
+ /**
40
+ * Whether to validate functional type or not.
41
+ *
42
+ * However, whatever you configure, it becomes false when marshaling or parsing.
43
+ *
44
+ * @default false
45
+ */
46
+ functional?: boolean;
47
+
48
+ /**
49
+ * Whether to check undefined value or not.
50
+ *
51
+ * JavaScript can assign `undefined` value to a specific property and it is an
52
+ * issue when validating without allowing superfluous properties. Should undefined
53
+ * value assigned superfluous property be allowed or not?
54
+ *
55
+ * Note that, this option only works on {@link equals} function. Other function
56
+ * like {@link assertEquals} or {@link validateEquals} would ignore this option
57
+ * value and always allow the `undefined` value.
58
+ *
59
+ * @default true
60
+ */
61
+ undefined?: boolean;
62
+ }
@@ -1,66 +1,66 @@
1
- import path from "path";
2
- import ts from "typescript";
3
-
4
- export namespace ImportTransformer {
5
- export const transform =
6
- (from: string) =>
7
- (to: string) =>
8
- (context: ts.TransformationContext) =>
9
- (file: ts.SourceFile) =>
10
- transform_file(from)(to)(context)(file);
11
-
12
- const transform_file =
13
- (top: string) =>
14
- (to: string) =>
15
- (context: ts.TransformationContext) =>
16
- (file: ts.SourceFile): ts.SourceFile => {
17
- if (file.isDeclarationFile) return file;
18
-
19
- const from: string = get_directory_path(
20
- path.resolve(file.getSourceFile().fileName),
21
- );
22
- to = from.replace(top, to);
23
-
24
- return ts.visitEachChild(
25
- file,
26
- (node) => transform_node(top)(from)(to)(node),
27
- context,
28
- );
29
- };
30
-
31
- const transform_node =
32
- (top: string) => (from: string) => (to: string) => (node: ts.Node) => {
33
- if (
34
- !ts.isImportDeclaration(node) ||
35
- !ts.isStringLiteral(node.moduleSpecifier)
36
- )
37
- return node;
38
-
39
- const text: string = node.moduleSpecifier.text;
40
- if (text[0] !== ".") return node;
41
-
42
- const location: string = path.resolve(from, text);
43
- if (location.indexOf(top) === 0) return node;
44
-
45
- const replaced: string = (() => {
46
- const simple: string = path
47
- .relative(to, location)
48
- .split(path.sep)
49
- .join("/");
50
- return simple[0] === "." ? simple : `./${simple}`;
51
- })();
52
-
53
- return ts.factory.createImportDeclaration(
54
- undefined,
55
- node.importClause,
56
- ts.factory.createStringLiteral(replaced),
57
- node.assertClause,
58
- );
59
- };
60
- }
61
-
62
- const get_directory_path = (file: string): string => {
63
- const splitted: string[] = path.resolve(file).split(path.sep);
64
- splitted.pop();
65
- return path.resolve(splitted.join(path.sep));
66
- };
1
+ import path from "path";
2
+ import ts from "typescript";
3
+
4
+ export namespace ImportTransformer {
5
+ export const transform =
6
+ (from: string) =>
7
+ (to: string) =>
8
+ (context: ts.TransformationContext) =>
9
+ (file: ts.SourceFile) =>
10
+ transform_file(from)(to)(context)(file);
11
+
12
+ const transform_file =
13
+ (top: string) =>
14
+ (to: string) =>
15
+ (context: ts.TransformationContext) =>
16
+ (file: ts.SourceFile): ts.SourceFile => {
17
+ if (file.isDeclarationFile) return file;
18
+
19
+ const from: string = get_directory_path(
20
+ path.resolve(file.getSourceFile().fileName),
21
+ );
22
+ to = from.replace(top, to);
23
+
24
+ return ts.visitEachChild(
25
+ file,
26
+ (node) => transform_node(top)(from)(to)(node),
27
+ context,
28
+ );
29
+ };
30
+
31
+ const transform_node =
32
+ (top: string) => (from: string) => (to: string) => (node: ts.Node) => {
33
+ if (
34
+ !ts.isImportDeclaration(node) ||
35
+ !ts.isStringLiteral(node.moduleSpecifier)
36
+ )
37
+ return node;
38
+
39
+ const text: string = node.moduleSpecifier.text;
40
+ if (text[0] !== ".") return node;
41
+
42
+ const location: string = path.resolve(from, text);
43
+ if (location.indexOf(top) === 0) return node;
44
+
45
+ const replaced: string = (() => {
46
+ const simple: string = path
47
+ .relative(to, location)
48
+ .split(path.sep)
49
+ .join("/");
50
+ return simple[0] === "." ? simple : `./${simple}`;
51
+ })();
52
+
53
+ return ts.factory.createImportDeclaration(
54
+ undefined,
55
+ node.importClause,
56
+ ts.factory.createStringLiteral(replaced),
57
+ node.assertClause,
58
+ );
59
+ };
60
+ }
61
+
62
+ const get_directory_path = (file: string): string => {
63
+ const splitted: string[] = path.resolve(file).split(path.sep);
64
+ splitted.pop();
65
+ return path.resolve(splitted.join(path.sep));
66
+ };
@@ -1,19 +1,19 @@
1
- import ts from "typescript";
2
-
3
- import { CallExpressionTransformer } from "./CallExpressionTransformer";
4
- import { IProject } from "./IProject";
5
-
6
- // import { ExpressionWithArgumentTransformer } from "./ExpressionWithArgumentTransformer";
7
-
8
- export namespace NodeTransformer {
9
- export function transform(project: IProject, expression: ts.Node): ts.Node {
10
- if (ts.isCallExpression(expression))
11
- return CallExpressionTransformer.transform(project, expression);
12
- // else if (ts.isExpressionWithTypeArguments(expression))
13
- // return ExpressionWithArgumentTransformer.transform(
14
- // project,
15
- // expression,
16
- // );
17
- return expression;
18
- }
19
- }
1
+ import ts from "typescript";
2
+
3
+ import { CallExpressionTransformer } from "./CallExpressionTransformer";
4
+ import { IProject } from "./IProject";
5
+
6
+ // import { ExpressionWithArgumentTransformer } from "./ExpressionWithArgumentTransformer";
7
+
8
+ export namespace NodeTransformer {
9
+ export function transform(project: IProject, expression: ts.Node): ts.Node {
10
+ if (ts.isCallExpression(expression))
11
+ return CallExpressionTransformer.transform(project, expression);
12
+ // else if (ts.isExpressionWithTypeArguments(expression))
13
+ // return ExpressionWithArgumentTransformer.transform(
14
+ // project,
15
+ // expression,
16
+ // );
17
+ return expression;
18
+ }
19
+ }