typia 5.3.12-dev.20240121 → 5.3.12-dev.20240122

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 (360) hide show
  1. package/package.json +1 -1
  2. package/src/AssertionGuard.ts +1 -1
  3. package/src/CamelCase.ts +114 -114
  4. package/src/IRandomGenerator.ts +35 -35
  5. package/src/IValidation.ts +21 -21
  6. package/src/PascalCase.ts +114 -114
  7. package/src/Primitive.ts +135 -135
  8. package/src/Resolved.ts +116 -116
  9. package/src/SnakeCase.ts +156 -156
  10. package/src/TypeGuardError.ts +36 -36
  11. package/src/executable/TypiaGenerateWizard.ts +83 -83
  12. package/src/executable/TypiaPatchWizard.ts +42 -42
  13. package/src/executable/TypiaSetupWizard.ts +151 -151
  14. package/src/executable/setup/ArgumentParser.ts +43 -43
  15. package/src/executable/setup/CommandExecutor.ts +8 -8
  16. package/src/executable/setup/FileRetriever.ts +22 -22
  17. package/src/executable/setup/PackageManager.ts +71 -71
  18. package/src/executable/setup/PluginConfigurator.ts +69 -69
  19. package/src/executable/typia.ts +55 -55
  20. package/src/factories/CommentFactory.ts +79 -79
  21. package/src/factories/ExpressionFactory.ts +150 -150
  22. package/src/factories/IdentifierFactory.ts +70 -70
  23. package/src/factories/JsonMetadataFactory.ts +53 -53
  24. package/src/factories/LiteralFactory.ts +47 -47
  25. package/src/factories/MetadataCollection.ts +260 -260
  26. package/src/factories/MetadataCommentTagFactory.ts +601 -601
  27. package/src/factories/MetadataFactory.ts +267 -267
  28. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  29. package/src/factories/NumericRangeFactory.ts +72 -72
  30. package/src/factories/ProtobufFactory.ts +259 -259
  31. package/src/factories/StatementFactory.ts +72 -72
  32. package/src/factories/TemplateFactory.ts +56 -56
  33. package/src/factories/TypeFactory.ts +118 -118
  34. package/src/factories/ValueFactory.ts +12 -12
  35. package/src/factories/internal/metadata/MetadataHelper.ts +15 -15
  36. package/src/factories/internal/metadata/emend_metadata_atomics.ts +37 -37
  37. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  38. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +38 -38
  39. package/src/factories/internal/metadata/emplace_metadata_object.ts +175 -175
  40. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  41. package/src/factories/internal/metadata/explore_metadata.ts +28 -28
  42. package/src/factories/internal/metadata/iterate_metadata.ts +94 -94
  43. package/src/factories/internal/metadata/iterate_metadata_alias.ts +34 -34
  44. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  45. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  46. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  47. package/src/factories/internal/metadata/iterate_metadata_collection.ts +131 -131
  48. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  49. package/src/factories/internal/metadata/iterate_metadata_constant.ts +48 -48
  50. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +230 -230
  51. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  52. package/src/factories/internal/metadata/iterate_metadata_native.ts +208 -208
  53. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  54. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  55. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  56. package/src/factories/internal/metadata/iterate_metadata_sort.ts +61 -61
  57. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  58. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  59. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  60. package/src/functional/$HeadersReader/$HeadersReader.ts +26 -26
  61. package/src/functional/$HeadersReader/index.ts +1 -1
  62. package/src/functional/$ParameterReader/$ParameterReader.ts +29 -29
  63. package/src/functional/$ParameterReader/index.ts +1 -1
  64. package/src/functional/$ProtobufReader.ts +195 -195
  65. package/src/functional/$ProtobufSizer.ts +147 -147
  66. package/src/functional/$ProtobufWriter.ts +150 -150
  67. package/src/functional/$QueryReader/$QueryReader.ts +46 -46
  68. package/src/functional/$QueryReader/index.ts +1 -1
  69. package/src/functional/$any.ts +4 -4
  70. package/src/functional/$clone.ts +4 -4
  71. package/src/functional/$convention.ts +37 -37
  72. package/src/functional/$dictionary.ts +22 -22
  73. package/src/functional/$every.ts +11 -11
  74. package/src/functional/$guard.ts +35 -35
  75. package/src/functional/$is_between.ts +2 -2
  76. package/src/functional/$join.ts +46 -46
  77. package/src/functional/$number.ts +12 -12
  78. package/src/functional/$report.ts +13 -13
  79. package/src/functional/$rest.ts +3 -3
  80. package/src/functional/$stoll.ts +8 -8
  81. package/src/functional/$string.ts +50 -50
  82. package/src/functional/$strlen.ts +7 -7
  83. package/src/functional/$tail.ts +5 -5
  84. package/src/functional/$throws.ts +10 -10
  85. package/src/functional/$varint.ts +130 -130
  86. package/src/functional/$zigzag.ts +39 -39
  87. package/src/functional/IProtobufWriter.ts +18 -18
  88. package/src/functional/Namespace/http.ts +7 -7
  89. package/src/functional/Namespace/index.ts +75 -75
  90. package/src/functional/Namespace/json.ts +15 -15
  91. package/src/functional/Namespace/misc.ts +14 -14
  92. package/src/functional/Namespace/notations.ts +23 -23
  93. package/src/functional/Namespace/protobuf.ts +20 -20
  94. package/src/functional/is.ts +10 -10
  95. package/src/http.ts +1267 -1267
  96. package/src/index.ts +4 -4
  97. package/src/notations.ts +977 -977
  98. package/src/programmers/AssertProgrammer.ts +293 -293
  99. package/src/programmers/CheckerProgrammer.ts +1025 -1025
  100. package/src/programmers/FeatureProgrammer.ts +460 -460
  101. package/src/programmers/IsProgrammer.ts +232 -232
  102. package/src/programmers/RandomProgrammer.ts +825 -825
  103. package/src/programmers/TypiaProgrammer.ts +167 -167
  104. package/src/programmers/ValidateProgrammer.ts +307 -307
  105. package/src/programmers/helpers/AtomicPredicator.ts +25 -25
  106. package/src/programmers/helpers/CloneJoiner.ts +130 -130
  107. package/src/programmers/helpers/FunctionImporeter.ts +87 -87
  108. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  109. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  110. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  111. package/src/programmers/helpers/NotationJoiner.ts +132 -132
  112. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  113. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  114. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  115. package/src/programmers/helpers/PruneJoiner.ts +141 -141
  116. package/src/programmers/helpers/RandomJoiner.ts +140 -140
  117. package/src/programmers/helpers/RandomRanger.ts +171 -171
  118. package/src/programmers/helpers/StringifyJoinder.ts +105 -105
  119. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  120. package/src/programmers/helpers/UnionExplorer.ts +269 -269
  121. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  122. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  123. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +77 -77
  124. package/src/programmers/http/HttpAssertQueryProgrammer.ts +75 -75
  125. package/src/programmers/http/HttpHeadersProgrammer.ts +314 -314
  126. package/src/programmers/http/HttpIsHeadersProgrammer.ts +84 -84
  127. package/src/programmers/http/HttpIsQueryProgrammer.ts +82 -82
  128. package/src/programmers/http/HttpParameterProgrammer.ts +97 -97
  129. package/src/programmers/http/HttpQueryProgrammer.ts +252 -252
  130. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +77 -77
  131. package/src/programmers/http/HttpValidateQueryProgrammer.ts +75 -75
  132. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  133. package/src/programmers/internal/application_alias.ts +74 -74
  134. package/src/programmers/internal/application_array.ts +59 -59
  135. package/src/programmers/internal/application_boolean.ts +35 -35
  136. package/src/programmers/internal/application_constant.ts +25 -25
  137. package/src/programmers/internal/application_default.ts +17 -17
  138. package/src/programmers/internal/application_default_string.ts +33 -33
  139. package/src/programmers/internal/application_escaped.ts +52 -52
  140. package/src/programmers/internal/application_native.ts +34 -34
  141. package/src/programmers/internal/application_number.ts +97 -97
  142. package/src/programmers/internal/application_object.ts +183 -183
  143. package/src/programmers/internal/application_schema.ts +165 -165
  144. package/src/programmers/internal/application_string.ts +61 -61
  145. package/src/programmers/internal/application_templates.ts +24 -24
  146. package/src/programmers/internal/application_tuple.ts +54 -54
  147. package/src/programmers/internal/check_array_length.ts +45 -45
  148. package/src/programmers/internal/check_bigint.ts +49 -49
  149. package/src/programmers/internal/check_dynamic_key.ts +175 -175
  150. package/src/programmers/internal/check_dynamic_properties.ts +198 -198
  151. package/src/programmers/internal/check_everything.ts +23 -23
  152. package/src/programmers/internal/check_native.ts +21 -21
  153. package/src/programmers/internal/check_number.ts +106 -106
  154. package/src/programmers/internal/check_object.ts +60 -60
  155. package/src/programmers/internal/check_string.ts +48 -48
  156. package/src/programmers/internal/check_template.ts +61 -61
  157. package/src/programmers/internal/check_union_array_like.ts +307 -307
  158. package/src/programmers/internal/decode_union_object.ts +78 -78
  159. package/src/programmers/internal/feature_object_entries.ts +58 -58
  160. package/src/programmers/internal/metadata_to_pattern.ts +33 -33
  161. package/src/programmers/internal/prune_object_properties.ts +60 -60
  162. package/src/programmers/internal/random_custom.ts +37 -37
  163. package/src/programmers/internal/stringify_dynamic_properties.ts +157 -157
  164. package/src/programmers/internal/stringify_native.ts +7 -7
  165. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  166. package/src/programmers/internal/template_to_pattern.ts +15 -15
  167. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  168. package/src/programmers/json/JsonApplicationProgrammer.ts +49 -49
  169. package/src/programmers/json/JsonAssertParseProgrammer.ts +67 -67
  170. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +61 -61
  171. package/src/programmers/json/JsonIsParseProgrammer.ts +73 -73
  172. package/src/programmers/json/JsonIsStringifyProgrammer.ts +75 -75
  173. package/src/programmers/json/JsonStringifyProgrammer.ts +893 -893
  174. package/src/programmers/json/JsonValidateParseProgrammer.ts +64 -64
  175. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +83 -83
  176. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +63 -63
  177. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +60 -60
  178. package/src/programmers/misc/MiscCloneProgrammer.ts +713 -713
  179. package/src/programmers/misc/MiscIsCloneProgrammer.ts +70 -70
  180. package/src/programmers/misc/MiscIsPruneProgrammer.ts +66 -66
  181. package/src/programmers/misc/MiscLiteralsProgrammer.ts +72 -72
  182. package/src/programmers/misc/MiscPruneProgrammer.ts +523 -523
  183. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +80 -80
  184. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +73 -73
  185. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +64 -64
  186. package/src/programmers/notations/NotationGeneralProgrammer.ts +647 -647
  187. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +71 -71
  188. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +81 -81
  189. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  190. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +61 -61
  191. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +607 -607
  192. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +819 -819
  193. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +82 -82
  194. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +75 -75
  195. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +160 -160
  196. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  197. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +83 -83
  198. package/src/protobuf.ts +970 -970
  199. package/src/reflect.ts +57 -57
  200. package/src/schemas/json/IJsonApplication.ts +9 -9
  201. package/src/schemas/json/IJsonComponents.ts +19 -19
  202. package/src/schemas/json/IJsonSchema.ts +122 -122
  203. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  204. package/src/schemas/metadata/IMetadata.ts +34 -34
  205. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  206. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  207. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  208. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  209. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  210. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  211. package/src/schemas/metadata/IMetadataConstant.ts +23 -23
  212. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  213. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  214. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  215. package/src/schemas/metadata/IMetadataObject.ts +13 -13
  216. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  217. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  218. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  219. package/src/schemas/metadata/IMetadataTypeTag.ts +15 -15
  220. package/src/schemas/metadata/Metadata.ts +612 -612
  221. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  222. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  223. package/src/schemas/metadata/MetadataArray.ts +49 -49
  224. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  225. package/src/schemas/metadata/MetadataAtomic.ts +84 -84
  226. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  227. package/src/schemas/metadata/MetadataConstant.ts +46 -46
  228. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  229. package/src/schemas/metadata/MetadataObject.ts +154 -154
  230. package/src/schemas/metadata/MetadataProperty.ts +56 -56
  231. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  232. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  233. package/src/tags/Default.ts +15 -15
  234. package/src/tags/ExclusiveMaximum.ts +13 -13
  235. package/src/tags/ExclusiveMinimum.ts +13 -13
  236. package/src/tags/Format.ts +30 -30
  237. package/src/tags/MaxItems.ts +9 -9
  238. package/src/tags/MaxLength.ts +9 -9
  239. package/src/tags/Maximum.ts +13 -13
  240. package/src/tags/MinItems.ts +9 -9
  241. package/src/tags/MinLength.ts +9 -9
  242. package/src/tags/Minimum.ts +13 -13
  243. package/src/tags/MultipleOf.ts +15 -15
  244. package/src/tags/Pattern.ts +9 -9
  245. package/src/tags/TagBase.ts +68 -68
  246. package/src/tags/Type.ts +27 -27
  247. package/src/tags/index.ts +14 -14
  248. package/src/transform.ts +35 -35
  249. package/src/transformers/CallExpressionTransformer.ts +351 -351
  250. package/src/transformers/FileTransformer.ts +91 -91
  251. package/src/transformers/IProject.ts +15 -15
  252. package/src/transformers/ITransformOptions.ts +62 -62
  253. package/src/transformers/ImportTransformer.ts +66 -66
  254. package/src/transformers/NodeTransformer.ts +13 -13
  255. package/src/transformers/TransformerError.ts +55 -55
  256. package/src/transformers/features/AssertTransformer.ts +16 -16
  257. package/src/transformers/features/CreateAssertTransformer.ts +16 -16
  258. package/src/transformers/features/CreateIsTransformer.ts +10 -10
  259. package/src/transformers/features/CreateRandomTransformer.ts +40 -40
  260. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  261. package/src/transformers/features/IsTransformer.ts +10 -10
  262. package/src/transformers/features/RandomTransformer.ts +44 -44
  263. package/src/transformers/features/ValidateTransformer.ts +11 -11
  264. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +11 -11
  265. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +9 -9
  266. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +9 -9
  267. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +9 -9
  268. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +9 -9
  269. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +9 -9
  270. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +9 -9
  271. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +12 -12
  272. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +11 -11
  273. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +9 -9
  274. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +9 -9
  275. package/src/transformers/features/http/HttpHeadersTransformer.ts +9 -9
  276. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +9 -9
  277. package/src/transformers/features/http/HttpIsQueryTransformer.ts +9 -9
  278. package/src/transformers/features/http/HttpParameterTransformer.ts +9 -9
  279. package/src/transformers/features/http/HttpQueryTransformer.ts +9 -9
  280. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +10 -10
  281. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +9 -9
  282. package/src/transformers/features/json/JsonApplicationTransformer.ts +134 -134
  283. package/src/transformers/features/json/JsonAssertParseTransformer.ts +9 -9
  284. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  285. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +9 -9
  286. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  287. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  288. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +9 -9
  289. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  290. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +11 -11
  291. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  292. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  293. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +9 -9
  294. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  295. package/src/transformers/features/json/JsonValidateParseTransformer.ts +9 -9
  296. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  297. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +9 -9
  298. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +9 -9
  299. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  300. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +9 -9
  301. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +9 -9
  302. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  303. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  304. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  305. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  306. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +11 -11
  307. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +11 -11
  308. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  309. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  310. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  311. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  312. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +9 -9
  313. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +9 -9
  314. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  315. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  316. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  317. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  318. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +15 -15
  319. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  320. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  321. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +15 -15
  322. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  323. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  324. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  325. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  326. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  327. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  328. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +9 -9
  329. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +9 -9
  330. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  331. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  332. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +9 -9
  333. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +9 -9
  334. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +9 -9
  335. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +9 -9
  336. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  337. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +10 -10
  338. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +10 -10
  339. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +63 -63
  340. package/src/transformers/internal/GenericTransformer.ts +96 -96
  341. package/src/typings/Atomic.ts +13 -13
  342. package/src/typings/ClassProperties.ts +5 -5
  343. package/src/typings/Customizable.ts +5 -5
  344. package/src/typings/OmitNever.ts +3 -3
  345. package/src/typings/ProtobufAtomic.ts +19 -19
  346. package/src/typings/SpecialFields.ts +3 -3
  347. package/src/typings/ValidationPipe.ts +9 -9
  348. package/src/typings/Writable.ts +11 -11
  349. package/src/utils/ArrayUtil.ts +43 -43
  350. package/src/utils/Escaper.ts +46 -46
  351. package/src/utils/MapUtil.ts +12 -12
  352. package/src/utils/NameEncoder.ts +32 -32
  353. package/src/utils/NamingConvention/NamingConvention.ts +77 -77
  354. package/src/utils/NamingConvention/index.ts +1 -1
  355. package/src/utils/PatternUtil.ts +29 -29
  356. package/src/utils/RandomGenerator/RandomGenerator.ts +74 -74
  357. package/src/utils/RandomGenerator/index.ts +1 -1
  358. package/src/utils/Singleton.ts +16 -16
  359. package/src/utils/StringUtil/StringUtil.ts +2 -2
  360. package/src/utils/StringUtil/index.ts +1 -1
@@ -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
+ ]);