typia 5.0.0-dev.20230824 → 5.0.0-dev.20230827

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 (292) hide show
  1. package/README.md +1 -2
  2. package/lib/IRandomGenerator.d.ts +4 -3
  3. package/lib/factories/ExpressionFactory.d.ts +1 -1
  4. package/lib/factories/ExpressionFactory.js +1 -1
  5. package/lib/factories/ExpressionFactory.js.map +1 -1
  6. package/lib/factories/LiteralFactory.js +6 -2
  7. package/lib/factories/LiteralFactory.js.map +1 -1
  8. package/lib/factories/MetadataCollection.js +0 -1
  9. package/lib/factories/MetadataCollection.js.map +1 -1
  10. package/lib/factories/MetadataCommentTagFactory.js +532 -0
  11. package/lib/factories/MetadataCommentTagFactory.js.map +1 -0
  12. package/lib/factories/MetadataTypeTagFactory.d.ts +6 -0
  13. package/lib/factories/MetadataTypeTagFactory.js +207 -0
  14. package/lib/factories/MetadataTypeTagFactory.js.map +1 -0
  15. package/lib/factories/NumericRangeFactory.d.ts +6 -0
  16. package/lib/factories/NumericRangeFactory.js +34 -0
  17. package/lib/factories/NumericRangeFactory.js.map +1 -0
  18. package/lib/factories/ProtobufFactory.js +41 -10
  19. package/lib/factories/ProtobufFactory.js.map +1 -1
  20. package/lib/factories/internal/metadata/emend_metadata_atomics.js +7 -1
  21. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  22. package/lib/factories/internal/metadata/emplace_metadata_alias.js +1 -13
  23. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  24. package/lib/factories/internal/metadata/emplace_metadata_object.js +0 -1
  25. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +2 -1
  27. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +3 -4
  29. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +8 -6
  31. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  32. package/lib/functional/Namespace.js +0 -16
  33. package/lib/functional/Namespace.js.map +1 -1
  34. package/lib/programmers/AssertProgrammer.js +28 -8
  35. package/lib/programmers/AssertProgrammer.js.map +1 -1
  36. package/lib/programmers/CheckerProgrammer.js +65 -52
  37. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  38. package/lib/programmers/FeatureProgrammer.d.ts +3 -5
  39. package/lib/programmers/FeatureProgrammer.js +6 -6
  40. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  41. package/lib/programmers/IsProgrammer.d.ts +1 -1
  42. package/lib/programmers/IsProgrammer.js +32 -19
  43. package/lib/programmers/IsProgrammer.js.map +1 -1
  44. package/lib/programmers/RandomProgrammer.js +155 -135
  45. package/lib/programmers/RandomProgrammer.js.map +1 -1
  46. package/lib/programmers/ValidateProgrammer.js +28 -8
  47. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  48. package/lib/programmers/helpers/CloneJoiner.js +10 -2
  49. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  50. package/lib/programmers/helpers/ICheckEntry.d.ts +3 -2
  51. package/lib/programmers/helpers/ProtobufUtil.d.ts +6 -2
  52. package/lib/programmers/helpers/ProtobufUtil.js +175 -17
  53. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  54. package/lib/programmers/helpers/RandomJoiner.d.ts +3 -5
  55. package/lib/programmers/helpers/RandomJoiner.js +7 -10
  56. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  57. package/lib/programmers/helpers/RandomRanger.d.ts +5 -6
  58. package/lib/programmers/helpers/RandomRanger.js +13 -33
  59. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  60. package/lib/programmers/helpers/UnionExplorer.d.ts +7 -8
  61. package/lib/programmers/helpers/UnionExplorer.js +6 -6
  62. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  63. package/lib/programmers/internal/application_alias.js +0 -1
  64. package/lib/programmers/internal/application_alias.js.map +1 -1
  65. package/lib/programmers/internal/application_array.js +60 -20
  66. package/lib/programmers/internal/application_array.js.map +1 -1
  67. package/lib/programmers/internal/application_number.js +95 -69
  68. package/lib/programmers/internal/application_number.js.map +1 -1
  69. package/lib/programmers/internal/application_object.js +0 -3
  70. package/lib/programmers/internal/application_object.js.map +1 -1
  71. package/lib/programmers/internal/application_schema.js +37 -20
  72. package/lib/programmers/internal/application_schema.js.map +1 -1
  73. package/lib/programmers/internal/application_string.js +56 -22
  74. package/lib/programmers/internal/application_string.js.map +1 -1
  75. package/lib/programmers/internal/check_array_length.js +25 -25
  76. package/lib/programmers/internal/check_array_length.js.map +1 -1
  77. package/lib/programmers/internal/check_bigint.js +13 -116
  78. package/lib/programmers/internal/check_bigint.js.map +1 -1
  79. package/lib/programmers/internal/check_dynamic_properties.js +1 -1
  80. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  81. package/lib/programmers/internal/check_number.js +62 -163
  82. package/lib/programmers/internal/check_number.js.map +1 -1
  83. package/lib/programmers/internal/check_string.js +16 -52
  84. package/lib/programmers/internal/check_string.js.map +1 -1
  85. package/lib/programmers/internal/check_template.js +16 -1
  86. package/lib/programmers/internal/check_template.js.map +1 -1
  87. package/lib/programmers/internal/check_union_array_like.js +4 -4
  88. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  89. package/lib/programmers/internal/feature_object_entries.js +1 -1
  90. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  91. package/lib/programmers/internal/random_custom.js +2 -2
  92. package/lib/programmers/internal/random_custom.js.map +1 -1
  93. package/lib/programmers/json/JsonStringifyProgrammer.js +21 -16
  94. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  95. package/lib/programmers/misc/MiscCloneProgrammer.js +13 -9
  96. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  97. package/lib/programmers/{IsPruneProgrammer.d.ts → misc/MiscIsPruneProgrammer.d.ts} +2 -2
  98. package/lib/programmers/{IsPruneProgrammer.js → misc/MiscIsPruneProgrammer.js} +11 -11
  99. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -0
  100. package/lib/programmers/misc/MiscPruneProgrammer.js +10 -6
  101. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  102. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +24 -44
  103. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  104. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +138 -65
  105. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  106. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +59 -85
  107. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  108. package/lib/schemas/json/IJsonSchema.d.ts +10 -38
  109. package/lib/schemas/metadata/IMetadataAlias.d.ts +0 -2
  110. package/lib/schemas/metadata/IMetadataProperty.d.ts +0 -2
  111. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -0
  112. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  113. package/lib/schemas/metadata/Metadata.js +25 -25
  114. package/lib/schemas/metadata/Metadata.js.map +1 -1
  115. package/lib/schemas/metadata/MetadataAlias.d.ts +0 -2
  116. package/lib/schemas/metadata/MetadataAlias.js +0 -3
  117. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  118. package/lib/schemas/metadata/MetadataArray.d.ts +2 -0
  119. package/lib/schemas/metadata/MetadataArray.js +45 -2
  120. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  121. package/lib/schemas/metadata/MetadataAtomic.d.ts +9 -0
  122. package/lib/schemas/metadata/MetadataAtomic.js +59 -0
  123. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -0
  124. package/lib/schemas/metadata/MetadataProperty.d.ts +0 -2
  125. package/lib/schemas/metadata/MetadataProperty.js +0 -3
  126. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  127. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -2
  128. package/lib/schemas/metadata/MetadataTuple.js +1 -2
  129. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  130. package/lib/tags/ExclusiveMaximum.d.ts +10 -8
  131. package/lib/tags/ExclusiveMinimum.d.ts +10 -8
  132. package/lib/tags/Format.d.ts +8 -8
  133. package/lib/tags/MaxItems.d.ts +8 -8
  134. package/lib/tags/MaxLength.d.ts +8 -8
  135. package/lib/tags/Maximum.d.ts +10 -8
  136. package/lib/tags/MinItems.d.ts +8 -8
  137. package/lib/tags/MinLength.d.ts +8 -8
  138. package/lib/tags/Minimum.d.ts +10 -8
  139. package/lib/tags/MultipleOf.d.ts +10 -8
  140. package/lib/tags/Pattern.d.ts +7 -8
  141. package/lib/tags/TagBase.d.ts +10 -6
  142. package/lib/tags/Type.d.ts +14 -13
  143. package/lib/tags/index.d.ts +1 -0
  144. package/lib/tags/index.js +1 -0
  145. package/lib/tags/index.js.map +1 -1
  146. package/lib/transformers/FileTransformer.js +3 -1
  147. package/lib/transformers/FileTransformer.js.map +1 -1
  148. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js +2 -2
  149. package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.js.map +1 -1
  150. package/lib/transformers/features/misc/MiscIsPruneTransformer.js +2 -2
  151. package/lib/transformers/features/misc/MiscIsPruneTransformer.js.map +1 -1
  152. package/lib/typings/ProtobufAtomic.d.ts +5 -0
  153. package/lib/{schemas/metadata/ICommentTag.js → typings/ProtobufAtomic.js} +1 -1
  154. package/lib/typings/ProtobufAtomic.js.map +1 -0
  155. package/package.json +2 -2
  156. package/src/IRandomGenerator.ts +4 -3
  157. package/src/factories/ExpressionFactory.ts +2 -2
  158. package/src/factories/LiteralFactory.ts +10 -3
  159. package/src/factories/MetadataCollection.ts +0 -1
  160. package/src/factories/MetadataCommentTagFactory.ts +583 -0
  161. package/src/factories/MetadataTypeTagFactory.ts +263 -0
  162. package/src/factories/NumericRangeFactory.ts +33 -0
  163. package/src/factories/ProtobufFactory.ts +27 -13
  164. package/src/factories/internal/metadata/emend_metadata_atomics.ts +6 -1
  165. package/src/factories/internal/metadata/emplace_metadata_alias.ts +0 -6
  166. package/src/factories/internal/metadata/emplace_metadata_object.ts +0 -1
  167. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +2 -1
  168. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +3 -7
  169. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +13 -10
  170. package/src/functional/Namespace.ts +0 -16
  171. package/src/programmers/AssertProgrammer.ts +57 -21
  172. package/src/programmers/CheckerProgrammer.ts +43 -118
  173. package/src/programmers/FeatureProgrammer.ts +11 -33
  174. package/src/programmers/IsProgrammer.ts +52 -41
  175. package/src/programmers/RandomProgrammer.ts +206 -226
  176. package/src/programmers/ValidateProgrammer.ts +60 -21
  177. package/src/programmers/helpers/CloneJoiner.ts +57 -20
  178. package/src/programmers/helpers/ICheckEntry.ts +3 -2
  179. package/src/programmers/helpers/ProtobufUtil.ts +113 -17
  180. package/src/programmers/helpers/RandomJoiner.ts +11 -37
  181. package/src/programmers/helpers/RandomRanger.ts +16 -51
  182. package/src/programmers/helpers/UnionExplorer.ts +1 -20
  183. package/src/programmers/internal/application_alias.ts +0 -1
  184. package/src/programmers/internal/application_array.ts +32 -10
  185. package/src/programmers/internal/application_number.ts +76 -70
  186. package/src/programmers/internal/application_object.ts +0 -3
  187. package/src/programmers/internal/application_schema.ts +36 -18
  188. package/src/programmers/internal/application_string.ts +33 -27
  189. package/src/programmers/internal/check_array_length.ts +34 -28
  190. package/src/programmers/internal/check_bigint.ts +25 -118
  191. package/src/programmers/internal/check_dynamic_properties.ts +1 -2
  192. package/src/programmers/internal/check_number.ts +81 -261
  193. package/src/programmers/internal/check_string.ts +28 -39
  194. package/src/programmers/internal/check_template.ts +17 -1
  195. package/src/programmers/internal/check_union_array_like.ts +1 -16
  196. package/src/programmers/internal/feature_object_entries.ts +12 -18
  197. package/src/programmers/internal/random_custom.ts +3 -3
  198. package/src/programmers/json/JsonStringifyProgrammer.ts +25 -36
  199. package/src/programmers/misc/MiscCloneProgrammer.ts +10 -24
  200. package/src/programmers/{IsPruneProgrammer.ts → misc/MiscIsPruneProgrammer.ts} +7 -7
  201. package/src/programmers/misc/MiscPruneProgrammer.ts +8 -18
  202. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +34 -68
  203. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +153 -98
  204. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -36
  205. package/src/schemas/json/IJsonSchema.ts +11 -38
  206. package/src/schemas/metadata/IMetadataAlias.ts +0 -2
  207. package/src/schemas/metadata/IMetadataProperty.ts +0 -2
  208. package/src/schemas/metadata/IMetadataTypeTag.ts +2 -0
  209. package/src/schemas/metadata/Metadata.ts +28 -42
  210. package/src/schemas/metadata/MetadataAlias.ts +0 -5
  211. package/src/schemas/metadata/MetadataArray.ts +21 -3
  212. package/src/schemas/metadata/MetadataAtomic.ts +42 -0
  213. package/src/schemas/metadata/MetadataProperty.ts +0 -5
  214. package/src/schemas/metadata/MetadataTuple.ts +5 -4
  215. package/src/tags/ExclusiveMaximum.ts +13 -8
  216. package/src/tags/ExclusiveMinimum.ts +13 -8
  217. package/src/tags/Format.ts +21 -20
  218. package/src/tags/MaxItems.ts +9 -8
  219. package/src/tags/MaxLength.ts +9 -8
  220. package/src/tags/Maximum.ts +13 -8
  221. package/src/tags/MinItems.ts +9 -8
  222. package/src/tags/MinLength.ts +9 -8
  223. package/src/tags/Minimum.ts +13 -8
  224. package/src/tags/MultipleOf.ts +15 -10
  225. package/src/tags/Pattern.ts +8 -8
  226. package/src/tags/TagBase.ts +18 -13
  227. package/src/tags/Type.ts +26 -29
  228. package/src/tags/index.ts +1 -0
  229. package/src/transformers/FileTransformer.ts +4 -4
  230. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +2 -2
  231. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +2 -2
  232. package/src/typings/ProtobufAtomic.ts +19 -0
  233. package/lib/factories/MetadataTagFactory.d.ts +0 -6
  234. package/lib/factories/MetadataTagFactory.js +0 -312
  235. package/lib/factories/MetadataTagFactory.js.map +0 -1
  236. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +0 -3
  237. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +0 -157
  238. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +0 -1
  239. package/lib/functional/$is_custom.d.ts +0 -2
  240. package/lib/functional/$is_custom.js +0 -13
  241. package/lib/functional/$is_custom.js.map +0 -1
  242. package/lib/functional/$is_date.d.ts +0 -1
  243. package/lib/functional/$is_date.js +0 -7
  244. package/lib/functional/$is_date.js.map +0 -1
  245. package/lib/functional/$is_datetime.d.ts +0 -1
  246. package/lib/functional/$is_datetime.js +0 -8
  247. package/lib/functional/$is_datetime.js.map +0 -1
  248. package/lib/functional/$is_email.d.ts +0 -1
  249. package/lib/functional/$is_email.js +0 -7
  250. package/lib/functional/$is_email.js.map +0 -1
  251. package/lib/functional/$is_ipv4.d.ts +0 -1
  252. package/lib/functional/$is_ipv4.js +0 -7
  253. package/lib/functional/$is_ipv4.js.map +0 -1
  254. package/lib/functional/$is_ipv6.d.ts +0 -1
  255. package/lib/functional/$is_ipv6.js +0 -7
  256. package/lib/functional/$is_ipv6.js.map +0 -1
  257. package/lib/functional/$is_url.d.ts +0 -1
  258. package/lib/functional/$is_url.js +0 -7
  259. package/lib/functional/$is_url.js.map +0 -1
  260. package/lib/functional/$is_uuid.d.ts +0 -1
  261. package/lib/functional/$is_uuid.js +0 -7
  262. package/lib/functional/$is_uuid.js.map +0 -1
  263. package/lib/programmers/IsPruneProgrammer.js.map +0 -1
  264. package/lib/programmers/internal/check_array_tags.js +0 -39
  265. package/lib/programmers/internal/check_array_tags.js.map +0 -1
  266. package/lib/programmers/internal/check_string_tags.d.ts +0 -1
  267. package/lib/programmers/internal/check_string_tags.js +0 -89
  268. package/lib/programmers/internal/check_string_tags.js.map +0 -1
  269. package/lib/programmers/internal/get_comment_tags.d.ts +0 -1
  270. package/lib/programmers/internal/get_comment_tags.js +0 -25
  271. package/lib/programmers/internal/get_comment_tags.js.map +0 -1
  272. package/lib/schemas/metadata/ICommentTag.d.ts +0 -4
  273. package/lib/schemas/metadata/ICommentTag.js.map +0 -1
  274. package/lib/schemas/metadata/IMetadataCommentTag.d.ts +0 -63
  275. package/lib/schemas/metadata/IMetadataCommentTag.js +0 -3
  276. package/lib/schemas/metadata/IMetadataCommentTag.js.map +0 -1
  277. package/src/factories/MetadataTagFactory.ts +0 -365
  278. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +0 -183
  279. package/src/functional/$is_custom.ts +0 -14
  280. package/src/functional/$is_date.ts +0 -3
  281. package/src/functional/$is_datetime.ts +0 -2
  282. package/src/functional/$is_email.ts +0 -4
  283. package/src/functional/$is_ipv4.ts +0 -4
  284. package/src/functional/$is_ipv6.ts +0 -4
  285. package/src/functional/$is_url.ts +0 -4
  286. package/src/functional/$is_uuid.ts +0 -4
  287. package/src/programmers/internal/check_array_tags.ts +0 -45
  288. package/src/programmers/internal/check_string_tags.ts +0 -67
  289. package/src/programmers/internal/get_comment_tags.ts +0 -23
  290. package/src/schemas/metadata/ICommentTag.ts +0 -4
  291. package/src/schemas/metadata/IMetadataCommentTag.ts +0 -112
  292. /package/lib/{programmers/internal/check_array_tags.d.ts → factories/MetadataCommentTagFactory.d.ts} +0 -0
@@ -8,17 +8,18 @@ import { StatementFactory } from "../factories/StatementFactory";
8
8
  import { TemplateFactory } from "../factories/TemplateFactory";
9
9
  import { TypeFactory } from "../factories/TypeFactory";
10
10
 
11
- import { ICommentTag } from "../schemas/metadata/ICommentTag";
12
- import { IMetadataCommentTag } from "../schemas/metadata/IMetadataCommentTag";
13
11
  import { Metadata } from "../schemas/metadata/Metadata";
14
12
  import { MetadataArray } from "../schemas/metadata/MetadataArray";
15
13
  import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
14
+ import { MetadataAtomic } from "../schemas/metadata/MetadataAtomic";
16
15
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
17
16
  import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
18
17
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
19
18
 
20
19
  import { IProject } from "../transformers/IProject";
21
20
 
21
+ import { Escaper } from "../utils/Escaper";
22
+
22
23
  import { FunctionImporter } from "./helpers/FunctionImporeter";
23
24
  import { RandomJoiner } from "./helpers/RandomJoiner";
24
25
  import { RandomRanger } from "./helpers/RandomRanger";
@@ -63,7 +64,7 @@ export namespace RandomProgrammer {
63
64
  const output: ts.Expression = decode(importer)({
64
65
  function: false,
65
66
  recursive: false,
66
- })(meta, [], []);
67
+ })(meta);
67
68
 
68
69
  return ts.factory.createArrowFunction(
69
70
  undefined,
@@ -176,8 +177,6 @@ export namespace RandomProgrammer {
176
177
  function: true,
177
178
  })(ts.factory.createIdentifier("length"))(
178
179
  array.value,
179
- [],
180
- [],
181
180
  ),
182
181
  ),
183
182
  ),
@@ -214,7 +213,7 @@ export namespace RandomProgrammer {
214
213
  function: true,
215
214
  recursive: true,
216
215
  }),
217
- )(tuple.elements, [], []),
216
+ )(tuple.elements),
218
217
  ),
219
218
  ),
220
219
  );
@@ -225,11 +224,7 @@ export namespace RandomProgrammer {
225
224
  const decode =
226
225
  (importer: FunctionImporter) =>
227
226
  (explore: IExplore) =>
228
- (
229
- meta: Metadata,
230
- tags: IMetadataCommentTag[],
231
- comments: ICommentTag[],
232
- ): ts.Expression => {
227
+ (meta: Metadata): ts.Expression => {
233
228
  const expressions: ts.Expression[] = [];
234
229
  if (meta.any)
235
230
  expressions.push(
@@ -250,47 +245,33 @@ export namespace RandomProgrammer {
250
245
  // ATOMIC VARIABLES
251
246
  for (const template of meta.templates)
252
247
  expressions.push(decode_template(importer)(explore)(template));
253
- for (const a of meta.atomics)
254
- if (a.type === "boolean")
248
+ for (const atomic of meta.atomics)
249
+ if (atomic.type === "boolean")
255
250
  expressions.push(decode_boolean(importer));
256
- else if (a.type === "number")
257
- expressions.push(decode_number(importer)(tags, comments));
258
- else if (a.type === "string")
259
- expressions.push(decode_string(importer)(tags, comments));
260
- else if (a.type === "bigint")
261
- expressions.push(decode_bigint(importer)(tags, comments));
251
+ else if (atomic.type === "number")
252
+ expressions.push(...decode_number(importer)(atomic));
253
+ else if (atomic.type === "string")
254
+ expressions.push(...decode_string(importer)(atomic));
255
+ else if (atomic.type === "bigint")
256
+ expressions.push(...decode_bigint(importer)(atomic));
262
257
 
263
258
  // INSTANCE TYPES
264
259
  if (meta.escaped)
265
260
  expressions.push(
266
- decode(importer)(explore)(
267
- meta.escaped.returns,
268
- tags,
269
- comments,
270
- ),
261
+ decode(importer)(explore)(meta.escaped.returns),
271
262
  );
272
263
  for (const array of meta.arrays)
273
- expressions.push(
274
- decode_array(importer)(explore)(array, tags, comments),
275
- );
264
+ expressions.push(...decode_array(importer)(explore)(array));
276
265
  for (const tuple of meta.tuples)
277
- expressions.push(
278
- decode_tuple(importer)(explore)(tuple, tags, comments),
279
- );
266
+ expressions.push(decode_tuple(importer)(explore)(tuple));
280
267
  for (const o of meta.objects)
281
268
  expressions.push(decode_object(importer)(explore)(o));
282
269
  for (const native of meta.natives)
283
- expressions.push(
284
- decode_native(importer)(native, tags, comments),
285
- );
270
+ expressions.push(decode_native(importer)(native));
286
271
  for (const set of meta.sets)
287
- expressions.push(
288
- decode_set(importer)(explore)(set, tags, comments),
289
- );
272
+ expressions.push(decode_set(importer)(explore)(set));
290
273
  for (const map of meta.maps)
291
- expressions.push(
292
- decode_map(importer)(explore)(map, tags, comments),
293
- );
274
+ expressions.push(decode_map(importer)(explore)(map));
294
275
 
295
276
  // PICK UP A TYPE
296
277
  if (expressions.length === 1) return expressions[0]!;
@@ -340,188 +321,186 @@ export namespace RandomProgrammer {
340
321
  (explore: IExplore) =>
341
322
  (template: Metadata[]) =>
342
323
  TemplateFactory.generate(
343
- template.map((meta) => decode(importer)(explore)(meta, [], [])),
324
+ template.map((meta) => decode(importer)(explore)(meta)),
344
325
  );
345
326
 
346
327
  const decode_number =
347
328
  (importer: FunctionImporter) =>
348
- (
349
- tags: IMetadataCommentTag[],
350
- comments: ICommentTag[],
351
- ): ts.Expression => {
352
- const type = tags.find(
353
- (t) =>
354
- t.kind === "type" &&
355
- (t.value === "int" ||
356
- t.value === "int32" ||
357
- t.value === "int64"),
358
- )
359
- ? "int"
360
- : tags.find(
361
- (t) =>
362
- t.kind === "type" &&
363
- (t.value === "uint" ||
364
- t.value === "uint32" ||
365
- t.value === "uint64"),
366
- )
367
- ? "uint"
368
- : "double";
369
- return random_custom(COALESCE(importer))("number")(comments)(
370
- RandomRanger.number({
371
- type,
372
- transform: (value) =>
373
- ts.factory.createNumericLiteral(value),
374
- setter: (args) =>
375
- ts.factory.createCallExpression(
376
- type === "double" &&
377
- tags.every(
378
- (t) =>
379
- t.kind !== "multipleOf" &&
380
- t.kind !== "step",
381
- )
382
- ? COALESCE(importer)("number")
383
- : COALESCE(importer)("integer"),
384
- undefined,
385
- args.map((val) =>
386
- ts.factory.createNumericLiteral(val),
329
+ (atomic: MetadataAtomic): ts.Expression[] =>
330
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) => {
331
+ const type = tags.find(
332
+ (t) =>
333
+ t.kind === "type" &&
334
+ (t.value === "int32" || t.value === "int64"),
335
+ )
336
+ ? "int"
337
+ : tags.find(
338
+ (t) =>
339
+ t.kind === "type" &&
340
+ (t.value === "uint32" || t.value === "uint64"),
341
+ )
342
+ ? "uint"
343
+ : "double";
344
+ const multiply = tags.find((t) => t.kind === "multipleOf");
345
+ return random_custom(COALESCE(importer))("number")(tags)(
346
+ RandomRanger.number({
347
+ type,
348
+ transform: (value) =>
349
+ ts.factory.createNumericLiteral(value),
350
+ setter: (args) =>
351
+ ts.factory.createCallExpression(
352
+ type !== "double" || multiply !== undefined
353
+ ? COALESCE(importer)("integer")
354
+ : COALESCE(importer)("number"),
355
+ undefined,
356
+ args.map((val) =>
357
+ ts.factory.createNumericLiteral(val),
358
+ ),
387
359
  ),
388
- ),
389
- })({
390
- minimum: 0,
391
- maximum: 100,
392
- gap: 10,
393
- })(tags),
394
- );
395
- };
360
+ })({
361
+ minimum: 0,
362
+ maximum: 100,
363
+ gap: 10,
364
+ })(tags),
365
+ );
366
+ });
396
367
 
397
368
  const decode_bigint =
398
369
  (importer: FunctionImporter) =>
399
- (tags: IMetadataCommentTag[], comments: ICommentTag[]): ts.Expression =>
400
- random_custom(COALESCE(importer))("bigint")(comments)(
401
- RandomRanger.number({
402
- type: tags.find(
403
- (t) =>
404
- t.kind === "type" &&
405
- (t.value === "uint" || t.value === "uint64"),
406
- )
407
- ? "uint"
408
- : "int",
409
- transform: (value) => ExpressionFactory.bigint(value),
410
- setter: (args) =>
411
- ts.factory.createCallExpression(
412
- COALESCE(importer)("bigint"),
413
- undefined,
414
- args.map((value) =>
415
- ExpressionFactory.bigint(value),
370
+ (atomic: MetadataAtomic): ts.Expression[] =>
371
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
372
+ random_custom(COALESCE(importer))("bigint")(tags)(
373
+ RandomRanger.number({
374
+ type: tags.find(
375
+ (t) =>
376
+ t.kind === "type" &&
377
+ (t.value === "uint" || t.value === "uint64"),
378
+ )
379
+ ? "uint"
380
+ : "int",
381
+ transform: (value) => ExpressionFactory.bigint(value),
382
+ setter: (args) =>
383
+ ts.factory.createCallExpression(
384
+ COALESCE(importer)("bigint"),
385
+ undefined,
386
+ args.map((value) =>
387
+ ExpressionFactory.bigint(value),
388
+ ),
416
389
  ),
417
- ),
418
- })({
419
- minimum: 0,
420
- maximum: 100,
421
- gap: 10,
422
- })(tags),
390
+ })({
391
+ minimum: 0,
392
+ maximum: 100,
393
+ gap: 10,
394
+ })(tags),
395
+ ),
423
396
  );
424
397
 
425
398
  const decode_string =
426
399
  (importer: FunctionImporter) =>
427
- (tags: IMetadataCommentTag[], comments: ICommentTag[]): ts.Expression =>
428
- random_custom(COALESCE(importer))("string")(comments)(
429
- (() => {
430
- for (const t of tags)
431
- if (t.kind === "format")
432
- return ts.factory.createCallExpression(
433
- COALESCE(importer)(t.value),
434
- undefined,
435
- undefined,
436
- );
437
- else if (t.kind === "pattern")
438
- return ts.factory.createCallExpression(
439
- COALESCE(importer)("pattern"),
440
- undefined,
441
- [ts.factory.createIdentifier(`/${t.value}/`)],
442
- );
400
+ (atomic: MetadataAtomic): ts.Expression[] =>
401
+ (atomic.tags.length ? atomic.tags : [[]]).map((tags) =>
402
+ random_custom(COALESCE(importer))("string")(tags)(
403
+ (() => {
404
+ for (const t of tags)
405
+ if (t.kind === "format")
406
+ return ts.factory.createCallExpression(
407
+ COALESCE(importer)(
408
+ t.value === "date-time"
409
+ ? "datetime"
410
+ : t.value,
411
+ ),
412
+ undefined,
413
+ undefined,
414
+ );
415
+ else if (t.kind === "pattern")
416
+ return ts.factory.createCallExpression(
417
+ COALESCE(importer)("pattern"),
418
+ undefined,
419
+ [
420
+ ts.factory.createIdentifier(
421
+ `/${t.value}/`,
422
+ ),
423
+ ],
424
+ );
443
425
 
444
- const tail = RandomRanger.length(COALESCE(importer))({
445
- minimum: 5,
446
- maximum: 25,
447
- gap: 5,
448
- })({
449
- fixed: "length",
450
- minimum: "minLength",
451
- maximum: "maxLength",
452
- })(tags);
453
- return ts.factory.createCallExpression(
454
- COALESCE(importer)("string"),
455
- undefined,
456
- tail ? [tail] : undefined,
457
- );
458
- })(),
426
+ const tail = RandomRanger.length(COALESCE(importer))({
427
+ minimum: 5,
428
+ maximum: 25,
429
+ gap: 5,
430
+ })({
431
+ minimum: "minLength",
432
+ maximum: "maxLength",
433
+ })(tags);
434
+ return ts.factory.createCallExpression(
435
+ COALESCE(importer)("string"),
436
+ undefined,
437
+ tail ? [tail] : undefined,
438
+ );
439
+ })(),
440
+ ),
459
441
  );
460
442
 
461
443
  const decode_array =
462
444
  (importer: FunctionImporter) =>
463
445
  (explore: IExplore) =>
464
- (
465
- array: MetadataArray,
466
- tags: IMetadataCommentTag[],
467
- comments: ICommentTag[],
468
- ) => {
469
- const length: ts.Expression | undefined = RandomRanger.length(
470
- COALESCE(importer),
471
- )({
472
- minimum: 0,
473
- maximum: 3,
474
- gap: 3,
475
- })({
476
- fixed: "items",
477
- minimum: "minItems",
478
- maximum: "maxItems",
479
- })(tags);
446
+ (array: MetadataArray): ts.Expression[] => {
447
+ const lengths: Array<ts.Expression | undefined> = (
448
+ array.tags.length ? array.tags : [[]]
449
+ ).map((tags) =>
450
+ RandomRanger.length(COALESCE(importer))({
451
+ minimum: 0,
452
+ maximum: 3,
453
+ gap: 3,
454
+ })({
455
+ minimum: "minItems",
456
+ maximum: "maxItems",
457
+ })(tags),
458
+ );
480
459
  if (array.type.recursive)
481
- return ts.factory.createCallExpression(
482
- ts.factory.createIdentifier(
483
- importer.useLocal(PREFIX.array(array.type.index!)),
460
+ return lengths.map((len) =>
461
+ ts.factory.createCallExpression(
462
+ ts.factory.createIdentifier(
463
+ importer.useLocal(PREFIX.array(array.type.index!)),
464
+ ),
465
+ undefined,
466
+ [
467
+ len ?? COALESCE(importer)("length"),
468
+ ts.factory.createTrue(),
469
+ explore.recursive
470
+ ? ts.factory.createAdd(
471
+ ts.factory.createNumericLiteral(1),
472
+ ts.factory.createIdentifier("_depth"),
473
+ )
474
+ : ts.factory.createNumericLiteral(0),
475
+ ],
484
476
  ),
485
- undefined,
486
- [
487
- length ?? COALESCE(importer)("length"),
488
- ts.factory.createTrue(),
489
- explore.recursive
490
- ? ts.factory.createAdd(
491
- ts.factory.createNumericLiteral(1),
492
- ts.factory.createIdentifier("_depth"),
493
- )
494
- : ts.factory.createNumericLiteral(0),
495
- ],
496
477
  );
497
- const expr: ts.Expression = RandomJoiner.array(COALESCE(importer))(
498
- decode(importer)(explore),
499
- )(explore)(length)(array.type.value, tags, comments);
500
- return explore.recursive
501
- ? ts.factory.createConditionalExpression(
502
- ts.factory.createLogicalAnd(
503
- ts.factory.createIdentifier("_recursive"),
504
- ts.factory.createLessThan(
505
- ts.factory.createNumericLiteral(5),
506
- ts.factory.createIdentifier("_depth"),
478
+ return lengths.map((len) => {
479
+ const expr: ts.Expression = RandomJoiner.array(
480
+ COALESCE(importer),
481
+ )(decode(importer)(explore))(explore)(len)(array.type.value);
482
+ return explore.recursive
483
+ ? ts.factory.createConditionalExpression(
484
+ ts.factory.createLogicalAnd(
485
+ ts.factory.createIdentifier("_recursive"),
486
+ ts.factory.createLessThan(
487
+ ts.factory.createNumericLiteral(5),
488
+ ts.factory.createIdentifier("_depth"),
489
+ ),
507
490
  ),
508
- ),
509
- undefined,
510
- ts.factory.createIdentifier("[]"),
511
- undefined,
512
- expr,
513
- )
514
- : expr;
491
+ undefined,
492
+ ts.factory.createIdentifier("[]"),
493
+ undefined,
494
+ expr,
495
+ )
496
+ : expr;
497
+ });
515
498
  };
516
499
 
517
500
  const decode_tuple =
518
501
  (importer: FunctionImporter) =>
519
502
  (explore: IExplore) =>
520
- (
521
- tuple: MetadataTuple,
522
- tags: IMetadataCommentTag[],
523
- comments: ICommentTag[],
524
- ): ts.Expression =>
503
+ (tuple: MetadataTuple): ts.Expression =>
525
504
  tuple.type.recursive
526
505
  ? ts.factory.createCallExpression(
527
506
  ts.factory.createIdentifier(
@@ -540,8 +519,6 @@ export namespace RandomProgrammer {
540
519
  )
541
520
  : RandomJoiner.tuple(decode(importer)(explore))(
542
521
  tuple.type.elements,
543
- tags,
544
- comments,
545
522
  );
546
523
 
547
524
  const decode_object =
@@ -578,11 +555,7 @@ export namespace RandomProgrammer {
578
555
  const decode_set =
579
556
  (importer: FunctionImporter) =>
580
557
  (explore: IExplore) =>
581
- (
582
- meta: Metadata,
583
- tags: IMetadataCommentTag[],
584
- comments: ICommentTag[],
585
- ) =>
558
+ (meta: Metadata) =>
586
559
  ts.factory.createNewExpression(
587
560
  ts.factory.createIdentifier("Set"),
588
561
  undefined,
@@ -598,20 +571,14 @@ export namespace RandomProgrammer {
598
571
  name: `Set<${meta.getName()}>`,
599
572
  }),
600
573
  }),
601
- tags,
602
- comments,
603
- ),
574
+ )[0]!,
604
575
  ],
605
576
  );
606
577
 
607
578
  const decode_map =
608
579
  (importer: FunctionImporter) =>
609
580
  (explore: IExplore) =>
610
- (
611
- m: Metadata.Entry,
612
- tags: IMetadataCommentTag[],
613
- comments: ICommentTag[],
614
- ) =>
581
+ (map: Metadata.Entry) =>
615
582
  ts.factory.createNewExpression(
616
583
  ts.factory.createIdentifier("Map"),
617
584
  undefined,
@@ -620,7 +587,7 @@ export namespace RandomProgrammer {
620
587
  MetadataArray.create({
621
588
  tags: [],
622
589
  type: MetadataArrayType.create({
623
- name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
590
+ name: `Map<${map.key.getName()}, ${map.value.getName()}>`,
624
591
  index: null,
625
592
  recursive: false,
626
593
  nullables: [],
@@ -630,11 +597,14 @@ export namespace RandomProgrammer {
630
597
  (() => {
631
598
  const type =
632
599
  MetadataTupleType.create({
633
- name: `[${m.key.getName()}, ${m.value.getName()}]`,
600
+ name: `[${map.key.getName()}, ${map.value.getName()}]`,
634
601
  index: null,
635
602
  recursive: false,
636
603
  nullables: [],
637
- elements: [m.key, m.value],
604
+ elements: [
605
+ map.key,
606
+ map.value,
607
+ ],
638
608
  });
639
609
  type.of_map = true;
640
610
  return MetadataTuple.create({
@@ -646,24 +616,28 @@ export namespace RandomProgrammer {
646
616
  }),
647
617
  }),
648
618
  }),
649
- tags,
650
- comments,
651
- ),
619
+ )[0]!,
652
620
  ],
653
621
  );
654
622
 
655
623
  const decode_native =
656
624
  (importer: FunctionImporter) =>
657
- (
658
- type: string,
659
- tags: IMetadataCommentTag[],
660
- comments: ICommentTag[],
661
- ): ts.Expression => {
625
+ (type: string): ts.Expression => {
662
626
  if (type === "Boolean") return decode_boolean(importer);
663
627
  else if (type === "Number")
664
- return decode_number(importer)(tags, comments);
628
+ return decode_number(importer)(
629
+ MetadataAtomic.create({
630
+ type: "number",
631
+ tags: [],
632
+ }),
633
+ )[0]!;
665
634
  else if (type === "String")
666
- return decode_string(importer)(tags, comments);
635
+ return decode_string(importer)(
636
+ MetadataAtomic.create({
637
+ type: "string",
638
+ tags: [],
639
+ }),
640
+ )[0]!;
667
641
  else if (type === "Date") return decode_native_date(importer);
668
642
  else if (
669
643
  type === "Uint8Array" ||
@@ -889,9 +863,15 @@ const PREFIX = {
889
863
 
890
864
  const COALESCE = (importer: FunctionImporter) => (name: string) =>
891
865
  ExpressionFactory.coalesce(
892
- ts.factory.createPropertyAccessChain(
893
- ts.factory.createIdentifier("generator"),
894
- ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
895
- ts.factory.createIdentifier(name),
896
- ),
866
+ Escaper.variable(name)
867
+ ? ts.factory.createPropertyAccessChain(
868
+ ts.factory.createIdentifier("generator"),
869
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
870
+ ts.factory.createIdentifier(name),
871
+ )
872
+ : ts.factory.createElementAccessChain(
873
+ ts.factory.createIdentifier("generator"),
874
+ ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
875
+ ts.factory.createStringLiteral(name),
876
+ ),
897
877
  )(IdentifierFactory.access(importer.use("generator"))(name));