typia 5.0.0-dev.20230823 → 5.0.0-dev.20230824

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 (387) hide show
  1. package/lib/Primitive.d.ts +14 -12
  2. package/lib/Resolved.d.ts +46 -0
  3. package/lib/{schemas/metadata/IMetadataTag.js → Resolved.js} +1 -1
  4. package/lib/Resolved.js.map +1 -0
  5. package/lib/factories/ExpressionFactory.d.ts +2 -0
  6. package/lib/factories/ExpressionFactory.js +24 -0
  7. package/lib/factories/ExpressionFactory.js.map +1 -1
  8. package/lib/factories/IdentifierFactory.d.ts +2 -1
  9. package/lib/factories/IdentifierFactory.js +11 -0
  10. package/lib/factories/IdentifierFactory.js.map +1 -1
  11. package/lib/factories/MetadataCollection.d.ts +7 -7
  12. package/lib/factories/MetadataCollection.js +4 -4
  13. package/lib/factories/MetadataCollection.js.map +1 -1
  14. package/lib/factories/MetadataFactory.d.ts +1 -1
  15. package/lib/factories/MetadataTagFactory.d.ts +2 -2
  16. package/lib/factories/MetadataTagFactory.js +15 -13
  17. package/lib/factories/MetadataTagFactory.js.map +1 -1
  18. package/lib/factories/ProtobufFactory.js +11 -10
  19. package/lib/factories/ProtobufFactory.js.map +1 -1
  20. package/lib/factories/internal/metadata/emend_metadata_atomics.js +6 -6
  21. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  22. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +5 -0
  23. package/lib/factories/internal/metadata/{emplace_metadata_array.js → emplace_metadata_array_type.js} +4 -4
  24. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -0
  25. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -2
  26. package/lib/factories/internal/metadata/explore_metadata.js +3 -3
  27. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_array.js +7 -3
  29. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  31. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_collection.js +26 -18
  33. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -0
  35. package/lib/factories/internal/metadata/{iterate_metadata_tag.js → iterate_metadata_comment_tags.js} +4 -4
  36. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -0
  37. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +138 -16
  38. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_native.js +2 -10
  40. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  41. package/lib/factories/internal/metadata/iterate_metadata_object.js +0 -7
  42. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  43. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +6 -6
  44. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  45. package/lib/factories/internal/metadata/iterate_metadata_sort.js +4 -4
  46. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +6 -2
  48. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +3 -0
  50. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +157 -0
  51. package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +1 -0
  52. package/lib/functional/$ProtobufWriter.js.map +1 -1
  53. package/lib/functional/$any.js +2 -1
  54. package/lib/functional/$any.js.map +1 -1
  55. package/lib/functional/$clone.d.ts +2 -0
  56. package/lib/functional/$clone.js +8 -0
  57. package/lib/functional/$clone.js.map +1 -0
  58. package/lib/json.d.ts +15 -15
  59. package/lib/misc.d.ts +42 -42
  60. package/lib/module.d.ts +20 -56
  61. package/lib/module.js +4 -17
  62. package/lib/module.js.map +1 -1
  63. package/lib/programmers/AssertProgrammer.js +2 -4
  64. package/lib/programmers/AssertProgrammer.js.map +1 -1
  65. package/lib/programmers/CheckerProgrammer.js +39 -30
  66. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  67. package/lib/programmers/FeatureProgrammer.d.ts +4 -4
  68. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  69. package/lib/programmers/IsProgrammer.d.ts +1 -1
  70. package/lib/programmers/IsProgrammer.js +3 -5
  71. package/lib/programmers/IsProgrammer.js.map +1 -1
  72. package/lib/programmers/RandomProgrammer.js +328 -142
  73. package/lib/programmers/RandomProgrammer.js.map +1 -1
  74. package/lib/programmers/ValidateProgrammer.js +2 -4
  75. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  76. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  77. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  78. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  79. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  80. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  81. package/lib/programmers/helpers/ICheckEntry.d.ts +1 -1
  82. package/lib/programmers/helpers/ProtobufUtil.js +2 -2
  83. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  84. package/lib/programmers/helpers/RandomJoiner.d.ts +4 -4
  85. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  86. package/lib/programmers/helpers/RandomRanger.d.ts +6 -6
  87. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  88. package/lib/programmers/helpers/StringifyPredicator.js +1 -2
  89. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  90. package/lib/programmers/helpers/UnionExplorer.d.ts +8 -8
  91. package/lib/programmers/helpers/UnionExplorer.js +40 -29
  92. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  93. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  94. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  95. package/lib/programmers/internal/application_array.js +1 -1
  96. package/lib/programmers/internal/application_array.js.map +1 -1
  97. package/lib/programmers/internal/application_default_string.js +2 -2
  98. package/lib/programmers/internal/application_default_string.js.map +1 -1
  99. package/lib/programmers/internal/application_resolved.d.ts +2 -2
  100. package/lib/programmers/internal/application_resolved.js +2 -2
  101. package/lib/programmers/internal/application_resolved.js.map +1 -1
  102. package/lib/programmers/internal/application_schema.js +7 -7
  103. package/lib/programmers/internal/application_schema.js.map +1 -1
  104. package/lib/programmers/internal/application_string.js.map +1 -1
  105. package/lib/programmers/internal/application_tuple.js +10 -9
  106. package/lib/programmers/internal/application_tuple.js.map +1 -1
  107. package/lib/programmers/internal/check_array_length.js.map +1 -1
  108. package/lib/programmers/internal/check_array_tags.js +39 -0
  109. package/lib/programmers/internal/check_array_tags.js.map +1 -0
  110. package/lib/programmers/internal/check_bigint.js +88 -74
  111. package/lib/programmers/internal/check_bigint.js.map +1 -1
  112. package/lib/programmers/internal/check_number.js +142 -131
  113. package/lib/programmers/internal/check_number.js.map +1 -1
  114. package/lib/programmers/internal/check_string.js +30 -6
  115. package/lib/programmers/internal/check_string.js.map +1 -1
  116. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  117. package/lib/programmers/internal/check_template.js +16 -49
  118. package/lib/programmers/internal/check_template.js.map +1 -1
  119. package/lib/programmers/internal/check_union_array_like.js +3 -2
  120. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  121. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  122. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  123. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  124. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  125. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +9 -5
  126. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  127. package/lib/programmers/json/JsonStringifyProgrammer.js +33 -27
  128. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  129. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -1
  130. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  131. package/lib/programmers/misc/MiscCloneProgrammer.js +124 -43
  132. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  133. package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -1
  134. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  135. package/lib/programmers/misc/MiscLiteralsProgrammer.js +3 -3
  136. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  137. package/lib/programmers/misc/MiscPruneProgrammer.js +15 -15
  138. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  139. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -1
  140. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  141. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +3 -3
  142. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  143. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +8 -8
  144. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  145. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +3 -3
  146. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  147. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +2 -2
  148. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  149. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  150. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  151. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +1 -1
  152. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  153. package/lib/protobuf.d.ts +631 -10
  154. package/lib/protobuf.js +13 -13
  155. package/lib/protobuf.js.map +1 -1
  156. package/lib/schemas/json/IJsonSchema.d.ts +2 -2
  157. package/lib/schemas/metadata/IMetadata.d.ts +13 -6
  158. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -2
  159. package/lib/schemas/metadata/IMetadataArray.d.ts +4 -6
  160. package/lib/schemas/metadata/IMetadataArrayType.d.ts +8 -0
  161. package/lib/{CustomValidatorMap.js → schemas/metadata/IMetadataArrayType.js} +1 -1
  162. package/lib/schemas/metadata/IMetadataArrayType.js.map +1 -0
  163. package/lib/schemas/metadata/IMetadataAtomic.d.ts +5 -0
  164. package/lib/schemas/metadata/{IMetadataResolved.js → IMetadataAtomic.js} +1 -1
  165. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  166. package/lib/schemas/metadata/IMetadataCollection.d.ts +4 -4
  167. package/lib/schemas/metadata/{IMetadataTag.d.ts → IMetadataCommentTag.d.ts} +2 -2
  168. package/lib/schemas/metadata/IMetadataCommentTag.js +3 -0
  169. package/lib/schemas/metadata/IMetadataCommentTag.js.map +1 -0
  170. package/lib/schemas/metadata/{IMetadataResolved.d.ts → IMetadataEscaped.d.ts} +1 -1
  171. package/lib/schemas/metadata/IMetadataEscaped.js +3 -0
  172. package/lib/schemas/metadata/IMetadataEscaped.js.map +1 -0
  173. package/lib/schemas/metadata/IMetadataProperty.d.ts +2 -2
  174. package/lib/schemas/metadata/IMetadataTuple.d.ts +4 -6
  175. package/lib/schemas/metadata/IMetadataTupleType.d.ts +8 -0
  176. package/lib/schemas/metadata/IMetadataTupleType.js +3 -0
  177. package/lib/schemas/metadata/IMetadataTupleType.js.map +1 -0
  178. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +6 -0
  179. package/lib/schemas/metadata/IMetadataTypeTag.js +3 -0
  180. package/lib/schemas/metadata/IMetadataTypeTag.js.map +1 -0
  181. package/lib/schemas/metadata/Metadata.d.ts +4 -4
  182. package/lib/schemas/metadata/Metadata.js +217 -157
  183. package/lib/schemas/metadata/Metadata.js.map +1 -1
  184. package/lib/schemas/metadata/MetadataAlias.d.ts +2 -2
  185. package/lib/schemas/metadata/MetadataArray.d.ts +6 -6
  186. package/lib/schemas/metadata/MetadataArray.js +5 -19
  187. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  188. package/lib/schemas/metadata/MetadataArrayType.d.ts +14 -0
  189. package/lib/schemas/metadata/MetadataArrayType.js +36 -0
  190. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -0
  191. package/lib/schemas/metadata/{MetadataResolved.d.ts → MetadataEscaped.d.ts} +3 -3
  192. package/lib/schemas/metadata/{MetadataResolved.js → MetadataEscaped.js} +11 -11
  193. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -0
  194. package/lib/schemas/metadata/MetadataProperty.d.ts +2 -2
  195. package/lib/schemas/metadata/MetadataTuple.d.ts +4 -6
  196. package/lib/schemas/metadata/MetadataTuple.js +5 -19
  197. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  198. package/lib/schemas/metadata/MetadataTupleType.d.ts +13 -0
  199. package/lib/schemas/metadata/MetadataTupleType.js +40 -0
  200. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -0
  201. package/lib/tags/ExclusiveMaximum.d.ts +8 -0
  202. package/lib/tags/ExclusiveMaximum.js +3 -0
  203. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  204. package/lib/tags/ExclusiveMinimum.d.ts +8 -0
  205. package/lib/tags/ExclusiveMinimum.js +3 -0
  206. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  207. package/lib/tags/Format.d.ts +8 -0
  208. package/lib/tags/Format.js +3 -0
  209. package/lib/tags/Format.js.map +1 -0
  210. package/lib/tags/MaxItems.d.ts +8 -0
  211. package/lib/tags/MaxItems.js +3 -0
  212. package/lib/tags/MaxItems.js.map +1 -0
  213. package/lib/tags/MaxLength.d.ts +8 -0
  214. package/lib/tags/MaxLength.js +3 -0
  215. package/lib/tags/MaxLength.js.map +1 -0
  216. package/lib/tags/Maximum.d.ts +8 -0
  217. package/lib/tags/Maximum.js +3 -0
  218. package/lib/tags/Maximum.js.map +1 -0
  219. package/lib/tags/MinItems.d.ts +8 -0
  220. package/lib/tags/MinItems.js +3 -0
  221. package/lib/tags/MinItems.js.map +1 -0
  222. package/lib/tags/MinLength.d.ts +8 -0
  223. package/lib/tags/MinLength.js +3 -0
  224. package/lib/tags/MinLength.js.map +1 -0
  225. package/lib/tags/Minimum.d.ts +8 -0
  226. package/lib/tags/Minimum.js +3 -0
  227. package/lib/tags/Minimum.js.map +1 -0
  228. package/lib/tags/MultipleOf.d.ts +8 -0
  229. package/lib/tags/MultipleOf.js +3 -0
  230. package/lib/tags/MultipleOf.js.map +1 -0
  231. package/lib/tags/Pattern.d.ts +8 -0
  232. package/lib/tags/Pattern.js +3 -0
  233. package/lib/tags/Pattern.js.map +1 -0
  234. package/lib/tags/TagBase.d.ts +10 -0
  235. package/lib/tags/TagBase.js +3 -0
  236. package/lib/tags/TagBase.js.map +1 -0
  237. package/lib/tags/Type.d.ts +13 -0
  238. package/lib/tags/Type.js +3 -0
  239. package/lib/tags/Type.js.map +1 -0
  240. package/lib/tags/index.d.ts +12 -0
  241. package/lib/tags/index.js +29 -0
  242. package/lib/tags/index.js.map +1 -0
  243. package/lib/transformers/FileTransformer.d.ts +1 -1
  244. package/lib/transformers/FileTransformer.js +12 -1
  245. package/lib/transformers/FileTransformer.js.map +1 -1
  246. package/lib/transformers/IProject.d.ts +1 -0
  247. package/lib/transformers/features/json/JsonApplicationTransformer.js +5 -3
  248. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  249. package/lib/transformers/features/misc/MetadataTransformer.js +1 -1
  250. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  251. package/lib/utils/RandomGenerator.js +3 -2
  252. package/lib/utils/RandomGenerator.js.map +1 -1
  253. package/package.json +2 -1
  254. package/src/Primitive.ts +19 -15
  255. package/src/Resolved.ts +116 -0
  256. package/src/factories/ExpressionFactory.ts +44 -0
  257. package/src/factories/IdentifierFactory.ts +15 -0
  258. package/src/factories/MetadataCollection.ts +18 -12
  259. package/src/factories/MetadataFactory.ts +1 -1
  260. package/src/factories/MetadataTagFactory.ts +28 -27
  261. package/src/factories/ProtobufFactory.ts +12 -10
  262. package/src/factories/internal/metadata/emend_metadata_atomics.ts +7 -5
  263. package/src/factories/internal/metadata/{emplace_metadata_array.ts → emplace_metadata_array_type.ts} +3 -3
  264. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +2 -2
  265. package/src/factories/internal/metadata/explore_metadata.ts +3 -3
  266. package/src/factories/internal/metadata/iterate_metadata_array.ts +13 -5
  267. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +6 -4
  268. package/src/factories/internal/metadata/iterate_metadata_collection.ts +29 -22
  269. package/src/factories/internal/metadata/{iterate_metadata_tag.ts → iterate_metadata_comment_tags.ts} +1 -1
  270. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +109 -15
  271. package/src/factories/internal/metadata/iterate_metadata_native.ts +0 -9
  272. package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -10
  273. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +6 -6
  274. package/src/factories/internal/metadata/iterate_metadata_sort.ts +4 -4
  275. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +12 -4
  276. package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +183 -0
  277. package/src/functional/$any.ts +3 -1
  278. package/src/functional/$clone.ts +4 -0
  279. package/src/json.ts +15 -15
  280. package/src/misc.ts +42 -42
  281. package/src/module.ts +20 -72
  282. package/src/programmers/AssertProgrammer.ts +4 -2
  283. package/src/programmers/CheckerProgrammer.ts +81 -48
  284. package/src/programmers/FeatureProgrammer.ts +6 -6
  285. package/src/programmers/IsProgrammer.ts +5 -3
  286. package/src/programmers/RandomProgrammer.ts +360 -41
  287. package/src/programmers/ValidateProgrammer.ts +4 -2
  288. package/src/programmers/helpers/AtomicPredicator.ts +2 -2
  289. package/src/programmers/helpers/FunctionImporeter.ts +2 -0
  290. package/src/programmers/helpers/ICheckEntry.ts +1 -1
  291. package/src/programmers/helpers/ProtobufUtil.ts +1 -1
  292. package/src/programmers/helpers/RandomJoiner.ts +8 -4
  293. package/src/programmers/helpers/RandomRanger.ts +8 -8
  294. package/src/programmers/helpers/StringifyPredicator.ts +1 -2
  295. package/src/programmers/helpers/UnionExplorer.ts +48 -34
  296. package/src/programmers/helpers/disable_function_importer_declare.ts +6 -1
  297. package/src/programmers/internal/application_array.ts +5 -4
  298. package/src/programmers/internal/application_default_string.ts +6 -2
  299. package/src/programmers/internal/application_resolved.ts +4 -4
  300. package/src/programmers/internal/application_schema.ts +7 -7
  301. package/src/programmers/internal/application_string.ts +2 -2
  302. package/src/programmers/internal/application_tuple.ts +12 -11
  303. package/src/programmers/internal/check_array_length.ts +2 -2
  304. package/src/programmers/internal/check_array_tags.ts +45 -0
  305. package/src/programmers/internal/check_bigint.ts +45 -17
  306. package/src/programmers/internal/check_number.ts +97 -70
  307. package/src/programmers/internal/check_string.ts +43 -12
  308. package/src/programmers/internal/check_string_tags.ts +3 -3
  309. package/src/programmers/internal/check_template.ts +1 -12
  310. package/src/programmers/internal/check_union_array_like.ts +6 -5
  311. package/src/programmers/internal/metadata_to_pattern.ts +4 -4
  312. package/src/programmers/internal/stringify_dynamic_properties.ts +1 -1
  313. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +9 -5
  314. package/src/programmers/json/JsonStringifyProgrammer.ts +47 -29
  315. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +1 -1
  316. package/src/programmers/misc/MiscCloneProgrammer.ts +253 -55
  317. package/src/programmers/misc/MiscIsCloneProgrammer.ts +1 -1
  318. package/src/programmers/misc/MiscLiteralsProgrammer.ts +3 -3
  319. package/src/programmers/misc/MiscPruneProgrammer.ts +31 -19
  320. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +1 -1
  321. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +18 -9
  322. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +18 -14
  323. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +15 -15
  324. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -2
  325. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -6
  326. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +2 -2
  327. package/src/protobuf.ts +663 -31
  328. package/src/schemas/json/IJsonSchema.ts +2 -2
  329. package/src/schemas/metadata/IMetadata.ts +13 -7
  330. package/src/schemas/metadata/IMetadataAlias.ts +2 -2
  331. package/src/schemas/metadata/IMetadataArray.ts +4 -7
  332. package/src/schemas/metadata/IMetadataArrayType.ts +10 -0
  333. package/src/schemas/metadata/IMetadataAtomic.ts +6 -0
  334. package/src/schemas/metadata/IMetadataCollection.ts +4 -4
  335. package/src/schemas/metadata/{IMetadataTag.ts → IMetadataCommentTag.ts} +17 -17
  336. package/src/schemas/metadata/IMetadataDictionary.ts +4 -4
  337. package/src/schemas/metadata/{IMetadataResolved.ts → IMetadataEscaped.ts} +1 -1
  338. package/src/schemas/metadata/IMetadataProperty.ts +2 -2
  339. package/src/schemas/metadata/IMetadataTuple.ts +4 -7
  340. package/src/schemas/metadata/IMetadataTupleType.ts +10 -0
  341. package/src/schemas/metadata/IMetadataTypeTag.ts +6 -0
  342. package/src/schemas/metadata/Metadata.ts +125 -63
  343. package/src/schemas/metadata/MetadataAlias.ts +2 -2
  344. package/src/schemas/metadata/MetadataArray.ts +10 -34
  345. package/src/schemas/metadata/MetadataArrayType.ts +57 -0
  346. package/src/schemas/metadata/{MetadataResolved.ts → MetadataEscaped.ts} +9 -9
  347. package/src/schemas/metadata/MetadataProperty.ts +2 -2
  348. package/src/schemas/metadata/MetadataTuple.ts +10 -37
  349. package/src/schemas/metadata/MetadataTupleType.ts +67 -0
  350. package/src/tags/ExclusiveMaximum.ts +8 -0
  351. package/src/tags/ExclusiveMinimum.ts +8 -0
  352. package/src/tags/Format.ts +29 -0
  353. package/src/tags/MaxItems.ts +8 -0
  354. package/src/tags/MaxLength.ts +8 -0
  355. package/src/tags/Maximum.ts +8 -0
  356. package/src/tags/MinItems.ts +8 -0
  357. package/src/tags/MinLength.ts +8 -0
  358. package/src/tags/Minimum.ts +8 -0
  359. package/src/tags/MultipleOf.ts +10 -0
  360. package/src/tags/Pattern.ts +8 -0
  361. package/src/tags/TagBase.ts +17 -0
  362. package/src/tags/Type.ts +30 -0
  363. package/src/tags/index.ts +12 -0
  364. package/src/transformers/FileTransformer.ts +2 -2
  365. package/src/transformers/IProject.ts +1 -0
  366. package/src/transformers/features/json/JsonApplicationTransformer.ts +4 -3
  367. package/src/transformers/features/misc/MetadataTransformer.ts +1 -1
  368. package/src/typings/Atomic.ts +1 -0
  369. package/src/utils/RandomGenerator.ts +4 -2
  370. package/lib/CustomValidatorMap.d.ts +0 -110
  371. package/lib/CustomValidatorMap.js.map +0 -1
  372. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +0 -5
  373. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +0 -1
  374. package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +0 -2
  375. package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +0 -1
  376. package/lib/programmers/internal/check_array.js +0 -44
  377. package/lib/programmers/internal/check_array.js.map +0 -1
  378. package/lib/programmers/internal/check_custom.d.ts +0 -1
  379. package/lib/programmers/internal/check_custom.js +0 -30
  380. package/lib/programmers/internal/check_custom.js.map +0 -1
  381. package/lib/schemas/metadata/IMetadataResolved.js.map +0 -1
  382. package/lib/schemas/metadata/IMetadataTag.js.map +0 -1
  383. package/lib/schemas/metadata/MetadataResolved.js.map +0 -1
  384. package/src/CustomValidatorMap.ts +0 -126
  385. package/src/programmers/internal/check_array.ts +0 -30
  386. package/src/programmers/internal/check_custom.ts +0 -31
  387. /package/lib/programmers/internal/{check_array.d.ts → check_array_tags.d.ts} +0 -0
@@ -9,11 +9,13 @@ import { TemplateFactory } from "../factories/TemplateFactory";
9
9
  import { TypeFactory } from "../factories/TypeFactory";
10
10
 
11
11
  import { ICommentTag } from "../schemas/metadata/ICommentTag";
12
- import { IMetadataTag } from "../schemas/metadata/IMetadataTag";
12
+ import { IMetadataCommentTag } from "../schemas/metadata/IMetadataCommentTag";
13
13
  import { Metadata } from "../schemas/metadata/Metadata";
14
14
  import { MetadataArray } from "../schemas/metadata/MetadataArray";
15
+ import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
15
16
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
16
17
  import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
18
+ import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
17
19
 
18
20
  import { IProject } from "../transformers/IProject";
19
21
 
@@ -27,15 +29,27 @@ export namespace RandomProgrammer {
27
29
  (project: IProject) =>
28
30
  (modulo: ts.LeftHandSideExpression) =>
29
31
  (init?: ts.Expression) => {
30
- const importer: FunctionImporter = new FunctionImporter();
32
+ const importer: FunctionImporter = new FunctionImporter(
33
+ modulo.getText(),
34
+ );
31
35
  return (type: ts.Type, name?: string) => {
32
36
  // INITIALIZE METADATA
33
37
  const collection: MetadataCollection = new MetadataCollection();
34
38
  const meta: Metadata = MetadataFactory.analyze(project.checker)(
35
39
  {
36
- resolve: true,
40
+ escape: false,
37
41
  constant: true,
38
42
  absorb: true,
43
+ validate: (meta) => {
44
+ if (meta.natives.some((n) => n === "WeakSet"))
45
+ throw new Error(
46
+ `Error on ${modulo.getText()}(): WeakSet is not supported.`,
47
+ );
48
+ else if (meta.natives.some((n) => n === "WeakMap"))
49
+ throw new Error(
50
+ `Error on ${modulo.getText()}(): WeakMap is not supported.`,
51
+ );
52
+ },
39
53
  },
40
54
  )(collection)(type);
41
55
 
@@ -67,7 +81,7 @@ export namespace RandomProgrammer {
67
81
  ),
68
82
  ],
69
83
  ts.factory.createTypeReferenceNode(
70
- `typia.Primitive<${
84
+ `typia.Resolved<${
71
85
  name ??
72
86
  TypeFactory.getFullName(project.checker)(type)
73
87
  }>`,
@@ -213,7 +227,7 @@ export namespace RandomProgrammer {
213
227
  (explore: IExplore) =>
214
228
  (
215
229
  meta: Metadata,
216
- tags: IMetadataTag[],
230
+ tags: IMetadataCommentTag[],
217
231
  comments: ICommentTag[],
218
232
  ): ts.Expression => {
219
233
  const expressions: ts.Expression[] = [];
@@ -223,7 +237,7 @@ export namespace RandomProgrammer {
223
237
  );
224
238
 
225
239
  // NULL COALESCING
226
- if (meta.isRequired() === false)
240
+ if (meta.isRequired() === false || meta.functional === true)
227
241
  expressions.push(ts.factory.createIdentifier("undefined"));
228
242
  if (meta.nullable === true)
229
243
  expressions.push(ts.factory.createNull());
@@ -236,21 +250,21 @@ export namespace RandomProgrammer {
236
250
  // ATOMIC VARIABLES
237
251
  for (const template of meta.templates)
238
252
  expressions.push(decode_template(importer)(explore)(template));
239
- for (const atomic of meta.atomics)
240
- if (atomic === "boolean")
253
+ for (const a of meta.atomics)
254
+ if (a.type === "boolean")
241
255
  expressions.push(decode_boolean(importer));
242
- else if (atomic === "number")
243
- expressions.push(decode_number(importer)(tags)(comments));
244
- else if (atomic === "string")
245
- expressions.push(decode_string(importer)(tags)(comments));
246
- else if (atomic === "bigint")
247
- expressions.push(decode_bigint(importer)(tags)(comments));
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));
248
262
 
249
263
  // INSTANCE TYPES
250
- if (meta.resolved)
264
+ if (meta.escaped)
251
265
  expressions.push(
252
266
  decode(importer)(explore)(
253
- meta.resolved.returns,
267
+ meta.escaped.returns,
254
268
  tags,
255
269
  comments,
256
270
  ),
@@ -266,17 +280,19 @@ export namespace RandomProgrammer {
266
280
  for (const o of meta.objects)
267
281
  expressions.push(decode_object(importer)(explore)(o));
268
282
  for (const native of meta.natives)
269
- if (native === "Boolean")
270
- expressions.push(decode_boolean(importer));
271
- else if (native === "Number")
272
- expressions.push(decode_number(importer)(tags)(comments));
273
- else if (native === "String")
274
- expressions.push(decode_string(importer)(tags)(comments));
275
- else expressions.push(ts.factory.createIdentifier("{}"));
276
- if (meta.sets.length || meta.maps.length)
277
- expressions.push(ts.factory.createIdentifier("{}"));
278
-
279
- // PRIMITIVE TYPES
283
+ expressions.push(
284
+ decode_native(importer)(native, tags, comments),
285
+ );
286
+ for (const set of meta.sets)
287
+ expressions.push(
288
+ decode_set(importer)(explore)(set, tags, comments),
289
+ );
290
+ for (const map of meta.maps)
291
+ expressions.push(
292
+ decode_map(importer)(explore)(map, tags, comments),
293
+ );
294
+
295
+ // PICK UP A TYPE
280
296
  if (expressions.length === 1) return expressions[0]!;
281
297
  return ts.factory.createCallExpression(
282
298
  ts.factory.createCallExpression(
@@ -329,8 +345,10 @@ export namespace RandomProgrammer {
329
345
 
330
346
  const decode_number =
331
347
  (importer: FunctionImporter) =>
332
- (tags: IMetadataTag[]) =>
333
- (comments: ICommentTag[]): ts.Expression => {
348
+ (
349
+ tags: IMetadataCommentTag[],
350
+ comments: ICommentTag[],
351
+ ): ts.Expression => {
334
352
  const type = tags.find(
335
353
  (t) =>
336
354
  t.kind === "type" &&
@@ -378,8 +396,7 @@ export namespace RandomProgrammer {
378
396
 
379
397
  const decode_bigint =
380
398
  (importer: FunctionImporter) =>
381
- (tags: IMetadataTag[]) =>
382
- (comments: ICommentTag[]): ts.Expression =>
399
+ (tags: IMetadataCommentTag[], comments: ICommentTag[]): ts.Expression =>
383
400
  random_custom(COALESCE(importer))("bigint")(comments)(
384
401
  RandomRanger.number({
385
402
  type: tags.find(
@@ -407,8 +424,7 @@ export namespace RandomProgrammer {
407
424
 
408
425
  const decode_string =
409
426
  (importer: FunctionImporter) =>
410
- (tags: IMetadataTag[]) =>
411
- (comments: ICommentTag[]): ts.Expression =>
427
+ (tags: IMetadataCommentTag[], comments: ICommentTag[]): ts.Expression =>
412
428
  random_custom(COALESCE(importer))("string")(comments)(
413
429
  (() => {
414
430
  for (const t of tags)
@@ -447,7 +463,7 @@ export namespace RandomProgrammer {
447
463
  (explore: IExplore) =>
448
464
  (
449
465
  array: MetadataArray,
450
- tags: IMetadataTag[],
466
+ tags: IMetadataCommentTag[],
451
467
  comments: ICommentTag[],
452
468
  ) => {
453
469
  const length: ts.Expression | undefined = RandomRanger.length(
@@ -461,10 +477,10 @@ export namespace RandomProgrammer {
461
477
  minimum: "minItems",
462
478
  maximum: "maxItems",
463
479
  })(tags);
464
- if (array.recursive)
480
+ if (array.type.recursive)
465
481
  return ts.factory.createCallExpression(
466
482
  ts.factory.createIdentifier(
467
- importer.useLocal(PREFIX.array(array.index!)),
483
+ importer.useLocal(PREFIX.array(array.type.index!)),
468
484
  ),
469
485
  undefined,
470
486
  [
@@ -480,7 +496,7 @@ export namespace RandomProgrammer {
480
496
  );
481
497
  const expr: ts.Expression = RandomJoiner.array(COALESCE(importer))(
482
498
  decode(importer)(explore),
483
- )(explore)(length)(array.value, tags, comments);
499
+ )(explore)(length)(array.type.value, tags, comments);
484
500
  return explore.recursive
485
501
  ? ts.factory.createConditionalExpression(
486
502
  ts.factory.createLogicalAnd(
@@ -503,13 +519,13 @@ export namespace RandomProgrammer {
503
519
  (explore: IExplore) =>
504
520
  (
505
521
  tuple: MetadataTuple,
506
- tags: IMetadataTag[],
522
+ tags: IMetadataCommentTag[],
507
523
  comments: ICommentTag[],
508
524
  ): ts.Expression =>
509
- tuple.recursive
525
+ tuple.type.recursive
510
526
  ? ts.factory.createCallExpression(
511
527
  ts.factory.createIdentifier(
512
- importer.useLocal(PREFIX.tuple(tuple.index!)),
528
+ importer.useLocal(PREFIX.tuple(tuple.type.index!)),
513
529
  ),
514
530
  undefined,
515
531
  [
@@ -523,7 +539,7 @@ export namespace RandomProgrammer {
523
539
  ],
524
540
  )
525
541
  : RandomJoiner.tuple(decode(importer)(explore))(
526
- tuple.elements,
542
+ tuple.type.elements,
527
543
  tags,
528
544
  comments,
529
545
  );
@@ -555,6 +571,308 @@ export namespace RandomProgrammer {
555
571
  ]
556
572
  : undefined,
557
573
  );
574
+
575
+ /* -----------------------------------------------------------
576
+ NATIVE CLASSES
577
+ ----------------------------------------------------------- */
578
+ const decode_set =
579
+ (importer: FunctionImporter) =>
580
+ (explore: IExplore) =>
581
+ (
582
+ meta: Metadata,
583
+ tags: IMetadataCommentTag[],
584
+ comments: ICommentTag[],
585
+ ) =>
586
+ ts.factory.createNewExpression(
587
+ ts.factory.createIdentifier("Set"),
588
+ undefined,
589
+ [
590
+ decode_array(importer)(explore)(
591
+ MetadataArray.create({
592
+ tags: [],
593
+ type: MetadataArrayType.create({
594
+ value: meta,
595
+ recursive: false,
596
+ index: null,
597
+ nullables: [],
598
+ name: `Set<${meta.getName()}>`,
599
+ }),
600
+ }),
601
+ tags,
602
+ comments,
603
+ ),
604
+ ],
605
+ );
606
+
607
+ const decode_map =
608
+ (importer: FunctionImporter) =>
609
+ (explore: IExplore) =>
610
+ (
611
+ m: Metadata.Entry,
612
+ tags: IMetadataCommentTag[],
613
+ comments: ICommentTag[],
614
+ ) =>
615
+ ts.factory.createNewExpression(
616
+ ts.factory.createIdentifier("Map"),
617
+ undefined,
618
+ [
619
+ decode_array(importer)(explore)(
620
+ MetadataArray.create({
621
+ tags: [],
622
+ type: MetadataArrayType.create({
623
+ name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
624
+ index: null,
625
+ recursive: false,
626
+ nullables: [],
627
+ value: Metadata.create({
628
+ ...Metadata.initialize(),
629
+ tuples: [
630
+ (() => {
631
+ const type =
632
+ MetadataTupleType.create({
633
+ name: `[${m.key.getName()}, ${m.value.getName()}]`,
634
+ index: null,
635
+ recursive: false,
636
+ nullables: [],
637
+ elements: [m.key, m.value],
638
+ });
639
+ type.of_map = true;
640
+ return MetadataTuple.create({
641
+ type,
642
+ tags: [],
643
+ });
644
+ })(),
645
+ ],
646
+ }),
647
+ }),
648
+ }),
649
+ tags,
650
+ comments,
651
+ ),
652
+ ],
653
+ );
654
+
655
+ const decode_native =
656
+ (importer: FunctionImporter) =>
657
+ (
658
+ type: string,
659
+ tags: IMetadataCommentTag[],
660
+ comments: ICommentTag[],
661
+ ): ts.Expression => {
662
+ if (type === "Boolean") return decode_boolean(importer);
663
+ else if (type === "Number")
664
+ return decode_number(importer)(tags, comments);
665
+ else if (type === "String")
666
+ return decode_string(importer)(tags, comments);
667
+ else if (type === "Date") return decode_native_date(importer);
668
+ else if (
669
+ type === "Uint8Array" ||
670
+ type === "Uint8ClampedArray" ||
671
+ type === "Uint16Array" ||
672
+ type === "Uint32Array" ||
673
+ type === "BigUint64Array" ||
674
+ type === "Int8Array" ||
675
+ type === "Int16Array" ||
676
+ type === "Int32Array" ||
677
+ type === "BigInt64Array" ||
678
+ type === "Float32Array" ||
679
+ type === "Float64Array"
680
+ )
681
+ return decode_native_byte_array(importer)(type);
682
+ else if (type === "ArrayBuffer" || type === "SharedArrayBuffer")
683
+ return decode_native_array_buffer(importer)(type);
684
+ else if (type === "DataView")
685
+ return decode_native_data_view(importer);
686
+ else
687
+ return ts.factory.createNewExpression(
688
+ ts.factory.createIdentifier(type),
689
+ undefined,
690
+ [],
691
+ );
692
+ };
693
+
694
+ const decode_native_date = (importer: FunctionImporter) =>
695
+ ts.factory.createNewExpression(
696
+ ts.factory.createIdentifier("Date"),
697
+ undefined,
698
+ [
699
+ ts.factory.createCallExpression(
700
+ COALESCE(importer)("datetime"),
701
+ undefined,
702
+ [],
703
+ ),
704
+ ],
705
+ );
706
+
707
+ const decode_native_byte_array =
708
+ (importer: FunctionImporter) =>
709
+ (
710
+ type:
711
+ | "Uint8Array"
712
+ | "Uint8ClampedArray"
713
+ | "Uint16Array"
714
+ | "Uint32Array"
715
+ | "BigUint64Array"
716
+ | "Int8Array"
717
+ | "Int16Array"
718
+ | "Int32Array"
719
+ | "BigInt64Array"
720
+ | "Float32Array"
721
+ | "Float64Array",
722
+ ): ts.Expression => {
723
+ new BigInt64Array();
724
+ const [minimum, maximum]: [number, number] = (() => {
725
+ if (type === "Uint8Array" || type === "Uint8ClampedArray")
726
+ return [0, 255];
727
+ else if (type === "Uint16Array") return [0, 65535];
728
+ else if (type === "Uint32Array") return [0, 4294967295];
729
+ else if (type === "BigUint64Array")
730
+ return [0, 18446744073709551615];
731
+ else if (type === "Int8Array") return [-128, 127];
732
+ else if (type === "Int16Array") return [-32768, 32767];
733
+ else if (type === "Int32Array")
734
+ return [-2147483648, 2147483647];
735
+ else if (type === "BigInt64Array")
736
+ return [-9223372036854775808, 9223372036854775807];
737
+ else if (type === "Float32Array")
738
+ return [-1.175494351e38, 3.4028235e38];
739
+ return [Number.MIN_VALUE, Number.MAX_VALUE];
740
+ })();
741
+ const literal =
742
+ type === "BigInt64Array" || type === "BigUint64Array"
743
+ ? ExpressionFactory.bigint
744
+ : ts.factory.createNumericLiteral;
745
+ return ts.factory.createNewExpression(
746
+ ts.factory.createIdentifier(type),
747
+ [],
748
+ [
749
+ ts.factory.createCallExpression(
750
+ COALESCE(importer)("array"),
751
+ undefined,
752
+ [
753
+ ts.factory.createArrowFunction(
754
+ undefined,
755
+ undefined,
756
+ [],
757
+ TypeFactory.keyword("any"),
758
+ undefined,
759
+ ts.factory.createCallExpression(
760
+ COALESCE(importer)(
761
+ type === "Float32Array" ||
762
+ type === "Float64Array"
763
+ ? "number"
764
+ : type === "BigInt64Array" ||
765
+ type === "BigUint64Array"
766
+ ? "bigint"
767
+ : "integer",
768
+ ),
769
+ undefined,
770
+ [literal(minimum), literal(maximum)],
771
+ ),
772
+ ),
773
+ ],
774
+ ),
775
+ ],
776
+ );
777
+ };
778
+
779
+ const decode_native_array_buffer =
780
+ (importer: FunctionImporter) =>
781
+ (type: "ArrayBuffer" | "SharedArrayBuffer"): ts.Expression =>
782
+ type === "ArrayBuffer"
783
+ ? IdentifierFactory.access(
784
+ decode_native_byte_array(importer)("Uint8Array"),
785
+ )("buffer")
786
+ : ExpressionFactory.selfCall(
787
+ ts.factory.createBlock(
788
+ [
789
+ StatementFactory.constant(
790
+ "length",
791
+ ts.factory.createCallExpression(
792
+ COALESCE(importer)("integer"),
793
+ undefined,
794
+ [],
795
+ ),
796
+ ),
797
+ StatementFactory.constant(
798
+ "buffer",
799
+ ts.factory.createNewExpression(
800
+ ts.factory.createIdentifier(
801
+ "SharedArrayBuffer",
802
+ ),
803
+ [],
804
+ [ts.factory.createIdentifier("length")],
805
+ ),
806
+ ),
807
+ StatementFactory.constant(
808
+ "bytes",
809
+ ts.factory.createNewExpression(
810
+ ts.factory.createIdentifier("Uint8Array"),
811
+ [],
812
+ [ts.factory.createIdentifier("buffer")],
813
+ ),
814
+ ),
815
+ ts.factory.createExpressionStatement(
816
+ ts.factory.createCallExpression(
817
+ IdentifierFactory.access(
818
+ ts.factory.createIdentifier("bytes"),
819
+ )("set"),
820
+ undefined,
821
+ [
822
+ ts.factory.createCallExpression(
823
+ COALESCE(importer)("array"),
824
+ undefined,
825
+ [
826
+ ts.factory.createArrowFunction(
827
+ undefined,
828
+ undefined,
829
+ [],
830
+ TypeFactory.keyword(
831
+ "any",
832
+ ),
833
+ undefined,
834
+ ts.factory.createCallExpression(
835
+ COALESCE(importer)(
836
+ "integer",
837
+ ),
838
+ undefined,
839
+ [
840
+ ts.factory.createNumericLiteral(
841
+ 0,
842
+ ),
843
+ ts.factory.createNumericLiteral(
844
+ 255,
845
+ ),
846
+ ],
847
+ ),
848
+ ),
849
+ ts.factory.createIdentifier(
850
+ "length",
851
+ ),
852
+ ],
853
+ ),
854
+ ts.factory.createNumericLiteral(0),
855
+ ],
856
+ ),
857
+ ),
858
+ ts.factory.createReturnStatement(
859
+ ts.factory.createIdentifier("buffer"),
860
+ ),
861
+ ],
862
+ true,
863
+ ),
864
+ );
865
+
866
+ const decode_native_data_view = (importer: FunctionImporter) =>
867
+ ts.factory.createNewExpression(
868
+ ts.factory.createIdentifier("DataView"),
869
+ [],
870
+ [
871
+ IdentifierFactory.access(
872
+ decode_native_byte_array(importer)("Uint8Array"),
873
+ )("buffer"),
874
+ ],
875
+ );
558
876
  }
559
877
 
560
878
  type Atomic = boolean | number | string | bigint;
@@ -568,6 +886,7 @@ const PREFIX = {
568
886
  array: (i: number) => `$ra${i}`,
569
887
  tuple: (i: number) => `$rt${i}`,
570
888
  };
889
+
571
890
  const COALESCE = (importer: FunctionImporter) => (name: string) =>
572
891
  ExpressionFactory.coalesce(
573
892
  ts.factory.createPropertyAccessChain(
@@ -19,7 +19,9 @@ export namespace ValidateProgrammer {
19
19
  (modulo: ts.LeftHandSideExpression) =>
20
20
  (equals: boolean) =>
21
21
  (type: ts.Type, name?: string) => {
22
- const importer: FunctionImporter = new FunctionImporter();
22
+ const importer: FunctionImporter = new FunctionImporter(
23
+ modulo.getText(),
24
+ );
23
25
 
24
26
  const is = IsProgrammer.write(project)(modulo, true)(equals)(
25
27
  type,
@@ -34,7 +36,7 @@ export namespace ValidateProgrammer {
34
36
  equals,
35
37
  atomist: (explore) => (tuple) => (input) =>
36
38
  [
37
- tuple.expression,
39
+ ...(tuple.expression ? [tuple.expression] : []),
38
40
  ...tuple.tags.map((tag) =>
39
41
  ts.factory.createLogicalOr(
40
42
  tag.expression,
@@ -8,7 +8,7 @@ export namespace AtomicPredicator {
8
8
  export const constant =
9
9
  (meta: Metadata) =>
10
10
  (name: Atomic.Literal): boolean =>
11
- !ArrayUtil.has(meta.atomics, (atomic) => atomic === name) &&
11
+ !ArrayUtil.has(meta.atomics, (a) => a.type === name) &&
12
12
  !ArrayUtil.has(
13
13
  meta.natives,
14
14
  (native) => native.toLowerCase() === name,
@@ -25,7 +25,7 @@ export namespace AtomicPredicator {
25
25
  export const native = (name: string) => LIKE.has(name.toLowerCase());
26
26
 
27
27
  export const template = (meta: Metadata): boolean =>
28
- !ArrayUtil.has(meta.atomics, (type) => type === "string");
28
+ !ArrayUtil.has(meta.atomics, (a) => a.type === "string");
29
29
  }
30
30
 
31
31
  const LIKE = new Set(["boolean", "number", "string"]);
@@ -11,6 +11,8 @@ export class FunctionImporter {
11
11
  new Map();
12
12
  private sequence_: number = 0;
13
13
 
14
+ public constructor(public readonly method: string) {}
15
+
14
16
  public empty(): boolean {
15
17
  return this.used_.size === 0;
16
18
  }
@@ -1,7 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  export interface ICheckEntry {
4
- expression: ts.Expression;
4
+ expression: ts.Expression | null;
5
5
  tags: ICheckEntry.ITag[];
6
6
  }
7
7
  export namespace ICheckEntry {
@@ -7,7 +7,7 @@ export namespace ProtobufUtil {
7
7
  export const getAtomics = (meta: Metadata) => {
8
8
  const set: Set<Atomic.Literal> = new Set();
9
9
 
10
- for (const atomic of meta.atomics) set.add(atomic);
10
+ for (const a of meta.atomics) set.add(a.type);
11
11
  for (const constant of meta.constants) set.add(constant.type);
12
12
  if (meta.templates.length) set.add("string");
13
13
 
@@ -4,7 +4,7 @@ import { StatementFactory } from "../../factories/StatementFactory";
4
4
  import { TypeFactory } from "../../factories/TypeFactory";
5
5
 
6
6
  import { ICommentTag } from "../../schemas/metadata/ICommentTag";
7
- import { IMetadataTag } from "../../schemas/metadata/IMetadataTag";
7
+ import { IMetadataCommentTag } from "../../schemas/metadata/IMetadataCommentTag";
8
8
  import { Metadata } from "../../schemas/metadata/Metadata";
9
9
  import { MetadataObject } from "../../schemas/metadata/MetadataObject";
10
10
  import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
@@ -16,7 +16,7 @@ import { get_comment_tags } from "../internal/get_comment_tags";
16
16
  export namespace RandomJoiner {
17
17
  export type Decoder = (
18
18
  meta: Metadata,
19
- tags: IMetadataTag[],
19
+ tags: IMetadataCommentTag[],
20
20
  comments: ICommentTag[],
21
21
  ) => ts.Expression;
22
22
 
@@ -27,7 +27,7 @@ export namespace RandomJoiner {
27
27
  (length: ts.Expression | undefined) =>
28
28
  (
29
29
  item: Metadata,
30
- tags: IMetadataTag[],
30
+ tags: IMetadataCommentTag[],
31
31
  comments: ICommentTag[],
32
32
  ): ts.Expression => {
33
33
  const generator: ts.Expression = ts.factory.createCallExpression(
@@ -60,7 +60,11 @@ export namespace RandomJoiner {
60
60
 
61
61
  export const tuple =
62
62
  (decoder: Decoder) =>
63
- (items: Metadata[], tags: IMetadataTag[], comments: ICommentTag[]) =>
63
+ (
64
+ items: Metadata[],
65
+ tags: IMetadataCommentTag[],
66
+ comments: ICommentTag[],
67
+ ) =>
64
68
  ts.factory.createArrayLiteralExpression(
65
69
  items.map((i) => decoder(i.rest ?? i, tags, comments)),
66
70
  true,