typia 13.0.0-rc.1 → 13.0.0

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 (506) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +169 -171
  3. package/native/adapter/adapter.go +29 -29
  4. package/native/adapter/adapter_options_branch_matrix_test.go +54 -54
  5. package/native/adapter/visit.go +173 -173
  6. package/native/adapter/visit_property_chain_edges_test.go +129 -129
  7. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +204 -204
  8. package/native/cmd/ttsc-typia/atomic_intersection_schema_transform_test.go +148 -148
  9. package/native/cmd/ttsc-typia/boolean_literal_discriminant_schema_transform_test.go +374 -374
  10. package/native/cmd/ttsc-typia/build.go +188 -188
  11. package/native/cmd/ttsc-typia/build_reports_semantic_diagnostics_test.go +34 -34
  12. package/native/cmd/ttsc-typia/build_reports_syntactic_diagnostics_test.go +34 -34
  13. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +314 -314
  14. package/native/cmd/ttsc-typia/compare_equal_cover_transform_test.go +271 -271
  15. package/native/cmd/ttsc-typia/compare_less_transform_test.go +180 -180
  16. package/native/cmd/ttsc-typia/compare_method_delegation_transform_test.go +173 -173
  17. package/native/cmd/ttsc-typia/demo_rejects_bad_flag_test.go +25 -25
  18. package/native/cmd/ttsc-typia/diagnostics.go +51 -51
  19. package/native/cmd/ttsc-typia/dynamic_key_path_helper_alias_transform_test.go +159 -159
  20. package/native/cmd/ttsc-typia/exclude_type_tag_transform_test.go +176 -176
  21. package/native/cmd/ttsc-typia/inline_type_display_name_transform_test.go +290 -290
  22. package/native/cmd/ttsc-typia/instance_union_create_is_transform_test.go +248 -248
  23. package/native/cmd/ttsc-typia/intersection_all_never_union_transform_test.go +168 -168
  24. package/native/cmd/ttsc-typia/intersection_brand_transform_test.go +267 -267
  25. package/native/cmd/ttsc-typia/intersection_nonsensible_backstop_transform_test.go +157 -132
  26. package/native/cmd/ttsc-typia/intersection_union_validation_transform_test.go +590 -590
  27. package/native/cmd/ttsc-typia/json_is_stringify_scoped_checker_transform_test.go +206 -0
  28. package/native/cmd/ttsc-typia/json_stringify_constant_atomic_union_transform_test.go +171 -171
  29. package/native/cmd/ttsc-typia/main.go +97 -97
  30. package/native/cmd/ttsc-typia/main_wasm.go +226 -226
  31. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +156 -156
  32. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +186 -186
  33. package/native/cmd/ttsc-typia/nullable_primitive_property_is_transform_test.go +236 -236
  34. package/native/cmd/ttsc-typia/object_custom_tag_validation_transform_test.go +332 -332
  35. package/native/cmd/ttsc-typia/object_union_explicit_pointer_schema_transform_test.go +269 -269
  36. package/native/cmd/ttsc-typia/plain_classify_class_ref_transform_test.go +261 -261
  37. package/native/cmd/ttsc-typia/plain_classify_container_seed_transform_test.go +144 -144
  38. package/native/cmd/ttsc-typia/plain_classify_cross_module_extra_transform_test.go +211 -211
  39. package/native/cmd/ttsc-typia/plain_classify_deep_nested_transform_test.go +184 -184
  40. package/native/cmd/ttsc-typia/plain_classify_field_copy_transform_test.go +204 -204
  41. package/native/cmd/ttsc-typia/plain_classify_from_new_transform_test.go +465 -465
  42. package/native/cmd/ttsc-typia/plain_classify_strategy_edges_transform_test.go +519 -519
  43. package/native/cmd/ttsc-typia/plain_classify_union_transform_test.go +149 -149
  44. package/native/cmd/ttsc-typia/plain_classify_validated_union_transform_test.go +212 -212
  45. package/native/cmd/ttsc-typia/plain_clone_bigint_wrapper_transform_test.go +153 -153
  46. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +26 -26
  47. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +36 -36
  48. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -73
  49. package/native/cmd/ttsc-typia/protobuf_object_generic_union_encode_transform_test.go +248 -248
  50. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +107 -107
  51. package/native/cmd/ttsc-typia/random_recursive_min_items_diagnostic_test.go +234 -234
  52. package/native/cmd/ttsc-typia/random_unsatisfiable_recursive_diagnostic_test.go +146 -146
  53. package/native/cmd/ttsc-typia/recursive_visit_tracking_transform_test.go +473 -473
  54. package/native/cmd/ttsc-typia/run_default_build_route_test.go +31 -31
  55. package/native/cmd/ttsc-typia/schema_dts_role_transform_test.go +404 -404
  56. package/native/cmd/ttsc-typia/shallow_depth_argument_error_transform_test.go +88 -88
  57. package/native/cmd/ttsc-typia/shallow_depth_limit_transform_test.go +278 -278
  58. package/native/cmd/ttsc-typia/shallow_depth_runtime_test.go +173 -173
  59. package/native/cmd/ttsc-typia/shallow_factory_depth_runtime_test.go +171 -171
  60. package/native/cmd/ttsc-typia/shallow_nested_depth_transform_test.go +148 -148
  61. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +322 -322
  62. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +162 -162
  63. package/native/cmd/ttsc-typia/transform.go +270 -270
  64. package/native/cmd/ttsc-typia/transform_declaration_source_produces_no_js_test.go +59 -59
  65. package/native/cmd/ttsc-typia/transform_diagnostics_preserve_details_test.go +203 -203
  66. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +528 -528
  67. package/native/cmd/ttsc-typia/transform_helpers_test.go +155 -155
  68. package/native/core/context/EmitFactory.go +39 -39
  69. package/native/core/context/IProgrammerProps.go +14 -14
  70. package/native/core/context/ITransformOptions.go +9 -9
  71. package/native/core/context/ITypiaContext.go +36 -36
  72. package/native/core/context/ImportProgrammer.go +354 -354
  73. package/native/core/context/TransformerError.go +117 -117
  74. package/native/core/context/import_programmer_statement_coverage_test.go +71 -71
  75. package/native/core/context/index.go +1 -1
  76. package/native/core/context/transformer_error_formatting_test.go +100 -100
  77. package/native/core/factories/CommentFactory.go +27 -27
  78. package/native/core/factories/ExpressionFactory.go +357 -357
  79. package/native/core/factories/FormatCheatSheet.go +30 -30
  80. package/native/core/factories/IdentifierFactory.go +172 -172
  81. package/native/core/factories/JsonMetadataFactory.go +154 -154
  82. package/native/core/factories/LiteralFactory.go +282 -282
  83. package/native/core/factories/MetadataCommentTagFactory.go +446 -446
  84. package/native/core/factories/MetadataFactory.go +543 -543
  85. package/native/core/factories/MetadataTypeTagFactory.go +560 -560
  86. package/native/core/factories/MetadataTypeTagSchemaFactory.go +117 -117
  87. package/native/core/factories/NumericRangeFactory.go +132 -132
  88. package/native/core/factories/ProtobufFactory.go +1090 -1090
  89. package/native/core/factories/StatementFactory.go +114 -114
  90. package/native/core/factories/TemplateFactory.go +82 -82
  91. package/native/core/factories/TypeFactory.go +176 -176
  92. package/native/core/factories/ValueFactory.go +43 -43
  93. package/native/core/factories/factory_utility_coverage_test.go +1006 -1006
  94. package/native/core/factories/index.go +1 -1
  95. package/native/core/factories/internal/metadata/IMetadataIteratorProps.go +70 -70
  96. package/native/core/factories/internal/metadata/MetadataHelper.go +425 -425
  97. package/native/core/factories/internal/metadata/comment_tags_coverage_test.go +184 -184
  98. package/native/core/factories/internal/metadata/emend_metadata_atomics.go +80 -80
  99. package/native/core/factories/internal/metadata/emplace_metadata_alias.go +41 -41
  100. package/native/core/factories/internal/metadata/emplace_metadata_array_type.go +44 -44
  101. package/native/core/factories/internal/metadata/emplace_metadata_object.go +599 -599
  102. package/native/core/factories/internal/metadata/emplace_metadata_tuple.go +69 -69
  103. package/native/core/factories/internal/metadata/explore_metadata.go +75 -75
  104. package/native/core/factories/internal/metadata/iterate_metadata.go +55 -55
  105. package/native/core/factories/internal/metadata/iterate_metadata_alias.go +36 -36
  106. package/native/core/factories/internal/metadata/iterate_metadata_array.go +77 -77
  107. package/native/core/factories/internal/metadata/iterate_metadata_atomic.go +63 -63
  108. package/native/core/factories/internal/metadata/iterate_metadata_coalesce.go +30 -30
  109. package/native/core/factories/internal/metadata/iterate_metadata_collection.go +366 -366
  110. package/native/core/factories/internal/metadata/iterate_metadata_collection_branch_matrix_test.go +201 -201
  111. package/native/core/factories/internal/metadata/iterate_metadata_comment_tags.go +34 -34
  112. package/native/core/factories/internal/metadata/iterate_metadata_constant.go +139 -139
  113. package/native/core/factories/internal/metadata/iterate_metadata_escape.go +56 -56
  114. package/native/core/factories/internal/metadata/iterate_metadata_function.go +93 -93
  115. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +1054 -1054
  116. package/native/core/factories/internal/metadata/iterate_metadata_intersection_brand_coverage_test.go +114 -114
  117. package/native/core/factories/internal/metadata/iterate_metadata_intersection_coverage_test.go +106 -106
  118. package/native/core/factories/internal/metadata/iterate_metadata_intersection_shareable_name_test.go +22 -22
  119. package/native/core/factories/internal/metadata/iterate_metadata_map.go +55 -55
  120. package/native/core/factories/internal/metadata/iterate_metadata_native.go +122 -122
  121. package/native/core/factories/internal/metadata/iterate_metadata_object.go +35 -35
  122. package/native/core/factories/internal/metadata/iterate_metadata_set.go +41 -41
  123. package/native/core/factories/internal/metadata/iterate_metadata_sort.go +202 -202
  124. package/native/core/factories/internal/metadata/iterate_metadata_template.go +41 -41
  125. package/native/core/factories/internal/metadata/iterate_metadata_tuple.go +24 -24
  126. package/native/core/factories/internal/metadata/iterate_metadata_union.go +40 -40
  127. package/native/core/factories/internal/metadata/js_doc_parameter_name_reads_qualified_name_test.go +55 -55
  128. package/native/core/factories/internal/metadata/optional_coalesce_coverage_test.go +38 -38
  129. package/native/core/factories/internal/metadata/sort_constants_coverage_test.go +63 -63
  130. package/native/core/factories/json_metadata_factory_dedupes_bigint_diagnostics_test.go +36 -36
  131. package/native/core/factories/json_metadata_factory_rejects_bigint_native_test.go +29 -29
  132. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +239 -239
  133. package/native/core/factories/protobuf_factory_rejects_invalid_field_names_test.go +75 -75
  134. package/native/core/index.go +1 -1
  135. package/native/core/programmers/AssertProgrammer.go +511 -511
  136. package/native/core/programmers/IsProgrammer.go +418 -419
  137. package/native/core/programmers/RandomProgrammer.go +1448 -1448
  138. package/native/core/programmers/ValidateProgrammer.go +488 -488
  139. package/native/core/programmers/compare/CompareEqualProgrammer.go +668 -668
  140. package/native/core/programmers/compare/CompareLessProgrammer.go +489 -489
  141. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +172 -172
  142. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +135 -135
  143. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +131 -131
  144. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +106 -106
  145. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +222 -222
  146. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +129 -129
  147. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +172 -172
  148. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +252 -252
  149. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +147 -147
  150. package/native/core/programmers/functional/functional_assert_helper_coverage_test.go +26 -26
  151. package/native/core/programmers/functional/index.go +1 -1
  152. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +53 -53
  153. package/native/core/programmers/helpers/AtomicPredicator.go +75 -75
  154. package/native/core/programmers/helpers/ClassifyJoiner.go +174 -174
  155. package/native/core/programmers/helpers/CloneJoiner.go +307 -307
  156. package/native/core/programmers/helpers/FunctionProgrammer.go +218 -218
  157. package/native/core/programmers/helpers/HttpMetadataUtil.go +30 -30
  158. package/native/core/programmers/helpers/ICheckEntry.go +14 -14
  159. package/native/core/programmers/helpers/IExpressionEntry.go +15 -15
  160. package/native/core/programmers/helpers/ModuloText.go +26 -26
  161. package/native/core/programmers/helpers/NotationJoiner.go +204 -204
  162. package/native/core/programmers/helpers/OptionPredicator.go +39 -39
  163. package/native/core/programmers/helpers/ProtobufUtil.go +273 -273
  164. package/native/core/programmers/helpers/ProtobufWire.go +14 -14
  165. package/native/core/programmers/helpers/PruneJoiner.go +290 -290
  166. package/native/core/programmers/helpers/RandomJoiner.go +805 -805
  167. package/native/core/programmers/helpers/StringifyJoinder.go +409 -409
  168. package/native/core/programmers/helpers/StringifyPredicator.go +25 -25
  169. package/native/core/programmers/helpers/UnionExplorer.go +966 -966
  170. package/native/core/programmers/helpers/UnionPredicator.go +92 -92
  171. package/native/core/programmers/helpers/clone_joiner_optional_condition_test.go +70 -70
  172. package/native/core/programmers/helpers/disable_function_programmer_declare.go +10 -10
  173. package/native/core/programmers/helpers/function_programmer_unique_names_test.go +54 -54
  174. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +147 -147
  175. package/native/core/programmers/helpers/random_joiner_recursive_array_guard_test.go +166 -166
  176. package/native/core/programmers/helpers/union_explorer_coverage_test.go +135 -135
  177. package/native/core/programmers/helpers/union_predicator_checks_neighbor_flag_test.go +34 -34
  178. package/native/core/programmers/helpers/union_predicator_skips_atomic_like_native_fields_test.go +65 -65
  179. package/native/core/programmers/helpers/union_predicator_skips_collection_bucket_fields_test.go +72 -72
  180. package/native/core/programmers/helpers/union_predicator_skips_shared_native_names_test.go +239 -239
  181. package/native/core/programmers/helpers/union_predicator_skips_shared_object_fields_test.go +43 -43
  182. package/native/core/programmers/helpers/union_predicator_skips_shared_template_fields_test.go +57 -57
  183. package/native/core/programmers/http/HttpAssertFormDataProgrammer.go +116 -116
  184. package/native/core/programmers/http/HttpAssertHeadersProgrammer.go +59 -59
  185. package/native/core/programmers/http/HttpAssertQueryProgrammer.go +71 -71
  186. package/native/core/programmers/http/HttpFormDataProgrammer.go +416 -416
  187. package/native/core/programmers/http/HttpHeadersProgrammer.go +428 -428
  188. package/native/core/programmers/http/HttpIsFormDataProgrammer.go +142 -142
  189. package/native/core/programmers/http/HttpIsHeadersProgrammer.go +53 -53
  190. package/native/core/programmers/http/HttpIsQueryProgrammer.go +65 -65
  191. package/native/core/programmers/http/HttpParameterProgrammer.go +190 -190
  192. package/native/core/programmers/http/HttpQueryProgrammer.go +484 -484
  193. package/native/core/programmers/http/HttpValidateFormDataProgrammer.go +110 -110
  194. package/native/core/programmers/http/HttpValidateHeadersProgrammer.go +56 -56
  195. package/native/core/programmers/http/HttpValidateQueryProgrammer.go +68 -68
  196. package/native/core/programmers/http/http_programmer_helper_coverage_test.go +120 -120
  197. package/native/core/programmers/http/index.go +1 -1
  198. package/native/core/programmers/index.go +1 -1
  199. package/native/core/programmers/internal/CheckerProgrammer.go +2064 -2064
  200. package/native/core/programmers/internal/FeatureProgrammer.go +1361 -1361
  201. package/native/core/programmers/internal/feature_programmer_visit_guard_test.go +70 -70
  202. package/native/core/programmers/internal/internal_utility_coverage_test.go +384 -384
  203. package/native/core/programmers/iterate/check_array_length.go +64 -64
  204. package/native/core/programmers/iterate/check_bigint.go +78 -78
  205. package/native/core/programmers/iterate/check_dynamic_key.go +271 -271
  206. package/native/core/programmers/iterate/check_dynamic_key_tag_rows_test.go +46 -46
  207. package/native/core/programmers/iterate/check_dynamic_properties.go +292 -292
  208. package/native/core/programmers/iterate/check_everything.go +33 -33
  209. package/native/core/programmers/iterate/check_exclude.go +88 -88
  210. package/native/core/programmers/iterate/check_native.go +38 -38
  211. package/native/core/programmers/iterate/check_number.go +180 -180
  212. package/native/core/programmers/iterate/check_object.go +113 -113
  213. package/native/core/programmers/iterate/check_object_strict_optional_undefined_test.go +74 -74
  214. package/native/core/programmers/iterate/check_object_type_tags.go +64 -64
  215. package/native/core/programmers/iterate/check_string.go +78 -78
  216. package/native/core/programmers/iterate/check_template.go +346 -346
  217. package/native/core/programmers/iterate/check_union_array_like.go +422 -422
  218. package/native/core/programmers/iterate/decode_union_object.go +157 -157
  219. package/native/core/programmers/iterate/feature_object_entries.go +188 -188
  220. package/native/core/programmers/iterate/iterate_check_coverage_test.go +178 -178
  221. package/native/core/programmers/iterate/iterate_utility_coverage_test.go +302 -302
  222. package/native/core/programmers/iterate/json_schema_alias.go +62 -62
  223. package/native/core/programmers/iterate/json_schema_array.go +66 -66
  224. package/native/core/programmers/iterate/json_schema_bigint.go +17 -17
  225. package/native/core/programmers/iterate/json_schema_boolean.go +17 -17
  226. package/native/core/programmers/iterate/json_schema_constant.go +53 -53
  227. package/native/core/programmers/iterate/json_schema_description.go +21 -21
  228. package/native/core/programmers/iterate/json_schema_discriminator.go +57 -57
  229. package/native/core/programmers/iterate/json_schema_escaped.go +68 -68
  230. package/native/core/programmers/iterate/json_schema_jsDocTags.go +48 -48
  231. package/native/core/programmers/iterate/json_schema_native.go +106 -106
  232. package/native/core/programmers/iterate/json_schema_number.go +17 -17
  233. package/native/core/programmers/iterate/json_schema_object.go +187 -184
  234. package/native/core/programmers/iterate/json_schema_plugin.go +47 -47
  235. package/native/core/programmers/iterate/json_schema_station.go +251 -251
  236. package/native/core/programmers/iterate/json_schema_string.go +17 -17
  237. package/native/core/programmers/iterate/json_schema_template.go +63 -63
  238. package/native/core/programmers/iterate/json_schema_title.go +25 -25
  239. package/native/core/programmers/iterate/json_schema_tuple.go +41 -41
  240. package/native/core/programmers/iterate/metadata_to_pattern.go +64 -64
  241. package/native/core/programmers/iterate/postfix_of_tuple.go +12 -12
  242. package/native/core/programmers/iterate/prune_object_properties.go +105 -105
  243. package/native/core/programmers/iterate/stringify_dynamic_properties.go +219 -219
  244. package/native/core/programmers/iterate/stringify_native.go +14 -14
  245. package/native/core/programmers/iterate/stringify_regular_properties.go +112 -112
  246. package/native/core/programmers/iterate/template_interpolation_tags_test.go +495 -495
  247. package/native/core/programmers/iterate/template_runtime_pattern.go +262 -262
  248. package/native/core/programmers/iterate/template_to_pattern.go +29 -29
  249. package/native/core/programmers/iterate/wrap_metadata_rest_tuple.go +23 -23
  250. package/native/core/programmers/json/JsonApplicationProgrammer.go +380 -380
  251. package/native/core/programmers/json/JsonAssertParseProgrammer.go +115 -115
  252. package/native/core/programmers/json/JsonAssertStringifyProgrammer.go +108 -108
  253. package/native/core/programmers/json/JsonIsParseProgrammer.go +162 -162
  254. package/native/core/programmers/json/JsonIsStringifyProgrammer.go +113 -113
  255. package/native/core/programmers/json/JsonSchemaProgrammer.go +94 -94
  256. package/native/core/programmers/json/JsonSchemasProgrammer.go +142 -142
  257. package/native/core/programmers/json/JsonStringifyProgrammer.go +1528 -1508
  258. package/native/core/programmers/json/JsonValidateParseProgrammer.go +105 -105
  259. package/native/core/programmers/json/JsonValidateStringifyProgrammer.go +126 -126
  260. package/native/core/programmers/json/index.go +1 -1
  261. package/native/core/programmers/json/json_schema_programmer_coverage_test.go +198 -198
  262. package/native/core/programmers/json/json_schemas_programmer_dedupes_bigint_diagnostics_test.go +37 -37
  263. package/native/core/programmers/json/json_schemas_programmer_rejects_bigint_native_test.go +29 -29
  264. package/native/core/programmers/json/json_stringify_programmer_coverage_test.go +422 -422
  265. package/native/core/programmers/llm/LlmApplicationProgrammer.go +526 -526
  266. package/native/core/programmers/llm/LlmCoerceProgrammer.go +109 -109
  267. package/native/core/programmers/llm/LlmControllerProgrammer.go +51 -51
  268. package/native/core/programmers/llm/LlmMetadataFactory.go +89 -89
  269. package/native/core/programmers/llm/LlmParametersProgrammer.go +141 -141
  270. package/native/core/programmers/llm/LlmParseProgrammer.go +121 -121
  271. package/native/core/programmers/llm/LlmSchemaProgrammer.go +902 -846
  272. package/native/core/programmers/llm/LlmStructuredOutputProgrammer.go +147 -147
  273. package/native/core/programmers/llm/index.go +1 -1
  274. package/native/core/programmers/llm/llm_application_programmer_coverage_test.go +166 -166
  275. package/native/core/programmers/llm/llm_schema_programmer_coverage_test.go +282 -282
  276. package/native/core/programmers/llm/llm_schema_programmer_dedupes_bigint_diagnostics_test.go +38 -38
  277. package/native/core/programmers/llm/llm_schema_programmer_rejects_bigint_native_test.go +30 -30
  278. package/native/core/programmers/llm/llm_schema_programmer_rejects_exclude_tag_in_strict_test.go +52 -52
  279. package/native/core/programmers/notations/NotationAssertGeneralProgrammer.go +107 -107
  280. package/native/core/programmers/notations/NotationGeneralProgrammer.go +1441 -1441
  281. package/native/core/programmers/notations/NotationIsGeneralProgrammer.go +112 -112
  282. package/native/core/programmers/notations/NotationValidateGeneralProgrammer.go +131 -131
  283. package/native/core/programmers/notations/index.go +1 -1
  284. package/native/core/programmers/notations/notation_general_helpers_test.go +395 -395
  285. package/native/core/programmers/notations/notation_general_programmer_snake_prefix_test.go +44 -44
  286. package/native/core/programmers/plain/PlainAssertClassifyProgrammer.go +111 -111
  287. package/native/core/programmers/plain/PlainAssertCloneProgrammer.go +102 -102
  288. package/native/core/programmers/plain/PlainAssertPruneProgrammer.go +117 -117
  289. package/native/core/programmers/plain/PlainClassifyProgrammer.go +2205 -2205
  290. package/native/core/programmers/plain/PlainCloneProgrammer.go +1254 -1254
  291. package/native/core/programmers/plain/PlainIsCloneProgrammer.go +117 -117
  292. package/native/core/programmers/plain/PlainIsPruneProgrammer.go +106 -106
  293. package/native/core/programmers/plain/PlainPruneProgrammer.go +837 -837
  294. package/native/core/programmers/plain/PlainValidateClassifyProgrammer.go +127 -127
  295. package/native/core/programmers/plain/PlainValidateCloneProgrammer.go +123 -123
  296. package/native/core/programmers/plain/PlainValidatePruneProgrammer.go +114 -114
  297. package/native/core/programmers/plain/index.go +1 -1
  298. package/native/core/programmers/plain/plain_programmer_helper_coverage_test.go +284 -284
  299. package/native/core/programmers/plain/plain_prune_programmer_branch_matrix_test.go +145 -145
  300. package/native/core/programmers/programmer_direct_helper_coverage_test.go +70 -70
  301. package/native/core/programmers/protobuf/ProtobufAssertDecodeProgrammer.go +125 -125
  302. package/native/core/programmers/protobuf/ProtobufAssertEncodeProgrammer.go +143 -143
  303. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +861 -861
  304. package/native/core/programmers/protobuf/ProtobufEncodeProgrammer.go +1269 -1269
  305. package/native/core/programmers/protobuf/ProtobufIsDecodeProgrammer.go +122 -122
  306. package/native/core/programmers/protobuf/ProtobufIsEncodeProgrammer.go +115 -115
  307. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +269 -269
  308. package/native/core/programmers/protobuf/ProtobufValidateDecodeProgrammer.go +111 -111
  309. package/native/core/programmers/protobuf/ProtobufValidateEncodeProgrammer.go +145 -145
  310. package/native/core/programmers/protobuf/index.go +1 -1
  311. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +454 -454
  312. package/native/core/programmers/random_programmer_helper_coverage_test.go +367 -367
  313. package/native/core/programmers/random_programmer_min_items_tag_test.go +44 -44
  314. package/native/core/programmers/reflect/ReflectLiteralsProgrammer.go +125 -125
  315. package/native/core/schemas/index.go +1 -1
  316. package/native/core/schemas/metadata/IMetadataDictionary.go +8 -8
  317. package/native/core/schemas/metadata/IMetadataTypeTagSequence.go +53 -53
  318. package/native/core/schemas/metadata/MetadataAlias.go +36 -36
  319. package/native/core/schemas/metadata/MetadataAliasType.go +64 -64
  320. package/native/core/schemas/metadata/MetadataApplication.go +41 -41
  321. package/native/core/schemas/metadata/MetadataArray.go +36 -36
  322. package/native/core/schemas/metadata/MetadataArrayType.go +59 -59
  323. package/native/core/schemas/metadata/MetadataAtomic.go +69 -69
  324. package/native/core/schemas/metadata/MetadataCollection.go +698 -698
  325. package/native/core/schemas/metadata/MetadataComponents.go +122 -122
  326. package/native/core/schemas/metadata/MetadataConstant.go +47 -47
  327. package/native/core/schemas/metadata/MetadataConstantValue.go +97 -97
  328. package/native/core/schemas/metadata/MetadataEscaped.go +40 -40
  329. package/native/core/schemas/metadata/MetadataFunction.go +46 -46
  330. package/native/core/schemas/metadata/MetadataMap.go +45 -45
  331. package/native/core/schemas/metadata/MetadataNative.go +72 -72
  332. package/native/core/schemas/metadata/MetadataObject.go +36 -36
  333. package/native/core/schemas/metadata/MetadataObjectType.go +223 -223
  334. package/native/core/schemas/metadata/MetadataParameter.go +46 -46
  335. package/native/core/schemas/metadata/MetadataProperty.go +50 -50
  336. package/native/core/schemas/metadata/MetadataSchema.go +1485 -1485
  337. package/native/core/schemas/metadata/MetadataSet.go +41 -41
  338. package/native/core/schemas/metadata/MetadataTemplate.go +70 -70
  339. package/native/core/schemas/metadata/MetadataTuple.go +20 -20
  340. package/native/core/schemas/metadata/MetadataTupleType.go +69 -69
  341. package/native/core/schemas/metadata/index.go +1 -1
  342. package/native/core/schemas/metadata/metadata_object_type_required_literal_property_test.go +51 -51
  343. package/native/core/schemas/metadata/metadata_schema_covers_tag_matrix_test.go +125 -125
  344. package/native/core/schemas/metadata/metadata_schema_sole_literal_caches_pointer_test.go +38 -38
  345. package/native/core/schemas/metadata/schema_sequence_and_json_coverage_test.go +427 -427
  346. package/native/core/schemas/protobuf/IProtobufProperty.go +6 -6
  347. package/native/core/schemas/protobuf/IProtobufPropertyType.go +55 -55
  348. package/native/core/schemas/protobuf/IProtobufSchema.go +54 -54
  349. package/native/core/schemas/protobuf/index.go +1 -1
  350. package/native/core/schemas/protobuf/protobuf_marker_coverage_test.go +58 -58
  351. package/native/core/typings/Writable.go +5 -5
  352. package/native/core/utils/PatternUtil.go +57 -57
  353. package/native/core/utils/ProtobufNameEncoder.go +47 -47
  354. package/native/go.mod +31 -31
  355. package/native/go.sum +22 -22
  356. package/native/go.work +22 -22
  357. package/native/transform/CallExpressionTransformer.go +719 -719
  358. package/native/transform/FileTransformer.go +221 -221
  359. package/native/transform/ITransformProps.go +5 -5
  360. package/native/transform/ImportTransformer.go +285 -285
  361. package/native/transform/NodeTransformer.go +25 -25
  362. package/native/transform/TransformerError.go +11 -11
  363. package/native/transform/TypiaGenerator.go +171 -171
  364. package/native/transform/call_expression_transformer_registry_coverage_test.go +53 -53
  365. package/native/transform/call_expression_transformer_target_test.go +46 -46
  366. package/native/transform/features/AssertTransformer.go +39 -39
  367. package/native/transform/features/CreateAssertTransformer.go +39 -39
  368. package/native/transform/features/CreateIsTransformer.go +35 -35
  369. package/native/transform/features/CreateRandomTransformer.go +47 -47
  370. package/native/transform/features/CreateShallowTransformer.go +33 -33
  371. package/native/transform/features/CreateValidateTransformer.go +35 -35
  372. package/native/transform/features/IsTransformer.go +35 -35
  373. package/native/transform/features/RandomTransformer.go +54 -54
  374. package/native/transform/features/ShallowTransformer.go +65 -65
  375. package/native/transform/features/ValidateTransformer.go +35 -35
  376. package/native/transform/features/compare/CompareCoverTransformer.go +14 -14
  377. package/native/transform/features/compare/CompareCreateCoverTransformer.go +14 -14
  378. package/native/transform/features/compare/CompareCreateEqualTransformer.go +14 -14
  379. package/native/transform/features/compare/CompareCreateLessTransformer.go +14 -14
  380. package/native/transform/features/compare/CompareEqualTransformer.go +73 -73
  381. package/native/transform/features/compare/CompareLessTransformer.go +71 -71
  382. package/native/transform/features/feature_transformer_entry_coverage_test.go +59 -59
  383. package/native/transform/features/functional/FunctionalGenericTransformer.go +70 -70
  384. package/native/transform/features/http/CreateHttpAssertFormDataTransformer.go +22 -22
  385. package/native/transform/features/http/CreateHttpAssertHeadersTransformer.go +22 -22
  386. package/native/transform/features/http/CreateHttpAssertQueryTransformer.go +28 -28
  387. package/native/transform/features/http/CreateHttpFormDataTransformer.go +22 -22
  388. package/native/transform/features/http/CreateHttpHeadersTransformer.go +22 -22
  389. package/native/transform/features/http/CreateHttpIsFormDataTransformer.go +22 -22
  390. package/native/transform/features/http/CreateHttpIsHeadersTransformer.go +22 -22
  391. package/native/transform/features/http/CreateHttpIsQueryTransformer.go +28 -28
  392. package/native/transform/features/http/CreateHttpParameterTransformer.go +22 -22
  393. package/native/transform/features/http/CreateHttpQueryTransformer.go +28 -28
  394. package/native/transform/features/http/CreateHttpValidateFormDataTransformer.go +22 -22
  395. package/native/transform/features/http/CreateHttpValidateHeadersTransformer.go +22 -22
  396. package/native/transform/features/http/CreateHttpValidateQueryTransformer.go +28 -28
  397. package/native/transform/features/http/HttpAssertFormDataTransformer.go +22 -22
  398. package/native/transform/features/http/HttpAssertHeadersTransformer.go +22 -22
  399. package/native/transform/features/http/HttpAssertQueryTransformer.go +28 -28
  400. package/native/transform/features/http/HttpFormDataTransformer.go +22 -22
  401. package/native/transform/features/http/HttpHeadersTransformer.go +22 -22
  402. package/native/transform/features/http/HttpIsFormDataTransformer.go +22 -22
  403. package/native/transform/features/http/HttpIsHeadersTransformer.go +22 -22
  404. package/native/transform/features/http/HttpIsQueryTransformer.go +28 -28
  405. package/native/transform/features/http/HttpParameterTransformer.go +22 -22
  406. package/native/transform/features/http/HttpQueryTransformer.go +28 -28
  407. package/native/transform/features/http/HttpValidateFormDataTransformer.go +22 -22
  408. package/native/transform/features/http/HttpValidateHeadersTransformer.go +22 -22
  409. package/native/transform/features/http/HttpValidateQueryTransformer.go +28 -28
  410. package/native/transform/features/http/http_transformer_entry_coverage_test.go +65 -65
  411. package/native/transform/features/json/JsonApplicationTransformer.go +75 -75
  412. package/native/transform/features/json/JsonAssertParseTransformer.go +22 -22
  413. package/native/transform/features/json/JsonAssertStringifyTransformer.go +22 -22
  414. package/native/transform/features/json/JsonCreateAssertParseTransformer.go +22 -22
  415. package/native/transform/features/json/JsonCreateAssertStringifyTransformer.go +22 -22
  416. package/native/transform/features/json/JsonCreateIsParseTransformer.go +22 -22
  417. package/native/transform/features/json/JsonCreateIsStringifyTransformer.go +22 -22
  418. package/native/transform/features/json/JsonCreateStringifyTransformer.go +22 -22
  419. package/native/transform/features/json/JsonCreateValidateParseTransformer.go +22 -22
  420. package/native/transform/features/json/JsonCreateValidateStringifyProgrammer.go +22 -22
  421. package/native/transform/features/json/JsonIsParseTransformer.go +22 -22
  422. package/native/transform/features/json/JsonIsStringifyTransformer.go +22 -22
  423. package/native/transform/features/json/JsonSchemaTransformer.go +175 -175
  424. package/native/transform/features/json/JsonSchemasTransformer.go +109 -109
  425. package/native/transform/features/json/JsonStringifyTransformer.go +22 -22
  426. package/native/transform/features/json/JsonValidateParseTransformer.go +22 -22
  427. package/native/transform/features/json/JsonValidateStringifyTransformer.go +22 -22
  428. package/native/transform/features/json/json_transformer_entry_coverage_test.go +56 -56
  429. package/native/transform/features/llm/LlmApplicationTransformer.go +54 -54
  430. package/native/transform/features/llm/LlmCoerceTransformer.go +63 -63
  431. package/native/transform/features/llm/LlmControllerTransformer.go +59 -59
  432. package/native/transform/features/llm/LlmCreateCoerceTransformer.go +54 -54
  433. package/native/transform/features/llm/LlmCreateParseTransformer.go +54 -54
  434. package/native/transform/features/llm/LlmParametersTransformer.go +49 -49
  435. package/native/transform/features/llm/LlmParseTransformer.go +63 -63
  436. package/native/transform/features/llm/LlmSchemaTransformer.go +167 -167
  437. package/native/transform/features/llm/LlmStructuredOutputTransformer.go +55 -55
  438. package/native/transform/features/llm/llm_transformer_entry_coverage_test.go +48 -48
  439. package/native/transform/features/notations/NotationAssertGeneralTransformer.go +27 -27
  440. package/native/transform/features/notations/NotationCreateAssertGeneralTransformer.go +27 -27
  441. package/native/transform/features/notations/NotationCreateGeneralTransformer.go +27 -27
  442. package/native/transform/features/notations/NotationCreateIsGeneralTransformer.go +27 -27
  443. package/native/transform/features/notations/NotationCreateValidateGeneralTransformer.go +27 -27
  444. package/native/transform/features/notations/NotationGeneralTransformer.go +36 -36
  445. package/native/transform/features/notations/NotationIsGeneralTransformer.go +27 -27
  446. package/native/transform/features/notations/NotationValidateGeneralTransformer.go +27 -27
  447. package/native/transform/features/notations/notation_transformer_entry_coverage_test.go +58 -58
  448. package/native/transform/features/plain/PlainAssertClassifyTransformer.go +22 -22
  449. package/native/transform/features/plain/PlainAssertCloneTransformer.go +22 -22
  450. package/native/transform/features/plain/PlainAssertPruneTransformer.go +22 -22
  451. package/native/transform/features/plain/PlainClassifyTransformer.go +22 -22
  452. package/native/transform/features/plain/PlainCloneTransformer.go +22 -22
  453. package/native/transform/features/plain/PlainCreateAssertClassifyTransformer.go +22 -22
  454. package/native/transform/features/plain/PlainCreateAssertCloneTransformer.go +22 -22
  455. package/native/transform/features/plain/PlainCreateAssertPruneTransformer.go +22 -22
  456. package/native/transform/features/plain/PlainCreateClassifyTransformer.go +22 -22
  457. package/native/transform/features/plain/PlainCreateCloneTransformer.go +22 -22
  458. package/native/transform/features/plain/PlainCreateIsCloneTransformer.go +22 -22
  459. package/native/transform/features/plain/PlainCreateIsPruneTransformer.go +22 -22
  460. package/native/transform/features/plain/PlainCreatePruneTransformer.go +22 -22
  461. package/native/transform/features/plain/PlainCreateValidateClassifyTransformer.go +22 -22
  462. package/native/transform/features/plain/PlainCreateValidateCloneTransformer.go +22 -22
  463. package/native/transform/features/plain/PlainCreateValidatePruneTransformer.go +22 -22
  464. package/native/transform/features/plain/PlainIsCloneTransformer.go +22 -22
  465. package/native/transform/features/plain/PlainIsPruneTransformer.go +22 -22
  466. package/native/transform/features/plain/PlainPruneTransformer.go +22 -22
  467. package/native/transform/features/plain/PlainValidateClassifyTransformer.go +22 -22
  468. package/native/transform/features/plain/PlainValidateCloneTransformer.go +22 -22
  469. package/native/transform/features/plain/PlainValidatePruneTransformer.go +22 -22
  470. package/native/transform/features/plain/plain_transformer_entry_coverage_test.go +61 -61
  471. package/native/transform/features/protobuf/ProtobufAssertDecodeTransformer.go +22 -22
  472. package/native/transform/features/protobuf/ProtobufAssertEncodeTransformer.go +22 -22
  473. package/native/transform/features/protobuf/ProtobufCreateAssertDecodeTransformer.go +22 -22
  474. package/native/transform/features/protobuf/ProtobufCreateAssertEncodeTransformer.go +22 -22
  475. package/native/transform/features/protobuf/ProtobufCreateDecodeTransformer.go +22 -22
  476. package/native/transform/features/protobuf/ProtobufCreateEncodeTransformer.go +22 -22
  477. package/native/transform/features/protobuf/ProtobufCreateIsDecodeTransformer.go +22 -22
  478. package/native/transform/features/protobuf/ProtobufCreateIsEncodeTransformer.go +22 -22
  479. package/native/transform/features/protobuf/ProtobufCreateValidateDecodeTransformer.go +22 -22
  480. package/native/transform/features/protobuf/ProtobufCreateValidateEncodeTransformer.go +22 -22
  481. package/native/transform/features/protobuf/ProtobufDecodeTransformer.go +22 -22
  482. package/native/transform/features/protobuf/ProtobufEncodeTransformer.go +22 -22
  483. package/native/transform/features/protobuf/ProtobufIsDecodeTransformer.go +22 -22
  484. package/native/transform/features/protobuf/ProtobufIsEncodeTransformer.go +22 -22
  485. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +31 -31
  486. package/native/transform/features/protobuf/ProtobufValidateDecodeTransformer.go +22 -22
  487. package/native/transform/features/protobuf/ProtobufValidateEncodeTransformer.go +22 -22
  488. package/native/transform/features/protobuf/protobuf_transformer_entry_coverage_test.go +56 -56
  489. package/native/transform/features/reflect/ReflectLiteralsTransformer.go +32 -32
  490. package/native/transform/features/reflect/ReflectMetadataTransformer.go +73 -73
  491. package/native/transform/features/reflect/ReflectNameTransformer.go +100 -100
  492. package/native/transform/features/reflect/ReflectSchemaTransformer.go +153 -153
  493. package/native/transform/features/reflect/ReflectSchemasTransformer.go +68 -68
  494. package/native/transform/features/reflect/reflect_metadata_transformer_edge_branches_test.go +55 -55
  495. package/native/transform/features/reflect/reflect_transformer_entry_coverage_test.go +47 -47
  496. package/native/transform/file_transformer_coverage_test.go +94 -94
  497. package/native/transform/import_transformer_coverage_test.go +153 -153
  498. package/native/transform/index.go +1 -1
  499. package/native/transform/internal/GenericTransformer.go +236 -236
  500. package/native/transform/transform.go +57 -57
  501. package/native/transform/typia_generator_helpers_coverage_test.go +166 -166
  502. package/package.json +5 -5
  503. package/src/internal/_ProtobufReader.ts +187 -187
  504. package/src/internal/_randomArray.ts +34 -34
  505. package/src/internal/_randomString.ts +30 -30
  506. package/src/transform.ts +21 -21
@@ -1,454 +1,454 @@
1
- //go:build typia_native_internal
2
- // +build typia_native_internal
3
-
4
- package protobuf
5
-
6
- import (
7
- "testing"
8
-
9
- shimast "github.com/microsoft/typescript-go/shim/ast"
10
- shimprinter "github.com/microsoft/typescript-go/shim/printer"
11
- nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
12
- nativehelpers "github.com/samchon/typia/packages/typia/native/core/programmers/helpers"
13
- nativeinternal "github.com/samchon/typia/packages/typia/native/core/programmers/internal"
14
- schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
15
- schemaprotobuf "github.com/samchon/typia/packages/typia/native/core/schemas/protobuf"
16
- )
17
-
18
- // TestProtobufProgrammerHelperCoverage exercises protobuf helper branches.
19
- //
20
- // Protobuf encode and decode helpers normalize schema variants and feature
21
- // explore values before larger reader/writer generation starts. They are pure
22
- // helpers, so direct unit calls are enough to keep these branches visible.
23
- //
24
- // 1. Read bigint names from property and schema bigint variants.
25
- // 2. Verify unsupported bigint schema variants return an empty name.
26
- // 3. Convert feature explore values from value, pointer, and unknown inputs.
27
- // 4. Convert feature explore values into checker explore values.
28
- // 5. Visit encode/decode schema switches for every protobuf property variant.
29
- // 6. Build object, map, and discriminator-union protobuf encode blocks.
30
- // 7. Exercise encode union, wrapper, container, and fallback helper branches.
31
- // 8. Exercise protobuf decode property, array, map, default, and importer helpers.
32
- func TestProtobufProgrammerHelperCoverage(t *testing.T) {
33
- emit := shimprinter.NewEmitContext()
34
- if protobufDecodeProgrammer_bigintName(&schemaprotobuf.IProtobufPropertyType_IBigint{
35
- IProtobufSchema_IBigint: schemaprotobuf.IProtobufSchema_IBigint{Name: "int64"},
36
- }) != "int64" {
37
- t.Fatal("protobuf bigint property name mismatch")
38
- }
39
- if protobufDecodeProgrammer_bigintName(schemaprotobuf.IProtobufSchema_IBigint{Name: "uint64"}) != "uint64" ||
40
- protobufDecodeProgrammer_bigintName(schemaprotobuf.IProtobufSchema_IString{}) != "" {
41
- t.Fatal("protobuf bigint schema name mismatch")
42
- }
43
- explore := nativeinternal.FeatureProgrammer_IExplore{Tracable: true, Source: "source", From: "from", Postfix: ".x"}
44
- if protobufEncodeProgrammer_feature_explore(explore).Postfix != ".x" ||
45
- protobufEncodeProgrammer_feature_explore(&explore).Source != "source" ||
46
- protobufEncodeProgrammer_feature_explore("unknown").Postfix != "" {
47
- t.Fatal("protobuf feature explore conversion mismatch")
48
- }
49
- if protobufEncodeProgrammer_checker_explore(&explore).From != "from" {
50
- t.Fatal("protobuf checker explore conversion mismatch")
51
- }
52
-
53
- factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
54
- context := nativecontext.ITypiaContext{}
55
- functor := nativehelpers.NewFunctionProgrammer("protobuf.encode")
56
- input := factory.NewIdentifier("input")
57
- first := 1
58
- second := 2
59
- alpha := protobufProgrammerObject("Alpha", "kind", "alpha")
60
- beta := protobufProgrammerObject("Beta", "kind", "beta")
61
- rest := schemametadata.MetadataObjectType_create(schemametadata.MetadataObjectType{Name: "Rest"})
62
- objectSchema := &schemaprotobuf.IProtobufPropertyType_IObject{
63
- IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: alpha},
64
- Index: &first,
65
- }
66
- mapSchema := &schemaprotobuf.IProtobufPropertyType_IMap{
67
- IProtobufSchema_IMap: schemaprotobuf.IProtobufSchema_IMap{
68
- Type: "map",
69
- Map: alpha,
70
- Key: schemaprotobuf.IProtobufSchema_IString{Type: "string"},
71
- Value: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int32"},
72
- },
73
- Index: &second,
74
- }
75
- concreteMap := schemametadata.MetadataMap_create(schemametadata.MetadataMap{
76
- Key: protobufProgrammerAtomic("string"),
77
- Value: protobufProgrammerAtomic("number"),
78
- })
79
- concreteMapSchema := &schemaprotobuf.IProtobufPropertyType_IMap{
80
- IProtobufSchema_IMap: schemaprotobuf.IProtobufSchema_IMap{
81
- Type: "map",
82
- Map: concreteMap,
83
- Key: schemaprotobuf.IProtobufSchema_IString{Type: "string"},
84
- Value: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int32"},
85
- },
86
- Index: &second,
87
- }
88
- arrayType := schemametadata.MetadataArrayType_create(schemametadata.MetadataArrayType{
89
- Name: "string[]",
90
- Value: protobufProgrammerLiteral("value"),
91
- Nullables: []bool{},
92
- })
93
- propertyVariants := []schemaprotobuf.IProtobufPropertyType{
94
- &schemaprotobuf.IProtobufPropertyType_IByte{IProtobufSchema_IByte: schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"}, Index: &first},
95
- &schemaprotobuf.IProtobufPropertyType_IBoolean{IProtobufSchema_IBoolean: schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"}, Index: &first},
96
- &schemaprotobuf.IProtobufPropertyType_IBigint{IProtobufSchema_IBigint: schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"}, Index: &first},
97
- &schemaprotobuf.IProtobufPropertyType_INumber{IProtobufSchema_INumber: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "double"}, Index: &first},
98
- &schemaprotobuf.IProtobufPropertyType_IString{IProtobufSchema_IString: schemaprotobuf.IProtobufSchema_IString{Type: "string"}, Index: &first},
99
- &schemaprotobuf.IProtobufPropertyType_IArray{IProtobufSchema_IArray: schemaprotobuf.IProtobufSchema_IArray{Type: "array", Array: arrayType, Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}}, Index: &first},
100
- objectSchema,
101
- mapSchema,
102
- concreteMapSchema,
103
- }
104
- for _, variant := range propertyVariants {
105
- if protobufEncodeProgrammer_propertyIndex(variant) == nil ||
106
- protobufDecodeProgrammer_propertyIndex(variant) == nil ||
107
- protobufEncodeProgrammer_schemaType(variant) == "" ||
108
- protobufDecodeProgrammer_schemaType(variant) == "" {
109
- t.Fatalf("protobuf property switch missed %T", variant)
110
- }
111
- if protobufDecodeProgrammer_decode_property_type(protobufDecodeProgrammer_decodePropertyTypeProps{
112
- Context: context,
113
- Accessor: input,
114
- Schema: variant,
115
- Required: false,
116
- }) == nil {
117
- t.Fatalf("protobuf decode property switch missed %T", variant)
118
- }
119
- }
120
- schemaVariants := []schemaprotobuf.IProtobufSchema{
121
- schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"},
122
- schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
123
- schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"},
124
- schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "float"},
125
- schemaprotobuf.IProtobufSchema_IString{Type: "string"},
126
- schemaprotobuf.IProtobufSchema_IArray{Type: "array", Array: arrayType, Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}},
127
- schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: alpha},
128
- schemaprotobuf.IProtobufSchema_IMap{Type: "map", Map: alpha, Key: schemaprotobuf.IProtobufSchema_IString{Type: "string"}, Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}},
129
- }
130
- for _, variant := range schemaVariants {
131
- if protobufEncodeProgrammer_schemaType(variant) == "" ||
132
- protobufDecodeProgrammer_schemaType(variant) == "" {
133
- t.Fatalf("protobuf schema switch missed %T", variant)
134
- }
135
- }
136
- if protobufDecodeProgrammer_arrayValueName(propertyVariants[5]) != "\"value\"" ||
137
- protobufDecodeProgrammer_arrayValueName(schemaprotobuf.IProtobufSchema_IArray{Type: "array", Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}}) != "string" ||
138
- protobufDecodeProgrammer_arrayValueName(schemaprotobuf.IProtobufSchema_IString{Type: "string"}) != "unknown" {
139
- t.Fatal("protobuf array value name branch mismatch")
140
- }
141
- if protobufDecodeProgrammer_propertyIndex(nil) != nil ||
142
- protobufDecodeProgrammer_schemaType(nil) != "" ||
143
- protobufDecodeProgrammer_numberName(schemaprotobuf.IProtobufSchema_IString{Type: "string"}) != "" ||
144
- protobufDecodeProgrammer_arrayValue(nil) != nil ||
145
- protobufDecodeProgrammer_objectSchema(&schemaprotobuf.IProtobufPropertyType_IObject{IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta}, Index: &first}) != beta {
146
- t.Fatal("protobuf decode fallback switch helpers mismatch")
147
- }
148
- if protobufEncodeProgrammer_propertyIndex(objectSchema) == nil ||
149
- protobufEncodeProgrammer_schemaType(mapSchema) != "map" ||
150
- protobufEncodeProgrammer_objectSchema(mapSchema) != alpha ||
151
- len(protobufEncodeProgrammer_objectSchemas([]schemaprotobuf.IProtobufPropertyType{objectSchema, mapSchema})) != 2 {
152
- t.Fatal("protobuf object schema helpers missed object/map branches")
153
- }
154
- for _, schemas := range [][]schemaprotobuf.IProtobufPropertyType{
155
- {objectSchema},
156
- {mapSchema},
157
- {
158
- objectSchema,
159
- &schemaprotobuf.IProtobufPropertyType_IObject{
160
- IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta},
161
- Index: &second,
162
- },
163
- &schemaprotobuf.IProtobufPropertyType_IObject{
164
- IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: rest},
165
- Index: &second,
166
- },
167
- },
168
- } {
169
- if protobufEncodeProgrammer_explore_objects(protobufEncodeProgrammer_exploreObjectsProps{
170
- Context: context,
171
- Functor: functor,
172
- Input: input,
173
- Schemas: schemas,
174
- Explore: nativeinternal.FeatureProgrammer_IExplore{Tracable: true},
175
- }) == nil {
176
- t.Fatal("protobuf object exploration returned nil")
177
- }
178
- }
179
- unionBlock := protobufEncodeProgrammer_decode_property(protobufEncodeProgrammer_decodePropertyProps{
180
- Context: context,
181
- Functor: functor,
182
- Metadata: schemametadata.MetadataSchema_initialize(),
183
- Protobuf: &schemaprotobuf.IProtobufProperty{Union: propertyVariants},
184
- Input: input,
185
- Explore: nativeinternal.FeatureProgrammer_IExplore{Tracable: true},
186
- })
187
- if unionBlock == nil {
188
- t.Fatal("protobuf union property should decode")
189
- }
190
- for _, meta := range []*schemametadata.MetadataSchema{
191
- schemametadata.MetadataSchema_create(schemametadata.MetadataSchema{Optional: true, Nullable: true}),
192
- schemametadata.MetadataSchema_create(schemametadata.MetadataSchema{Optional: true}),
193
- schemametadata.MetadataSchema_create(schemametadata.MetadataSchema{Required: true, Nullable: true}),
194
- } {
195
- if protobufEncodeProgrammer_decode_property(protobufEncodeProgrammer_decodePropertyProps{
196
- Context: context,
197
- Functor: functor,
198
- Metadata: meta,
199
- Protobuf: &schemaprotobuf.IProtobufProperty{Union: []schemaprotobuf.IProtobufPropertyType{
200
- &schemaprotobuf.IProtobufPropertyType_IString{IProtobufSchema_IString: schemaprotobuf.IProtobufSchema_IString{Type: "string"}, Index: &first},
201
- }},
202
- Input: input,
203
- }) == nil {
204
- t.Fatal("protobuf optional/nullable wrapper should decode")
205
- }
206
- }
207
- if protobufEncodeProgrammer_decode_property(protobufEncodeProgrammer_decodePropertyProps{
208
- Context: context,
209
- Functor: functor,
210
- Metadata: schemametadata.MetadataSchema_initialize(),
211
- Protobuf: &schemaprotobuf.IProtobufProperty{},
212
- Input: input,
213
- }) == nil {
214
- t.Fatal("protobuf empty union should produce an empty block")
215
- }
216
- if len(protobufDecodeProgrammer_decode_property(protobufDecodeProgrammer_decodePropertyProps{
217
- Context: context,
218
- Metadata: schemametadata.MetadataSchema_initialize(),
219
- Protobuf: nil,
220
- Accessor: input,
221
- })) != 0 {
222
- t.Fatal("nil protobuf property should produce no decode statements")
223
- }
224
- for _, meta := range []*schemametadata.MetadataSchema{
225
- func() *schemametadata.MetadataSchema {
226
- next := schemametadata.MetadataSchema_initialize()
227
- next.Arrays = append(next.Arrays, schemametadata.MetadataArray_create(schemametadata.MetadataArray{Type: arrayType}))
228
- return next
229
- }(),
230
- func() *schemametadata.MetadataSchema {
231
- next := schemametadata.MetadataSchema_initialize()
232
- next.Maps = append(next.Maps, concreteMap)
233
- return next
234
- }(),
235
- func() *schemametadata.MetadataSchema {
236
- next := schemametadata.MetadataSchema_initialize()
237
- next.Natives = append(next.Natives, schemametadata.MetadataNative_create(schemametadata.MetadataNative{Name: "Uint8Array"}))
238
- return next
239
- }(),
240
- protobufProgrammerAtomic("string"),
241
- func() *schemametadata.MetadataSchema {
242
- next := schemametadata.MetadataSchema_initialize()
243
- next.Constants = append(next.Constants, schemametadata.MetadataConstant_create(schemametadata.MetadataConstant{
244
- Type: "string",
245
- Values: []*schemametadata.MetadataConstantValue{
246
- schemametadata.MetadataConstantValue_create(schemametadata.MetadataConstantValue{Value: ""}),
247
- },
248
- }))
249
- return next
250
- }(),
251
- func() *schemametadata.MetadataSchema {
252
- next := schemametadata.MetadataSchema_initialize()
253
- next.Templates = append(next.Templates, schemametadata.MetadataTemplate_create(schemametadata.MetadataTemplate{
254
- Row: []*schemametadata.MetadataSchema{protobufProgrammerAtomic("string")},
255
- }))
256
- return next
257
- }(),
258
- func() *schemametadata.MetadataSchema {
259
- next := schemametadata.MetadataSchema_initialize()
260
- next.Objects = append(next.Objects, schemametadata.MetadataObject_create(schemametadata.MetadataObject{
261
- Type: schemametadata.MetadataObjectType_create(schemametadata.MetadataObjectType{Name: "Dynamic"}),
262
- }))
263
- return next
264
- }(),
265
- } {
266
- if protobufDecodeProgrammer_write_property_default_value(meta, emit) == nil {
267
- t.Fatal("protobuf decode default value returned nil")
268
- }
269
- }
270
- if protobufDecodeProgrammer_write_object_function_body(protobufDecodeProgrammer_objectBodyProps{
271
- Context: nativecontext.ITypiaContext{},
272
- Condition: protobufDecodeProgrammer_factory.NewKeywordExpression(
273
- shimast.KindTrueKeyword,
274
- ),
275
- Tag: "tag",
276
- Output: "output",
277
- Object: protobufProgrammerObject("DecodeBody", "kind", "body"),
278
- }) == nil {
279
- t.Fatal("protobuf decode object body returned nil")
280
- }
281
- if protobufDecodeProgrammer_decode_number(schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int64"}, emit) == nil ||
282
- protobufDecodeProgrammer_decode_number(&schemaprotobuf.IProtobufPropertyType_INumber{IProtobufSchema_INumber: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "uint64"}, Index: &first}, emit) == nil {
283
- t.Fatal("protobuf decode number bigint-compatible branch returned nil")
284
- }
285
- for _, schema := range []schemaprotobuf.IProtobufSchema{
286
- schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"},
287
- schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
288
- schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"},
289
- schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "double"},
290
- schemaprotobuf.IProtobufSchema_IString{Type: "string"},
291
- schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta},
292
- } {
293
- if protobufDecodeProgrammer_decode_array_value(schema, emit) == nil {
294
- t.Fatalf("protobuf decode array value returned nil for %T", schema)
295
- }
296
- }
297
- if protobufDecodeProgrammer_decode_array(protobufDecodeProgrammer_decodeArrayProps{
298
- Accessor: input,
299
- Schema: schemaprotobuf.IProtobufSchema_IArray{
300
- Type: "array",
301
- Value: schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
302
- },
303
- Required: false,
304
- }, emit) == nil || protobufDecodeProgrammer_decode_array(protobufDecodeProgrammer_decodeArrayProps{
305
- Accessor: input,
306
- Schema: schemaprotobuf.IProtobufSchema_IArray{
307
- Type: "array",
308
- Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"},
309
- },
310
- Required: true,
311
- }, emit) == nil {
312
- t.Fatal("protobuf decode array branches returned nil")
313
- }
314
- if protobufDecodeProgrammer_decode_map(protobufDecodeProgrammer_decodeMapProps{
315
- Context: context,
316
- Accessor: input,
317
- Key: protobufProgrammerAtomic("string"),
318
- Value: protobufProgrammerAtomic("number"),
319
- Schema: schemaprotobuf.IProtobufSchema_IMap{Type: "map"},
320
- Initializer: factory.NewNewExpression(factory.NewIdentifier("Map"), nil, nil),
321
- Required: true,
322
- Setter: func() *shimast.Node { return input },
323
- }) == nil || protobufDecodeProgrammer_decode_map(protobufDecodeProgrammer_decodeMapProps{
324
- Context: context,
325
- Accessor: input,
326
- Key: protobufProgrammerAtomic("string"),
327
- Value: protobufProgrammerAtomic("number"),
328
- Schema: schemaprotobuf.IProtobufSchema_IMap{Type: "map"},
329
- Initializer: factory.NewNewExpression(factory.NewIdentifier("Map"), nil, nil),
330
- Required: false,
331
- Setter: func() *shimast.Node { return input },
332
- }) == nil {
333
- t.Fatal("protobuf decode map branches returned nil")
334
- }
335
- func() {
336
- defer func() {
337
- if recover() == nil {
338
- t.Fatal("protobuf decode property type default should panic")
339
- }
340
- }()
341
- _ = protobufDecodeProgrammer_decode_property_type(protobufDecodeProgrammer_decodePropertyTypeProps{
342
- Context: context,
343
- Accessor: input,
344
- Schema: nil,
345
- Required: true,
346
- })
347
- }()
348
- func() {
349
- defer func() {
350
- if recover() == nil {
351
- t.Fatal("protobuf decode array value default should panic")
352
- }
353
- }()
354
- _ = protobufDecodeProgrammer_decode_array_value(nil, emit)
355
- }()
356
- for _, schema := range []schemaprotobuf.IProtobufSchema{
357
- &schemaprotobuf.IProtobufPropertyType_IBoolean{IProtobufSchema_IBoolean: schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"}, Index: &first},
358
- schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
359
- &schemaprotobuf.IProtobufPropertyType_IBigint{IProtobufSchema_IBigint: schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"}, Index: &first},
360
- schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "uint64"},
361
- &schemaprotobuf.IProtobufPropertyType_INumber{IProtobufSchema_INumber: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "float"}, Index: &first},
362
- schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "double"},
363
- schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"},
364
- schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta},
365
- } {
366
- if protobufEncodeProgrammer_decode_container_value(struct {
367
- Context nativecontext.ITypiaContext
368
- Functor *nativehelpers.FunctionProgrammer
369
- Schema schemaprotobuf.IProtobufSchema
370
- Index int
371
- Kind string
372
- Input *shimast.Node
373
- }{Context: context, Functor: functor, Schema: schema, Index: 1, Kind: "map", Input: input}) == nil {
374
- t.Fatalf("protobuf container value should decode %T", schema)
375
- }
376
- }
377
- if protobufEncodeProgrammer_decode_bigint(struct {
378
- Candidates []string
379
- Type string
380
- Input *shimast.Node
381
- Index *int
382
- }{Candidates: []string{"int64"}, Type: "int64", Input: input, Index: &first}, emit).Is() == nil {
383
- t.Fatal("single bigint candidate should use typeof predicate")
384
- }
385
- if protobufEncodeProgrammer_decode_number(struct {
386
- Candidates []string
387
- Type string
388
- Input *shimast.Node
389
- Index *int
390
- }{Candidates: []string{"int32", "uint32"}, Type: "uint32", Input: input, Index: &first}, emit).Is() == nil {
391
- t.Fatal("multiple number candidates should use range predicate")
392
- }
393
- if protobufEncodeProgrammer_containerIndex("array", 1) != nil ||
394
- protobufEncodeProgrammer_indexValue(nil) != 0 ||
395
- func() bool {
396
- _, ok := protobufEncodeProgrammer_numberSchema(schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int32"})
397
- return ok
398
- }() == false ||
399
- func() bool {
400
- _, ok := protobufEncodeProgrammer_numberSchema(schemaprotobuf.IProtobufSchema_IString{Type: "string"})
401
- return ok
402
- }() {
403
- t.Fatal("protobuf fallback helper branches mismatch")
404
- }
405
- if protobufEncodeProgrammer_objectSchema(schemaprotobuf.IProtobufSchema_IMap{Type: "map", Map: beta}) != beta ||
406
- protobufEncodeProgrammer_objectSchema(schemaprotobuf.IProtobufSchema_IString{Type: "string"}) != nil {
407
- t.Fatal("protobuf object schema fallback mismatch")
408
- }
409
- nodeName := factory.NewIdentifier("DirectType")
410
- if protobufEncodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: "StringType"}) == nil ||
411
- protobufEncodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: nodeName}) != nodeName ||
412
- protobufEncodeProgrammer_internal(context, "internal") == nil ||
413
- protobufEncodeProgrammer_method_text(nil) != "" {
414
- t.Fatal("protobuf import/internal/method fallback helpers mismatch")
415
- }
416
- importContext := nativecontext.ITypiaContext{Importer: nativecontext.NewImportProgrammer()}
417
- if protobufDecodeProgrammer_import_type(importContext, nativecontext.ImportProgrammer_TypeProps{Name: "Imported"}) == nil ||
418
- protobufDecodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: "StringType"}) == nil ||
419
- protobufDecodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: nodeName}) != nodeName ||
420
- protobufDecodeProgrammer_internal(importContext, "internal") == nil ||
421
- protobufDecodeProgrammer_internal(context, "internal") == nil ||
422
- protobufDecodeProgrammer_method_text(factory.NewIdentifier("method")) == "" {
423
- t.Fatal("protobuf decode import/internal/method helpers mismatch")
424
- }
425
- }
426
-
427
- func protobufProgrammerObject(name string, key string, value string) *schemametadata.MetadataObjectType {
428
- return schemametadata.MetadataObjectType_create(schemametadata.MetadataObjectType{
429
- Name: name,
430
- Properties: []*schemametadata.MetadataProperty{
431
- schemametadata.MetadataProperty_create(schemametadata.MetadataProperty{
432
- Key: protobufProgrammerLiteral(key),
433
- Value: protobufProgrammerLiteral(value),
434
- }),
435
- },
436
- })
437
- }
438
-
439
- func protobufProgrammerLiteral(value string) *schemametadata.MetadataSchema {
440
- meta := schemametadata.MetadataSchema_initialize()
441
- meta.Constants = append(meta.Constants, schemametadata.MetadataConstant_create(schemametadata.MetadataConstant{
442
- Type: "string",
443
- Values: []*schemametadata.MetadataConstantValue{
444
- schemametadata.MetadataConstantValue_create(schemametadata.MetadataConstantValue{Value: value}),
445
- },
446
- }))
447
- return meta
448
- }
449
-
450
- func protobufProgrammerAtomic(typ string) *schemametadata.MetadataSchema {
451
- meta := schemametadata.MetadataSchema_initialize()
452
- meta.Atomics = append(meta.Atomics, schemametadata.MetadataAtomic_create(schemametadata.MetadataAtomic{Type: typ}))
453
- return meta
454
- }
1
+ //go:build typia_native_internal
2
+ // +build typia_native_internal
3
+
4
+ package protobuf
5
+
6
+ import (
7
+ "testing"
8
+
9
+ shimast "github.com/microsoft/typescript-go/shim/ast"
10
+ shimprinter "github.com/microsoft/typescript-go/shim/printer"
11
+ nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
12
+ nativehelpers "github.com/samchon/typia/packages/typia/native/core/programmers/helpers"
13
+ nativeinternal "github.com/samchon/typia/packages/typia/native/core/programmers/internal"
14
+ schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
15
+ schemaprotobuf "github.com/samchon/typia/packages/typia/native/core/schemas/protobuf"
16
+ )
17
+
18
+ // TestProtobufProgrammerHelperCoverage exercises protobuf helper branches.
19
+ //
20
+ // Protobuf encode and decode helpers normalize schema variants and feature
21
+ // explore values before larger reader/writer generation starts. They are pure
22
+ // helpers, so direct unit calls are enough to keep these branches visible.
23
+ //
24
+ // 1. Read bigint names from property and schema bigint variants.
25
+ // 2. Verify unsupported bigint schema variants return an empty name.
26
+ // 3. Convert feature explore values from value, pointer, and unknown inputs.
27
+ // 4. Convert feature explore values into checker explore values.
28
+ // 5. Visit encode/decode schema switches for every protobuf property variant.
29
+ // 6. Build object, map, and discriminator-union protobuf encode blocks.
30
+ // 7. Exercise encode union, wrapper, container, and fallback helper branches.
31
+ // 8. Exercise protobuf decode property, array, map, default, and importer helpers.
32
+ func TestProtobufProgrammerHelperCoverage(t *testing.T) {
33
+ emit := shimprinter.NewEmitContext()
34
+ if protobufDecodeProgrammer_bigintName(&schemaprotobuf.IProtobufPropertyType_IBigint{
35
+ IProtobufSchema_IBigint: schemaprotobuf.IProtobufSchema_IBigint{Name: "int64"},
36
+ }) != "int64" {
37
+ t.Fatal("protobuf bigint property name mismatch")
38
+ }
39
+ if protobufDecodeProgrammer_bigintName(schemaprotobuf.IProtobufSchema_IBigint{Name: "uint64"}) != "uint64" ||
40
+ protobufDecodeProgrammer_bigintName(schemaprotobuf.IProtobufSchema_IString{}) != "" {
41
+ t.Fatal("protobuf bigint schema name mismatch")
42
+ }
43
+ explore := nativeinternal.FeatureProgrammer_IExplore{Tracable: true, Source: "source", From: "from", Postfix: ".x"}
44
+ if protobufEncodeProgrammer_feature_explore(explore).Postfix != ".x" ||
45
+ protobufEncodeProgrammer_feature_explore(&explore).Source != "source" ||
46
+ protobufEncodeProgrammer_feature_explore("unknown").Postfix != "" {
47
+ t.Fatal("protobuf feature explore conversion mismatch")
48
+ }
49
+ if protobufEncodeProgrammer_checker_explore(&explore).From != "from" {
50
+ t.Fatal("protobuf checker explore conversion mismatch")
51
+ }
52
+
53
+ factory := shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
54
+ context := nativecontext.ITypiaContext{}
55
+ functor := nativehelpers.NewFunctionProgrammer("protobuf.encode")
56
+ input := factory.NewIdentifier("input")
57
+ first := 1
58
+ second := 2
59
+ alpha := protobufProgrammerObject("Alpha", "kind", "alpha")
60
+ beta := protobufProgrammerObject("Beta", "kind", "beta")
61
+ rest := schemametadata.MetadataObjectType_create(schemametadata.MetadataObjectType{Name: "Rest"})
62
+ objectSchema := &schemaprotobuf.IProtobufPropertyType_IObject{
63
+ IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: alpha},
64
+ Index: &first,
65
+ }
66
+ mapSchema := &schemaprotobuf.IProtobufPropertyType_IMap{
67
+ IProtobufSchema_IMap: schemaprotobuf.IProtobufSchema_IMap{
68
+ Type: "map",
69
+ Map: alpha,
70
+ Key: schemaprotobuf.IProtobufSchema_IString{Type: "string"},
71
+ Value: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int32"},
72
+ },
73
+ Index: &second,
74
+ }
75
+ concreteMap := schemametadata.MetadataMap_create(schemametadata.MetadataMap{
76
+ Key: protobufProgrammerAtomic("string"),
77
+ Value: protobufProgrammerAtomic("number"),
78
+ })
79
+ concreteMapSchema := &schemaprotobuf.IProtobufPropertyType_IMap{
80
+ IProtobufSchema_IMap: schemaprotobuf.IProtobufSchema_IMap{
81
+ Type: "map",
82
+ Map: concreteMap,
83
+ Key: schemaprotobuf.IProtobufSchema_IString{Type: "string"},
84
+ Value: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int32"},
85
+ },
86
+ Index: &second,
87
+ }
88
+ arrayType := schemametadata.MetadataArrayType_create(schemametadata.MetadataArrayType{
89
+ Name: "string[]",
90
+ Value: protobufProgrammerLiteral("value"),
91
+ Nullables: []bool{},
92
+ })
93
+ propertyVariants := []schemaprotobuf.IProtobufPropertyType{
94
+ &schemaprotobuf.IProtobufPropertyType_IByte{IProtobufSchema_IByte: schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"}, Index: &first},
95
+ &schemaprotobuf.IProtobufPropertyType_IBoolean{IProtobufSchema_IBoolean: schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"}, Index: &first},
96
+ &schemaprotobuf.IProtobufPropertyType_IBigint{IProtobufSchema_IBigint: schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"}, Index: &first},
97
+ &schemaprotobuf.IProtobufPropertyType_INumber{IProtobufSchema_INumber: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "double"}, Index: &first},
98
+ &schemaprotobuf.IProtobufPropertyType_IString{IProtobufSchema_IString: schemaprotobuf.IProtobufSchema_IString{Type: "string"}, Index: &first},
99
+ &schemaprotobuf.IProtobufPropertyType_IArray{IProtobufSchema_IArray: schemaprotobuf.IProtobufSchema_IArray{Type: "array", Array: arrayType, Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}}, Index: &first},
100
+ objectSchema,
101
+ mapSchema,
102
+ concreteMapSchema,
103
+ }
104
+ for _, variant := range propertyVariants {
105
+ if protobufEncodeProgrammer_propertyIndex(variant) == nil ||
106
+ protobufDecodeProgrammer_propertyIndex(variant) == nil ||
107
+ protobufEncodeProgrammer_schemaType(variant) == "" ||
108
+ protobufDecodeProgrammer_schemaType(variant) == "" {
109
+ t.Fatalf("protobuf property switch missed %T", variant)
110
+ }
111
+ if protobufDecodeProgrammer_decode_property_type(protobufDecodeProgrammer_decodePropertyTypeProps{
112
+ Context: context,
113
+ Accessor: input,
114
+ Schema: variant,
115
+ Required: false,
116
+ }) == nil {
117
+ t.Fatalf("protobuf decode property switch missed %T", variant)
118
+ }
119
+ }
120
+ schemaVariants := []schemaprotobuf.IProtobufSchema{
121
+ schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"},
122
+ schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
123
+ schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"},
124
+ schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "float"},
125
+ schemaprotobuf.IProtobufSchema_IString{Type: "string"},
126
+ schemaprotobuf.IProtobufSchema_IArray{Type: "array", Array: arrayType, Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}},
127
+ schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: alpha},
128
+ schemaprotobuf.IProtobufSchema_IMap{Type: "map", Map: alpha, Key: schemaprotobuf.IProtobufSchema_IString{Type: "string"}, Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}},
129
+ }
130
+ for _, variant := range schemaVariants {
131
+ if protobufEncodeProgrammer_schemaType(variant) == "" ||
132
+ protobufDecodeProgrammer_schemaType(variant) == "" {
133
+ t.Fatalf("protobuf schema switch missed %T", variant)
134
+ }
135
+ }
136
+ if protobufDecodeProgrammer_arrayValueName(propertyVariants[5]) != "\"value\"" ||
137
+ protobufDecodeProgrammer_arrayValueName(schemaprotobuf.IProtobufSchema_IArray{Type: "array", Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"}}) != "string" ||
138
+ protobufDecodeProgrammer_arrayValueName(schemaprotobuf.IProtobufSchema_IString{Type: "string"}) != "unknown" {
139
+ t.Fatal("protobuf array value name branch mismatch")
140
+ }
141
+ if protobufDecodeProgrammer_propertyIndex(nil) != nil ||
142
+ protobufDecodeProgrammer_schemaType(nil) != "" ||
143
+ protobufDecodeProgrammer_numberName(schemaprotobuf.IProtobufSchema_IString{Type: "string"}) != "" ||
144
+ protobufDecodeProgrammer_arrayValue(nil) != nil ||
145
+ protobufDecodeProgrammer_objectSchema(&schemaprotobuf.IProtobufPropertyType_IObject{IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta}, Index: &first}) != beta {
146
+ t.Fatal("protobuf decode fallback switch helpers mismatch")
147
+ }
148
+ if protobufEncodeProgrammer_propertyIndex(objectSchema) == nil ||
149
+ protobufEncodeProgrammer_schemaType(mapSchema) != "map" ||
150
+ protobufEncodeProgrammer_objectSchema(mapSchema) != alpha ||
151
+ len(protobufEncodeProgrammer_objectSchemas([]schemaprotobuf.IProtobufPropertyType{objectSchema, mapSchema})) != 2 {
152
+ t.Fatal("protobuf object schema helpers missed object/map branches")
153
+ }
154
+ for _, schemas := range [][]schemaprotobuf.IProtobufPropertyType{
155
+ {objectSchema},
156
+ {mapSchema},
157
+ {
158
+ objectSchema,
159
+ &schemaprotobuf.IProtobufPropertyType_IObject{
160
+ IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta},
161
+ Index: &second,
162
+ },
163
+ &schemaprotobuf.IProtobufPropertyType_IObject{
164
+ IProtobufSchema_IObject: schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: rest},
165
+ Index: &second,
166
+ },
167
+ },
168
+ } {
169
+ if protobufEncodeProgrammer_explore_objects(protobufEncodeProgrammer_exploreObjectsProps{
170
+ Context: context,
171
+ Functor: functor,
172
+ Input: input,
173
+ Schemas: schemas,
174
+ Explore: nativeinternal.FeatureProgrammer_IExplore{Tracable: true},
175
+ }) == nil {
176
+ t.Fatal("protobuf object exploration returned nil")
177
+ }
178
+ }
179
+ unionBlock := protobufEncodeProgrammer_decode_property(protobufEncodeProgrammer_decodePropertyProps{
180
+ Context: context,
181
+ Functor: functor,
182
+ Metadata: schemametadata.MetadataSchema_initialize(),
183
+ Protobuf: &schemaprotobuf.IProtobufProperty{Union: propertyVariants},
184
+ Input: input,
185
+ Explore: nativeinternal.FeatureProgrammer_IExplore{Tracable: true},
186
+ })
187
+ if unionBlock == nil {
188
+ t.Fatal("protobuf union property should decode")
189
+ }
190
+ for _, meta := range []*schemametadata.MetadataSchema{
191
+ schemametadata.MetadataSchema_create(schemametadata.MetadataSchema{Optional: true, Nullable: true}),
192
+ schemametadata.MetadataSchema_create(schemametadata.MetadataSchema{Optional: true}),
193
+ schemametadata.MetadataSchema_create(schemametadata.MetadataSchema{Required: true, Nullable: true}),
194
+ } {
195
+ if protobufEncodeProgrammer_decode_property(protobufEncodeProgrammer_decodePropertyProps{
196
+ Context: context,
197
+ Functor: functor,
198
+ Metadata: meta,
199
+ Protobuf: &schemaprotobuf.IProtobufProperty{Union: []schemaprotobuf.IProtobufPropertyType{
200
+ &schemaprotobuf.IProtobufPropertyType_IString{IProtobufSchema_IString: schemaprotobuf.IProtobufSchema_IString{Type: "string"}, Index: &first},
201
+ }},
202
+ Input: input,
203
+ }) == nil {
204
+ t.Fatal("protobuf optional/nullable wrapper should decode")
205
+ }
206
+ }
207
+ if protobufEncodeProgrammer_decode_property(protobufEncodeProgrammer_decodePropertyProps{
208
+ Context: context,
209
+ Functor: functor,
210
+ Metadata: schemametadata.MetadataSchema_initialize(),
211
+ Protobuf: &schemaprotobuf.IProtobufProperty{},
212
+ Input: input,
213
+ }) == nil {
214
+ t.Fatal("protobuf empty union should produce an empty block")
215
+ }
216
+ if len(protobufDecodeProgrammer_decode_property(protobufDecodeProgrammer_decodePropertyProps{
217
+ Context: context,
218
+ Metadata: schemametadata.MetadataSchema_initialize(),
219
+ Protobuf: nil,
220
+ Accessor: input,
221
+ })) != 0 {
222
+ t.Fatal("nil protobuf property should produce no decode statements")
223
+ }
224
+ for _, meta := range []*schemametadata.MetadataSchema{
225
+ func() *schemametadata.MetadataSchema {
226
+ next := schemametadata.MetadataSchema_initialize()
227
+ next.Arrays = append(next.Arrays, schemametadata.MetadataArray_create(schemametadata.MetadataArray{Type: arrayType}))
228
+ return next
229
+ }(),
230
+ func() *schemametadata.MetadataSchema {
231
+ next := schemametadata.MetadataSchema_initialize()
232
+ next.Maps = append(next.Maps, concreteMap)
233
+ return next
234
+ }(),
235
+ func() *schemametadata.MetadataSchema {
236
+ next := schemametadata.MetadataSchema_initialize()
237
+ next.Natives = append(next.Natives, schemametadata.MetadataNative_create(schemametadata.MetadataNative{Name: "Uint8Array"}))
238
+ return next
239
+ }(),
240
+ protobufProgrammerAtomic("string"),
241
+ func() *schemametadata.MetadataSchema {
242
+ next := schemametadata.MetadataSchema_initialize()
243
+ next.Constants = append(next.Constants, schemametadata.MetadataConstant_create(schemametadata.MetadataConstant{
244
+ Type: "string",
245
+ Values: []*schemametadata.MetadataConstantValue{
246
+ schemametadata.MetadataConstantValue_create(schemametadata.MetadataConstantValue{Value: ""}),
247
+ },
248
+ }))
249
+ return next
250
+ }(),
251
+ func() *schemametadata.MetadataSchema {
252
+ next := schemametadata.MetadataSchema_initialize()
253
+ next.Templates = append(next.Templates, schemametadata.MetadataTemplate_create(schemametadata.MetadataTemplate{
254
+ Row: []*schemametadata.MetadataSchema{protobufProgrammerAtomic("string")},
255
+ }))
256
+ return next
257
+ }(),
258
+ func() *schemametadata.MetadataSchema {
259
+ next := schemametadata.MetadataSchema_initialize()
260
+ next.Objects = append(next.Objects, schemametadata.MetadataObject_create(schemametadata.MetadataObject{
261
+ Type: schemametadata.MetadataObjectType_create(schemametadata.MetadataObjectType{Name: "Dynamic"}),
262
+ }))
263
+ return next
264
+ }(),
265
+ } {
266
+ if protobufDecodeProgrammer_write_property_default_value(meta, emit) == nil {
267
+ t.Fatal("protobuf decode default value returned nil")
268
+ }
269
+ }
270
+ if protobufDecodeProgrammer_write_object_function_body(protobufDecodeProgrammer_objectBodyProps{
271
+ Context: nativecontext.ITypiaContext{},
272
+ Condition: protobufDecodeProgrammer_factory.NewKeywordExpression(
273
+ shimast.KindTrueKeyword,
274
+ ),
275
+ Tag: "tag",
276
+ Output: "output",
277
+ Object: protobufProgrammerObject("DecodeBody", "kind", "body"),
278
+ }) == nil {
279
+ t.Fatal("protobuf decode object body returned nil")
280
+ }
281
+ if protobufDecodeProgrammer_decode_number(schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int64"}, emit) == nil ||
282
+ protobufDecodeProgrammer_decode_number(&schemaprotobuf.IProtobufPropertyType_INumber{IProtobufSchema_INumber: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "uint64"}, Index: &first}, emit) == nil {
283
+ t.Fatal("protobuf decode number bigint-compatible branch returned nil")
284
+ }
285
+ for _, schema := range []schemaprotobuf.IProtobufSchema{
286
+ schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"},
287
+ schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
288
+ schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"},
289
+ schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "double"},
290
+ schemaprotobuf.IProtobufSchema_IString{Type: "string"},
291
+ schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta},
292
+ } {
293
+ if protobufDecodeProgrammer_decode_array_value(schema, emit) == nil {
294
+ t.Fatalf("protobuf decode array value returned nil for %T", schema)
295
+ }
296
+ }
297
+ if protobufDecodeProgrammer_decode_array(protobufDecodeProgrammer_decodeArrayProps{
298
+ Accessor: input,
299
+ Schema: schemaprotobuf.IProtobufSchema_IArray{
300
+ Type: "array",
301
+ Value: schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
302
+ },
303
+ Required: false,
304
+ }, emit) == nil || protobufDecodeProgrammer_decode_array(protobufDecodeProgrammer_decodeArrayProps{
305
+ Accessor: input,
306
+ Schema: schemaprotobuf.IProtobufSchema_IArray{
307
+ Type: "array",
308
+ Value: schemaprotobuf.IProtobufSchema_IString{Type: "string"},
309
+ },
310
+ Required: true,
311
+ }, emit) == nil {
312
+ t.Fatal("protobuf decode array branches returned nil")
313
+ }
314
+ if protobufDecodeProgrammer_decode_map(protobufDecodeProgrammer_decodeMapProps{
315
+ Context: context,
316
+ Accessor: input,
317
+ Key: protobufProgrammerAtomic("string"),
318
+ Value: protobufProgrammerAtomic("number"),
319
+ Schema: schemaprotobuf.IProtobufSchema_IMap{Type: "map"},
320
+ Initializer: factory.NewNewExpression(factory.NewIdentifier("Map"), nil, nil),
321
+ Required: true,
322
+ Setter: func() *shimast.Node { return input },
323
+ }) == nil || protobufDecodeProgrammer_decode_map(protobufDecodeProgrammer_decodeMapProps{
324
+ Context: context,
325
+ Accessor: input,
326
+ Key: protobufProgrammerAtomic("string"),
327
+ Value: protobufProgrammerAtomic("number"),
328
+ Schema: schemaprotobuf.IProtobufSchema_IMap{Type: "map"},
329
+ Initializer: factory.NewNewExpression(factory.NewIdentifier("Map"), nil, nil),
330
+ Required: false,
331
+ Setter: func() *shimast.Node { return input },
332
+ }) == nil {
333
+ t.Fatal("protobuf decode map branches returned nil")
334
+ }
335
+ func() {
336
+ defer func() {
337
+ if recover() == nil {
338
+ t.Fatal("protobuf decode property type default should panic")
339
+ }
340
+ }()
341
+ _ = protobufDecodeProgrammer_decode_property_type(protobufDecodeProgrammer_decodePropertyTypeProps{
342
+ Context: context,
343
+ Accessor: input,
344
+ Schema: nil,
345
+ Required: true,
346
+ })
347
+ }()
348
+ func() {
349
+ defer func() {
350
+ if recover() == nil {
351
+ t.Fatal("protobuf decode array value default should panic")
352
+ }
353
+ }()
354
+ _ = protobufDecodeProgrammer_decode_array_value(nil, emit)
355
+ }()
356
+ for _, schema := range []schemaprotobuf.IProtobufSchema{
357
+ &schemaprotobuf.IProtobufPropertyType_IBoolean{IProtobufSchema_IBoolean: schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"}, Index: &first},
358
+ schemaprotobuf.IProtobufSchema_IBoolean{Type: "bool"},
359
+ &schemaprotobuf.IProtobufPropertyType_IBigint{IProtobufSchema_IBigint: schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "int64"}, Index: &first},
360
+ schemaprotobuf.IProtobufSchema_IBigint{Type: "bigint", Name: "uint64"},
361
+ &schemaprotobuf.IProtobufPropertyType_INumber{IProtobufSchema_INumber: schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "float"}, Index: &first},
362
+ schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "double"},
363
+ schemaprotobuf.IProtobufSchema_IByte{Type: "bytes"},
364
+ schemaprotobuf.IProtobufSchema_IObject{Type: "object", Object: beta},
365
+ } {
366
+ if protobufEncodeProgrammer_decode_container_value(struct {
367
+ Context nativecontext.ITypiaContext
368
+ Functor *nativehelpers.FunctionProgrammer
369
+ Schema schemaprotobuf.IProtobufSchema
370
+ Index int
371
+ Kind string
372
+ Input *shimast.Node
373
+ }{Context: context, Functor: functor, Schema: schema, Index: 1, Kind: "map", Input: input}) == nil {
374
+ t.Fatalf("protobuf container value should decode %T", schema)
375
+ }
376
+ }
377
+ if protobufEncodeProgrammer_decode_bigint(struct {
378
+ Candidates []string
379
+ Type string
380
+ Input *shimast.Node
381
+ Index *int
382
+ }{Candidates: []string{"int64"}, Type: "int64", Input: input, Index: &first}, emit).Is() == nil {
383
+ t.Fatal("single bigint candidate should use typeof predicate")
384
+ }
385
+ if protobufEncodeProgrammer_decode_number(struct {
386
+ Candidates []string
387
+ Type string
388
+ Input *shimast.Node
389
+ Index *int
390
+ }{Candidates: []string{"int32", "uint32"}, Type: "uint32", Input: input, Index: &first}, emit).Is() == nil {
391
+ t.Fatal("multiple number candidates should use range predicate")
392
+ }
393
+ if protobufEncodeProgrammer_containerIndex("array", 1) != nil ||
394
+ protobufEncodeProgrammer_indexValue(nil) != 0 ||
395
+ func() bool {
396
+ _, ok := protobufEncodeProgrammer_numberSchema(schemaprotobuf.IProtobufSchema_INumber{Type: "number", Name: "int32"})
397
+ return ok
398
+ }() == false ||
399
+ func() bool {
400
+ _, ok := protobufEncodeProgrammer_numberSchema(schemaprotobuf.IProtobufSchema_IString{Type: "string"})
401
+ return ok
402
+ }() {
403
+ t.Fatal("protobuf fallback helper branches mismatch")
404
+ }
405
+ if protobufEncodeProgrammer_objectSchema(schemaprotobuf.IProtobufSchema_IMap{Type: "map", Map: beta}) != beta ||
406
+ protobufEncodeProgrammer_objectSchema(schemaprotobuf.IProtobufSchema_IString{Type: "string"}) != nil {
407
+ t.Fatal("protobuf object schema fallback mismatch")
408
+ }
409
+ nodeName := factory.NewIdentifier("DirectType")
410
+ if protobufEncodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: "StringType"}) == nil ||
411
+ protobufEncodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: nodeName}) != nodeName ||
412
+ protobufEncodeProgrammer_internal(context, "internal") == nil ||
413
+ protobufEncodeProgrammer_method_text(nil) != "" {
414
+ t.Fatal("protobuf import/internal/method fallback helpers mismatch")
415
+ }
416
+ importContext := nativecontext.ITypiaContext{Importer: nativecontext.NewImportProgrammer()}
417
+ if protobufDecodeProgrammer_import_type(importContext, nativecontext.ImportProgrammer_TypeProps{Name: "Imported"}) == nil ||
418
+ protobufDecodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: "StringType"}) == nil ||
419
+ protobufDecodeProgrammer_import_type(context, nativecontext.ImportProgrammer_TypeProps{Name: nodeName}) != nodeName ||
420
+ protobufDecodeProgrammer_internal(importContext, "internal") == nil ||
421
+ protobufDecodeProgrammer_internal(context, "internal") == nil ||
422
+ protobufDecodeProgrammer_method_text(factory.NewIdentifier("method")) == "" {
423
+ t.Fatal("protobuf decode import/internal/method helpers mismatch")
424
+ }
425
+ }
426
+
427
+ func protobufProgrammerObject(name string, key string, value string) *schemametadata.MetadataObjectType {
428
+ return schemametadata.MetadataObjectType_create(schemametadata.MetadataObjectType{
429
+ Name: name,
430
+ Properties: []*schemametadata.MetadataProperty{
431
+ schemametadata.MetadataProperty_create(schemametadata.MetadataProperty{
432
+ Key: protobufProgrammerLiteral(key),
433
+ Value: protobufProgrammerLiteral(value),
434
+ }),
435
+ },
436
+ })
437
+ }
438
+
439
+ func protobufProgrammerLiteral(value string) *schemametadata.MetadataSchema {
440
+ meta := schemametadata.MetadataSchema_initialize()
441
+ meta.Constants = append(meta.Constants, schemametadata.MetadataConstant_create(schemametadata.MetadataConstant{
442
+ Type: "string",
443
+ Values: []*schemametadata.MetadataConstantValue{
444
+ schemametadata.MetadataConstantValue_create(schemametadata.MetadataConstantValue{Value: value}),
445
+ },
446
+ }))
447
+ return meta
448
+ }
449
+
450
+ func protobufProgrammerAtomic(typ string) *schemametadata.MetadataSchema {
451
+ meta := schemametadata.MetadataSchema_initialize()
452
+ meta.Atomics = append(meta.Atomics, schemametadata.MetadataAtomic_create(schemametadata.MetadataAtomic{Type: typ}))
453
+ return meta
454
+ }