typia 5.3.5-dev.20231206 → 5.3.5

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 (513) hide show
  1. package/README.md +1 -1
  2. package/lib/TypeGuardError.js.map +1 -1
  3. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  4. package/lib/factories/CommentFactory.d.ts +1 -0
  5. package/lib/factories/CommentFactory.js.map +1 -1
  6. package/lib/factories/ExpressionFactory.d.ts +1 -0
  7. package/lib/factories/IdentifierFactory.d.ts +1 -0
  8. package/lib/factories/JsonMetadataFactory.d.ts +1 -0
  9. package/lib/factories/LiteralFactory.d.ts +1 -0
  10. package/lib/factories/MetadataCollection.d.ts +1 -0
  11. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  12. package/lib/factories/MetadataFactory.d.ts +1 -0
  13. package/lib/factories/MetadataFactory.js.map +1 -1
  14. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  15. package/lib/factories/NumericRangeFactory.d.ts +1 -0
  16. package/lib/factories/ProtobufFactory.d.ts +1 -0
  17. package/lib/factories/ProtobufFactory.js.map +1 -1
  18. package/lib/factories/StatementFactory.d.ts +1 -0
  19. package/lib/factories/TemplateFactory.d.ts +1 -0
  20. package/lib/factories/TemplateFactory.js.map +1 -1
  21. package/lib/factories/TypeFactory.d.ts +1 -0
  22. package/lib/factories/TypeFactory.js.map +1 -1
  23. package/lib/factories/ValueFactory.d.ts +1 -0
  24. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  25. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +1 -0
  26. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +1 -0
  27. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +1 -0
  28. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  29. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +1 -0
  30. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -0
  31. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -0
  33. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_alias.d.ts +1 -0
  35. package/lib/factories/internal/metadata/iterate_metadata_array.d.ts +1 -0
  36. package/lib/factories/internal/metadata/iterate_metadata_atomic.d.ts +1 -0
  37. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_coalesce.d.ts +1 -0
  39. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js.map +1 -1
  40. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  41. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  42. package/lib/factories/internal/metadata/iterate_metadata_constant.d.ts +1 -0
  43. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  44. package/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts +1 -0
  45. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  46. package/lib/factories/internal/metadata/iterate_metadata_map.d.ts +1 -0
  47. package/lib/factories/internal/metadata/iterate_metadata_native.d.ts +1 -0
  48. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_object.d.ts +1 -0
  50. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  51. package/lib/factories/internal/metadata/iterate_metadata_resolve.d.ts +1 -0
  52. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  53. package/lib/factories/internal/metadata/iterate_metadata_set.d.ts +1 -0
  54. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata_template.d.ts +1 -0
  56. package/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts +1 -0
  57. package/lib/factories/internal/metadata/iterate_metadata_union.d.ts +1 -0
  58. package/lib/functional/$HeadersReader.js.map +1 -1
  59. package/lib/functional/$ParameterReader.js.map +1 -1
  60. package/lib/functional/$ProtobufReader.js.map +1 -1
  61. package/lib/functional/$ProtobufSizer.js.map +1 -1
  62. package/lib/functional/$ProtobufWriter.js.map +1 -1
  63. package/lib/functional/$QueryReader.js.map +1 -1
  64. package/lib/functional/$stoll.js.map +1 -1
  65. package/lib/functional/$string.js.map +1 -1
  66. package/lib/functional/$varint.js.map +1 -1
  67. package/lib/functional/$zigzag.js.map +1 -1
  68. package/lib/functional/Namespace.js.map +1 -1
  69. package/lib/http.js.map +1 -1
  70. package/lib/misc.js.map +1 -1
  71. package/lib/programmers/AssertProgrammer.d.ts +1 -0
  72. package/lib/programmers/CheckerProgrammer.d.ts +1 -0
  73. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  74. package/lib/programmers/FeatureProgrammer.d.ts +1 -0
  75. package/lib/programmers/IsProgrammer.d.ts +1 -0
  76. package/lib/programmers/IsProgrammer.js.map +1 -1
  77. package/lib/programmers/RandomProgrammer.d.ts +1 -0
  78. package/lib/programmers/ValidateProgrammer.d.ts +1 -0
  79. package/lib/programmers/helpers/CloneJoiner.d.ts +1 -0
  80. package/lib/programmers/helpers/FunctionImporeter.d.ts +1 -0
  81. package/lib/programmers/helpers/ICheckEntry.d.ts +1 -0
  82. package/lib/programmers/helpers/IExpressionEntry.d.ts +1 -0
  83. package/lib/programmers/helpers/NotationJoiner.d.ts +1 -0
  84. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  85. package/lib/programmers/helpers/PruneJoiner.d.ts +1 -0
  86. package/lib/programmers/helpers/RandomJoiner.d.ts +1 -0
  87. package/lib/programmers/helpers/RandomRanger.d.ts +1 -0
  88. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  89. package/lib/programmers/helpers/StringifyJoinder.d.ts +1 -0
  90. package/lib/programmers/helpers/UnionExplorer.d.ts +1 -0
  91. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  92. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  93. package/lib/programmers/http/HttpAssertHeadersProgrammer.d.ts +1 -0
  94. package/lib/programmers/http/HttpAssertQueryProgrammer.d.ts +1 -0
  95. package/lib/programmers/http/HttpHeadersProgrammer.d.ts +1 -0
  96. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  97. package/lib/programmers/http/HttpIsHeadersProgrammer.d.ts +1 -0
  98. package/lib/programmers/http/HttpIsQueryProgrammer.d.ts +1 -0
  99. package/lib/programmers/http/HttpParameterProgrammer.d.ts +1 -0
  100. package/lib/programmers/http/HttpQueryProgrammer.d.ts +1 -0
  101. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  102. package/lib/programmers/http/HttpValidateHeadersProgrammer.d.ts +1 -0
  103. package/lib/programmers/http/HttpValidateQueryProgrammer.d.ts +1 -0
  104. package/lib/programmers/internal/application_alias.js.map +1 -1
  105. package/lib/programmers/internal/application_escaped.js.map +1 -1
  106. package/lib/programmers/internal/application_native.js.map +1 -1
  107. package/lib/programmers/internal/application_number.js.map +1 -1
  108. package/lib/programmers/internal/application_object.js.map +1 -1
  109. package/lib/programmers/internal/application_schema.js.map +1 -1
  110. package/lib/programmers/internal/check_dynamic_key.d.ts +1 -0
  111. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  112. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  113. package/lib/programmers/json/JsonAssertParseProgrammer.d.ts +1 -0
  114. package/lib/programmers/json/JsonAssertStringifyProgrammer.d.ts +1 -0
  115. package/lib/programmers/json/JsonIsParseProgrammer.d.ts +1 -0
  116. package/lib/programmers/json/JsonIsStringifyProgrammer.d.ts +1 -0
  117. package/lib/programmers/json/JsonStringifyProgrammer.d.ts +1 -0
  118. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  119. package/lib/programmers/json/JsonValidateParseProgrammer.d.ts +1 -0
  120. package/lib/programmers/json/JsonValidateStringifyProgrammer.d.ts +1 -0
  121. package/lib/programmers/misc/MiscAssertCloneProgrammer.d.ts +1 -0
  122. package/lib/programmers/misc/MiscAssertPruneProgrammer.d.ts +1 -0
  123. package/lib/programmers/misc/MiscCloneProgrammer.d.ts +1 -0
  124. package/lib/programmers/misc/MiscIsCloneProgrammer.d.ts +1 -0
  125. package/lib/programmers/misc/MiscIsPruneProgrammer.d.ts +1 -0
  126. package/lib/programmers/misc/MiscLiteralsProgrammer.d.ts +1 -0
  127. package/lib/programmers/misc/MiscPruneProgrammer.d.ts +1 -0
  128. package/lib/programmers/misc/MiscValidateCloneProgrammer.d.ts +1 -0
  129. package/lib/programmers/misc/MiscValidatePruneProgrammer.d.ts +1 -0
  130. package/lib/programmers/notations/NotationAssertGeneralProgrammer.d.ts +1 -0
  131. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +1 -0
  132. package/lib/programmers/notations/NotationIsGeneralProgrammer.d.ts +1 -0
  133. package/lib/programmers/notations/NotationValidateGeneralProgrammer.d.ts +1 -0
  134. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.d.ts +1 -0
  135. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.d.ts +1 -0
  136. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.d.ts +1 -0
  137. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  138. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.d.ts +1 -0
  139. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +2 -2
  140. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  141. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.d.ts +1 -0
  142. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.d.ts +1 -0
  143. package/lib/programmers/protobuf/ProtobufMessageProgrammer.d.ts +1 -0
  144. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  145. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.d.ts +1 -0
  146. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.d.ts +1 -0
  147. package/lib/schemas/metadata/Metadata.js.map +1 -1
  148. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  149. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
  150. package/lib/transform.d.ts +1 -0
  151. package/lib/transformers/CallExpressionTransformer.d.ts +1 -0
  152. package/lib/transformers/FileTransformer.d.ts +1 -0
  153. package/lib/transformers/FileTransformer.js.map +1 -1
  154. package/lib/transformers/IProject.d.ts +1 -0
  155. package/lib/transformers/ImportTransformer.d.ts +1 -0
  156. package/lib/transformers/NodeTransformer.d.ts +1 -0
  157. package/lib/transformers/TransformerError.js.map +1 -1
  158. package/lib/transformers/features/CreateRandomTransformer.d.ts +1 -0
  159. package/lib/transformers/features/RandomTransformer.d.ts +1 -0
  160. package/lib/transformers/features/json/JsonApplicationTransformer.d.ts +1 -0
  161. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  162. package/lib/transformers/features/misc/MiscLiteralsTransformer.d.ts +1 -0
  163. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.d.ts +1 -0
  164. package/lib/transformers/features/reflect/ReflectMetadataTransformer.d.ts +1 -0
  165. package/lib/transformers/internal/GenericTransformer.d.ts +1 -0
  166. package/lib/utils/NamingConvention.js.map +1 -1
  167. package/package.json +7 -2
  168. package/src/AssertionGuard.ts +1 -1
  169. package/src/CamelCase.ts +114 -114
  170. package/src/IRandomGenerator.ts +35 -35
  171. package/src/IValidation.ts +21 -21
  172. package/src/PascalCase.ts +114 -114
  173. package/src/Primitive.ts +135 -135
  174. package/src/Resolved.ts +116 -116
  175. package/src/SnakeCase.ts +156 -156
  176. package/src/TypeGuardError.ts +36 -36
  177. package/src/executable/TypiaGenerateWizard.ts +83 -83
  178. package/src/executable/TypiaPatchWizard.ts +42 -42
  179. package/src/executable/TypiaSetupWizard.ts +151 -151
  180. package/src/executable/setup/ArgumentParser.ts +43 -43
  181. package/src/executable/setup/CommandExecutor.ts +8 -8
  182. package/src/executable/setup/FileRetriever.ts +22 -22
  183. package/src/executable/setup/PackageManager.ts +71 -71
  184. package/src/executable/setup/PluginConfigurator.ts +69 -69
  185. package/src/executable/typia.ts +55 -55
  186. package/src/factories/CommentFactory.ts +79 -79
  187. package/src/factories/ExpressionFactory.ts +150 -150
  188. package/src/factories/IdentifierFactory.ts +70 -70
  189. package/src/factories/JsonMetadataFactory.ts +53 -53
  190. package/src/factories/LiteralFactory.ts +47 -47
  191. package/src/factories/MetadataCollection.ts +269 -269
  192. package/src/factories/MetadataCommentTagFactory.ts +601 -601
  193. package/src/factories/MetadataFactory.ts +267 -267
  194. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  195. package/src/factories/NumericRangeFactory.ts +72 -72
  196. package/src/factories/ProtobufFactory.ts +259 -259
  197. package/src/factories/StatementFactory.ts +72 -72
  198. package/src/factories/TemplateFactory.ts +56 -56
  199. package/src/factories/TypeFactory.ts +118 -118
  200. package/src/factories/ValueFactory.ts +12 -12
  201. package/src/factories/internal/metadata/MetadataHelper.ts +15 -15
  202. package/src/factories/internal/metadata/emend_metadata_atomics.ts +37 -37
  203. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  204. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +38 -38
  205. package/src/factories/internal/metadata/emplace_metadata_object.ts +175 -175
  206. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  207. package/src/factories/internal/metadata/explore_metadata.ts +28 -28
  208. package/src/factories/internal/metadata/iterate_metadata.ts +94 -94
  209. package/src/factories/internal/metadata/iterate_metadata_alias.ts +34 -34
  210. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  211. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  212. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  213. package/src/factories/internal/metadata/iterate_metadata_collection.ts +131 -131
  214. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  215. package/src/factories/internal/metadata/iterate_metadata_constant.ts +48 -48
  216. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +230 -230
  217. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  218. package/src/factories/internal/metadata/iterate_metadata_native.ts +208 -208
  219. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  220. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  221. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  222. package/src/factories/internal/metadata/iterate_metadata_sort.ts +61 -61
  223. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  224. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  225. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  226. package/src/functional/$HeadersReader.ts +28 -28
  227. package/src/functional/$ParameterReader.ts +31 -31
  228. package/src/functional/$ProtobufReader.ts +195 -195
  229. package/src/functional/$ProtobufSizer.ts +147 -147
  230. package/src/functional/$ProtobufWriter.ts +150 -150
  231. package/src/functional/$QueryReader.ts +56 -56
  232. package/src/functional/$any.ts +4 -4
  233. package/src/functional/$clone.ts +4 -4
  234. package/src/functional/$convention.ts +37 -37
  235. package/src/functional/$dictionary.ts +22 -22
  236. package/src/functional/$every.ts +11 -11
  237. package/src/functional/$from.ts +5 -5
  238. package/src/functional/$guard.ts +35 -35
  239. package/src/functional/$is_between.ts +2 -2
  240. package/src/functional/$join.ts +46 -46
  241. package/src/functional/$number.ts +12 -12
  242. package/src/functional/$report.ts +13 -13
  243. package/src/functional/$rest.ts +3 -3
  244. package/src/functional/$stoll.ts +8 -8
  245. package/src/functional/$string.ts +50 -50
  246. package/src/functional/$strlen.ts +7 -7
  247. package/src/functional/$tail.ts +5 -5
  248. package/src/functional/$varint.ts +130 -130
  249. package/src/functional/$zigzag.ts +39 -39
  250. package/src/functional/IProtobufWriter.ts +18 -18
  251. package/src/functional/Namespace.ts +174 -174
  252. package/src/http.ts +1149 -1149
  253. package/src/json.ts +648 -648
  254. package/src/misc.ts +651 -651
  255. package/src/module.ts +897 -897
  256. package/src/notations.ts +855 -855
  257. package/src/programmers/AssertProgrammer.ts +293 -293
  258. package/src/programmers/CheckerProgrammer.ts +1025 -1025
  259. package/src/programmers/FeatureProgrammer.ts +460 -460
  260. package/src/programmers/IsProgrammer.ts +232 -232
  261. package/src/programmers/RandomProgrammer.ts +825 -825
  262. package/src/programmers/TypiaProgrammer.ts +167 -167
  263. package/src/programmers/ValidateProgrammer.ts +307 -307
  264. package/src/programmers/helpers/AtomicPredicator.ts +25 -25
  265. package/src/programmers/helpers/CloneJoiner.ts +130 -130
  266. package/src/programmers/helpers/FunctionImporeter.ts +87 -87
  267. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  268. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  269. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  270. package/src/programmers/helpers/NotationJoiner.ts +132 -132
  271. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  272. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  273. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  274. package/src/programmers/helpers/PruneJoiner.ts +141 -141
  275. package/src/programmers/helpers/RandomJoiner.ts +140 -140
  276. package/src/programmers/helpers/RandomRanger.ts +171 -171
  277. package/src/programmers/helpers/StringifyJoinder.ts +105 -105
  278. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  279. package/src/programmers/helpers/UnionExplorer.ts +269 -269
  280. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  281. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  282. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +77 -77
  283. package/src/programmers/http/HttpAssertQueryProgrammer.ts +75 -75
  284. package/src/programmers/http/HttpHeadersProgrammer.ts +314 -314
  285. package/src/programmers/http/HttpIsHeadersProgrammer.ts +84 -84
  286. package/src/programmers/http/HttpIsQueryProgrammer.ts +82 -82
  287. package/src/programmers/http/HttpParameterProgrammer.ts +97 -97
  288. package/src/programmers/http/HttpQueryProgrammer.ts +252 -252
  289. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +77 -77
  290. package/src/programmers/http/HttpValidateQueryProgrammer.ts +75 -75
  291. package/src/programmers/internal/application_alias.ts +65 -65
  292. package/src/programmers/internal/application_array.ts +59 -59
  293. package/src/programmers/internal/application_boolean.ts +30 -30
  294. package/src/programmers/internal/application_constant.ts +26 -26
  295. package/src/programmers/internal/application_default.ts +17 -17
  296. package/src/programmers/internal/application_default_string.ts +33 -33
  297. package/src/programmers/internal/application_escaped.ts +53 -53
  298. package/src/programmers/internal/application_native.ts +38 -38
  299. package/src/programmers/internal/application_number.ts +94 -94
  300. package/src/programmers/internal/application_object.ts +153 -153
  301. package/src/programmers/internal/application_schema.ts +180 -180
  302. package/src/programmers/internal/application_string.ts +58 -58
  303. package/src/programmers/internal/application_templates.ts +25 -25
  304. package/src/programmers/internal/application_tuple.ts +55 -55
  305. package/src/programmers/internal/check_array_length.ts +45 -45
  306. package/src/programmers/internal/check_bigint.ts +49 -49
  307. package/src/programmers/internal/check_dynamic_key.ts +175 -175
  308. package/src/programmers/internal/check_dynamic_properties.ts +198 -198
  309. package/src/programmers/internal/check_everything.ts +23 -23
  310. package/src/programmers/internal/check_native.ts +21 -21
  311. package/src/programmers/internal/check_number.ts +106 -106
  312. package/src/programmers/internal/check_object.ts +60 -60
  313. package/src/programmers/internal/check_string.ts +48 -48
  314. package/src/programmers/internal/check_template.ts +61 -61
  315. package/src/programmers/internal/check_union_array_like.ts +307 -307
  316. package/src/programmers/internal/decode_union_object.ts +78 -78
  317. package/src/programmers/internal/feature_object_entries.ts +58 -58
  318. package/src/programmers/internal/metadata_to_pattern.ts +33 -33
  319. package/src/programmers/internal/prune_object_properties.ts +60 -60
  320. package/src/programmers/internal/random_custom.ts +37 -37
  321. package/src/programmers/internal/stringify_dynamic_properties.ts +157 -157
  322. package/src/programmers/internal/stringify_native.ts +7 -7
  323. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  324. package/src/programmers/internal/template_to_pattern.ts +15 -15
  325. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  326. package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
  327. package/src/programmers/json/JsonAssertParseProgrammer.ts +67 -67
  328. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +61 -61
  329. package/src/programmers/json/JsonIsParseProgrammer.ts +73 -73
  330. package/src/programmers/json/JsonIsStringifyProgrammer.ts +75 -75
  331. package/src/programmers/json/JsonStringifyProgrammer.ts +893 -893
  332. package/src/programmers/json/JsonValidateParseProgrammer.ts +64 -64
  333. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +83 -83
  334. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +63 -63
  335. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +60 -60
  336. package/src/programmers/misc/MiscCloneProgrammer.ts +713 -713
  337. package/src/programmers/misc/MiscIsCloneProgrammer.ts +70 -70
  338. package/src/programmers/misc/MiscIsPruneProgrammer.ts +66 -66
  339. package/src/programmers/misc/MiscLiteralsProgrammer.ts +72 -72
  340. package/src/programmers/misc/MiscPruneProgrammer.ts +523 -523
  341. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +80 -80
  342. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +73 -73
  343. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +64 -64
  344. package/src/programmers/notations/NotationGeneralProgrammer.ts +647 -647
  345. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +71 -71
  346. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +81 -81
  347. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  348. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +61 -61
  349. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +607 -607
  350. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +819 -819
  351. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +82 -82
  352. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +75 -75
  353. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +160 -160
  354. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  355. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +83 -83
  356. package/src/protobuf.ts +887 -887
  357. package/src/reflect.ts +24 -24
  358. package/src/schemas/json/IJsonApplication.ts +8 -8
  359. package/src/schemas/json/IJsonComponents.ts +36 -36
  360. package/src/schemas/json/IJsonSchema.ts +113 -113
  361. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  362. package/src/schemas/metadata/IMetadata.ts +34 -34
  363. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  364. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  365. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  366. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  367. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  368. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  369. package/src/schemas/metadata/IMetadataConstant.ts +23 -23
  370. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  371. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  372. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  373. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  374. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  375. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  376. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  377. package/src/schemas/metadata/IMetadataTypeTag.ts +15 -15
  378. package/src/schemas/metadata/Metadata.ts +612 -612
  379. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  380. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  381. package/src/schemas/metadata/MetadataArray.ts +49 -49
  382. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  383. package/src/schemas/metadata/MetadataAtomic.ts +84 -84
  384. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  385. package/src/schemas/metadata/MetadataConstant.ts +46 -46
  386. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  387. package/src/schemas/metadata/MetadataObject.ts +135 -135
  388. package/src/schemas/metadata/MetadataProperty.ts +56 -56
  389. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  390. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  391. package/src/tags/Default.ts +15 -15
  392. package/src/tags/ExclusiveMaximum.ts +13 -13
  393. package/src/tags/ExclusiveMinimum.ts +13 -13
  394. package/src/tags/Format.ts +30 -30
  395. package/src/tags/MaxItems.ts +9 -9
  396. package/src/tags/MaxLength.ts +9 -9
  397. package/src/tags/Maximum.ts +13 -13
  398. package/src/tags/MinItems.ts +9 -9
  399. package/src/tags/MinLength.ts +9 -9
  400. package/src/tags/Minimum.ts +13 -13
  401. package/src/tags/MultipleOf.ts +15 -15
  402. package/src/tags/Pattern.ts +9 -9
  403. package/src/tags/TagBase.ts +68 -68
  404. package/src/tags/Type.ts +27 -27
  405. package/src/transform.ts +35 -35
  406. package/src/transformers/CallExpressionTransformer.ts +351 -351
  407. package/src/transformers/FileTransformer.ts +91 -91
  408. package/src/transformers/IProject.ts +15 -15
  409. package/src/transformers/ITransformOptions.ts +62 -62
  410. package/src/transformers/ImportTransformer.ts +66 -66
  411. package/src/transformers/NodeTransformer.ts +13 -13
  412. package/src/transformers/TransformerError.ts +55 -55
  413. package/src/transformers/features/AssertTransformer.ts +16 -16
  414. package/src/transformers/features/CreateAssertTransformer.ts +16 -16
  415. package/src/transformers/features/CreateIsTransformer.ts +10 -10
  416. package/src/transformers/features/CreateRandomTransformer.ts +40 -40
  417. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  418. package/src/transformers/features/IsTransformer.ts +10 -10
  419. package/src/transformers/features/RandomTransformer.ts +44 -44
  420. package/src/transformers/features/ValidateTransformer.ts +11 -11
  421. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +11 -11
  422. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +9 -9
  423. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +9 -9
  424. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +9 -9
  425. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +9 -9
  426. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +9 -9
  427. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +9 -9
  428. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +12 -12
  429. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +11 -11
  430. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +9 -9
  431. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +9 -9
  432. package/src/transformers/features/http/HttpHeadersTransformer.ts +9 -9
  433. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +9 -9
  434. package/src/transformers/features/http/HttpIsQueryTransformer.ts +9 -9
  435. package/src/transformers/features/http/HttpParameterTransformer.ts +9 -9
  436. package/src/transformers/features/http/HttpQueryTransformer.ts +9 -9
  437. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +10 -10
  438. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +9 -9
  439. package/src/transformers/features/json/JsonApplicationTransformer.ts +121 -121
  440. package/src/transformers/features/json/JsonAssertParseTransformer.ts +9 -9
  441. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  442. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +9 -9
  443. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  444. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  445. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +9 -9
  446. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  447. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +11 -11
  448. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  449. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  450. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +9 -9
  451. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  452. package/src/transformers/features/json/JsonValidateParseTransformer.ts +9 -9
  453. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  454. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +9 -9
  455. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +9 -9
  456. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  457. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +9 -9
  458. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +9 -9
  459. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  460. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  461. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  462. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  463. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +11 -11
  464. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +11 -11
  465. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  466. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  467. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  468. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  469. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +9 -9
  470. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +9 -9
  471. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  472. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  473. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  474. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  475. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +15 -15
  476. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  477. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  478. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +15 -15
  479. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  480. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  481. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  482. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  483. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  484. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  485. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +9 -9
  486. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +9 -9
  487. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  488. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  489. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +9 -9
  490. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +9 -9
  491. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +9 -9
  492. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +9 -9
  493. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  494. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +10 -10
  495. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +10 -10
  496. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +73 -73
  497. package/src/transformers/internal/GenericTransformer.ts +96 -96
  498. package/src/typings/Atomic.ts +13 -13
  499. package/src/typings/ClassProperties.ts +5 -5
  500. package/src/typings/Customizable.ts +5 -5
  501. package/src/typings/ProtobufAtomic.ts +19 -19
  502. package/src/typings/SpecialFields.ts +3 -3
  503. package/src/typings/ValidationPipe.ts +9 -9
  504. package/src/typings/Writable.ts +11 -11
  505. package/src/utils/ArrayUtil.ts +43 -43
  506. package/src/utils/Escaper.ts +46 -46
  507. package/src/utils/MapUtil.ts +12 -12
  508. package/src/utils/NameEncoder.ts +32 -32
  509. package/src/utils/NamingConvention.ts +87 -87
  510. package/src/utils/PatternUtil.ts +29 -29
  511. package/src/utils/RandomGenerator.ts +83 -83
  512. package/src/utils/Singleton.ts +16 -16
  513. package/src/utils/StringUtil.ts +4 -4
@@ -1,72 +1,72 @@
1
- import ts from "typescript";
2
-
3
- import { ProtobufAtomic } from "../typings/ProtobufAtomic";
4
-
5
- import { ExpressionFactory } from "./ExpressionFactory";
6
-
7
- export namespace NumericRangeFactory {
8
- export const number =
9
- (type: ProtobufAtomic.Numeric) =>
10
- (input: ts.Expression): ts.Expression =>
11
- NumberPredicator[type](input);
12
-
13
- export const bigint =
14
- (type: ProtobufAtomic.BigNumeric) =>
15
- (input: ts.Expression): ts.Expression =>
16
- BigIntPredicator[type](input);
17
- }
18
-
19
- namespace NumberPredicator {
20
- export const int32 = (input: ts.Expression) =>
21
- ts.factory.createLogicalAnd(
22
- integer(input),
23
- between("-2147483648", "2147483647")(input),
24
- );
25
- export const uint32 = (input: ts.Expression) =>
26
- ts.factory.createLogicalAnd(
27
- integer(input),
28
- between("0", "4294967295")(input),
29
- );
30
- export const int64 = (input: ts.Expression) =>
31
- ts.factory.createLogicalAnd(
32
- integer(input),
33
- between("-9223372036854775808", "9223372036854775807")(input),
34
- );
35
- export const uint64 = (input: ts.Expression) =>
36
- ts.factory.createLogicalAnd(
37
- integer(input),
38
- between("0", "18446744073709551615")(input),
39
- );
40
- export const float = (input: ts.Expression) =>
41
- between("-1.175494351e38", "3.4028235e38")(input);
42
- export const double = () => ts.factory.createTrue();
43
- }
44
-
45
- namespace BigIntPredicator {
46
- export const int64 = () => ts.factory.createTrue();
47
- export const uint64 = (input: ts.Expression) =>
48
- ts.factory.createLessThanEquals(
49
- ts.factory.createCallExpression(
50
- ts.factory.createIdentifier("BigInt"),
51
- undefined,
52
- [ExpressionFactory.number(0)],
53
- ),
54
- input,
55
- );
56
- }
57
-
58
- const integer = (input: ts.Expression) =>
59
- ts.factory.createStrictEquality(
60
- ts.factory.createCallExpression(
61
- ts.factory.createIdentifier("Math.floor"),
62
- undefined,
63
- [input],
64
- ),
65
- input,
66
- );
67
-
68
- const between = (x: string, y: string) => (input: ts.Expression) =>
69
- ts.factory.createLogicalAnd(
70
- ts.factory.createLessThanEquals(ts.factory.createIdentifier(x), input),
71
- ts.factory.createLessThanEquals(input, ts.factory.createIdentifier(y)),
72
- );
1
+ import ts from "typescript";
2
+
3
+ import { ProtobufAtomic } from "../typings/ProtobufAtomic";
4
+
5
+ import { ExpressionFactory } from "./ExpressionFactory";
6
+
7
+ export namespace NumericRangeFactory {
8
+ export const number =
9
+ (type: ProtobufAtomic.Numeric) =>
10
+ (input: ts.Expression): ts.Expression =>
11
+ NumberPredicator[type](input);
12
+
13
+ export const bigint =
14
+ (type: ProtobufAtomic.BigNumeric) =>
15
+ (input: ts.Expression): ts.Expression =>
16
+ BigIntPredicator[type](input);
17
+ }
18
+
19
+ namespace NumberPredicator {
20
+ export const int32 = (input: ts.Expression) =>
21
+ ts.factory.createLogicalAnd(
22
+ integer(input),
23
+ between("-2147483648", "2147483647")(input),
24
+ );
25
+ export const uint32 = (input: ts.Expression) =>
26
+ ts.factory.createLogicalAnd(
27
+ integer(input),
28
+ between("0", "4294967295")(input),
29
+ );
30
+ export const int64 = (input: ts.Expression) =>
31
+ ts.factory.createLogicalAnd(
32
+ integer(input),
33
+ between("-9223372036854775808", "9223372036854775807")(input),
34
+ );
35
+ export const uint64 = (input: ts.Expression) =>
36
+ ts.factory.createLogicalAnd(
37
+ integer(input),
38
+ between("0", "18446744073709551615")(input),
39
+ );
40
+ export const float = (input: ts.Expression) =>
41
+ between("-1.175494351e38", "3.4028235e38")(input);
42
+ export const double = () => ts.factory.createTrue();
43
+ }
44
+
45
+ namespace BigIntPredicator {
46
+ export const int64 = () => ts.factory.createTrue();
47
+ export const uint64 = (input: ts.Expression) =>
48
+ ts.factory.createLessThanEquals(
49
+ ts.factory.createCallExpression(
50
+ ts.factory.createIdentifier("BigInt"),
51
+ undefined,
52
+ [ExpressionFactory.number(0)],
53
+ ),
54
+ input,
55
+ );
56
+ }
57
+
58
+ const integer = (input: ts.Expression) =>
59
+ ts.factory.createStrictEquality(
60
+ ts.factory.createCallExpression(
61
+ ts.factory.createIdentifier("Math.floor"),
62
+ undefined,
63
+ [input],
64
+ ),
65
+ input,
66
+ );
67
+
68
+ const between = (x: string, y: string) => (input: ts.Expression) =>
69
+ ts.factory.createLogicalAnd(
70
+ ts.factory.createLessThanEquals(ts.factory.createIdentifier(x), input),
71
+ ts.factory.createLessThanEquals(input, ts.factory.createIdentifier(y)),
72
+ );
@@ -1,259 +1,259 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../schemas/metadata/Metadata";
4
- import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
-
6
- import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
-
8
- import { TransformerError } from "../transformers/TransformerError";
9
-
10
- import { ValidationPipe } from "../typings/ValidationPipe";
11
-
12
- import { Escaper } from "../utils/Escaper";
13
-
14
- import { MetadataCollection } from "./MetadataCollection";
15
- import { MetadataFactory } from "./MetadataFactory";
16
-
17
- export namespace ProtobufFactory {
18
- export const metadata =
19
- (method: string) =>
20
- (checker: ts.TypeChecker, context?: ts.TransformationContext) =>
21
- (collection: MetadataCollection) =>
22
- (type: ts.Type): Metadata => {
23
- // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
24
- const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
- MetadataFactory.analyze(
26
- checker,
27
- context,
28
- )({
29
- escape: false,
30
- constant: true,
31
- absorb: true,
32
- validate,
33
- })(collection)(type);
34
- if (result.success === false)
35
- throw TransformerError.from(`typia.protobuf.${method}`)(result.errors);
36
- return result.data;
37
- };
38
-
39
- const validate = (
40
- meta: Metadata,
41
- explore: MetadataFactory.IExplore,
42
- ): string[] => {
43
- const errors: string[] = [];
44
- const insert = (msg: string) => errors.push(msg);
45
-
46
- if (explore.top === true) {
47
- const onlyObject: boolean =
48
- meta.size() === 1 &&
49
- meta.objects.length === 1 &&
50
- meta.objects[0]!.properties.every((p) => p.key.isSoleLiteral()) &&
51
- meta.isRequired() === true &&
52
- meta.nullable === false;
53
- if (onlyObject === false)
54
- insert("target type must be a sole and static object type");
55
- }
56
-
57
- //----
58
- // NOT SUPPORTED TYPES
59
- //----
60
- const noSupport = (msg: string) => insert(`does not support ${msg}`);
61
-
62
- // PROHIBIT ANY TYPE
63
- if (meta.any) noSupport("any type");
64
- // PROHIBIT FUNCTIONAL TYPE
65
- if (meta.functional) noSupport("functional type");
66
- // PROHIBIT TUPLE TYPE
67
- if (meta.tuples.length) noSupport("tuple type");
68
- // PROHIBIT SET TYPE
69
- if (meta.sets.length) noSupport("Set type");
70
- // NATIVE TYPE, BUT NOT Uint8Array
71
- if (meta.natives.length)
72
- for (const native of meta.natives) {
73
- if (native === "Uint8Array") continue;
74
-
75
- const instead = BANNED_NATIVE_TYPES.get(native);
76
- if (instead === undefined) noSupport(`${native} type`);
77
- else noSupport(`${native} type. Use ${instead} type instead.`);
78
- }
79
- //----
80
- // ATOMIC CASES
81
- //----
82
- if (meta.atomics.length) {
83
- const numbers = ProtobufUtil.getNumbers(meta);
84
- const bigints = ProtobufUtil.getBigints(meta);
85
-
86
- for (const type of ["int64", "uint64"])
87
- if (numbers.some((n) => n === type) && bigints.some((b) => b === type))
88
- insert(
89
- `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
90
- );
91
- }
92
- //----
93
- // ARRRAY CASES
94
- //----
95
- // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
96
- if (
97
- meta.arrays.length &&
98
- meta.arrays.some((array) => !!array.type.value.arrays.length)
99
- )
100
- noSupport("over two dimenstional array type");
101
- // CHILD OF ARRAY TYPE MUST BE REQUIRED
102
- if (
103
- meta.arrays.length &&
104
- meta.arrays.some(
105
- (array) =>
106
- array.type.value.isRequired() === false ||
107
- array.type.value.nullable === true,
108
- )
109
- )
110
- noSupport("optional type in array");
111
- // UNION IN ARRAY
112
- if (meta.arrays.length && meta.arrays.some((a) => a.type.value.size() > 1))
113
- noSupport("union type in array");
114
- // DO DYNAMIC OBJECT IN ARRAY
115
- if (
116
- meta.arrays.length &&
117
- meta.arrays.some(
118
- (a) =>
119
- a.type.value.maps.length ||
120
- (a.type.value.objects.length &&
121
- a.type.value.objects.some(
122
- (o) => ProtobufUtil.isStaticObject(o) === false,
123
- )),
124
- )
125
- )
126
- noSupport("dynamic object in array");
127
- // UNION WITH ARRAY
128
- if (meta.size() > 1 && meta.arrays.length)
129
- noSupport("union type with array type");
130
- //----
131
- // OBJECT CASES
132
- //----
133
- // EMPTY PROPERTY
134
- if (
135
- meta.objects.length &&
136
- meta.objects.some((obj) => obj.properties.length === 0)
137
- )
138
- noSupport("empty object type");
139
- // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
140
- if (
141
- meta.objects.length &&
142
- meta.objects.some(
143
- (obj) =>
144
- obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
145
- )
146
- )
147
- noSupport(
148
- "object type with multiple dynamic key typed properties. Keep only one.",
149
- );
150
- // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
151
- if (
152
- meta.objects.length &&
153
- meta.objects.some(
154
- (obj) =>
155
- obj.properties.some((p) => p.key.isSoleLiteral()) &&
156
- obj.properties.some((p) => !p.key.isSoleLiteral()),
157
- )
158
- )
159
- noSupport(
160
- "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
161
- );
162
- // STATIC PROPERTY, BUT INVALID KEY NAME
163
- if (
164
- meta.objects.length &&
165
- meta.objects.some((obj) =>
166
- obj.properties.some(
167
- (p) =>
168
- p.key.isSoleLiteral() === true &&
169
- Escaper.variable(p.key.getSoleLiteral()!) === false,
170
- ),
171
- )
172
- )
173
- noSupport(`object type with invalid static key name.`);
174
- // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
175
- if (
176
- meta.objects.length &&
177
- isDynamicObject(meta.objects[0]!) &&
178
- meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
179
- )
180
- noSupport("dynamic object with array value type");
181
- // UNION WITH DYNAMIC OBJECT
182
- if (
183
- meta.size() > 1 &&
184
- meta.objects.length &&
185
- isDynamicObject(meta.objects[0]!)
186
- )
187
- noSupport("union type with dynamic object type");
188
- // UNION IN DYNAMIC PROPERTY VALUE
189
- if (
190
- meta.objects.length &&
191
- meta.objects.some(
192
- (obj) =>
193
- isDynamicObject(obj) &&
194
- obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
195
- )
196
- )
197
- noSupport("union type in dynamic property");
198
- //----
199
- // MAP CASES
200
- //----
201
- // KEY TYPE IS UNION
202
- if (meta.maps.length && meta.maps.some((m) => ProtobufUtil.isUnion(m.key)))
203
- noSupport("union key typed map");
204
- // KEY TYPE IS NOT ATOMIC
205
- if (
206
- meta.maps.length &&
207
- meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
208
- )
209
- noSupport("non-atomic key typed map");
210
- // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
211
- if (
212
- meta.maps.length &&
213
- meta.maps.some((m) => m.key.isRequired() === false || m.key.nullable)
214
- )
215
- noSupport("optional key typed map");
216
- // MAP TYPE, BUT VALUE TYPE IS ARRAY
217
- if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
218
- noSupport("map type with array value type");
219
- // UNION WITH MAP
220
- if (meta.size() > 1 && meta.maps.length)
221
- noSupport("union type with map type");
222
- // UNION IN MAP
223
- if (
224
- meta.maps.length &&
225
- meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
226
- )
227
- noSupport("union type in map value type");
228
- return errors;
229
- };
230
- }
231
-
232
- const isDynamicObject = (obj: MetadataObject): boolean =>
233
- obj.properties[0]!.key.isSoleLiteral() === false;
234
-
235
- const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
236
- ["Date", "string"],
237
- ["Boolean", "boolean"],
238
- ["BigInt", "bigint"],
239
- ["Number", "number"],
240
- ["String", "string"],
241
- ...[
242
- "Buffer",
243
- "Uint8ClampedArray",
244
- "Uint16Array",
245
- "Uint32Array",
246
- "BigUint64Array",
247
- "Int8Array",
248
- "Int16Array",
249
- "Int32Array",
250
- "BigInt64Array",
251
- "Float32Array",
252
- "Float64Array",
253
- "DataView",
254
- "ArrayBuffer",
255
- "SharedArrayBuffer",
256
- ].map((name) => [name, "Uint8Array"] as const),
257
- ["WeakSet", "Array"],
258
- ["WeakMap", "Map"],
259
- ]);
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../schemas/metadata/Metadata";
4
+ import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
+
6
+ import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
+
8
+ import { TransformerError } from "../transformers/TransformerError";
9
+
10
+ import { ValidationPipe } from "../typings/ValidationPipe";
11
+
12
+ import { Escaper } from "../utils/Escaper";
13
+
14
+ import { MetadataCollection } from "./MetadataCollection";
15
+ import { MetadataFactory } from "./MetadataFactory";
16
+
17
+ export namespace ProtobufFactory {
18
+ export const metadata =
19
+ (method: string) =>
20
+ (checker: ts.TypeChecker, context?: ts.TransformationContext) =>
21
+ (collection: MetadataCollection) =>
22
+ (type: ts.Type): Metadata => {
23
+ // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
24
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
+ MetadataFactory.analyze(
26
+ checker,
27
+ context,
28
+ )({
29
+ escape: false,
30
+ constant: true,
31
+ absorb: true,
32
+ validate,
33
+ })(collection)(type);
34
+ if (result.success === false)
35
+ throw TransformerError.from(`typia.protobuf.${method}`)(result.errors);
36
+ return result.data;
37
+ };
38
+
39
+ const validate = (
40
+ meta: Metadata,
41
+ explore: MetadataFactory.IExplore,
42
+ ): string[] => {
43
+ const errors: string[] = [];
44
+ const insert = (msg: string) => errors.push(msg);
45
+
46
+ if (explore.top === true) {
47
+ const onlyObject: boolean =
48
+ meta.size() === 1 &&
49
+ meta.objects.length === 1 &&
50
+ meta.objects[0]!.properties.every((p) => p.key.isSoleLiteral()) &&
51
+ meta.isRequired() === true &&
52
+ meta.nullable === false;
53
+ if (onlyObject === false)
54
+ insert("target type must be a sole and static object type");
55
+ }
56
+
57
+ //----
58
+ // NOT SUPPORTED TYPES
59
+ //----
60
+ const noSupport = (msg: string) => insert(`does not support ${msg}`);
61
+
62
+ // PROHIBIT ANY TYPE
63
+ if (meta.any) noSupport("any type");
64
+ // PROHIBIT FUNCTIONAL TYPE
65
+ if (meta.functional) noSupport("functional type");
66
+ // PROHIBIT TUPLE TYPE
67
+ if (meta.tuples.length) noSupport("tuple type");
68
+ // PROHIBIT SET TYPE
69
+ if (meta.sets.length) noSupport("Set type");
70
+ // NATIVE TYPE, BUT NOT Uint8Array
71
+ if (meta.natives.length)
72
+ for (const native of meta.natives) {
73
+ if (native === "Uint8Array") continue;
74
+
75
+ const instead = BANNED_NATIVE_TYPES.get(native);
76
+ if (instead === undefined) noSupport(`${native} type`);
77
+ else noSupport(`${native} type. Use ${instead} type instead.`);
78
+ }
79
+ //----
80
+ // ATOMIC CASES
81
+ //----
82
+ if (meta.atomics.length) {
83
+ const numbers = ProtobufUtil.getNumbers(meta);
84
+ const bigints = ProtobufUtil.getBigints(meta);
85
+
86
+ for (const type of ["int64", "uint64"])
87
+ if (numbers.some((n) => n === type) && bigints.some((b) => b === type))
88
+ insert(
89
+ `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
90
+ );
91
+ }
92
+ //----
93
+ // ARRRAY CASES
94
+ //----
95
+ // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
96
+ if (
97
+ meta.arrays.length &&
98
+ meta.arrays.some((array) => !!array.type.value.arrays.length)
99
+ )
100
+ noSupport("over two dimenstional array type");
101
+ // CHILD OF ARRAY TYPE MUST BE REQUIRED
102
+ if (
103
+ meta.arrays.length &&
104
+ meta.arrays.some(
105
+ (array) =>
106
+ array.type.value.isRequired() === false ||
107
+ array.type.value.nullable === true,
108
+ )
109
+ )
110
+ noSupport("optional type in array");
111
+ // UNION IN ARRAY
112
+ if (meta.arrays.length && meta.arrays.some((a) => a.type.value.size() > 1))
113
+ noSupport("union type in array");
114
+ // DO DYNAMIC OBJECT IN ARRAY
115
+ if (
116
+ meta.arrays.length &&
117
+ meta.arrays.some(
118
+ (a) =>
119
+ a.type.value.maps.length ||
120
+ (a.type.value.objects.length &&
121
+ a.type.value.objects.some(
122
+ (o) => ProtobufUtil.isStaticObject(o) === false,
123
+ )),
124
+ )
125
+ )
126
+ noSupport("dynamic object in array");
127
+ // UNION WITH ARRAY
128
+ if (meta.size() > 1 && meta.arrays.length)
129
+ noSupport("union type with array type");
130
+ //----
131
+ // OBJECT CASES
132
+ //----
133
+ // EMPTY PROPERTY
134
+ if (
135
+ meta.objects.length &&
136
+ meta.objects.some((obj) => obj.properties.length === 0)
137
+ )
138
+ noSupport("empty object type");
139
+ // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
140
+ if (
141
+ meta.objects.length &&
142
+ meta.objects.some(
143
+ (obj) =>
144
+ obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
145
+ )
146
+ )
147
+ noSupport(
148
+ "object type with multiple dynamic key typed properties. Keep only one.",
149
+ );
150
+ // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
151
+ if (
152
+ meta.objects.length &&
153
+ meta.objects.some(
154
+ (obj) =>
155
+ obj.properties.some((p) => p.key.isSoleLiteral()) &&
156
+ obj.properties.some((p) => !p.key.isSoleLiteral()),
157
+ )
158
+ )
159
+ noSupport(
160
+ "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
161
+ );
162
+ // STATIC PROPERTY, BUT INVALID KEY NAME
163
+ if (
164
+ meta.objects.length &&
165
+ meta.objects.some((obj) =>
166
+ obj.properties.some(
167
+ (p) =>
168
+ p.key.isSoleLiteral() === true &&
169
+ Escaper.variable(p.key.getSoleLiteral()!) === false,
170
+ ),
171
+ )
172
+ )
173
+ noSupport(`object type with invalid static key name.`);
174
+ // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
175
+ if (
176
+ meta.objects.length &&
177
+ isDynamicObject(meta.objects[0]!) &&
178
+ meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
179
+ )
180
+ noSupport("dynamic object with array value type");
181
+ // UNION WITH DYNAMIC OBJECT
182
+ if (
183
+ meta.size() > 1 &&
184
+ meta.objects.length &&
185
+ isDynamicObject(meta.objects[0]!)
186
+ )
187
+ noSupport("union type with dynamic object type");
188
+ // UNION IN DYNAMIC PROPERTY VALUE
189
+ if (
190
+ meta.objects.length &&
191
+ meta.objects.some(
192
+ (obj) =>
193
+ isDynamicObject(obj) &&
194
+ obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
195
+ )
196
+ )
197
+ noSupport("union type in dynamic property");
198
+ //----
199
+ // MAP CASES
200
+ //----
201
+ // KEY TYPE IS UNION
202
+ if (meta.maps.length && meta.maps.some((m) => ProtobufUtil.isUnion(m.key)))
203
+ noSupport("union key typed map");
204
+ // KEY TYPE IS NOT ATOMIC
205
+ if (
206
+ meta.maps.length &&
207
+ meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
208
+ )
209
+ noSupport("non-atomic key typed map");
210
+ // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
211
+ if (
212
+ meta.maps.length &&
213
+ meta.maps.some((m) => m.key.isRequired() === false || m.key.nullable)
214
+ )
215
+ noSupport("optional key typed map");
216
+ // MAP TYPE, BUT VALUE TYPE IS ARRAY
217
+ if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
218
+ noSupport("map type with array value type");
219
+ // UNION WITH MAP
220
+ if (meta.size() > 1 && meta.maps.length)
221
+ noSupport("union type with map type");
222
+ // UNION IN MAP
223
+ if (
224
+ meta.maps.length &&
225
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
226
+ )
227
+ noSupport("union type in map value type");
228
+ return errors;
229
+ };
230
+ }
231
+
232
+ const isDynamicObject = (obj: MetadataObject): boolean =>
233
+ obj.properties[0]!.key.isSoleLiteral() === false;
234
+
235
+ const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
236
+ ["Date", "string"],
237
+ ["Boolean", "boolean"],
238
+ ["BigInt", "bigint"],
239
+ ["Number", "number"],
240
+ ["String", "string"],
241
+ ...[
242
+ "Buffer",
243
+ "Uint8ClampedArray",
244
+ "Uint16Array",
245
+ "Uint32Array",
246
+ "BigUint64Array",
247
+ "Int8Array",
248
+ "Int16Array",
249
+ "Int32Array",
250
+ "BigInt64Array",
251
+ "Float32Array",
252
+ "Float64Array",
253
+ "DataView",
254
+ "ArrayBuffer",
255
+ "SharedArrayBuffer",
256
+ ].map((name) => [name, "Uint8Array"] as const),
257
+ ["WeakSet", "Array"],
258
+ ["WeakMap", "Map"],
259
+ ]);