typia 6.10.2 → 6.10.3-dev.20240925

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 (447) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +118 -118
  3. package/lib/index.mjs +1 -0
  4. package/lib/index.mjs.map +1 -1
  5. package/lib/programmers/llm/LlmApplicationProgrammer.js +3 -0
  6. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  7. package/lib/tags/Example.d.ts +14 -0
  8. package/lib/tags/Example.js +3 -0
  9. package/lib/tags/Example.js.map +1 -0
  10. package/lib/tags/Examples.d.ts +10 -0
  11. package/lib/tags/Examples.js +3 -0
  12. package/lib/tags/Examples.js.map +1 -0
  13. package/lib/tags/index.d.ts +2 -0
  14. package/lib/tags/index.js +2 -0
  15. package/lib/tags/index.js.map +1 -1
  16. package/package.json +2 -2
  17. package/src/AssertionGuard.ts +1 -1
  18. package/src/CamelCase.ts +75 -75
  19. package/src/IRandomGenerator.ts +66 -66
  20. package/src/IValidation.ts +21 -21
  21. package/src/PascalCase.ts +71 -71
  22. package/src/Primitive.ts +92 -92
  23. package/src/Resolved.ts +74 -74
  24. package/src/SnakeCase.ts +126 -126
  25. package/src/TypeGuardError.ts +37 -37
  26. package/src/executable/TypiaGenerateWizard.ts +83 -83
  27. package/src/executable/TypiaPatchWizard.ts +42 -42
  28. package/src/executable/TypiaSetupWizard.ts +174 -174
  29. package/src/executable/setup/ArgumentParser.ts +43 -43
  30. package/src/executable/setup/CommandExecutor.ts +8 -8
  31. package/src/executable/setup/FileRetriever.ts +22 -22
  32. package/src/executable/setup/PackageManager.ts +86 -86
  33. package/src/executable/setup/PluginConfigurator.ts +69 -69
  34. package/src/executable/typia.ts +55 -55
  35. package/src/factories/CommentFactory.ts +79 -79
  36. package/src/factories/ExpressionFactory.ts +150 -150
  37. package/src/factories/IdentifierFactory.ts +70 -70
  38. package/src/factories/JsonMetadataFactory.ts +53 -53
  39. package/src/factories/LiteralFactory.ts +47 -47
  40. package/src/factories/MetadataCollection.ts +274 -274
  41. package/src/factories/MetadataCommentTagFactory.ts +534 -534
  42. package/src/factories/MetadataFactory.ts +314 -314
  43. package/src/factories/MetadataTypeTagFactory.ts +336 -336
  44. package/src/factories/MetadataTypeTagSchemaFactory.ts +59 -59
  45. package/src/factories/NumericRangeFactory.ts +72 -72
  46. package/src/factories/ProtobufFactory.ts +267 -267
  47. package/src/factories/StatementFactory.ts +74 -74
  48. package/src/factories/TemplateFactory.ts +56 -56
  49. package/src/factories/TypeFactory.ts +118 -118
  50. package/src/factories/ValueFactory.ts +12 -12
  51. package/src/factories/internal/metadata/MetadataHelper.ts +21 -21
  52. package/src/factories/internal/metadata/emend_metadata_atomics.ts +45 -45
  53. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  54. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +42 -42
  55. package/src/factories/internal/metadata/emplace_metadata_object.ts +186 -186
  56. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  57. package/src/factories/internal/metadata/explore_metadata.ts +28 -28
  58. package/src/factories/internal/metadata/iterate_metadata.ts +100 -100
  59. package/src/factories/internal/metadata/iterate_metadata_alias.ts +34 -34
  60. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  61. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  62. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  63. package/src/factories/internal/metadata/iterate_metadata_collection.ts +131 -131
  64. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +28 -28
  65. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  66. package/src/factories/internal/metadata/iterate_metadata_escape.ts +52 -52
  67. package/src/factories/internal/metadata/iterate_metadata_function.ts +89 -89
  68. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +213 -213
  69. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  70. package/src/factories/internal/metadata/iterate_metadata_native.ts +220 -220
  71. package/src/factories/internal/metadata/iterate_metadata_object.ts +33 -33
  72. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  73. package/src/factories/internal/metadata/iterate_metadata_sort.ts +74 -74
  74. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  75. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  76. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  77. package/src/functional/$FormDataReader/$FormDataReader.ts +83 -83
  78. package/src/functional/$FormDataReader/index.ts +1 -1
  79. package/src/functional/$HeadersReader/$HeadersReader.ts +26 -26
  80. package/src/functional/$HeadersReader/index.ts +1 -1
  81. package/src/functional/$ParameterReader/$ParameterReader.ts +29 -29
  82. package/src/functional/$ParameterReader/index.ts +1 -1
  83. package/src/functional/$ProtobufReader.ts +194 -194
  84. package/src/functional/$ProtobufSizer.ts +144 -144
  85. package/src/functional/$ProtobufWriter.ts +145 -145
  86. package/src/functional/$QueryReader/$QueryReader.ts +46 -46
  87. package/src/functional/$QueryReader/index.ts +1 -1
  88. package/src/functional/$any.ts +3 -3
  89. package/src/functional/$clone.ts +48 -48
  90. package/src/functional/$convention.ts +37 -37
  91. package/src/functional/$dictionary.ts +22 -22
  92. package/src/functional/$every.ts +11 -11
  93. package/src/functional/$guard.ts +21 -21
  94. package/src/functional/$is_between.ts +2 -2
  95. package/src/functional/$join.ts +46 -46
  96. package/src/functional/$number.ts +12 -12
  97. package/src/functional/$report.ts +13 -13
  98. package/src/functional/$rest.ts +3 -3
  99. package/src/functional/$stoll.ts +8 -8
  100. package/src/functional/$string.ts +43 -43
  101. package/src/functional/$strlen.ts +7 -7
  102. package/src/functional/$tail.ts +5 -5
  103. package/src/functional/$throws.ts +10 -10
  104. package/src/functional/$varint.ts +130 -130
  105. package/src/functional/$zigzag.ts +39 -39
  106. package/src/functional/IProtobufWriter.ts +18 -18
  107. package/src/functional/Namespace/functional.ts +5 -5
  108. package/src/functional/Namespace/http.ts +9 -9
  109. package/src/functional/Namespace/index.ts +77 -77
  110. package/src/functional/Namespace/json.ts +15 -15
  111. package/src/functional/Namespace/llm.ts +20 -20
  112. package/src/functional/Namespace/misc.ts +14 -14
  113. package/src/functional/Namespace/notations.ts +23 -23
  114. package/src/functional/Namespace/protobuf.ts +20 -20
  115. package/src/functional/is.ts +10 -10
  116. package/src/functional.ts +872 -872
  117. package/src/http.ts +1266 -1266
  118. package/src/index.ts +4 -4
  119. package/src/json.ts +738 -738
  120. package/src/llm.ts +186 -186
  121. package/src/misc.ts +757 -757
  122. package/src/module.ts +1023 -1023
  123. package/src/notations.ts +1020 -1020
  124. package/src/programmers/AssertProgrammer.ts +397 -397
  125. package/src/programmers/CheckerProgrammer.ts +1138 -1138
  126. package/src/programmers/FeatureProgrammer.ts +549 -549
  127. package/src/programmers/IsProgrammer.ts +220 -220
  128. package/src/programmers/RandomProgrammer.ts +955 -955
  129. package/src/programmers/TypiaProgrammer.ts +157 -157
  130. package/src/programmers/ValidateProgrammer.ts +382 -382
  131. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +141 -141
  132. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +108 -108
  133. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +98 -98
  134. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  135. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +101 -101
  136. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +106 -106
  137. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +123 -123
  138. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +267 -267
  139. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +126 -126
  140. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  141. package/src/programmers/helpers/AtomicPredicator.ts +24 -24
  142. package/src/programmers/helpers/CloneJoiner.ts +130 -130
  143. package/src/programmers/helpers/FunctionImporeter.ts +1 -1
  144. package/src/programmers/helpers/FunctionImporter.ts +97 -97
  145. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  146. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  147. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  148. package/src/programmers/helpers/NotationJoiner.ts +132 -132
  149. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  150. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  151. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  152. package/src/programmers/helpers/PruneJoiner.ts +139 -139
  153. package/src/programmers/helpers/RandomJoiner.ts +145 -145
  154. package/src/programmers/helpers/RandomRanger.ts +171 -171
  155. package/src/programmers/helpers/StringifyJoinder.ts +105 -105
  156. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  157. package/src/programmers/helpers/UnionExplorer.ts +269 -269
  158. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  159. package/src/programmers/helpers/disable_function_importer_declare.ts +33 -33
  160. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +91 -91
  161. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +91 -91
  162. package/src/programmers/http/HttpAssertQueryProgrammer.ts +93 -93
  163. package/src/programmers/http/HttpFormDataProgrammer.ts +278 -278
  164. package/src/programmers/http/HttpHeadersProgrammer.ts +347 -347
  165. package/src/programmers/http/HttpIsFormDataProgrammer.ts +102 -102
  166. package/src/programmers/http/HttpIsHeadersProgrammer.ts +102 -102
  167. package/src/programmers/http/HttpIsQueryProgrammer.ts +104 -104
  168. package/src/programmers/http/HttpParameterProgrammer.ts +97 -97
  169. package/src/programmers/http/HttpQueryProgrammer.ts +298 -298
  170. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +85 -85
  171. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +85 -85
  172. package/src/programmers/http/HttpValidateQueryProgrammer.ts +87 -87
  173. package/src/programmers/internal/application_array.ts +61 -61
  174. package/src/programmers/internal/application_bigint.ts +25 -25
  175. package/src/programmers/internal/application_boolean.ts +25 -25
  176. package/src/programmers/internal/application_description.ts +12 -12
  177. package/src/programmers/internal/application_escaped.ts +74 -74
  178. package/src/programmers/internal/application_number.ts +25 -25
  179. package/src/programmers/internal/application_plugin.ts +19 -19
  180. package/src/programmers/internal/application_string.ts +25 -25
  181. package/src/programmers/internal/application_templates.ts +62 -62
  182. package/src/programmers/internal/application_title.ts +20 -20
  183. package/src/programmers/internal/application_union_discriminator.ts +35 -35
  184. package/src/programmers/internal/application_v30_alias.ts +52 -52
  185. package/src/programmers/internal/application_v30_constant.ts +18 -18
  186. package/src/programmers/internal/application_v30_native.ts +28 -28
  187. package/src/programmers/internal/application_v30_object.ts +149 -149
  188. package/src/programmers/internal/application_v30_schema.ts +161 -161
  189. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  190. package/src/programmers/internal/application_v31_alias.ts +41 -41
  191. package/src/programmers/internal/application_v31_constant.ts +29 -29
  192. package/src/programmers/internal/application_v31_native.ts +24 -24
  193. package/src/programmers/internal/application_v31_object.ts +130 -130
  194. package/src/programmers/internal/application_v31_schema.ts +159 -159
  195. package/src/programmers/internal/application_v31_tuple.ts +21 -21
  196. package/src/programmers/internal/check_array_length.ts +45 -45
  197. package/src/programmers/internal/check_bigint.ts +49 -49
  198. package/src/programmers/internal/check_dynamic_key.ts +174 -174
  199. package/src/programmers/internal/check_dynamic_properties.ts +211 -211
  200. package/src/programmers/internal/check_everything.ts +23 -23
  201. package/src/programmers/internal/check_native.ts +21 -21
  202. package/src/programmers/internal/check_number.ts +107 -107
  203. package/src/programmers/internal/check_object.ts +61 -61
  204. package/src/programmers/internal/check_string.ts +48 -48
  205. package/src/programmers/internal/check_template.ts +46 -46
  206. package/src/programmers/internal/check_union_array_like.ts +307 -307
  207. package/src/programmers/internal/decode_union_object.ts +99 -99
  208. package/src/programmers/internal/feature_object_entries.ts +58 -58
  209. package/src/programmers/internal/llm_schema_array.ts +22 -22
  210. package/src/programmers/internal/llm_schema_escaped.ts +61 -61
  211. package/src/programmers/internal/llm_schema_native.ts +17 -17
  212. package/src/programmers/internal/llm_schema_object.ts +129 -129
  213. package/src/programmers/internal/llm_schema_station.ts +185 -185
  214. package/src/programmers/internal/llm_schema_tuple.ts +31 -31
  215. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  216. package/src/programmers/internal/postfix_of_tuple.ts +2 -2
  217. package/src/programmers/internal/prune_object_properties.ts +60 -60
  218. package/src/programmers/internal/random_custom.ts +37 -37
  219. package/src/programmers/internal/stringify_dynamic_properties.ts +157 -157
  220. package/src/programmers/internal/stringify_native.ts +7 -7
  221. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  222. package/src/programmers/internal/template_to_pattern.ts +15 -15
  223. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  224. package/src/programmers/json/JsonApplicationProgrammer.ts +82 -82
  225. package/src/programmers/json/JsonAssertParseProgrammer.ts +96 -96
  226. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +104 -104
  227. package/src/programmers/json/JsonIsParseProgrammer.ts +110 -110
  228. package/src/programmers/json/JsonIsStringifyProgrammer.ts +102 -102
  229. package/src/programmers/json/JsonStringifyProgrammer.ts +909 -909
  230. package/src/programmers/json/JsonValidateParseProgrammer.ts +87 -87
  231. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +111 -111
  232. package/src/programmers/llm/LlmApplicationProgrammer.ts +219 -216
  233. package/src/programmers/llm/LlmSchemaProgrammer.ts +49 -49
  234. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +87 -87
  235. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +105 -105
  236. package/src/programmers/misc/MiscCloneProgrammer.ts +781 -781
  237. package/src/programmers/misc/MiscIsCloneProgrammer.ts +93 -93
  238. package/src/programmers/misc/MiscIsPruneProgrammer.ts +91 -91
  239. package/src/programmers/misc/MiscLiteralsProgrammer.ts +70 -70
  240. package/src/programmers/misc/MiscPruneProgrammer.ts +560 -560
  241. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +104 -104
  242. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +101 -101
  243. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +91 -91
  244. package/src/programmers/notations/NotationGeneralProgrammer.ts +714 -714
  245. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +97 -97
  246. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +110 -110
  247. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +91 -91
  248. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +95 -95
  249. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +646 -646
  250. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +852 -852
  251. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +104 -104
  252. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +93 -93
  253. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +160 -160
  254. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +85 -85
  255. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +109 -109
  256. package/src/protobuf.ts +999 -999
  257. package/src/reflect.ts +63 -63
  258. package/src/schemas/json/IJsonApplication.ts +22 -22
  259. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  260. package/src/schemas/metadata/IMetadata.ts +36 -36
  261. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  262. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  263. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  264. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  265. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  266. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  267. package/src/schemas/metadata/IMetadataConstant.ts +18 -18
  268. package/src/schemas/metadata/IMetadataConstantValue.ts +11 -11
  269. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  270. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  271. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  272. package/src/schemas/metadata/IMetadataFunction.ts +8 -8
  273. package/src/schemas/metadata/IMetadataObject.ts +13 -13
  274. package/src/schemas/metadata/IMetadataParameter.ts +9 -9
  275. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  276. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  277. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  278. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  279. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  280. package/src/schemas/metadata/Metadata.ts +616 -616
  281. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  282. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  283. package/src/schemas/metadata/MetadataArray.ts +49 -49
  284. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  285. package/src/schemas/metadata/MetadataAtomic.ts +87 -87
  286. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  287. package/src/schemas/metadata/MetadataConstant.ts +34 -34
  288. package/src/schemas/metadata/MetadataConstantValue.ts +62 -62
  289. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  290. package/src/schemas/metadata/MetadataFunction.ts +49 -49
  291. package/src/schemas/metadata/MetadataObject.ts +139 -139
  292. package/src/schemas/metadata/MetadataParameter.ts +50 -50
  293. package/src/schemas/metadata/MetadataProperty.ts +56 -56
  294. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  295. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  296. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  297. package/src/tags/Constant.ts +15 -15
  298. package/src/tags/ContentMediaType.ts +10 -10
  299. package/src/tags/Default.ts +22 -22
  300. package/src/tags/Example.ts +17 -0
  301. package/src/tags/Examples.ts +16 -0
  302. package/src/tags/ExclusiveMaximum.ts +25 -25
  303. package/src/tags/ExclusiveMinimum.ts +25 -25
  304. package/src/tags/Format.ts +16 -16
  305. package/src/tags/JsonSchemaPlugin.ts +8 -8
  306. package/src/tags/MaxItems.ts +12 -12
  307. package/src/tags/MaxLength.ts +12 -12
  308. package/src/tags/Maximum.ts +19 -19
  309. package/src/tags/MinItems.ts +12 -12
  310. package/src/tags/MinLength.ts +12 -12
  311. package/src/tags/Minimum.ts +19 -19
  312. package/src/tags/MultipleOf.ts +21 -21
  313. package/src/tags/Pattern.ts +31 -31
  314. package/src/tags/TagBase.ts +76 -76
  315. package/src/tags/Type.ts +32 -32
  316. package/src/tags/UniqueItems.ts +14 -14
  317. package/src/tags/index.ts +20 -18
  318. package/src/tags/internal/FormatCheatSheet.ts +73 -73
  319. package/src/transform.ts +35 -35
  320. package/src/transformers/CallExpressionTransformer.ts +508 -508
  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 +60 -60
  327. package/src/transformers/features/AssertTransformer.ts +16 -16
  328. package/src/transformers/features/CreateAssertTransformer.ts +16 -16
  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 +57 -57
  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 +124 -124
  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/llm/LlmApplicationTransformer.ts +83 -83
  378. package/src/transformers/features/llm/LlmSchemaTransformer.ts +53 -53
  379. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +9 -9
  380. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +9 -9
  381. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  382. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +9 -9
  383. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +9 -9
  384. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  385. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  386. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  387. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  388. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +11 -11
  389. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +11 -11
  390. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  391. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  392. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  393. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  394. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +9 -9
  395. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +9 -9
  396. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  397. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  398. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  399. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  400. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +15 -15
  401. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  402. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  403. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +15 -15
  404. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  405. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  406. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  407. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  408. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  409. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  410. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +9 -9
  411. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +9 -9
  412. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  413. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  414. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +9 -9
  415. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +9 -9
  416. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +9 -9
  417. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +9 -9
  418. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  419. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +10 -10
  420. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +10 -10
  421. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +63 -63
  422. package/src/transformers/features/reflect/ReflectNameTransformer.ts +66 -66
  423. package/src/transformers/internal/GenericTransformer.ts +104 -104
  424. package/src/typings/Atomic.ts +13 -13
  425. package/src/typings/ClassProperties.ts +5 -5
  426. package/src/typings/Customizable.ts +5 -5
  427. package/src/typings/Equal.ts +18 -18
  428. package/src/typings/IsTuple.ts +9 -9
  429. package/src/typings/NativeClass.ts +23 -23
  430. package/src/typings/OmitNever.ts +3 -3
  431. package/src/typings/ProtobufAtomic.ts +19 -19
  432. package/src/typings/SpecialFields.ts +3 -3
  433. package/src/typings/ValidationPipe.ts +9 -9
  434. package/src/typings/ValueOf.ts +20 -20
  435. package/src/typings/Writable.ts +11 -11
  436. package/src/utils/ArrayUtil.ts +41 -41
  437. package/src/utils/Escaper.ts +50 -50
  438. package/src/utils/MapUtil.ts +12 -12
  439. package/src/utils/NameEncoder.ts +32 -32
  440. package/src/utils/NamingConvention/NamingConvention.ts +89 -89
  441. package/src/utils/NamingConvention/index.ts +1 -1
  442. package/src/utils/PatternUtil.ts +29 -29
  443. package/src/utils/RandomGenerator/RandomGenerator.ts +119 -119
  444. package/src/utils/RandomGenerator/index.ts +1 -1
  445. package/src/utils/Singleton.ts +16 -16
  446. package/src/utils/StringUtil/StringUtil.ts +7 -7
  447. 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.functions.length) 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.functions.length) 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
+ ]);