typia 5.5.7 → 5.5.8

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 (440) hide show
  1. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  2. package/lib/factories/TypeFactory.js.map +1 -1
  3. package/lib/factories/internal/metadata/iterate_metadata.js +1 -1
  4. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  5. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  6. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  7. package/lib/functional/$FormDataReader/$FormDataReader.js.map +1 -1
  8. package/lib/functional/$HeadersReader/$HeadersReader.js.map +1 -1
  9. package/lib/functional/$ParameterReader/$ParameterReader.js.map +1 -1
  10. package/lib/functional/$ProtobufSizer.js.map +1 -1
  11. package/lib/functional/$QueryReader/$QueryReader.js.map +1 -1
  12. package/lib/programmers/AssertProgrammer.js +3 -1
  13. package/lib/programmers/AssertProgrammer.js.map +1 -1
  14. package/lib/programmers/CheckerProgrammer.js +1 -1
  15. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  16. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  17. package/lib/programmers/RandomProgrammer.js.map +1 -1
  18. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  19. package/lib/programmers/ValidateProgrammer.js +3 -1
  20. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  21. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js +1 -1
  22. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js.map +1 -1
  23. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js +1 -1
  24. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js.map +1 -1
  25. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  26. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  27. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  28. package/lib/programmers/internal/application_constant.js.map +1 -1
  29. package/lib/programmers/internal/application_escaped.js.map +1 -1
  30. package/lib/programmers/internal/application_object.js +3 -1
  31. package/lib/programmers/internal/application_object.js.map +1 -1
  32. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  33. package/lib/programmers/internal/check_number.js +2 -1
  34. package/lib/programmers/internal/check_number.js.map +1 -1
  35. package/lib/programmers/internal/check_object.js.map +1 -1
  36. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  37. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  38. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  39. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  40. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  41. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -2
  42. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  43. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  44. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  45. package/lib/transformers/features/AssertTransformer.js.map +1 -1
  46. package/lib/transformers/features/CreateAssertTransformer.js.map +1 -1
  47. package/lib/transformers/features/functional/FunctionalGenericTransformer.js +1 -1
  48. package/lib/transformers/features/functional/FunctionalGenericTransformer.js.map +1 -1
  49. package/package.json +2 -2
  50. package/src/AssertionGuard.ts +1 -1
  51. package/src/CamelCase.ts +65 -62
  52. package/src/IRandomGenerator.ts +62 -62
  53. package/src/IValidation.ts +21 -21
  54. package/src/PascalCase.ts +65 -62
  55. package/src/Primitive.ts +48 -47
  56. package/src/Resolved.ts +61 -60
  57. package/src/SnakeCase.ts +67 -64
  58. package/src/TypeGuardError.ts +36 -36
  59. package/src/executable/TypiaGenerateWizard.ts +83 -83
  60. package/src/executable/TypiaPatchWizard.ts +42 -42
  61. package/src/executable/TypiaSetupWizard.ts +4 -4
  62. package/src/executable/setup/ArgumentParser.ts +43 -43
  63. package/src/executable/setup/CommandExecutor.ts +8 -8
  64. package/src/executable/setup/FileRetriever.ts +22 -22
  65. package/src/executable/setup/PackageManager.ts +71 -71
  66. package/src/executable/setup/PluginConfigurator.ts +69 -69
  67. package/src/executable/typia.ts +55 -55
  68. package/src/factories/CommentFactory.ts +79 -79
  69. package/src/factories/ExpressionFactory.ts +150 -150
  70. package/src/factories/IdentifierFactory.ts +70 -70
  71. package/src/factories/JsonMetadataFactory.ts +53 -53
  72. package/src/factories/LiteralFactory.ts +47 -47
  73. package/src/factories/MetadataCollection.ts +260 -260
  74. package/src/factories/MetadataCommentTagFactory.ts +516 -516
  75. package/src/factories/MetadataFactory.ts +267 -267
  76. package/src/factories/MetadataTypeTagFactory.ts +332 -332
  77. package/src/factories/MetadataTypeTagSchemaFactory.ts +58 -58
  78. package/src/factories/NumericRangeFactory.ts +72 -72
  79. package/src/factories/ProtobufFactory.ts +267 -267
  80. package/src/factories/StatementFactory.ts +72 -72
  81. package/src/factories/TemplateFactory.ts +56 -56
  82. package/src/factories/TypeFactory.ts +14 -14
  83. package/src/factories/ValueFactory.ts +12 -12
  84. package/src/factories/internal/metadata/MetadataHelper.ts +15 -15
  85. package/src/factories/internal/metadata/emend_metadata_atomics.ts +46 -46
  86. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  87. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +38 -38
  88. package/src/factories/internal/metadata/emplace_metadata_object.ts +176 -176
  89. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  90. package/src/factories/internal/metadata/explore_metadata.ts +28 -28
  91. package/src/factories/internal/metadata/iterate_metadata.ts +1 -1
  92. package/src/factories/internal/metadata/iterate_metadata_alias.ts +34 -34
  93. package/src/factories/internal/metadata/iterate_metadata_array.ts +70 -70
  94. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  95. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  96. package/src/factories/internal/metadata/iterate_metadata_collection.ts +131 -131
  97. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  98. package/src/factories/internal/metadata/iterate_metadata_constant.ts +48 -48
  99. package/src/factories/internal/metadata/iterate_metadata_escape.ts +52 -52
  100. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +2 -2
  101. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  102. package/src/factories/internal/metadata/iterate_metadata_native.ts +209 -209
  103. package/src/factories/internal/metadata/iterate_metadata_object.ts +33 -33
  104. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  105. package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
  106. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  107. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  108. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  109. package/src/functional/$FormDataReader/$FormDataReader.ts +30 -30
  110. package/src/functional/$FormDataReader/index.ts +1 -1
  111. package/src/functional/$HeadersReader/$HeadersReader.ts +2 -2
  112. package/src/functional/$HeadersReader/index.ts +1 -1
  113. package/src/functional/$ParameterReader/$ParameterReader.ts +2 -2
  114. package/src/functional/$ParameterReader/index.ts +1 -1
  115. package/src/functional/$ProtobufReader.ts +195 -195
  116. package/src/functional/$ProtobufSizer.ts +8 -8
  117. package/src/functional/$ProtobufWriter.ts +150 -150
  118. package/src/functional/$QueryReader/$QueryReader.ts +8 -8
  119. package/src/functional/$QueryReader/index.ts +1 -1
  120. package/src/functional/$any.ts +4 -4
  121. package/src/functional/$clone.ts +4 -4
  122. package/src/functional/$convention.ts +37 -37
  123. package/src/functional/$dictionary.ts +22 -22
  124. package/src/functional/$every.ts +11 -11
  125. package/src/functional/$guard.ts +21 -21
  126. package/src/functional/$is_between.ts +2 -2
  127. package/src/functional/$join.ts +46 -46
  128. package/src/functional/$number.ts +12 -12
  129. package/src/functional/$report.ts +13 -13
  130. package/src/functional/$rest.ts +3 -3
  131. package/src/functional/$stoll.ts +8 -8
  132. package/src/functional/$string.ts +43 -43
  133. package/src/functional/$strlen.ts +7 -7
  134. package/src/functional/$tail.ts +5 -5
  135. package/src/functional/$throws.ts +10 -10
  136. package/src/functional/$varint.ts +130 -130
  137. package/src/functional/$zigzag.ts +39 -39
  138. package/src/functional/IProtobufWriter.ts +18 -18
  139. package/src/functional/Namespace/functional.ts +5 -5
  140. package/src/functional/Namespace/http.ts +9 -9
  141. package/src/functional/Namespace/index.ts +76 -76
  142. package/src/functional/Namespace/json.ts +15 -15
  143. package/src/functional/Namespace/misc.ts +14 -14
  144. package/src/functional/Namespace/notations.ts +23 -23
  145. package/src/functional/Namespace/protobuf.ts +20 -20
  146. package/src/functional/is.ts +10 -10
  147. package/src/functional.ts +872 -872
  148. package/src/http.ts +1266 -1266
  149. package/src/index.ts +4 -4
  150. package/src/json.ts +754 -754
  151. package/src/misc.ts +757 -757
  152. package/src/module.ts +1024 -1024
  153. package/src/notations.ts +1020 -1020
  154. package/src/programmers/AssertProgrammer.ts +40 -38
  155. package/src/programmers/CheckerProgrammer.ts +3 -3
  156. package/src/programmers/FeatureProgrammer.ts +27 -27
  157. package/src/programmers/RandomProgrammer.ts +12 -12
  158. package/src/programmers/TypiaProgrammer.ts +6 -6
  159. package/src/programmers/ValidateProgrammer.ts +40 -38
  160. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +130 -130
  161. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +81 -81
  162. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +77 -77
  163. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +61 -61
  164. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +1 -1
  165. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +1 -1
  166. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +113 -113
  167. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +203 -203
  168. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +107 -107
  169. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +32 -32
  170. package/src/programmers/helpers/AtomicPredicator.ts +24 -24
  171. package/src/programmers/helpers/CloneJoiner.ts +130 -130
  172. package/src/programmers/helpers/FunctionImporeter.ts +1 -1
  173. package/src/programmers/helpers/FunctionImporter.ts +87 -87
  174. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  175. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  176. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  177. package/src/programmers/helpers/NotationJoiner.ts +132 -132
  178. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  179. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  180. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  181. package/src/programmers/helpers/PruneJoiner.ts +141 -141
  182. package/src/programmers/helpers/RandomJoiner.ts +140 -140
  183. package/src/programmers/helpers/RandomRanger.ts +171 -171
  184. package/src/programmers/helpers/StringifyJoinder.ts +105 -105
  185. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  186. package/src/programmers/helpers/UnionExplorer.ts +269 -269
  187. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  188. package/src/programmers/helpers/disable_function_importer_declare.ts +2 -2
  189. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +87 -87
  190. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +89 -89
  191. package/src/programmers/http/HttpAssertQueryProgrammer.ts +87 -87
  192. package/src/programmers/http/HttpFormDataProgrammer.ts +21 -20
  193. package/src/programmers/http/HttpHeadersProgrammer.ts +13 -12
  194. package/src/programmers/http/HttpIsFormDataProgrammer.ts +90 -90
  195. package/src/programmers/http/HttpIsHeadersProgrammer.ts +92 -92
  196. package/src/programmers/http/HttpIsQueryProgrammer.ts +90 -90
  197. package/src/programmers/http/HttpParameterProgrammer.ts +97 -97
  198. package/src/programmers/http/HttpQueryProgrammer.ts +13 -12
  199. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +75 -75
  200. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +77 -77
  201. package/src/programmers/http/HttpValidateQueryProgrammer.ts +75 -75
  202. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  203. package/src/programmers/internal/application_alias.ts +74 -74
  204. package/src/programmers/internal/application_array.ts +63 -63
  205. package/src/programmers/internal/application_boolean.ts +44 -44
  206. package/src/programmers/internal/application_constant.ts +4 -4
  207. package/src/programmers/internal/application_default.ts +17 -17
  208. package/src/programmers/internal/application_default_string.ts +33 -33
  209. package/src/programmers/internal/application_escaped.ts +2 -2
  210. package/src/programmers/internal/application_native.ts +40 -40
  211. package/src/programmers/internal/application_number.ts +98 -98
  212. package/src/programmers/internal/application_object.ts +9 -7
  213. package/src/programmers/internal/application_schema.ts +165 -165
  214. package/src/programmers/internal/application_string.ts +65 -65
  215. package/src/programmers/internal/application_templates.ts +24 -24
  216. package/src/programmers/internal/application_tuple.ts +54 -54
  217. package/src/programmers/internal/check_array_length.ts +45 -45
  218. package/src/programmers/internal/check_bigint.ts +49 -49
  219. package/src/programmers/internal/check_dynamic_key.ts +2 -2
  220. package/src/programmers/internal/check_dynamic_properties.ts +211 -211
  221. package/src/programmers/internal/check_everything.ts +23 -23
  222. package/src/programmers/internal/check_native.ts +21 -21
  223. package/src/programmers/internal/check_number.ts +35 -34
  224. package/src/programmers/internal/check_object.ts +5 -4
  225. package/src/programmers/internal/check_string.ts +48 -48
  226. package/src/programmers/internal/check_template.ts +61 -61
  227. package/src/programmers/internal/check_union_array_like.ts +307 -307
  228. package/src/programmers/internal/decode_union_object.ts +99 -99
  229. package/src/programmers/internal/feature_object_entries.ts +8 -8
  230. package/src/programmers/internal/metadata_to_pattern.ts +33 -33
  231. package/src/programmers/internal/prune_object_properties.ts +60 -60
  232. package/src/programmers/internal/random_custom.ts +37 -37
  233. package/src/programmers/internal/stringify_dynamic_properties.ts +157 -157
  234. package/src/programmers/internal/stringify_native.ts +7 -7
  235. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  236. package/src/programmers/internal/template_to_pattern.ts +15 -15
  237. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  238. package/src/programmers/json/JsonApplicationProgrammer.ts +1 -1
  239. package/src/programmers/json/JsonAssertParseProgrammer.ts +81 -81
  240. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +67 -67
  241. package/src/programmers/json/JsonIsParseProgrammer.ts +81 -81
  242. package/src/programmers/json/JsonIsStringifyProgrammer.ts +75 -75
  243. package/src/programmers/json/JsonStringifyProgrammer.ts +15 -11
  244. package/src/programmers/json/JsonValidateParseProgrammer.ts +64 -64
  245. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +83 -83
  246. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +77 -77
  247. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +66 -66
  248. package/src/programmers/misc/MiscCloneProgrammer.ts +8 -8
  249. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  250. package/src/programmers/misc/MiscIsPruneProgrammer.ts +66 -66
  251. package/src/programmers/misc/MiscLiteralsProgrammer.ts +8 -8
  252. package/src/programmers/misc/MiscPruneProgrammer.ts +523 -523
  253. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +80 -80
  254. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +73 -73
  255. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +70 -70
  256. package/src/programmers/notations/NotationGeneralProgrammer.ts +647 -647
  257. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +71 -71
  258. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +81 -81
  259. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +87 -87
  260. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +67 -67
  261. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +35 -31
  262. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +46 -46
  263. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +90 -90
  264. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +75 -75
  265. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +2 -2
  266. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  267. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +83 -83
  268. package/src/protobuf.ts +999 -999
  269. package/src/reflect.ts +57 -57
  270. package/src/schemas/json/IJsonApplication.ts +9 -9
  271. package/src/schemas/json/IJsonComponents.ts +19 -19
  272. package/src/schemas/json/IJsonSchema.ts +147 -147
  273. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  274. package/src/schemas/metadata/IMetadata.ts +34 -34
  275. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  276. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  277. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  278. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  279. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  280. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  281. package/src/schemas/metadata/IMetadataConstant.ts +23 -23
  282. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  283. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  284. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  285. package/src/schemas/metadata/IMetadataObject.ts +13 -13
  286. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  287. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  288. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  289. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  290. package/src/schemas/metadata/Metadata.ts +631 -631
  291. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  292. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  293. package/src/schemas/metadata/MetadataArray.ts +49 -49
  294. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  295. package/src/schemas/metadata/MetadataAtomic.ts +85 -85
  296. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  297. package/src/schemas/metadata/MetadataConstant.ts +46 -46
  298. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  299. package/src/schemas/metadata/MetadataObject.ts +154 -154
  300. package/src/schemas/metadata/MetadataProperty.ts +56 -56
  301. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  302. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  303. package/src/tags/Default.ts +18 -18
  304. package/src/tags/ExclusiveMaximum.ts +19 -19
  305. package/src/tags/ExclusiveMinimum.ts +19 -19
  306. package/src/tags/Format.ts +16 -16
  307. package/src/tags/MaxItems.ts +12 -12
  308. package/src/tags/MaxLength.ts +12 -12
  309. package/src/tags/Maximum.ts +18 -18
  310. package/src/tags/MinItems.ts +12 -12
  311. package/src/tags/MinLength.ts +12 -12
  312. package/src/tags/Minimum.ts +18 -18
  313. package/src/tags/MultipleOf.ts +20 -20
  314. package/src/tags/Pattern.ts +12 -12
  315. package/src/tags/TagBase.ts +76 -76
  316. package/src/tags/Type.ts +14 -14
  317. package/src/tags/index.ts +14 -14
  318. package/src/tags/internal/FormatCheatSheet.ts +71 -71
  319. package/src/transform.ts +35 -35
  320. package/src/transformers/CallExpressionTransformer.ts +496 -496
  321. package/src/transformers/FileTransformer.ts +91 -91
  322. package/src/transformers/IProject.ts +15 -15
  323. package/src/transformers/ITransformOptions.ts +62 -62
  324. package/src/transformers/ImportTransformer.ts +66 -66
  325. package/src/transformers/NodeTransformer.ts +13 -13
  326. package/src/transformers/TransformerError.ts +55 -55
  327. package/src/transformers/features/AssertTransformer.ts +2 -2
  328. package/src/transformers/features/CreateAssertTransformer.ts +2 -2
  329. package/src/transformers/features/CreateIsTransformer.ts +10 -10
  330. package/src/transformers/features/CreateRandomTransformer.ts +40 -40
  331. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  332. package/src/transformers/features/IsTransformer.ts +10 -10
  333. package/src/transformers/features/RandomTransformer.ts +44 -44
  334. package/src/transformers/features/ValidateTransformer.ts +11 -11
  335. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +3 -1
  336. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +12 -12
  337. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +11 -11
  338. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +9 -9
  339. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +9 -9
  340. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +9 -9
  341. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +9 -9
  342. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +9 -9
  343. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +9 -9
  344. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +9 -9
  345. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +9 -9
  346. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +12 -12
  347. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +12 -12
  348. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +11 -11
  349. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +10 -10
  350. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +9 -9
  351. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +9 -9
  352. package/src/transformers/features/http/HttpFormDataTransformer.ts +9 -9
  353. package/src/transformers/features/http/HttpHeadersTransformer.ts +9 -9
  354. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +9 -9
  355. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +9 -9
  356. package/src/transformers/features/http/HttpIsQueryTransformer.ts +9 -9
  357. package/src/transformers/features/http/HttpParameterTransformer.ts +9 -9
  358. package/src/transformers/features/http/HttpQueryTransformer.ts +9 -9
  359. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +10 -10
  360. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +10 -10
  361. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +9 -9
  362. package/src/transformers/features/json/JsonApplicationTransformer.ts +133 -133
  363. package/src/transformers/features/json/JsonAssertParseTransformer.ts +9 -9
  364. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  365. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +9 -9
  366. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  367. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  368. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +9 -9
  369. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  370. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +11 -11
  371. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  372. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  373. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +9 -9
  374. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  375. package/src/transformers/features/json/JsonValidateParseTransformer.ts +9 -9
  376. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  377. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +9 -9
  378. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +9 -9
  379. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  380. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +9 -9
  381. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +9 -9
  382. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  383. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  384. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  385. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  386. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +11 -11
  387. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +11 -11
  388. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  389. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  390. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  391. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  392. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +9 -9
  393. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +9 -9
  394. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  395. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  396. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  397. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  398. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +15 -15
  399. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  400. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  401. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +15 -15
  402. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  403. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  404. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  405. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  406. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  407. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  408. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +9 -9
  409. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +9 -9
  410. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  411. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  412. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +9 -9
  413. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +9 -9
  414. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +9 -9
  415. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +9 -9
  416. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  417. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +10 -10
  418. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +10 -10
  419. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +63 -63
  420. package/src/transformers/internal/GenericTransformer.ts +104 -104
  421. package/src/typings/Atomic.ts +13 -13
  422. package/src/typings/ClassProperties.ts +5 -5
  423. package/src/typings/Customizable.ts +5 -5
  424. package/src/typings/OmitNever.ts +3 -3
  425. package/src/typings/ProtobufAtomic.ts +19 -19
  426. package/src/typings/SpecialFields.ts +3 -3
  427. package/src/typings/ValidationPipe.ts +9 -9
  428. package/src/typings/Writable.ts +11 -11
  429. package/src/utils/ArrayUtil.ts +43 -43
  430. package/src/utils/Escaper.ts +46 -46
  431. package/src/utils/MapUtil.ts +12 -12
  432. package/src/utils/NameEncoder.ts +32 -32
  433. package/src/utils/NamingConvention/NamingConvention.ts +86 -86
  434. package/src/utils/NamingConvention/index.ts +1 -1
  435. package/src/utils/PatternUtil.ts +29 -29
  436. package/src/utils/RandomGenerator/RandomGenerator.ts +105 -105
  437. package/src/utils/RandomGenerator/index.ts +1 -1
  438. package/src/utils/Singleton.ts +16 -16
  439. package/src/utils/StringUtil/StringUtil.ts +7 -7
  440. package/src/utils/StringUtil/index.ts +1 -1
@@ -1,267 +1,267 @@
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 (
113
- meta.arrays.length &&
114
- meta.arrays.some(
115
- (a) =>
116
- a.type.value.size() > 1 &&
117
- a.type.value.constants.length !== 1 &&
118
- a.type.value.constants[0]?.values.length !== a.type.value.size(),
119
- )
120
- )
121
- noSupport("union type in array");
122
- // DO DYNAMIC OBJECT IN ARRAY
123
- if (
124
- meta.arrays.length &&
125
- meta.arrays.some(
126
- (a) =>
127
- a.type.value.maps.length ||
128
- (a.type.value.objects.length &&
129
- a.type.value.objects.some(
130
- (o) => ProtobufUtil.isStaticObject(o) === false,
131
- )),
132
- )
133
- )
134
- noSupport("dynamic object in array");
135
- // UNION WITH ARRAY
136
- if (meta.size() > 1 && meta.arrays.length)
137
- noSupport("union type with array type");
138
- //----
139
- // OBJECT CASES
140
- //----
141
- // EMPTY PROPERTY
142
- if (
143
- meta.objects.length &&
144
- meta.objects.some((obj) => obj.properties.length === 0)
145
- )
146
- noSupport("empty object type");
147
- // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
148
- if (
149
- meta.objects.length &&
150
- meta.objects.some(
151
- (obj) =>
152
- obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
153
- )
154
- )
155
- noSupport(
156
- "object type with multiple dynamic key typed properties. Keep only one.",
157
- );
158
- // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
159
- if (
160
- meta.objects.length &&
161
- meta.objects.some(
162
- (obj) =>
163
- obj.properties.some((p) => p.key.isSoleLiteral()) &&
164
- obj.properties.some((p) => !p.key.isSoleLiteral()),
165
- )
166
- )
167
- noSupport(
168
- "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
169
- );
170
- // STATIC PROPERTY, BUT INVALID KEY NAME
171
- if (
172
- meta.objects.length &&
173
- meta.objects.some((obj) =>
174
- obj.properties.some(
175
- (p) =>
176
- p.key.isSoleLiteral() === true &&
177
- Escaper.variable(p.key.getSoleLiteral()!) === false,
178
- ),
179
- )
180
- )
181
- noSupport(`object type with invalid static key name.`);
182
- // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
183
- if (
184
- meta.objects.length &&
185
- isDynamicObject(meta.objects[0]!) &&
186
- meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
187
- )
188
- noSupport("dynamic object with array value type");
189
- // UNION WITH DYNAMIC OBJECT
190
- if (
191
- meta.size() > 1 &&
192
- meta.objects.length &&
193
- isDynamicObject(meta.objects[0]!)
194
- )
195
- noSupport("union type with dynamic object type");
196
- // UNION IN DYNAMIC PROPERTY VALUE
197
- if (
198
- meta.objects.length &&
199
- meta.objects.some(
200
- (obj) =>
201
- isDynamicObject(obj) &&
202
- obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
203
- )
204
- )
205
- noSupport("union type in dynamic property");
206
- //----
207
- // MAP CASES
208
- //----
209
- // KEY TYPE IS UNION
210
- if (meta.maps.length && meta.maps.some((m) => ProtobufUtil.isUnion(m.key)))
211
- noSupport("union key typed map");
212
- // KEY TYPE IS NOT ATOMIC
213
- if (
214
- meta.maps.length &&
215
- meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
216
- )
217
- noSupport("non-atomic key typed map");
218
- // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
219
- if (
220
- meta.maps.length &&
221
- meta.maps.some((m) => m.key.isRequired() === false || m.key.nullable)
222
- )
223
- noSupport("optional key typed map");
224
- // MAP TYPE, BUT VALUE TYPE IS ARRAY
225
- if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
226
- noSupport("map type with array value type");
227
- // UNION WITH MAP
228
- if (meta.size() > 1 && meta.maps.length)
229
- noSupport("union type with map type");
230
- // UNION IN MAP
231
- if (
232
- meta.maps.length &&
233
- meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
234
- )
235
- noSupport("union type in map value type");
236
- return errors;
237
- };
238
- }
239
-
240
- const isDynamicObject = (obj: MetadataObject): boolean =>
241
- obj.properties[0]!.key.isSoleLiteral() === false;
242
-
243
- const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
244
- ["Date", "string"],
245
- ["Boolean", "boolean"],
246
- ["BigInt", "bigint"],
247
- ["Number", "number"],
248
- ["String", "string"],
249
- ...[
250
- "Buffer",
251
- "Uint8ClampedArray",
252
- "Uint16Array",
253
- "Uint32Array",
254
- "BigUint64Array",
255
- "Int8Array",
256
- "Int16Array",
257
- "Int32Array",
258
- "BigInt64Array",
259
- "Float32Array",
260
- "Float64Array",
261
- "DataView",
262
- "ArrayBuffer",
263
- "SharedArrayBuffer",
264
- ].map((name) => [name, "Uint8Array"] as const),
265
- ["WeakSet", "Array"],
266
- ["WeakMap", "Map"],
267
- ]);
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 (
113
+ meta.arrays.length &&
114
+ meta.arrays.some(
115
+ (a) =>
116
+ a.type.value.size() > 1 &&
117
+ a.type.value.constants.length !== 1 &&
118
+ a.type.value.constants[0]?.values.length !== a.type.value.size(),
119
+ )
120
+ )
121
+ noSupport("union type in array");
122
+ // DO DYNAMIC OBJECT IN ARRAY
123
+ if (
124
+ meta.arrays.length &&
125
+ meta.arrays.some(
126
+ (a) =>
127
+ a.type.value.maps.length ||
128
+ (a.type.value.objects.length &&
129
+ a.type.value.objects.some(
130
+ (o) => ProtobufUtil.isStaticObject(o) === false,
131
+ )),
132
+ )
133
+ )
134
+ noSupport("dynamic object in array");
135
+ // UNION WITH ARRAY
136
+ if (meta.size() > 1 && meta.arrays.length)
137
+ noSupport("union type with array type");
138
+ //----
139
+ // OBJECT CASES
140
+ //----
141
+ // EMPTY PROPERTY
142
+ if (
143
+ meta.objects.length &&
144
+ meta.objects.some((obj) => obj.properties.length === 0)
145
+ )
146
+ noSupport("empty object type");
147
+ // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
148
+ if (
149
+ meta.objects.length &&
150
+ meta.objects.some(
151
+ (obj) =>
152
+ obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
153
+ )
154
+ )
155
+ noSupport(
156
+ "object type with multiple dynamic key typed properties. Keep only one.",
157
+ );
158
+ // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
159
+ if (
160
+ meta.objects.length &&
161
+ meta.objects.some(
162
+ (obj) =>
163
+ obj.properties.some((p) => p.key.isSoleLiteral()) &&
164
+ obj.properties.some((p) => !p.key.isSoleLiteral()),
165
+ )
166
+ )
167
+ noSupport(
168
+ "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
169
+ );
170
+ // STATIC PROPERTY, BUT INVALID KEY NAME
171
+ if (
172
+ meta.objects.length &&
173
+ meta.objects.some((obj) =>
174
+ obj.properties.some(
175
+ (p) =>
176
+ p.key.isSoleLiteral() === true &&
177
+ Escaper.variable(p.key.getSoleLiteral()!) === false,
178
+ ),
179
+ )
180
+ )
181
+ noSupport(`object type with invalid static key name.`);
182
+ // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
183
+ if (
184
+ meta.objects.length &&
185
+ isDynamicObject(meta.objects[0]!) &&
186
+ meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
187
+ )
188
+ noSupport("dynamic object with array value type");
189
+ // UNION WITH DYNAMIC OBJECT
190
+ if (
191
+ meta.size() > 1 &&
192
+ meta.objects.length &&
193
+ isDynamicObject(meta.objects[0]!)
194
+ )
195
+ noSupport("union type with dynamic object type");
196
+ // UNION IN DYNAMIC PROPERTY VALUE
197
+ if (
198
+ meta.objects.length &&
199
+ meta.objects.some(
200
+ (obj) =>
201
+ isDynamicObject(obj) &&
202
+ obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
203
+ )
204
+ )
205
+ noSupport("union type in dynamic property");
206
+ //----
207
+ // MAP CASES
208
+ //----
209
+ // KEY TYPE IS UNION
210
+ if (meta.maps.length && meta.maps.some((m) => ProtobufUtil.isUnion(m.key)))
211
+ noSupport("union key typed map");
212
+ // KEY TYPE IS NOT ATOMIC
213
+ if (
214
+ meta.maps.length &&
215
+ meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
216
+ )
217
+ noSupport("non-atomic key typed map");
218
+ // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
219
+ if (
220
+ meta.maps.length &&
221
+ meta.maps.some((m) => m.key.isRequired() === false || m.key.nullable)
222
+ )
223
+ noSupport("optional key typed map");
224
+ // MAP TYPE, BUT VALUE TYPE IS ARRAY
225
+ if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
226
+ noSupport("map type with array value type");
227
+ // UNION WITH MAP
228
+ if (meta.size() > 1 && meta.maps.length)
229
+ noSupport("union type with map type");
230
+ // UNION IN MAP
231
+ if (
232
+ meta.maps.length &&
233
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
234
+ )
235
+ noSupport("union type in map value type");
236
+ return errors;
237
+ };
238
+ }
239
+
240
+ const isDynamicObject = (obj: MetadataObject): boolean =>
241
+ obj.properties[0]!.key.isSoleLiteral() === false;
242
+
243
+ const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
244
+ ["Date", "string"],
245
+ ["Boolean", "boolean"],
246
+ ["BigInt", "bigint"],
247
+ ["Number", "number"],
248
+ ["String", "string"],
249
+ ...[
250
+ "Buffer",
251
+ "Uint8ClampedArray",
252
+ "Uint16Array",
253
+ "Uint32Array",
254
+ "BigUint64Array",
255
+ "Int8Array",
256
+ "Int16Array",
257
+ "Int32Array",
258
+ "BigInt64Array",
259
+ "Float32Array",
260
+ "Float64Array",
261
+ "DataView",
262
+ "ArrayBuffer",
263
+ "SharedArrayBuffer",
264
+ ].map((name) => [name, "Uint8Array"] as const),
265
+ ["WeakSet", "Array"],
266
+ ["WeakMap", "Map"],
267
+ ]);
@@ -1,72 +1,72 @@
1
- import ts from "typescript";
2
-
3
- export namespace StatementFactory {
4
- export const mut = (name: string, initializer?: ts.Expression) =>
5
- ts.factory.createVariableStatement(
6
- undefined,
7
- ts.factory.createVariableDeclarationList(
8
- [
9
- ts.factory.createVariableDeclaration(
10
- name,
11
- undefined,
12
- undefined,
13
- initializer,
14
- ),
15
- ],
16
- ts.NodeFlags.Let,
17
- ),
18
- );
19
-
20
- export const constant = (name: string, initializer?: ts.Expression) =>
21
- ts.factory.createVariableStatement(
22
- undefined,
23
- ts.factory.createVariableDeclarationList(
24
- [
25
- ts.factory.createVariableDeclaration(
26
- name,
27
- undefined,
28
- undefined,
29
- initializer,
30
- ),
31
- ],
32
- ts.NodeFlags.Const,
33
- ),
34
- );
35
-
36
- export const entry = (key: string) => (value: string) =>
37
- ts.factory.createVariableDeclarationList(
38
- [
39
- ts.factory.createVariableDeclaration(
40
- ts.factory.createArrayBindingPattern([
41
- ts.factory.createBindingElement(
42
- undefined,
43
- undefined,
44
- ts.factory.createIdentifier(key),
45
- undefined,
46
- ),
47
- ts.factory.createBindingElement(
48
- undefined,
49
- undefined,
50
- ts.factory.createIdentifier(value),
51
- undefined,
52
- ),
53
- ]),
54
- undefined,
55
- undefined,
56
- undefined,
57
- ),
58
- ],
59
- ts.NodeFlags.Const,
60
- );
61
-
62
- export const transpile = (script: string) =>
63
- ts.factory.createExpressionStatement(
64
- ts.factory.createIdentifier(ts.transpile(script)),
65
- );
66
-
67
- export const block = (expression: ts.Expression) =>
68
- ts.factory.createBlock(
69
- [ts.factory.createExpressionStatement(expression)],
70
- true,
71
- );
72
- }
1
+ import ts from "typescript";
2
+
3
+ export namespace StatementFactory {
4
+ export const mut = (name: string, initializer?: ts.Expression) =>
5
+ ts.factory.createVariableStatement(
6
+ undefined,
7
+ ts.factory.createVariableDeclarationList(
8
+ [
9
+ ts.factory.createVariableDeclaration(
10
+ name,
11
+ undefined,
12
+ undefined,
13
+ initializer,
14
+ ),
15
+ ],
16
+ ts.NodeFlags.Let,
17
+ ),
18
+ );
19
+
20
+ export const constant = (name: string, initializer?: ts.Expression) =>
21
+ ts.factory.createVariableStatement(
22
+ undefined,
23
+ ts.factory.createVariableDeclarationList(
24
+ [
25
+ ts.factory.createVariableDeclaration(
26
+ name,
27
+ undefined,
28
+ undefined,
29
+ initializer,
30
+ ),
31
+ ],
32
+ ts.NodeFlags.Const,
33
+ ),
34
+ );
35
+
36
+ export const entry = (key: string) => (value: string) =>
37
+ ts.factory.createVariableDeclarationList(
38
+ [
39
+ ts.factory.createVariableDeclaration(
40
+ ts.factory.createArrayBindingPattern([
41
+ ts.factory.createBindingElement(
42
+ undefined,
43
+ undefined,
44
+ ts.factory.createIdentifier(key),
45
+ undefined,
46
+ ),
47
+ ts.factory.createBindingElement(
48
+ undefined,
49
+ undefined,
50
+ ts.factory.createIdentifier(value),
51
+ undefined,
52
+ ),
53
+ ]),
54
+ undefined,
55
+ undefined,
56
+ undefined,
57
+ ),
58
+ ],
59
+ ts.NodeFlags.Const,
60
+ );
61
+
62
+ export const transpile = (script: string) =>
63
+ ts.factory.createExpressionStatement(
64
+ ts.factory.createIdentifier(ts.transpile(script)),
65
+ );
66
+
67
+ export const block = (expression: ts.Expression) =>
68
+ ts.factory.createBlock(
69
+ [ts.factory.createExpressionStatement(expression)],
70
+ true,
71
+ );
72
+ }