typia 4.3.2-dev.20230821 → 4.3.3-dev.20230825

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 (241) hide show
  1. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +2 -0
  2. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  3. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  4. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  5. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  6. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  7. package/package.json +2 -2
  8. package/src/CustomValidatorMap.ts +126 -126
  9. package/src/IRandomGenerator.ts +34 -34
  10. package/src/IValidation.ts +21 -21
  11. package/src/Primitive.ts +131 -131
  12. package/src/TypeGuardError.ts +36 -36
  13. package/src/executable/TypiaGenerateWizard.ts +85 -85
  14. package/src/executable/TypiaSetupWizard.ts +153 -153
  15. package/src/executable/setup/ArgumentParser.ts +45 -45
  16. package/src/executable/setup/CommandExecutor.ts +8 -8
  17. package/src/executable/setup/FileRetriever.ts +22 -22
  18. package/src/executable/setup/PackageManager.ts +71 -71
  19. package/src/executable/setup/PluginConfigurator.ts +70 -70
  20. package/src/executable/typia.ts +52 -52
  21. package/src/factories/CommentFactory.ts +84 -84
  22. package/src/factories/ExpressionFactory.ts +77 -77
  23. package/src/factories/IdentifierFactory.ts +59 -59
  24. package/src/factories/LiteralFactory.ts +39 -39
  25. package/src/factories/MetadataCollection.ts +269 -269
  26. package/src/factories/MetadataFactory.ts +34 -34
  27. package/src/factories/MetadataTagFactory.ts +361 -361
  28. package/src/factories/StatementFactory.ts +24 -24
  29. package/src/factories/TemplateFactory.ts +58 -58
  30. package/src/factories/TypeFactory.ts +124 -124
  31. package/src/factories/ValueFactory.ts +12 -12
  32. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  33. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  34. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  35. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  36. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  37. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  38. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  39. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  40. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  41. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  42. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  43. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  44. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +88 -84
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  54. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  55. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  56. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  57. package/src/functional/$any.ts +2 -2
  58. package/src/functional/$dictionary.ts +25 -25
  59. package/src/functional/$every.ts +11 -11
  60. package/src/functional/$guard.ts +35 -35
  61. package/src/functional/$is_between.ts +2 -2
  62. package/src/functional/$is_custom.ts +14 -14
  63. package/src/functional/$is_date.ts +3 -3
  64. package/src/functional/$is_datetime.ts +2 -2
  65. package/src/functional/$is_email.ts +4 -4
  66. package/src/functional/$is_ipv4.ts +4 -4
  67. package/src/functional/$is_ipv6.ts +4 -4
  68. package/src/functional/$is_url.ts +4 -4
  69. package/src/functional/$is_uuid.ts +4 -4
  70. package/src/functional/$join.ts +46 -46
  71. package/src/functional/$number.ts +12 -12
  72. package/src/functional/$report.ts +15 -15
  73. package/src/functional/$rest.ts +3 -3
  74. package/src/functional/$string.ts +50 -50
  75. package/src/functional/$tail.ts +5 -5
  76. package/src/functional/Namespace.ts +127 -127
  77. package/src/index.ts +4 -4
  78. package/src/metadata/ICommentTag.ts +4 -4
  79. package/src/metadata/IJsDocTagInfo.ts +10 -10
  80. package/src/metadata/IMetadata.ts +28 -28
  81. package/src/metadata/IMetadataAlias.ts +14 -14
  82. package/src/metadata/IMetadataApplication.ts +7 -7
  83. package/src/metadata/IMetadataArray.ts +10 -10
  84. package/src/metadata/IMetadataCollection.ts +11 -11
  85. package/src/metadata/IMetadataConstant.ts +16 -16
  86. package/src/metadata/IMetadataDictionary.ts +14 -14
  87. package/src/metadata/IMetadataEntry.ts +6 -6
  88. package/src/metadata/IMetadataObject.ts +18 -18
  89. package/src/metadata/IMetadataProperty.ts +11 -11
  90. package/src/metadata/IMetadataResolved.ts +6 -6
  91. package/src/metadata/IMetadataTag.ts +112 -112
  92. package/src/metadata/IMetadataTuple.ts +10 -10
  93. package/src/metadata/Metadata.ts +607 -607
  94. package/src/metadata/MetadataAlias.ts +66 -66
  95. package/src/metadata/MetadataArray.ts +55 -55
  96. package/src/metadata/MetadataConstant.ts +3 -3
  97. package/src/metadata/MetadataObject.ts +129 -129
  98. package/src/metadata/MetadataProperty.ts +64 -64
  99. package/src/metadata/MetadataResolved.ts +51 -51
  100. package/src/metadata/MetadataTuple.ts +58 -58
  101. package/src/module.ts +2038 -2038
  102. package/src/programmers/ApplicationProgrammer.ts +47 -47
  103. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  104. package/src/programmers/AssertParseProgrammer.ts +66 -66
  105. package/src/programmers/AssertProgrammer.ts +279 -279
  106. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  107. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  108. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  109. package/src/programmers/CloneProgrammer.ts +587 -587
  110. package/src/programmers/FeatureProgrammer.ts +495 -495
  111. package/src/programmers/IsCloneProgrammer.ts +78 -78
  112. package/src/programmers/IsParseProgrammer.ts +72 -72
  113. package/src/programmers/IsProgrammer.ts +239 -239
  114. package/src/programmers/IsPruneProgrammer.ts +73 -73
  115. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  116. package/src/programmers/LiteralsProgrammer.ts +64 -64
  117. package/src/programmers/PruneProgrammer.ts +542 -542
  118. package/src/programmers/RandomProgrammer.ts +578 -578
  119. package/src/programmers/StringifyProgrammer.ts +986 -986
  120. package/src/programmers/TypiaProgrammer.ts +129 -129
  121. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  122. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  123. package/src/programmers/ValidateProgrammer.ts +305 -305
  124. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  125. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  126. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  127. package/src/programmers/helpers/CloneJoiner.ts +168 -131
  128. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  129. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  130. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  131. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  132. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  133. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  134. package/src/programmers/helpers/RandomRanger.ts +208 -208
  135. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  136. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  137. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  138. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  139. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  140. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  141. package/src/programmers/internal/application_alias.ts +66 -66
  142. package/src/programmers/internal/application_array.ts +30 -30
  143. package/src/programmers/internal/application_boolean.ts +15 -15
  144. package/src/programmers/internal/application_constant.ts +26 -26
  145. package/src/programmers/internal/application_default.ts +17 -17
  146. package/src/programmers/internal/application_default_string.ts +33 -33
  147. package/src/programmers/internal/application_native.ts +39 -39
  148. package/src/programmers/internal/application_number.ts +80 -80
  149. package/src/programmers/internal/application_object.ts +165 -165
  150. package/src/programmers/internal/application_resolved.ts +55 -55
  151. package/src/programmers/internal/application_schema.ts +157 -157
  152. package/src/programmers/internal/application_string.ts +44 -44
  153. package/src/programmers/internal/application_templates.ts +25 -25
  154. package/src/programmers/internal/application_tuple.ts +57 -57
  155. package/src/programmers/internal/check_array.ts +30 -30
  156. package/src/programmers/internal/check_array_length.ts +35 -35
  157. package/src/programmers/internal/check_bigint.ts +110 -110
  158. package/src/programmers/internal/check_custom.ts +31 -31
  159. package/src/programmers/internal/check_dynamic_properties.ts +194 -195
  160. package/src/programmers/internal/check_everything.ts +28 -28
  161. package/src/programmers/internal/check_native.ts +21 -21
  162. package/src/programmers/internal/check_object.ts +55 -55
  163. package/src/programmers/internal/check_string.ts +25 -25
  164. package/src/programmers/internal/check_string_tags.ts +67 -67
  165. package/src/programmers/internal/check_template.ts +56 -56
  166. package/src/programmers/internal/check_union_array_like.ts +329 -329
  167. package/src/programmers/internal/decode_union_object.ts +73 -73
  168. package/src/programmers/internal/feature_object_entries.ts +63 -63
  169. package/src/programmers/internal/get_comment_tags.ts +23 -23
  170. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  171. package/src/programmers/internal/prune_object_properties.ts +60 -60
  172. package/src/programmers/internal/random_custom.ts +29 -29
  173. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  174. package/src/programmers/internal/stringify_native.ts +7 -7
  175. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  176. package/src/programmers/internal/template_to_pattern.ts +15 -15
  177. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  178. package/src/schemas/IJsonApplication.ts +8 -8
  179. package/src/schemas/IJsonComponents.ts +33 -33
  180. package/src/schemas/IJsonSchema.ts +133 -133
  181. package/src/transform.ts +27 -27
  182. package/src/transformers/CallExpressionTransformer.ts +179 -179
  183. package/src/transformers/FileTransformer.ts +47 -47
  184. package/src/transformers/IProject.ts +11 -11
  185. package/src/transformers/ITransformOptions.ts +62 -62
  186. package/src/transformers/ImportTransformer.ts +66 -66
  187. package/src/transformers/NodeTransformer.ts +13 -13
  188. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +112 -112
  189. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  190. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  191. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  192. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  193. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  194. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  195. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  196. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  197. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  198. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  199. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  201. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  203. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  204. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  205. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  206. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  207. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  208. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  209. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  210. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  211. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  212. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  213. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  214. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  215. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  216. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  217. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  218. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  219. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  220. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  221. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  222. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  223. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  224. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  225. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  226. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  227. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  228. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  229. package/src/transformers/internal/GenericTransformer.ts +97 -97
  230. package/src/typings/Atomic.ts +17 -17
  231. package/src/typings/ClassProperties.ts +5 -5
  232. package/src/typings/Customizable.ts +5 -5
  233. package/src/typings/OmitNever.ts +3 -3
  234. package/src/typings/SpecialFields.ts +3 -3
  235. package/src/typings/Writable.ts +11 -11
  236. package/src/utils/ArrayUtil.ts +45 -45
  237. package/src/utils/Escaper.ts +46 -46
  238. package/src/utils/MapUtil.ts +12 -12
  239. package/src/utils/PatternUtil.ts +33 -33
  240. package/src/utils/RandomGenerator.ts +81 -81
  241. package/src/utils/Singleton.ts +17 -17
@@ -1,131 +1,168 @@
1
- import ts from "typescript";
2
-
3
- import { StatementFactory } from "../../factories/StatementFactory";
4
- import { TypeFactory } from "../../factories/TypeFactory";
5
-
6
- import { Escaper } from "../../utils/Escaper";
7
-
8
- import { metadata_to_pattern } from "../internal/metadata_to_pattern";
9
- import { IExpressionEntry } from "./IExpressionEntry";
10
-
11
- export namespace CloneJoiner {
12
- export const object = (
13
- input: ts.Expression,
14
- entries: IExpressionEntry<ts.Expression>[],
15
- ): ts.ConciseBody => {
16
- if (entries.length === 0) return ts.factory.createIdentifier("{}");
17
-
18
- const regular = entries.filter((e) => e.key.isSoleLiteral());
19
- const dynamic = entries.filter((e) => !e.key.isSoleLiteral());
20
- const literal = ts.factory.createObjectLiteralExpression(
21
- regular.map((entry) => {
22
- const str: string = entry.key.getSoleLiteral()!;
23
- return ts.factory.createPropertyAssignment(
24
- Escaper.variable(str)
25
- ? str
26
- : ts.factory.createStringLiteral(str),
27
- entry.expression,
28
- );
29
- }),
30
- true,
31
- );
32
- if (dynamic.length === 0) return literal;
33
-
34
- const key = ts.factory.createIdentifier("key");
35
- const value = ts.factory.createIdentifier("value");
36
- const output = ts.factory.createIdentifier("output");
37
-
38
- const statements: ts.Statement[] = dynamic.map((entry) =>
39
- ts.factory.createIfStatement(
40
- ts.factory.createCallExpression(
41
- ts.factory.createIdentifier(
42
- `RegExp(/${metadata_to_pattern(true)(
43
- entry.key,
44
- )}/).test`,
45
- ),
46
- undefined,
47
- [key],
48
- ),
49
- ts.factory.createBlock([
50
- ts.factory.createExpressionStatement(
51
- ts.factory.createBinaryExpression(
52
- ts.factory.createElementAccessExpression(
53
- output,
54
- key,
55
- ),
56
- ts.factory.createToken(ts.SyntaxKind.EqualsToken),
57
- entry.expression,
58
- ),
59
- ),
60
- ts.factory.createContinueStatement(),
61
- ]),
62
- ),
63
- );
64
-
65
- return ts.factory.createBlock([
66
- StatementFactory.constant(
67
- "output",
68
- ts.factory.createAsExpression(
69
- literal,
70
- TypeFactory.keyword("any"),
71
- ),
72
- ),
73
- ts.factory.createForOfStatement(
74
- undefined,
75
- ts.factory.createVariableDeclarationList(
76
- [
77
- ts.factory.createVariableDeclaration(
78
- ts.factory.createArrayBindingPattern([
79
- ts.factory.createBindingElement(
80
- undefined,
81
- undefined,
82
- key,
83
- undefined,
84
- ),
85
- ts.factory.createBindingElement(
86
- undefined,
87
- undefined,
88
- value,
89
- undefined,
90
- ),
91
- ]),
92
- undefined,
93
- undefined,
94
- undefined,
95
- ),
96
- ],
97
- ts.NodeFlags.Const,
98
- ),
99
- ts.factory.createCallExpression(
100
- ts.factory.createIdentifier("Object.entries"),
101
- undefined,
102
- [input],
103
- ),
104
- ts.factory.createBlock(statements),
105
- ),
106
- ts.factory.createReturnStatement(output),
107
- ]);
108
- };
109
-
110
- export const tuple = (
111
- children: ts.Expression[],
112
- rest: ts.Expression | null,
113
- ): ts.Expression => {
114
- return ts.factory.createAsExpression(
115
- ts.factory.createArrayLiteralExpression(
116
- rest === null
117
- ? children
118
- : [...children, ts.factory.createSpreadElement(rest)],
119
- true,
120
- ),
121
- TypeFactory.keyword("any"),
122
- );
123
- };
124
-
125
- export const array = (input: ts.Expression, arrow: ts.Expression) =>
126
- ts.factory.createCallExpression(
127
- ts.factory.createPropertyAccessExpression(input, "map"),
128
- undefined,
129
- [arrow],
130
- );
131
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { Escaper } from "../../utils/Escaper";
8
+
9
+ import { metadata_to_pattern } from "../internal/metadata_to_pattern";
10
+ import { IExpressionEntry } from "./IExpressionEntry";
11
+
12
+ export namespace CloneJoiner {
13
+ export const object = (
14
+ input: ts.Expression,
15
+ entries: IExpressionEntry<ts.Expression>[],
16
+ ): ts.ConciseBody => {
17
+ if (entries.length === 0) return ts.factory.createIdentifier("{}");
18
+
19
+ const regular = entries.filter((e) => e.key.isSoleLiteral());
20
+ const dynamic = entries.filter((e) => !e.key.isSoleLiteral());
21
+ const literal = ts.factory.createObjectLiteralExpression(
22
+ regular.map((entry) => {
23
+ const str: string = entry.key.getSoleLiteral()!;
24
+ return ts.factory.createPropertyAssignment(
25
+ Escaper.variable(str)
26
+ ? str
27
+ : ts.factory.createStringLiteral(str),
28
+ entry.expression,
29
+ );
30
+ }),
31
+ true,
32
+ );
33
+ if (dynamic.length === 0) return literal;
34
+
35
+ const key = ts.factory.createIdentifier("key");
36
+ const value = ts.factory.createIdentifier("value");
37
+ const output = ts.factory.createIdentifier("output");
38
+
39
+ const statements: ts.Statement[] = [];
40
+ if (regular.length !== 0)
41
+ statements.push(
42
+ ts.factory.createIfStatement(
43
+ ts.factory.createCallExpression(
44
+ IdentifierFactory.access(
45
+ ts.factory.createArrayLiteralExpression(
46
+ regular.map((r) =>
47
+ ts.factory.createStringLiteral(
48
+ r.key.getSoleLiteral()!,
49
+ ),
50
+ ),
51
+ ),
52
+ )("some"),
53
+ undefined,
54
+ [
55
+ ts.factory.createArrowFunction(
56
+ undefined,
57
+ undefined,
58
+ [IdentifierFactory.parameter("regular")],
59
+ undefined,
60
+ undefined,
61
+ ts.factory.createStrictEquality(
62
+ ts.factory.createIdentifier("regular"),
63
+ ts.factory.createIdentifier("key"),
64
+ ),
65
+ ),
66
+ ],
67
+ ),
68
+ ts.factory.createContinueStatement(),
69
+ ),
70
+ );
71
+ statements.push(
72
+ ...dynamic.map((entry) =>
73
+ ts.factory.createIfStatement(
74
+ ts.factory.createCallExpression(
75
+ ts.factory.createIdentifier(
76
+ `RegExp(/${metadata_to_pattern(true)(
77
+ entry.key,
78
+ )}/).test`,
79
+ ),
80
+ undefined,
81
+ [key],
82
+ ),
83
+ ts.factory.createBlock([
84
+ ts.factory.createExpressionStatement(
85
+ ts.factory.createBinaryExpression(
86
+ ts.factory.createElementAccessExpression(
87
+ output,
88
+ key,
89
+ ),
90
+ ts.factory.createToken(
91
+ ts.SyntaxKind.EqualsToken,
92
+ ),
93
+ entry.expression,
94
+ ),
95
+ ),
96
+ ts.factory.createContinueStatement(),
97
+ ]),
98
+ ),
99
+ ),
100
+ );
101
+
102
+ return ts.factory.createBlock([
103
+ StatementFactory.constant(
104
+ "output",
105
+ ts.factory.createAsExpression(
106
+ literal,
107
+ TypeFactory.keyword("any"),
108
+ ),
109
+ ),
110
+ ts.factory.createForOfStatement(
111
+ undefined,
112
+ ts.factory.createVariableDeclarationList(
113
+ [
114
+ ts.factory.createVariableDeclaration(
115
+ ts.factory.createArrayBindingPattern([
116
+ ts.factory.createBindingElement(
117
+ undefined,
118
+ undefined,
119
+ key,
120
+ undefined,
121
+ ),
122
+ ts.factory.createBindingElement(
123
+ undefined,
124
+ undefined,
125
+ value,
126
+ undefined,
127
+ ),
128
+ ]),
129
+ undefined,
130
+ undefined,
131
+ undefined,
132
+ ),
133
+ ],
134
+ ts.NodeFlags.Const,
135
+ ),
136
+ ts.factory.createCallExpression(
137
+ ts.factory.createIdentifier("Object.entries"),
138
+ undefined,
139
+ [input],
140
+ ),
141
+ ts.factory.createBlock(statements),
142
+ ),
143
+ ts.factory.createReturnStatement(output),
144
+ ]);
145
+ };
146
+
147
+ export const tuple = (
148
+ children: ts.Expression[],
149
+ rest: ts.Expression | null,
150
+ ): ts.Expression => {
151
+ return ts.factory.createAsExpression(
152
+ ts.factory.createArrayLiteralExpression(
153
+ rest === null
154
+ ? children
155
+ : [...children, ts.factory.createSpreadElement(rest)],
156
+ true,
157
+ ),
158
+ TypeFactory.keyword("any"),
159
+ );
160
+ };
161
+
162
+ export const array = (input: ts.Expression, arrow: ts.Expression) =>
163
+ ts.factory.createCallExpression(
164
+ ts.factory.createPropertyAccessExpression(input, "map"),
165
+ undefined,
166
+ [arrow],
167
+ );
168
+ }
@@ -1,78 +1,78 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- export class FunctionImporter {
8
- private readonly used_: Set<string> = new Set();
9
- private readonly local_: Set<string> = new Set();
10
- private readonly unions_: Map<string, [string, ts.ArrowFunction]> =
11
- new Map();
12
- private sequence_: number = 0;
13
-
14
- public empty(): boolean {
15
- return this.used_.size === 0;
16
- }
17
-
18
- public use(name: string): ts.Identifier {
19
- this.used_.add(name);
20
- return ts.factory.createIdentifier("$" + name);
21
- }
22
-
23
- public useLocal(name: string): string {
24
- this.local_.add(name);
25
- return name;
26
- }
27
-
28
- public hasLocal(name: string): boolean {
29
- return this.local_.has(name);
30
- }
31
-
32
- public declare(modulo: ts.LeftHandSideExpression): ts.Statement[] {
33
- return [
34
- ...[...this.used_].map((name) =>
35
- StatementFactory.constant(
36
- "$" + name,
37
- IdentifierFactory.access(
38
- ts.factory.createParenthesizedExpression(
39
- ts.factory.createAsExpression(
40
- modulo,
41
- TypeFactory.keyword("any"),
42
- ),
43
- ),
44
- )(name),
45
- ),
46
- ),
47
- ...[...this.unions_.values()].map(([key, arrow]) =>
48
- StatementFactory.constant(key, arrow),
49
- ),
50
- ];
51
- }
52
-
53
- public increment(): number {
54
- return ++this.sequence_;
55
- }
56
-
57
- public emplaceUnion(
58
- prefix: string,
59
- name: string,
60
- factory: () => ts.ArrowFunction,
61
- ): string {
62
- const oldbie = this.unions_.get(name);
63
- if (oldbie) return oldbie[0];
64
-
65
- const index: number = this.unions_.size;
66
- const accessor: string = `${prefix}p${index}`;
67
-
68
- const tuple: [string, ReturnType<typeof factory>] = [accessor, null!];
69
- this.unions_.set(name, tuple);
70
- tuple[1] = factory();
71
- return accessor;
72
- }
73
-
74
- public trace(): void {
75
- console.log(...this.used_);
76
- console.log(...this.local_);
77
- }
78
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ export class FunctionImporter {
8
+ private readonly used_: Set<string> = new Set();
9
+ private readonly local_: Set<string> = new Set();
10
+ private readonly unions_: Map<string, [string, ts.ArrowFunction]> =
11
+ new Map();
12
+ private sequence_: number = 0;
13
+
14
+ public empty(): boolean {
15
+ return this.used_.size === 0;
16
+ }
17
+
18
+ public use(name: string): ts.Identifier {
19
+ this.used_.add(name);
20
+ return ts.factory.createIdentifier("$" + name);
21
+ }
22
+
23
+ public useLocal(name: string): string {
24
+ this.local_.add(name);
25
+ return name;
26
+ }
27
+
28
+ public hasLocal(name: string): boolean {
29
+ return this.local_.has(name);
30
+ }
31
+
32
+ public declare(modulo: ts.LeftHandSideExpression): ts.Statement[] {
33
+ return [
34
+ ...[...this.used_].map((name) =>
35
+ StatementFactory.constant(
36
+ "$" + name,
37
+ IdentifierFactory.access(
38
+ ts.factory.createParenthesizedExpression(
39
+ ts.factory.createAsExpression(
40
+ modulo,
41
+ TypeFactory.keyword("any"),
42
+ ),
43
+ ),
44
+ )(name),
45
+ ),
46
+ ),
47
+ ...[...this.unions_.values()].map(([key, arrow]) =>
48
+ StatementFactory.constant(key, arrow),
49
+ ),
50
+ ];
51
+ }
52
+
53
+ public increment(): number {
54
+ return ++this.sequence_;
55
+ }
56
+
57
+ public emplaceUnion(
58
+ prefix: string,
59
+ name: string,
60
+ factory: () => ts.ArrowFunction,
61
+ ): string {
62
+ const oldbie = this.unions_.get(name);
63
+ if (oldbie) return oldbie[0];
64
+
65
+ const index: number = this.unions_.size;
66
+ const accessor: string = `${prefix}p${index}`;
67
+
68
+ const tuple: [string, ReturnType<typeof factory>] = [accessor, null!];
69
+ this.unions_.set(name, tuple);
70
+ tuple[1] = factory();
71
+ return accessor;
72
+ }
73
+
74
+ public trace(): void {
75
+ console.log(...this.used_);
76
+ console.log(...this.local_);
77
+ }
78
+ }
@@ -1,12 +1,12 @@
1
- import ts from "typescript";
2
-
3
- export interface ICheckEntry {
4
- expression: ts.Expression;
5
- tags: ICheckEntry.ITag[];
6
- }
7
- export namespace ICheckEntry {
8
- export interface ITag {
9
- expected: string;
10
- expression: ts.Expression;
11
- }
12
- }
1
+ import ts from "typescript";
2
+
3
+ export interface ICheckEntry {
4
+ expression: ts.Expression;
5
+ tags: ICheckEntry.ITag[];
6
+ }
7
+ export namespace ICheckEntry {
8
+ export interface ITag {
9
+ expected: string;
10
+ expression: ts.Expression;
11
+ }
12
+ }
@@ -1,12 +1,12 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- export interface IExpressionEntry<
6
- Expression extends ts.ConciseBody = ts.ConciseBody,
7
- > {
8
- input: ts.Expression;
9
- key: Metadata;
10
- meta: Metadata;
11
- expression: Expression;
12
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ export interface IExpressionEntry<
6
+ Expression extends ts.ConciseBody = ts.ConciseBody,
7
+ > {
8
+ input: ts.Expression;
9
+ key: Metadata;
10
+ meta: Metadata;
11
+ expression: Expression;
12
+ }
@@ -1,15 +1,15 @@
1
- import { ITransformOptions } from "../../transformers/ITransformOptions";
2
-
3
- export namespace OptionPredicator {
4
- export const numeric = (options: ITransformOptions): boolean =>
5
- finite(options) || options.numeric === true;
6
-
7
- export const functional = (options: ITransformOptions): boolean =>
8
- options.functional === true;
9
-
10
- export const finite = (options: ITransformOptions): boolean =>
11
- options.finite === true;
12
-
13
- export const undefined = (options: ITransformOptions): boolean =>
14
- options.undefined !== false;
15
- }
1
+ import { ITransformOptions } from "../../transformers/ITransformOptions";
2
+
3
+ export namespace OptionPredicator {
4
+ export const numeric = (options: ITransformOptions): boolean =>
5
+ finite(options) || options.numeric === true;
6
+
7
+ export const functional = (options: ITransformOptions): boolean =>
8
+ options.functional === true;
9
+
10
+ export const finite = (options: ITransformOptions): boolean =>
11
+ options.finite === true;
12
+
13
+ export const undefined = (options: ITransformOptions): boolean =>
14
+ options.undefined !== false;
15
+ }