typia 13.0.0-dev.20260430 → 13.0.0-dev.20260502-2

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 (364) hide show
  1. package/lib/executable/TypiaGenerateWizard.js +55 -8
  2. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  3. package/lib/executable/TypiaGenerateWizard2.mjs +55 -8
  4. package/lib/executable/TypiaGenerateWizard2.mjs.map +1 -1
  5. package/lib/executable/generate/ttsc.js.map +1 -1
  6. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  7. package/lib/internal/_randomInteger.js.map +1 -1
  8. package/lib/internal/_validateReport.js.map +1 -1
  9. package/lib/transform.d.ts +2 -13
  10. package/lib/transform.js +4 -11
  11. package/lib/transform.js.map +1 -1
  12. package/lib/transform2.mjs +6 -14
  13. package/lib/transform2.mjs.map +1 -1
  14. package/native/adapter/adapter.go +128 -128
  15. package/native/adapter/cleanup.go +155 -172
  16. package/native/adapter/imports.go +80 -80
  17. package/native/adapter/visit.go +142 -142
  18. package/native/cmd/ttsc-typia/build.go +223 -223
  19. package/native/cmd/ttsc-typia/main.go +57 -57
  20. package/native/cmd/ttsc-typia/transform.go +421 -254
  21. package/native/cmd/ttsc-typia/transform_test.go +40 -0
  22. package/native/core/context/IProgrammerProps.go +7 -7
  23. package/native/core/context/ITransformOptions.go +5 -5
  24. package/native/core/context/ITypiaContext.go +13 -13
  25. package/native/core/context/TransformerError.go +81 -81
  26. package/native/core/factories/CommentFactory.go +9 -9
  27. package/native/core/factories/ExpressionFactory.go +254 -254
  28. package/native/core/factories/FormatCheatSheet.go +23 -23
  29. package/native/core/factories/IdentifierFactory.go +130 -130
  30. package/native/core/factories/JsonMetadataFactory.go +129 -129
  31. package/native/core/factories/LiteralFactory.go +195 -182
  32. package/native/core/factories/MetadataCommentTagFactory.go +379 -379
  33. package/native/core/factories/MetadataFactory.go +462 -462
  34. package/native/core/factories/MetadataTypeTagFactory.go +498 -498
  35. package/native/core/factories/MetadataTypeTagSchemaFactory.go +102 -102
  36. package/native/core/factories/NumericRangeFactory.go +84 -84
  37. package/native/core/factories/ProtobufFactory.go +933 -933
  38. package/native/core/factories/StatementFactory.go +72 -72
  39. package/native/core/factories/TemplateFactory.go +57 -57
  40. package/native/core/factories/TypeFactory.go +125 -125
  41. package/native/core/factories/ValueFactory.go +12 -12
  42. package/native/core/factories/internal/metadata/IMetadataIteratorProps.go +35 -35
  43. package/native/core/factories/internal/metadata/MetadataHelper.go +176 -176
  44. package/native/core/factories/internal/metadata/emend_metadata_atomics.go +69 -69
  45. package/native/core/factories/internal/metadata/emplace_metadata_alias.go +27 -27
  46. package/native/core/factories/internal/metadata/emplace_metadata_array_type.go +33 -33
  47. package/native/core/factories/internal/metadata/emplace_metadata_object.go +209 -209
  48. package/native/core/factories/internal/metadata/emplace_metadata_tuple.go +50 -50
  49. package/native/core/factories/internal/metadata/explore_metadata.go +29 -29
  50. package/native/core/factories/internal/metadata/iterate_metadata.go +46 -46
  51. package/native/core/factories/internal/metadata/iterate_metadata_alias.go +25 -25
  52. package/native/core/factories/internal/metadata/iterate_metadata_array.go +65 -65
  53. package/native/core/factories/internal/metadata/iterate_metadata_atomic.go +49 -49
  54. package/native/core/factories/internal/metadata/iterate_metadata_coalesce.go +22 -22
  55. package/native/core/factories/internal/metadata/iterate_metadata_collection.go +228 -228
  56. package/native/core/factories/internal/metadata/iterate_metadata_comment_tags.go +12 -12
  57. package/native/core/factories/internal/metadata/iterate_metadata_constant.go +71 -71
  58. package/native/core/factories/internal/metadata/iterate_metadata_escape.go +48 -48
  59. package/native/core/factories/internal/metadata/iterate_metadata_function.go +82 -82
  60. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +319 -319
  61. package/native/core/factories/internal/metadata/iterate_metadata_map.go +51 -51
  62. package/native/core/factories/internal/metadata/iterate_metadata_native.go +85 -85
  63. package/native/core/factories/internal/metadata/iterate_metadata_object.go +27 -27
  64. package/native/core/factories/internal/metadata/iterate_metadata_set.go +37 -37
  65. package/native/core/factories/internal/metadata/iterate_metadata_sort.go +137 -137
  66. package/native/core/factories/internal/metadata/iterate_metadata_template.go +33 -33
  67. package/native/core/factories/internal/metadata/iterate_metadata_tuple.go +16 -16
  68. package/native/core/factories/internal/metadata/iterate_metadata_union.go +18 -18
  69. package/native/core/programmers/AssertProgrammer.go +389 -389
  70. package/native/core/programmers/ImportProgrammer.go +196 -196
  71. package/native/core/programmers/IsProgrammer.go +293 -293
  72. package/native/core/programmers/RandomProgrammer.go +1094 -1094
  73. package/native/core/programmers/ValidateProgrammer.go +369 -369
  74. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +133 -133
  75. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +104 -104
  76. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +100 -100
  77. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +79 -79
  78. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +159 -159
  79. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +99 -99
  80. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +138 -138
  81. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +222 -222
  82. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +116 -116
  83. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +36 -36
  84. package/native/core/programmers/helpers/AtomicPredicator.go +35 -35
  85. package/native/core/programmers/helpers/CloneJoiner.go +217 -217
  86. package/native/core/programmers/helpers/FunctionProgrammer.go +79 -79
  87. package/native/core/programmers/helpers/HttpMetadataUtil.go +17 -17
  88. package/native/core/programmers/helpers/ICheckEntry.go +5 -5
  89. package/native/core/programmers/helpers/IExpressionEntry.go +6 -6
  90. package/native/core/programmers/helpers/NotationJoiner.go +159 -159
  91. package/native/core/programmers/helpers/OptionPredicator.go +4 -4
  92. package/native/core/programmers/helpers/ProtobufUtil.go +231 -231
  93. package/native/core/programmers/helpers/ProtobufWire.go +6 -6
  94. package/native/core/programmers/helpers/PruneJoiner.go +227 -227
  95. package/native/core/programmers/helpers/RandomJoiner.go +155 -155
  96. package/native/core/programmers/helpers/StringifyJoinder.go +331 -331
  97. package/native/core/programmers/helpers/StringifyPredicator.go +10 -10
  98. package/native/core/programmers/helpers/UnionExplorer.go +835 -835
  99. package/native/core/programmers/helpers/UnionPredicator.go +78 -78
  100. package/native/core/programmers/helpers/disable_function_programmer_declare.go +6 -6
  101. package/native/core/programmers/http/HttpAssertFormDataProgrammer.go +93 -93
  102. package/native/core/programmers/http/HttpAssertHeadersProgrammer.go +42 -42
  103. package/native/core/programmers/http/HttpAssertQueryProgrammer.go +51 -51
  104. package/native/core/programmers/http/HttpFormDataProgrammer.go +351 -351
  105. package/native/core/programmers/http/HttpHeadersProgrammer.go +370 -370
  106. package/native/core/programmers/http/HttpIsFormDataProgrammer.go +109 -109
  107. package/native/core/programmers/http/HttpIsHeadersProgrammer.go +36 -36
  108. package/native/core/programmers/http/HttpIsQueryProgrammer.go +45 -45
  109. package/native/core/programmers/http/HttpParameterProgrammer.go +158 -158
  110. package/native/core/programmers/http/HttpQueryProgrammer.go +422 -422
  111. package/native/core/programmers/http/HttpValidateFormDataProgrammer.go +87 -87
  112. package/native/core/programmers/http/HttpValidateHeadersProgrammer.go +39 -39
  113. package/native/core/programmers/http/HttpValidateQueryProgrammer.go +48 -48
  114. package/native/core/programmers/internal/CheckerProgrammer.go +1490 -1490
  115. package/native/core/programmers/internal/FeatureProgrammer.go +589 -589
  116. package/native/core/programmers/iterate/check_array_length.go +46 -46
  117. package/native/core/programmers/iterate/check_bigint.go +52 -52
  118. package/native/core/programmers/iterate/check_dynamic_key.go +220 -220
  119. package/native/core/programmers/iterate/check_dynamic_properties.go +245 -245
  120. package/native/core/programmers/iterate/check_everything.go +21 -21
  121. package/native/core/programmers/iterate/check_native.go +25 -25
  122. package/native/core/programmers/iterate/check_number.go +135 -135
  123. package/native/core/programmers/iterate/check_object.go +66 -66
  124. package/native/core/programmers/iterate/check_string.go +52 -52
  125. package/native/core/programmers/iterate/check_template.go +57 -57
  126. package/native/core/programmers/iterate/check_union_array_like.go +372 -372
  127. package/native/core/programmers/iterate/decode_union_object.go +118 -118
  128. package/native/core/programmers/iterate/feature_object_entries.go +134 -134
  129. package/native/core/programmers/iterate/json_schema_alias.go +52 -52
  130. package/native/core/programmers/iterate/json_schema_array.go +52 -52
  131. package/native/core/programmers/iterate/json_schema_bigint.go +8 -8
  132. package/native/core/programmers/iterate/json_schema_boolean.go +8 -8
  133. package/native/core/programmers/iterate/json_schema_constant.go +38 -38
  134. package/native/core/programmers/iterate/json_schema_description.go +12 -12
  135. package/native/core/programmers/iterate/json_schema_discriminator.go +47 -47
  136. package/native/core/programmers/iterate/json_schema_escaped.go +58 -58
  137. package/native/core/programmers/iterate/json_schema_jsDocTags.go +34 -34
  138. package/native/core/programmers/iterate/json_schema_native.go +43 -43
  139. package/native/core/programmers/iterate/json_schema_number.go +8 -8
  140. package/native/core/programmers/iterate/json_schema_object.go +149 -149
  141. package/native/core/programmers/iterate/json_schema_plugin.go +35 -35
  142. package/native/core/programmers/iterate/json_schema_station.go +211 -211
  143. package/native/core/programmers/iterate/json_schema_string.go +8 -8
  144. package/native/core/programmers/iterate/json_schema_template.go +53 -53
  145. package/native/core/programmers/iterate/json_schema_title.go +16 -16
  146. package/native/core/programmers/iterate/json_schema_tuple.go +34 -34
  147. package/native/core/programmers/iterate/metadata_to_pattern.go +53 -53
  148. package/native/core/programmers/iterate/postfix_of_tuple.go +5 -5
  149. package/native/core/programmers/iterate/prune_object_properties.go +85 -85
  150. package/native/core/programmers/iterate/stringify_dynamic_properties.go +193 -193
  151. package/native/core/programmers/iterate/stringify_native.go +1 -1
  152. package/native/core/programmers/iterate/stringify_regular_properties.go +84 -84
  153. package/native/core/programmers/iterate/template_to_pattern.go +20 -20
  154. package/native/core/programmers/iterate/wrap_metadata_rest_tuple.go +13 -13
  155. package/native/core/programmers/json/JsonApplicationProgrammer.go +323 -323
  156. package/native/core/programmers/json/JsonAssertParseProgrammer.go +100 -100
  157. package/native/core/programmers/json/JsonAssertStringifyProgrammer.go +88 -88
  158. package/native/core/programmers/json/JsonIsParseProgrammer.go +130 -130
  159. package/native/core/programmers/json/JsonIsStringifyProgrammer.go +92 -92
  160. package/native/core/programmers/json/JsonSchemaProgrammer.go +65 -65
  161. package/native/core/programmers/json/JsonSchemasProgrammer.go +116 -116
  162. package/native/core/programmers/json/JsonStringifyProgrammer.go +1245 -1245
  163. package/native/core/programmers/json/JsonValidateParseProgrammer.go +89 -89
  164. package/native/core/programmers/json/JsonValidateStringifyProgrammer.go +106 -106
  165. package/native/core/programmers/llm/LlmApplicationProgrammer.go +449 -437
  166. package/native/core/programmers/llm/LlmCoerceProgrammer.go +79 -79
  167. package/native/core/programmers/llm/LlmControllerProgrammer.go +35 -35
  168. package/native/core/programmers/llm/LlmMetadataFactory.go +74 -74
  169. package/native/core/programmers/llm/LlmParametersProgrammer.go +105 -132
  170. package/native/core/programmers/llm/LlmParseProgrammer.go +88 -88
  171. package/native/core/programmers/llm/LlmSchemaProgrammer.go +780 -423
  172. package/native/core/programmers/llm/LlmStructuredOutputProgrammer.go +123 -123
  173. package/native/core/programmers/misc/MiscAssertCloneProgrammer.go +82 -82
  174. package/native/core/programmers/misc/MiscAssertPruneProgrammer.go +97 -97
  175. package/native/core/programmers/misc/MiscCloneProgrammer.go +1056 -1056
  176. package/native/core/programmers/misc/MiscIsCloneProgrammer.go +94 -94
  177. package/native/core/programmers/misc/MiscIsPruneProgrammer.go +86 -86
  178. package/native/core/programmers/misc/MiscLiteralsProgrammer.go +99 -99
  179. package/native/core/programmers/misc/MiscPruneProgrammer.go +700 -700
  180. package/native/core/programmers/misc/MiscValidateCloneProgrammer.go +103 -103
  181. package/native/core/programmers/misc/MiscValidatePruneProgrammer.go +94 -94
  182. package/native/core/programmers/notations/NotationAssertGeneralProgrammer.go +85 -85
  183. package/native/core/programmers/notations/NotationGeneralProgrammer.go +1188 -1188
  184. package/native/core/programmers/notations/NotationIsGeneralProgrammer.go +90 -90
  185. package/native/core/programmers/notations/NotationValidateGeneralProgrammer.go +109 -109
  186. package/native/core/programmers/protobuf/ProtobufAssertDecodeProgrammer.go +99 -99
  187. package/native/core/programmers/protobuf/ProtobufAssertEncodeProgrammer.go +114 -114
  188. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +697 -697
  189. package/native/core/programmers/protobuf/ProtobufEncodeProgrammer.go +1039 -1039
  190. package/native/core/programmers/protobuf/ProtobufIsDecodeProgrammer.go +99 -99
  191. package/native/core/programmers/protobuf/ProtobufIsEncodeProgrammer.go +93 -93
  192. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +228 -228
  193. package/native/core/programmers/protobuf/ProtobufValidateDecodeProgrammer.go +88 -88
  194. package/native/core/programmers/protobuf/ProtobufValidateEncodeProgrammer.go +120 -120
  195. package/native/core/schemas/metadata/IMetadataDictionary.go +4 -4
  196. package/native/core/schemas/metadata/MetadataAlias.go +15 -15
  197. package/native/core/schemas/metadata/MetadataAliasType.go +36 -36
  198. package/native/core/schemas/metadata/MetadataApplication.go +25 -25
  199. package/native/core/schemas/metadata/MetadataArray.go +15 -15
  200. package/native/core/schemas/metadata/MetadataArrayType.go +31 -31
  201. package/native/core/schemas/metadata/MetadataAtomic.go +45 -45
  202. package/native/core/schemas/metadata/MetadataCollection.go +380 -380
  203. package/native/core/schemas/metadata/MetadataComponents.go +95 -95
  204. package/native/core/schemas/metadata/MetadataConstant.go +31 -31
  205. package/native/core/schemas/metadata/MetadataConstantValue.go +63 -63
  206. package/native/core/schemas/metadata/MetadataEscaped.go +17 -17
  207. package/native/core/schemas/metadata/MetadataFunction.go +30 -30
  208. package/native/core/schemas/metadata/MetadataMap.go +21 -21
  209. package/native/core/schemas/metadata/MetadataNative.go +48 -48
  210. package/native/core/schemas/metadata/MetadataObject.go +15 -15
  211. package/native/core/schemas/metadata/MetadataObjectType.go +116 -116
  212. package/native/core/schemas/metadata/MetadataParameter.go +28 -28
  213. package/native/core/schemas/metadata/MetadataProperty.go +32 -32
  214. package/native/core/schemas/metadata/MetadataSchema.go +766 -766
  215. package/native/core/schemas/metadata/MetadataSet.go +17 -17
  216. package/native/core/schemas/metadata/MetadataTemplate.go +43 -43
  217. package/native/core/schemas/metadata/MetadataTuple.go +10 -10
  218. package/native/core/schemas/metadata/MetadataTupleType.go +38 -38
  219. package/native/core/schemas/protobuf/IProtobufProperty.go +2 -2
  220. package/native/core/schemas/protobuf/IProtobufPropertyType.go +18 -18
  221. package/native/core/schemas/protobuf/IProtobufSchema.go +17 -17
  222. package/native/core/typings/Writable.go +1 -1
  223. package/native/core/utils/PatternUtil.go +38 -38
  224. package/native/core/utils/ProtobufNameEncoder.go +28 -28
  225. package/native/shim/printer/shim.go +213 -213
  226. package/native/third_party/ttsc/driver/host.go +7 -7
  227. package/native/third_party/ttsc/driver/program.go +275 -275
  228. package/native/third_party/ttsc/driver/rewrite.go +219 -219
  229. package/native/third_party/ttsc/shim/ast/lint.go +171 -171
  230. package/native/third_party/ttsc/shim/ast/shim.go +83 -83
  231. package/native/third_party/ttsc/shim/bundled/shim.go +5 -1
  232. package/native/third_party/ttsc/shim/checker/shim.go +79 -79
  233. package/native/third_party/ttsc/shim/compiler/shim.go +16 -1
  234. package/native/third_party/ttsc/shim/core/shim.go +10 -10
  235. package/native/third_party/ttsc/shim/diagnosticwriter/lint.go +79 -79
  236. package/native/third_party/ttsc/shim/diagnosticwriter/shim.go +19 -19
  237. package/native/third_party/ttsc/shim/parser/shim.go +7 -1
  238. package/native/third_party/ttsc/shim/scanner/shim.go +39 -1
  239. package/native/third_party/ttsc/shim/tsoptions/shim.go +51 -1
  240. package/native/third_party/ttsc/shim/tspath/shim.go +72 -1
  241. package/native/third_party/ttsc/shim/vfs/cachedvfs/shim.go +1 -1
  242. package/native/third_party/ttsc/shim/vfs/osvfs/shim.go +1 -1
  243. package/native/third_party/ttsc/shim/vfs/shim.go +4 -1
  244. package/native/transform/CallExpressionTransformer.go +556 -556
  245. package/native/transform/FileTransformer.go +123 -123
  246. package/native/transform/ImportTransformer.go +224 -224
  247. package/native/transform/NodeTransformer.go +11 -11
  248. package/native/transform/TypiaGenerator.go +136 -136
  249. package/native/transform/features/AssertTransformer.go +28 -28
  250. package/native/transform/features/CreateAssertTransformer.go +28 -28
  251. package/native/transform/features/CreateIsTransformer.go +24 -24
  252. package/native/transform/features/CreateRandomTransformer.go +35 -35
  253. package/native/transform/features/CreateValidateTransformer.go +24 -24
  254. package/native/transform/features/IsTransformer.go +24 -24
  255. package/native/transform/features/RandomTransformer.go +37 -37
  256. package/native/transform/features/ValidateTransformer.go +24 -24
  257. package/native/transform/features/functional/FunctionalGenericTransformer.go +48 -48
  258. package/native/transform/features/http/CreateHttpAssertFormDataTransformer.go +11 -11
  259. package/native/transform/features/http/CreateHttpAssertHeadersTransformer.go +11 -11
  260. package/native/transform/features/http/CreateHttpAssertQueryTransformer.go +17 -17
  261. package/native/transform/features/http/CreateHttpFormDataTransformer.go +11 -11
  262. package/native/transform/features/http/CreateHttpHeadersTransformer.go +11 -11
  263. package/native/transform/features/http/CreateHttpIsFormDataTransformer.go +11 -11
  264. package/native/transform/features/http/CreateHttpIsHeadersTransformer.go +11 -11
  265. package/native/transform/features/http/CreateHttpIsQueryTransformer.go +17 -17
  266. package/native/transform/features/http/CreateHttpParameterTransformer.go +11 -11
  267. package/native/transform/features/http/CreateHttpQueryTransformer.go +17 -17
  268. package/native/transform/features/http/CreateHttpValidateFormDataTransformer.go +11 -11
  269. package/native/transform/features/http/CreateHttpValidateHeadersTransformer.go +11 -11
  270. package/native/transform/features/http/CreateHttpValidateQueryTransformer.go +17 -17
  271. package/native/transform/features/http/HttpAssertFormDataTransformer.go +11 -11
  272. package/native/transform/features/http/HttpAssertHeadersTransformer.go +11 -11
  273. package/native/transform/features/http/HttpAssertQueryTransformer.go +17 -17
  274. package/native/transform/features/http/HttpFormDataTransformer.go +11 -11
  275. package/native/transform/features/http/HttpHeadersTransformer.go +11 -11
  276. package/native/transform/features/http/HttpIsFormDataTransformer.go +11 -11
  277. package/native/transform/features/http/HttpIsHeadersTransformer.go +11 -11
  278. package/native/transform/features/http/HttpIsQueryTransformer.go +17 -17
  279. package/native/transform/features/http/HttpParameterTransformer.go +11 -11
  280. package/native/transform/features/http/HttpQueryTransformer.go +17 -17
  281. package/native/transform/features/http/HttpValidateFormDataTransformer.go +11 -11
  282. package/native/transform/features/http/HttpValidateHeadersTransformer.go +11 -11
  283. package/native/transform/features/http/HttpValidateQueryTransformer.go +17 -17
  284. package/native/transform/features/json/JsonApplicationTransformer.go +61 -61
  285. package/native/transform/features/json/JsonAssertParseTransformer.go +11 -11
  286. package/native/transform/features/json/JsonAssertStringifyTransformer.go +11 -11
  287. package/native/transform/features/json/JsonCreateAssertParseTransformer.go +11 -11
  288. package/native/transform/features/json/JsonCreateAssertStringifyTransformer.go +11 -11
  289. package/native/transform/features/json/JsonCreateIsParseTransformer.go +11 -11
  290. package/native/transform/features/json/JsonCreateIsStringifyTransformer.go +11 -11
  291. package/native/transform/features/json/JsonCreateStringifyTransformer.go +11 -11
  292. package/native/transform/features/json/JsonCreateValidateParseTransformer.go +11 -11
  293. package/native/transform/features/json/JsonCreateValidateStringifyProgrammer.go +11 -11
  294. package/native/transform/features/json/JsonIsParseTransformer.go +11 -11
  295. package/native/transform/features/json/JsonIsStringifyTransformer.go +11 -11
  296. package/native/transform/features/json/JsonSchemaTransformer.go +148 -148
  297. package/native/transform/features/json/JsonSchemasTransformer.go +94 -94
  298. package/native/transform/features/json/JsonStringifyTransformer.go +11 -11
  299. package/native/transform/features/json/JsonValidateParseTransformer.go +11 -11
  300. package/native/transform/features/json/JsonValidateStringifyTransformer.go +11 -11
  301. package/native/transform/features/llm/LlmApplicationTransformer.go +43 -43
  302. package/native/transform/features/llm/LlmCoerceTransformer.go +50 -50
  303. package/native/transform/features/llm/LlmControllerTransformer.go +48 -48
  304. package/native/transform/features/llm/LlmCreateCoerceTransformer.go +43 -43
  305. package/native/transform/features/llm/LlmCreateParseTransformer.go +43 -43
  306. package/native/transform/features/llm/LlmParametersTransformer.go +38 -38
  307. package/native/transform/features/llm/LlmParseTransformer.go +50 -50
  308. package/native/transform/features/llm/LlmSchemaTransformer.go +129 -129
  309. package/native/transform/features/llm/LlmStructuredOutputTransformer.go +44 -44
  310. package/native/transform/features/misc/MiscAssertCloneTransformer.go +11 -11
  311. package/native/transform/features/misc/MiscAssertPruneTransformer.go +11 -11
  312. package/native/transform/features/misc/MiscCloneTransformer.go +11 -11
  313. package/native/transform/features/misc/MiscCreateAssertCloneTransformer.go +11 -11
  314. package/native/transform/features/misc/MiscCreateAssertPruneTransformer.go +11 -11
  315. package/native/transform/features/misc/MiscCreateCloneTransformer.go +11 -11
  316. package/native/transform/features/misc/MiscCreateIsCloneTransformer.go +11 -11
  317. package/native/transform/features/misc/MiscCreateIsPruneTransformer.go +11 -11
  318. package/native/transform/features/misc/MiscCreatePruneTransformer.go +11 -11
  319. package/native/transform/features/misc/MiscCreateValidateCloneTransformer.go +11 -11
  320. package/native/transform/features/misc/MiscCreateValidatePruneTransformer.go +11 -11
  321. package/native/transform/features/misc/MiscIsCloneTransformer.go +11 -11
  322. package/native/transform/features/misc/MiscIsPruneTransformer.go +11 -11
  323. package/native/transform/features/misc/MiscLiteralsTransformer.go +21 -21
  324. package/native/transform/features/misc/MiscPruneTransformer.go +11 -11
  325. package/native/transform/features/misc/MiscValidateCloneTransformer.go +11 -11
  326. package/native/transform/features/misc/MiscValidatePruneTransformer.go +11 -11
  327. package/native/transform/features/notations/NotationAssertGeneralTransformer.go +16 -16
  328. package/native/transform/features/notations/NotationCreateAssertGeneralTransformer.go +16 -16
  329. package/native/transform/features/notations/NotationCreateGeneralTransformer.go +16 -16
  330. package/native/transform/features/notations/NotationCreateIsGeneralTransformer.go +16 -16
  331. package/native/transform/features/notations/NotationCreateValidateGeneralTransformer.go +16 -16
  332. package/native/transform/features/notations/NotationGeneralTransformer.go +21 -21
  333. package/native/transform/features/notations/NotationIsGeneralTransformer.go +16 -16
  334. package/native/transform/features/notations/NotationValidateGeneralTransformer.go +16 -16
  335. package/native/transform/features/protobuf/ProtobufAssertDecodeTransformer.go +11 -11
  336. package/native/transform/features/protobuf/ProtobufAssertEncodeTransformer.go +11 -11
  337. package/native/transform/features/protobuf/ProtobufCreateAssertDecodeTransformer.go +11 -11
  338. package/native/transform/features/protobuf/ProtobufCreateAssertEncodeTransformer.go +11 -11
  339. package/native/transform/features/protobuf/ProtobufCreateDecodeTransformer.go +11 -11
  340. package/native/transform/features/protobuf/ProtobufCreateEncodeTransformer.go +11 -11
  341. package/native/transform/features/protobuf/ProtobufCreateIsDecodeTransformer.go +11 -11
  342. package/native/transform/features/protobuf/ProtobufCreateIsEncodeTransformer.go +11 -11
  343. package/native/transform/features/protobuf/ProtobufCreateValidateDecodeTransformer.go +11 -11
  344. package/native/transform/features/protobuf/ProtobufCreateValidateEncodeTransformer.go +11 -11
  345. package/native/transform/features/protobuf/ProtobufDecodeTransformer.go +11 -11
  346. package/native/transform/features/protobuf/ProtobufEncodeTransformer.go +11 -11
  347. package/native/transform/features/protobuf/ProtobufIsDecodeTransformer.go +11 -11
  348. package/native/transform/features/protobuf/ProtobufIsEncodeTransformer.go +11 -11
  349. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +20 -20
  350. package/native/transform/features/protobuf/ProtobufValidateDecodeTransformer.go +11 -11
  351. package/native/transform/features/protobuf/ProtobufValidateEncodeTransformer.go +11 -11
  352. package/native/transform/features/reflect/ReflectMetadataTransformer.go +59 -59
  353. package/native/transform/features/reflect/ReflectNameTransformer.go +78 -78
  354. package/native/transform/features/reflect/ReflectSchemaTransformer.go +121 -121
  355. package/native/transform/features/reflect/ReflectSchemasTransformer.go +55 -55
  356. package/native/transform/internal/GenericTransformer.go +173 -173
  357. package/native/transform/transform.go +32 -32
  358. package/package.json +4 -4
  359. package/src/executable/TypiaGenerateWizard.ts +78 -9
  360. package/src/executable/generate/ttsc.ts +2 -3
  361. package/src/executable/setup/PluginConfigurator.ts +2 -3
  362. package/src/internal/_randomInteger.ts +5 -5
  363. package/src/internal/_validateReport.ts +1 -2
  364. package/src/transform.ts +6 -11
@@ -1,16 +1,16 @@
1
1
  package internal
2
2
 
3
3
  import (
4
- "fmt"
5
- "strings"
6
-
7
- shimast "github.com/microsoft/typescript-go/shim/ast"
8
- shimchecker "github.com/microsoft/typescript-go/shim/checker"
9
- nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
10
- nativefactories "github.com/samchon/typia/packages/typia/native/core/factories"
11
- nativehelpers "github.com/samchon/typia/packages/typia/native/core/programmers/helpers"
12
- nativeiterate "github.com/samchon/typia/packages/typia/native/core/programmers/iterate"
13
- nativemetadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
4
+ "fmt"
5
+ "strings"
6
+
7
+ shimast "github.com/microsoft/typescript-go/shim/ast"
8
+ shimchecker "github.com/microsoft/typescript-go/shim/checker"
9
+ nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
10
+ nativefactories "github.com/samchon/typia/packages/typia/native/core/factories"
11
+ nativehelpers "github.com/samchon/typia/packages/typia/native/core/programmers/helpers"
12
+ nativeiterate "github.com/samchon/typia/packages/typia/native/core/programmers/iterate"
13
+ nativemetadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
14
14
  )
15
15
 
16
16
  type checkerProgrammerNamespace struct{}
@@ -18,1678 +18,1678 @@ type checkerProgrammerNamespace struct{}
18
18
  var CheckerProgrammer = checkerProgrammerNamespace{}
19
19
 
20
20
  type CheckerProgrammer_IConfig struct {
21
- Prefix string
22
- Path bool
23
- Trace bool
24
- Equals bool
25
- Numeric bool
26
- Addition func() []*shimast.Node
27
- Decoder func(props CheckerProgrammer_DecoderProps) *shimast.Node
28
- Combiner CheckerProgrammer_IConfig_Combiner
29
- Atomist func(props CheckerProgrammer_AtomistProps) *shimast.Node
30
- Joiner CheckerProgrammer_IConfig_IJoiner
31
- Success *shimast.Expression
21
+ Prefix string
22
+ Path bool
23
+ Trace bool
24
+ Equals bool
25
+ Numeric bool
26
+ Addition func() []*shimast.Node
27
+ Decoder func(props CheckerProgrammer_DecoderProps) *shimast.Node
28
+ Combiner CheckerProgrammer_IConfig_Combiner
29
+ Atomist func(props CheckerProgrammer_AtomistProps) *shimast.Node
30
+ Joiner CheckerProgrammer_IConfig_IJoiner
31
+ Success *shimast.Expression
32
32
  }
33
33
 
34
34
  type CheckerProgrammer_IConfig_Combiner func(props CheckerProgrammer_CombinerProps) *shimast.Node
35
35
 
36
36
  type CheckerProgrammer_CombinerProps struct {
37
- Explore CheckerProgrammer_IExplore
38
- Logic string
39
- Input *shimast.Expression
40
- Binaries []CheckerProgrammer_IBinary
41
- Expected string
37
+ Explore CheckerProgrammer_IExplore
38
+ Logic string
39
+ Input *shimast.Expression
40
+ Binaries []CheckerProgrammer_IBinary
41
+ Expected string
42
42
  }
43
43
 
44
44
  type CheckerProgrammer_IConfig_IJoiner struct {
45
- Object func(props CheckerProgrammer_JoinerObjectProps) *shimast.Node
46
- Array func(props CheckerProgrammer_JoinerArrayProps) *shimast.Node
47
- Tuple func(exprs []*shimast.Node) *shimast.Node
48
- Failure func(props CheckerProgrammer_JoinerFailureProps) *shimast.Node
49
- Is func(expression *shimast.Expression) *shimast.Node
50
- Required func(exp *shimast.Expression) *shimast.Node
51
- Full func(props CheckerProgrammer_JoinerFullProps) *shimast.Node
45
+ Object func(props CheckerProgrammer_JoinerObjectProps) *shimast.Node
46
+ Array func(props CheckerProgrammer_JoinerArrayProps) *shimast.Node
47
+ Tuple func(exprs []*shimast.Node) *shimast.Node
48
+ Failure func(props CheckerProgrammer_JoinerFailureProps) *shimast.Node
49
+ Is func(expression *shimast.Expression) *shimast.Node
50
+ Required func(exp *shimast.Expression) *shimast.Node
51
+ Full func(props CheckerProgrammer_JoinerFullProps) *shimast.Node
52
52
  }
53
53
 
54
54
  type CheckerProgrammer_JoinerObjectProps struct {
55
- Input *shimast.Expression
56
- Entries []nativehelpers.IExpressionEntry
57
- Object *nativemetadata.MetadataObjectType
55
+ Input *shimast.Expression
56
+ Entries []nativehelpers.IExpressionEntry
57
+ Object *nativemetadata.MetadataObjectType
58
58
  }
59
59
 
60
60
  type CheckerProgrammer_JoinerArrayProps struct {
61
- Input *shimast.Expression
62
- Arrow *shimast.Node
61
+ Input *shimast.Expression
62
+ Arrow *shimast.Node
63
63
  }
64
64
 
65
65
  type CheckerProgrammer_JoinerFailureProps struct {
66
- Input *shimast.Expression
67
- Expected string
68
- Explore *FeatureProgrammer_IExplore
66
+ Input *shimast.Expression
67
+ Expected string
68
+ Explore *FeatureProgrammer_IExplore
69
69
  }
70
70
 
71
71
  type CheckerProgrammer_JoinerFullProps struct {
72
- Condition *shimast.Expression
73
- Input *shimast.Expression
74
- Expected string
75
- Explore CheckerProgrammer_IExplore
72
+ Condition *shimast.Expression
73
+ Input *shimast.Expression
74
+ Expected string
75
+ Explore CheckerProgrammer_IExplore
76
76
  }
77
77
 
78
78
  type CheckerProgrammer_IExplore = FeatureProgrammer_IExplore
79
79
 
80
80
  type CheckerProgrammer_IBinary struct {
81
- Expression *shimast.Node
82
- Combined bool
81
+ Expression *shimast.Node
82
+ Combined bool
83
83
  }
84
84
 
85
85
  type CheckerProgrammer_AtomistProps struct {
86
- Entry nativehelpers.ICheckEntry
87
- Input *shimast.Expression
88
- Explore CheckerProgrammer_IExplore
86
+ Entry nativehelpers.ICheckEntry
87
+ Input *shimast.Expression
88
+ Explore CheckerProgrammer_IExplore
89
89
  }
90
90
 
91
91
  type CheckerProgrammer_ComposeProps struct {
92
- Context nativecontext.ITypiaContext
93
- Config CheckerProgrammer_IConfig
94
- Functor *nativehelpers.FunctionProgrammer
95
- Type *shimchecker.Type
96
- Name *string
92
+ Context nativecontext.ITypiaContext
93
+ Config CheckerProgrammer_IConfig
94
+ Functor *nativehelpers.FunctionProgrammer
95
+ Type *shimchecker.Type
96
+ Name *string
97
97
  }
98
98
 
99
99
  type CheckerProgrammer_WriteProps = CheckerProgrammer_ComposeProps
100
100
 
101
101
  type CheckerProgrammer_WriteObjectFunctionsProps struct {
102
- Context nativecontext.ITypiaContext
103
- Config CheckerProgrammer_IConfig
104
- Functor *nativehelpers.FunctionProgrammer
105
- Collection *nativemetadata.MetadataCollection
102
+ Context nativecontext.ITypiaContext
103
+ Config CheckerProgrammer_IConfig
104
+ Functor *nativehelpers.FunctionProgrammer
105
+ Collection *nativemetadata.MetadataCollection
106
106
  }
107
107
 
108
108
  type CheckerProgrammer_WriteArrayFunctionsProps = CheckerProgrammer_WriteObjectFunctionsProps
109
109
  type CheckerProgrammer_WriteTupleFunctionsProps = CheckerProgrammer_WriteObjectFunctionsProps
110
110
 
111
111
  type CheckerProgrammer_DecoderProps struct {
112
- Metadata *nativemetadata.MetadataSchema
113
- Input *shimast.Expression
114
- Explore CheckerProgrammer_IExplore
112
+ Metadata *nativemetadata.MetadataSchema
113
+ Input *shimast.Expression
114
+ Explore CheckerProgrammer_IExplore
115
115
  }
116
116
 
117
117
  type CheckerProgrammer_DecodeProps struct {
118
- Context nativecontext.ITypiaContext
119
- Config CheckerProgrammer_IConfig
120
- Functor *nativehelpers.FunctionProgrammer
121
- Input *shimast.Expression
122
- Metadata *nativemetadata.MetadataSchema
123
- Explore CheckerProgrammer_IExplore
118
+ Context nativecontext.ITypiaContext
119
+ Config CheckerProgrammer_IConfig
120
+ Functor *nativehelpers.FunctionProgrammer
121
+ Input *shimast.Expression
122
+ Metadata *nativemetadata.MetadataSchema
123
+ Explore CheckerProgrammer_IExplore
124
124
  }
125
125
 
126
126
  type CheckerProgrammer_DecodeObjectProps struct {
127
- Config CheckerProgrammer_IConfig
128
- Functor *nativehelpers.FunctionProgrammer
129
- Object *nativemetadata.MetadataObjectType
130
- Input *shimast.Expression
131
- Explore CheckerProgrammer_IExplore
127
+ Config CheckerProgrammer_IConfig
128
+ Functor *nativehelpers.FunctionProgrammer
129
+ Object *nativemetadata.MetadataObjectType
130
+ Input *shimast.Expression
131
+ Explore CheckerProgrammer_IExplore
132
132
  }
133
133
 
134
134
  var checkerProgrammer_factory = shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
135
135
 
136
136
  func (checkerProgrammerNamespace) Compose(props CheckerProgrammer_ComposeProps) FeatureProgrammer_IComposed {
137
- return FeatureProgrammer.Compose(FeatureProgrammer_ComposeProps{
138
- Context: props.Context,
139
- Config: checkerProgrammer_configure(props.Context, props.Config, props.Functor),
140
- Functor: props.Functor,
141
- Type: props.Type,
142
- Name: props.Name,
143
- })
137
+ return FeatureProgrammer.Compose(FeatureProgrammer_ComposeProps{
138
+ Context: props.Context,
139
+ Config: checkerProgrammer_configure(props.Context, props.Config, props.Functor),
140
+ Functor: props.Functor,
141
+ Type: props.Type,
142
+ Name: props.Name,
143
+ })
144
144
  }
145
145
 
146
146
  func (checkerProgrammerNamespace) Write(props CheckerProgrammer_WriteProps) *shimast.Node {
147
- return FeatureProgrammer.Write(FeatureProgrammer_WriteProps{
148
- Config: checkerProgrammer_configure(props.Context, props.Config, props.Functor),
149
- Context: props.Context,
150
- Functor: props.Functor,
151
- Type: props.Type,
152
- Name: props.Name,
153
- })
147
+ return FeatureProgrammer.Write(FeatureProgrammer_WriteProps{
148
+ Config: checkerProgrammer_configure(props.Context, props.Config, props.Functor),
149
+ Context: props.Context,
150
+ Functor: props.Functor,
151
+ Type: props.Type,
152
+ Name: props.Name,
153
+ })
154
154
  }
155
155
 
156
156
  func (checkerProgrammerNamespace) Write_object_functions(props CheckerProgrammer_WriteObjectFunctionsProps) []*shimast.Node {
157
- return FeatureProgrammer.Write_object_functions(FeatureProgrammer_WriteObjectFunctionsProps{
158
- Config: checkerProgrammer_configure(props.Context, props.Config, props.Functor),
159
- Context: props.Context,
160
- Collection: props.Collection,
161
- })
157
+ return FeatureProgrammer.Write_object_functions(FeatureProgrammer_WriteObjectFunctionsProps{
158
+ Config: checkerProgrammer_configure(props.Context, props.Config, props.Functor),
159
+ Context: props.Context,
160
+ Collection: props.Collection,
161
+ })
162
162
  }
163
163
 
164
164
  func (checkerProgrammerNamespace) Write_union_functions(props CheckerProgrammer_WriteObjectFunctionsProps) []*shimast.Node {
165
- config := props.Config
166
- config.Numeric = false
167
- return FeatureProgrammer.Write_union_functions(FeatureProgrammer_WriteUnionFunctionsProps{
168
- Config: checkerProgrammer_configure(props.Context, config, props.Functor),
169
- Collection: props.Collection,
170
- })
165
+ config := props.Config
166
+ config.Numeric = false
167
+ return FeatureProgrammer.Write_union_functions(FeatureProgrammer_WriteUnionFunctionsProps{
168
+ Config: checkerProgrammer_configure(props.Context, config, props.Functor),
169
+ Collection: props.Collection,
170
+ })
171
171
  }
172
172
 
173
173
  func (checkerProgrammerNamespace) Write_array_functions(props CheckerProgrammer_WriteArrayFunctionsProps) []*shimast.Node {
174
- arrays := props.Collection.Arrays()
175
- output := []*shimast.Node{}
176
- for i, typ := range arrays {
177
- if typ.Recursive == false {
178
- continue
179
- }
180
- input := checkerProgrammer_factory.NewIdentifier("input")
181
- output = append(output, nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
182
- Name: fmt.Sprintf("%sa%d", props.Config.Prefix, i),
183
- Value: checkerProgrammer_factory.NewArrowFunction(
184
- nil,
185
- nil,
186
- checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ParameterDeclarations(FeatureProgrammer_ParameterDeclarationsProps{
187
- Config: FeatureProgrammer_ParameterConfig{Path: props.Config.Path, Trace: props.Config.Trace},
188
- Type: nativefactories.TypeFactory.Keyword("any"),
189
- Input: input,
190
- })),
191
- nativefactories.TypeFactory.Keyword("any"),
192
- nil,
193
- checkerProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
194
- checkerProgrammer_decode_array_inline(checkerProgrammer_decodeArrayInlineProps{
195
- Config: props.Config,
196
- Context: props.Context,
197
- Functor: props.Functor,
198
- Input: input,
199
- Array: nativemetadata.MetadataArray_create(nativemetadata.MetadataArray{
200
- Type: typ,
201
- Tags: [][]nativemetadata.IMetadataTypeTag{},
202
- }),
203
- Explore: CheckerProgrammer_IExplore{
204
- Tracable: props.Config.Trace,
205
- Source: "function",
206
- From: "array",
207
- Postfix: "",
208
- },
209
- }),
210
- ),
211
- }))
212
- }
213
- return output
174
+ arrays := props.Collection.Arrays()
175
+ output := []*shimast.Node{}
176
+ for i, typ := range arrays {
177
+ if typ.Recursive == false {
178
+ continue
179
+ }
180
+ input := checkerProgrammer_factory.NewIdentifier("input")
181
+ output = append(output, nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
182
+ Name: fmt.Sprintf("%sa%d", props.Config.Prefix, i),
183
+ Value: checkerProgrammer_factory.NewArrowFunction(
184
+ nil,
185
+ nil,
186
+ checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ParameterDeclarations(FeatureProgrammer_ParameterDeclarationsProps{
187
+ Config: FeatureProgrammer_ParameterConfig{Path: props.Config.Path, Trace: props.Config.Trace},
188
+ Type: nativefactories.TypeFactory.Keyword("any"),
189
+ Input: input,
190
+ })),
191
+ nativefactories.TypeFactory.Keyword("any"),
192
+ nil,
193
+ checkerProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
194
+ checkerProgrammer_decode_array_inline(checkerProgrammer_decodeArrayInlineProps{
195
+ Config: props.Config,
196
+ Context: props.Context,
197
+ Functor: props.Functor,
198
+ Input: input,
199
+ Array: nativemetadata.MetadataArray_create(nativemetadata.MetadataArray{
200
+ Type: typ,
201
+ Tags: [][]nativemetadata.IMetadataTypeTag{},
202
+ }),
203
+ Explore: CheckerProgrammer_IExplore{
204
+ Tracable: props.Config.Trace,
205
+ Source: "function",
206
+ From: "array",
207
+ Postfix: "",
208
+ },
209
+ }),
210
+ ),
211
+ }))
212
+ }
213
+ return output
214
214
  }
215
215
 
216
216
  func (checkerProgrammerNamespace) Write_tuple_functions(props CheckerProgrammer_WriteTupleFunctionsProps) []*shimast.Node {
217
- tuples := props.Collection.Tuples()
218
- output := []*shimast.Node{}
219
- for i, tuple := range tuples {
220
- if tuple.Recursive == false {
221
- continue
222
- }
223
- input := checkerProgrammer_factory.NewIdentifier("input")
224
- output = append(output, nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
225
- Name: fmt.Sprintf("%st%d", props.Config.Prefix, i),
226
- Value: checkerProgrammer_factory.NewArrowFunction(
227
- nil,
228
- nil,
229
- checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ParameterDeclarations(FeatureProgrammer_ParameterDeclarationsProps{
230
- Config: FeatureProgrammer_ParameterConfig{Path: props.Config.Path, Trace: props.Config.Trace},
231
- Type: nativefactories.TypeFactory.Keyword("any"),
232
- Input: input,
233
- })),
234
- nativefactories.TypeFactory.Keyword("any"),
235
- nil,
236
- checkerProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
237
- checkerProgrammer_decode_tuple_inline(checkerProgrammer_decodeTupleInlineProps{
238
- Config: props.Config,
239
- Context: props.Context,
240
- Functor: props.Functor,
241
- Input: input,
242
- Tuple: tuple,
243
- Explore: CheckerProgrammer_IExplore{
244
- Tracable: props.Config.Trace,
245
- Source: "function",
246
- From: "array",
247
- Postfix: "",
248
- },
249
- }),
250
- ),
251
- }))
252
- }
253
- return output
217
+ tuples := props.Collection.Tuples()
218
+ output := []*shimast.Node{}
219
+ for i, tuple := range tuples {
220
+ if tuple.Recursive == false {
221
+ continue
222
+ }
223
+ input := checkerProgrammer_factory.NewIdentifier("input")
224
+ output = append(output, nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
225
+ Name: fmt.Sprintf("%st%d", props.Config.Prefix, i),
226
+ Value: checkerProgrammer_factory.NewArrowFunction(
227
+ nil,
228
+ nil,
229
+ checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ParameterDeclarations(FeatureProgrammer_ParameterDeclarationsProps{
230
+ Config: FeatureProgrammer_ParameterConfig{Path: props.Config.Path, Trace: props.Config.Trace},
231
+ Type: nativefactories.TypeFactory.Keyword("any"),
232
+ Input: input,
233
+ })),
234
+ nativefactories.TypeFactory.Keyword("any"),
235
+ nil,
236
+ checkerProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
237
+ checkerProgrammer_decode_tuple_inline(checkerProgrammer_decodeTupleInlineProps{
238
+ Config: props.Config,
239
+ Context: props.Context,
240
+ Functor: props.Functor,
241
+ Input: input,
242
+ Tuple: tuple,
243
+ Explore: CheckerProgrammer_IExplore{
244
+ Tracable: props.Config.Trace,
245
+ Source: "function",
246
+ From: "array",
247
+ Postfix: "",
248
+ },
249
+ }),
250
+ ),
251
+ }))
252
+ }
253
+ return output
254
254
  }
255
255
 
256
256
  func checkerProgrammer_configure(context nativecontext.ITypiaContext, config CheckerProgrammer_IConfig, functor *nativehelpers.FunctionProgrammer) FeatureProgrammer_IConfig {
257
- return FeatureProgrammer_IConfig{
258
- Types: FeatureProgrammer_IConfig_ITypes{
259
- Input: func(_ *shimchecker.Type, _ *string) *shimast.TypeNode {
260
- return nativefactories.TypeFactory.Keyword("any")
261
- },
262
- Output: func(t *shimchecker.Type, name *string) *shimast.TypeNode {
263
- typeName := ""
264
- if name != nil {
265
- typeName = *name
266
- } else {
267
- typeName = nativefactories.TypeFactory.GetFullName(nativefactories.TypeFactory_GetFullNameProps{
268
- Checker: context.Checker,
269
- Type: t,
270
- })
271
- }
272
- return checkerProgrammer_factory.NewTypePredicateNode(
273
- nil,
274
- checkerProgrammer_factory.NewIdentifier("input"),
275
- checkerProgrammer_factory.NewTypeReferenceNode(
276
- checkerProgrammer_factory.NewIdentifier(typeName),
277
- nil,
278
- ),
279
- )
280
- },
281
- },
282
- Trace: config.Trace,
283
- Path: config.Path,
284
- Prefix: config.Prefix,
285
- Initializer: func(next FeatureProgrammer_InitializerProps) FeatureProgrammer_InitializerOutput {
286
- collection := nativemetadata.NewMetadataCollection()
287
- result := nativefactories.MetadataFactory.Analyze(nativefactories.MetadataFactory_IProps{
288
- Checker: next.Context.Checker,
289
- Transformer: next.Context.Transformer,
290
- Options: nativefactories.MetadataFactory_IOptions{
291
- Escape: false,
292
- Constant: true,
293
- Absorb: true,
294
- },
295
- Components: collection,
296
- Type: next.Type,
297
- })
298
- if result.Success == false {
299
- panic(nativecontext.TransformerError_from(struct {
300
- Code string
301
- Errors []nativecontext.TransformerError_MetadataFactory_IError
302
- }{
303
- Code: next.Functor.Method,
304
- Errors: checkerProgrammer_errors(result.Errors),
305
- }))
306
- }
307
- return FeatureProgrammer_InitializerOutput{
308
- Collection: collection,
309
- Metadata: result.Data,
310
- }
311
- },
312
- Addition: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
313
- if config.Addition == nil {
314
- return []*shimast.Node{}
315
- }
316
- return config.Addition()
317
- },
318
- Decoder: func(next FeatureProgrammer_DecoderProps) *shimast.Node {
319
- if config.Decoder != nil {
320
- return config.Decoder(CheckerProgrammer_DecoderProps{
321
- Metadata: next.Metadata,
322
- Input: next.Input,
323
- Explore: next.Explore,
324
- })
325
- }
326
- return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
327
- Context: context,
328
- Config: config,
329
- Functor: functor,
330
- Input: next.Input,
331
- Metadata: next.Metadata,
332
- Explore: next.Explore,
333
- })
334
- },
335
- Objector: FeatureProgrammer_IConfig_IObjector{
336
- Checker: func(next FeatureProgrammer_ObjectorCheckerProps) *shimast.Node {
337
- if config.Decoder != nil {
338
- return config.Decoder(CheckerProgrammer_DecoderProps{
339
- Metadata: next.Metadata,
340
- Input: next.Input,
341
- Explore: next.Explore,
342
- })
343
- }
344
- return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
345
- Context: context,
346
- Config: config,
347
- Functor: functor,
348
- Input: next.Input,
349
- Metadata: next.Metadata,
350
- Explore: next.Explore,
351
- })
352
- },
353
- Decoder: func(next FeatureProgrammer_ObjectorDecoderProps) *shimast.Node {
354
- return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
355
- Config: config,
356
- Functor: functor,
357
- Input: next.Input,
358
- Object: next.Object,
359
- Explore: next.Explore,
360
- })
361
- },
362
- Joiner: func(next FeatureProgrammer_ObjectorJoinerProps) *shimast.Node {
363
- return config.Joiner.Object(CheckerProgrammer_JoinerObjectProps{
364
- Input: next.Input,
365
- Entries: next.Entries,
366
- Object: next.Object,
367
- })
368
- },
369
- Unionizer: func(next FeatureProgrammer_ObjectorUnionizerProps) *shimast.Node {
370
- if config.Equals {
371
- return nativeiterate.Decode_union_object(nativeiterate.Decode_union_objectProps{
372
- Checker: func(v nativeiterate.Decode_union_object_next) *shimast.Node {
373
- return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
374
- Config: config,
375
- Functor: functor,
376
- Object: v.Object,
377
- Input: v.Input,
378
- Explore: featureProgrammer_as_explore(v.Explore),
379
- })
380
- },
381
- Decoder: func(v nativeiterate.Decode_union_object_next) *shimast.Node {
382
- explore := featureProgrammer_as_explore(v.Explore)
383
- explore.Tracable = true
384
- return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
385
- Config: config,
386
- Functor: functor,
387
- Input: v.Input,
388
- Object: v.Object,
389
- Explore: explore,
390
- })
391
- },
392
- Success: func(expr *shimast.Expression) *shimast.Node {
393
- if config.Joiner.Is != nil {
394
- return config.Joiner.Is(expr)
395
- }
396
- return expr
397
- },
398
- Escaper: func(v nativeiterate.Decode_union_object_escape) *shimast.Node {
399
- return checkerProgrammer_factory.NewReturnStatement(config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
400
- Input: v.Input,
401
- Expected: v.Expected,
402
- Explore: nil,
403
- }))
404
- },
405
- Input: next.Input,
406
- Objects: next.Objects,
407
- Explore: next.Explore,
408
- })
409
- }
410
- binaries := make([]CheckerProgrammer_IBinary, 0, len(next.Objects))
411
- for _, object := range next.Objects {
412
- binaries = append(binaries, CheckerProgrammer_IBinary{
413
- Expression: CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
414
- Config: config,
415
- Functor: functor,
416
- Object: object,
417
- Input: next.Input,
418
- Explore: next.Explore,
419
- }),
420
- Combined: true,
421
- })
422
- }
423
- names := make([]string, 0, len(next.Objects))
424
- for _, object := range next.Objects {
425
- names = append(names, object.Name)
426
- }
427
- return config.Combiner(CheckerProgrammer_CombinerProps{
428
- Logic: "or",
429
- Explore: next.Explore,
430
- Input: next.Input,
431
- Binaries: binaries,
432
- Expected: "(" + strings.Join(names, " | ") + ")",
433
- })
434
- },
435
- Failure: func(next FeatureProgrammer_ObjectorFailureProps) *shimast.Node {
436
- return checkerProgrammer_factory.NewReturnStatement(config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
437
- Input: next.Input,
438
- Expected: next.Expected,
439
- Explore: next.Explore,
440
- }))
441
- },
442
- Is: config.Joiner.Is,
443
- Required: config.Joiner.Required,
444
- Full: func(next FeatureProgrammer_ObjectorFullProps) *shimast.Node {
445
- if config.Joiner.Full == nil {
446
- return next.Condition
447
- }
448
- return config.Joiner.Full(CheckerProgrammer_JoinerFullProps{
449
- Condition: next.Condition,
450
- Input: next.Input,
451
- Expected: next.Expected,
452
- Explore: next.Explore,
453
- })
454
- },
455
- Type: nativefactories.TypeFactory.Keyword("boolean"),
456
- },
457
- Generator: FeatureProgrammer_IConfig_IGenerator{
458
- Unions: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
459
- if config.Numeric == false {
460
- return nil
461
- }
462
- next := config
463
- next.Numeric = false
464
- return FeatureProgrammer.Write_union_functions(FeatureProgrammer_WriteUnionFunctionsProps{
465
- Config: checkerProgrammer_configure(context, next, functor),
466
- Collection: collection,
467
- })
468
- },
469
- Arrays: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
470
- return CheckerProgrammer.Write_array_functions(CheckerProgrammer_WriteArrayFunctionsProps{
471
- Context: context,
472
- Config: config,
473
- Functor: functor,
474
- Collection: collection,
475
- })
476
- },
477
- Tuples: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
478
- return CheckerProgrammer.Write_tuple_functions(CheckerProgrammer_WriteTupleFunctionsProps{
479
- Context: context,
480
- Config: config,
481
- Functor: functor,
482
- Collection: collection,
483
- })
484
- },
485
- },
486
- }
257
+ return FeatureProgrammer_IConfig{
258
+ Types: FeatureProgrammer_IConfig_ITypes{
259
+ Input: func(_ *shimchecker.Type, _ *string) *shimast.TypeNode {
260
+ return nativefactories.TypeFactory.Keyword("any")
261
+ },
262
+ Output: func(t *shimchecker.Type, name *string) *shimast.TypeNode {
263
+ typeName := ""
264
+ if name != nil {
265
+ typeName = *name
266
+ } else {
267
+ typeName = nativefactories.TypeFactory.GetFullName(nativefactories.TypeFactory_GetFullNameProps{
268
+ Checker: context.Checker,
269
+ Type: t,
270
+ })
271
+ }
272
+ return checkerProgrammer_factory.NewTypePredicateNode(
273
+ nil,
274
+ checkerProgrammer_factory.NewIdentifier("input"),
275
+ checkerProgrammer_factory.NewTypeReferenceNode(
276
+ checkerProgrammer_factory.NewIdentifier(typeName),
277
+ nil,
278
+ ),
279
+ )
280
+ },
281
+ },
282
+ Trace: config.Trace,
283
+ Path: config.Path,
284
+ Prefix: config.Prefix,
285
+ Initializer: func(next FeatureProgrammer_InitializerProps) FeatureProgrammer_InitializerOutput {
286
+ collection := nativemetadata.NewMetadataCollection()
287
+ result := nativefactories.MetadataFactory.Analyze(nativefactories.MetadataFactory_IProps{
288
+ Checker: next.Context.Checker,
289
+ Transformer: next.Context.Transformer,
290
+ Options: nativefactories.MetadataFactory_IOptions{
291
+ Escape: false,
292
+ Constant: true,
293
+ Absorb: true,
294
+ },
295
+ Components: collection,
296
+ Type: next.Type,
297
+ })
298
+ if result.Success == false {
299
+ panic(nativecontext.TransformerError_from(struct {
300
+ Code string
301
+ Errors []nativecontext.TransformerError_MetadataFactory_IError
302
+ }{
303
+ Code: next.Functor.Method,
304
+ Errors: checkerProgrammer_errors(result.Errors),
305
+ }))
306
+ }
307
+ return FeatureProgrammer_InitializerOutput{
308
+ Collection: collection,
309
+ Metadata: result.Data,
310
+ }
311
+ },
312
+ Addition: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
313
+ if config.Addition == nil {
314
+ return []*shimast.Node{}
315
+ }
316
+ return config.Addition()
317
+ },
318
+ Decoder: func(next FeatureProgrammer_DecoderProps) *shimast.Node {
319
+ if config.Decoder != nil {
320
+ return config.Decoder(CheckerProgrammer_DecoderProps{
321
+ Metadata: next.Metadata,
322
+ Input: next.Input,
323
+ Explore: next.Explore,
324
+ })
325
+ }
326
+ return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
327
+ Context: context,
328
+ Config: config,
329
+ Functor: functor,
330
+ Input: next.Input,
331
+ Metadata: next.Metadata,
332
+ Explore: next.Explore,
333
+ })
334
+ },
335
+ Objector: FeatureProgrammer_IConfig_IObjector{
336
+ Checker: func(next FeatureProgrammer_ObjectorCheckerProps) *shimast.Node {
337
+ if config.Decoder != nil {
338
+ return config.Decoder(CheckerProgrammer_DecoderProps{
339
+ Metadata: next.Metadata,
340
+ Input: next.Input,
341
+ Explore: next.Explore,
342
+ })
343
+ }
344
+ return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
345
+ Context: context,
346
+ Config: config,
347
+ Functor: functor,
348
+ Input: next.Input,
349
+ Metadata: next.Metadata,
350
+ Explore: next.Explore,
351
+ })
352
+ },
353
+ Decoder: func(next FeatureProgrammer_ObjectorDecoderProps) *shimast.Node {
354
+ return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
355
+ Config: config,
356
+ Functor: functor,
357
+ Input: next.Input,
358
+ Object: next.Object,
359
+ Explore: next.Explore,
360
+ })
361
+ },
362
+ Joiner: func(next FeatureProgrammer_ObjectorJoinerProps) *shimast.Node {
363
+ return config.Joiner.Object(CheckerProgrammer_JoinerObjectProps{
364
+ Input: next.Input,
365
+ Entries: next.Entries,
366
+ Object: next.Object,
367
+ })
368
+ },
369
+ Unionizer: func(next FeatureProgrammer_ObjectorUnionizerProps) *shimast.Node {
370
+ if config.Equals {
371
+ return nativeiterate.Decode_union_object(nativeiterate.Decode_union_objectProps{
372
+ Checker: func(v nativeiterate.Decode_union_object_next) *shimast.Node {
373
+ return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
374
+ Config: config,
375
+ Functor: functor,
376
+ Object: v.Object,
377
+ Input: v.Input,
378
+ Explore: featureProgrammer_as_explore(v.Explore),
379
+ })
380
+ },
381
+ Decoder: func(v nativeiterate.Decode_union_object_next) *shimast.Node {
382
+ explore := featureProgrammer_as_explore(v.Explore)
383
+ explore.Tracable = true
384
+ return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
385
+ Config: config,
386
+ Functor: functor,
387
+ Input: v.Input,
388
+ Object: v.Object,
389
+ Explore: explore,
390
+ })
391
+ },
392
+ Success: func(expr *shimast.Expression) *shimast.Node {
393
+ if config.Joiner.Is != nil {
394
+ return config.Joiner.Is(expr)
395
+ }
396
+ return expr
397
+ },
398
+ Escaper: func(v nativeiterate.Decode_union_object_escape) *shimast.Node {
399
+ return checkerProgrammer_factory.NewReturnStatement(config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
400
+ Input: v.Input,
401
+ Expected: v.Expected,
402
+ Explore: nil,
403
+ }))
404
+ },
405
+ Input: next.Input,
406
+ Objects: next.Objects,
407
+ Explore: next.Explore,
408
+ })
409
+ }
410
+ binaries := make([]CheckerProgrammer_IBinary, 0, len(next.Objects))
411
+ for _, object := range next.Objects {
412
+ binaries = append(binaries, CheckerProgrammer_IBinary{
413
+ Expression: CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
414
+ Config: config,
415
+ Functor: functor,
416
+ Object: object,
417
+ Input: next.Input,
418
+ Explore: next.Explore,
419
+ }),
420
+ Combined: true,
421
+ })
422
+ }
423
+ names := make([]string, 0, len(next.Objects))
424
+ for _, object := range next.Objects {
425
+ names = append(names, object.Name)
426
+ }
427
+ return config.Combiner(CheckerProgrammer_CombinerProps{
428
+ Logic: "or",
429
+ Explore: next.Explore,
430
+ Input: next.Input,
431
+ Binaries: binaries,
432
+ Expected: "(" + strings.Join(names, " | ") + ")",
433
+ })
434
+ },
435
+ Failure: func(next FeatureProgrammer_ObjectorFailureProps) *shimast.Node {
436
+ return checkerProgrammer_factory.NewReturnStatement(config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
437
+ Input: next.Input,
438
+ Expected: next.Expected,
439
+ Explore: next.Explore,
440
+ }))
441
+ },
442
+ Is: config.Joiner.Is,
443
+ Required: config.Joiner.Required,
444
+ Full: func(next FeatureProgrammer_ObjectorFullProps) *shimast.Node {
445
+ if config.Joiner.Full == nil {
446
+ return next.Condition
447
+ }
448
+ return config.Joiner.Full(CheckerProgrammer_JoinerFullProps{
449
+ Condition: next.Condition,
450
+ Input: next.Input,
451
+ Expected: next.Expected,
452
+ Explore: next.Explore,
453
+ })
454
+ },
455
+ Type: nativefactories.TypeFactory.Keyword("boolean"),
456
+ },
457
+ Generator: FeatureProgrammer_IConfig_IGenerator{
458
+ Unions: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
459
+ if config.Numeric == false {
460
+ return nil
461
+ }
462
+ next := config
463
+ next.Numeric = false
464
+ return FeatureProgrammer.Write_union_functions(FeatureProgrammer_WriteUnionFunctionsProps{
465
+ Config: checkerProgrammer_configure(context, next, functor),
466
+ Collection: collection,
467
+ })
468
+ },
469
+ Arrays: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
470
+ return CheckerProgrammer.Write_array_functions(CheckerProgrammer_WriteArrayFunctionsProps{
471
+ Context: context,
472
+ Config: config,
473
+ Functor: functor,
474
+ Collection: collection,
475
+ })
476
+ },
477
+ Tuples: func(collection *nativemetadata.MetadataCollection) []*shimast.Node {
478
+ return CheckerProgrammer.Write_tuple_functions(CheckerProgrammer_WriteTupleFunctionsProps{
479
+ Context: context,
480
+ Config: config,
481
+ Functor: functor,
482
+ Collection: collection,
483
+ })
484
+ },
485
+ },
486
+ }
487
487
  }
488
488
 
489
489
  func (checkerProgrammerNamespace) Decode(props CheckerProgrammer_DecodeProps) *shimast.Node {
490
- if props.Metadata.Any {
491
- return props.Config.Success
492
- }
493
-
494
- top := []CheckerProgrammer_IBinary{}
495
- binaries := []CheckerProgrammer_IBinary{}
496
- add := func(next struct {
497
- Exact bool
498
- Left *shimast.Expression
499
- Right *shimast.Expression
500
- }) {
501
- checkerProgrammer_create_add(&binaries, props.Input, next.Exact, next.Left, next.Right)
502
- }
503
- getConstantValue := func(value any) *shimast.Node {
504
- switch v := value.(type) {
505
- case string:
506
- return checkerProgrammer_factory.NewStringLiteral(v, shimast.TokenFlagsNone)
507
- case int64:
508
- return nativefactories.ExpressionFactory.Bigint(v)
509
- case uint64:
510
- return nativefactories.ExpressionFactory.Bigint(v)
511
- case bool:
512
- if v {
513
- return checkerProgrammer_factory.NewKeywordExpression(shimast.KindTrueKeyword)
514
- }
515
- return checkerProgrammer_factory.NewKeywordExpression(shimast.KindFalseKeyword)
516
- default:
517
- return checkerProgrammer_factory.NewIdentifier(fmt.Sprint(value))
518
- }
519
- }
520
-
521
- checkOptional := props.Metadata.Empty() || props.Metadata.IsUnionBucket()
522
- if checkOptional || props.Metadata.Nullable {
523
- if props.Metadata.Nullable {
524
- add(struct {
525
- Exact bool
526
- Left *shimast.Expression
527
- Right *shimast.Expression
528
- }{Exact: props.Metadata.Nullable, Left: nativefactories.ValueFactory.NULL()})
529
- } else {
530
- checkerProgrammer_create_add(&top, props.Input, props.Metadata.Nullable, nativefactories.ValueFactory.NULL(), nil)
531
- }
532
- }
533
- if checkOptional || !props.Metadata.IsRequired() {
534
- if props.Metadata.IsRequired() {
535
- checkerProgrammer_create_add(&top, props.Input, false, nativefactories.ValueFactory.UNDEFINED(), nil)
536
- } else {
537
- add(struct {
538
- Exact bool
539
- Left *shimast.Expression
540
- Right *shimast.Expression
541
- }{Exact: true, Left: nativefactories.ValueFactory.UNDEFINED()})
542
- }
543
- }
544
-
545
- if len(props.Metadata.Functions) != 0 {
546
- if nativehelpers.OptionPredicator.Functional(props.Context.Options) || props.Metadata.Size() != 1 {
547
- add(struct {
548
- Exact bool
549
- Left *shimast.Expression
550
- Right *shimast.Expression
551
- }{
552
- Exact: true,
553
- Left: checkerProgrammer_factory.NewStringLiteral("function", shimast.TokenFlagsNone),
554
- Right: nativefactories.ValueFactory.TYPEOF(props.Input),
555
- })
556
- } else {
557
- binaries = append(binaries, CheckerProgrammer_IBinary{Combined: false, Expression: props.Config.Success})
558
- }
559
- }
560
-
561
- constants := []*nativemetadata.MetadataConstant{}
562
- constantLength := 0
563
- for _, c := range props.Metadata.Constants {
564
- if nativehelpers.AtomicPredicator.Constant(struct {
565
- Metadata *nativemetadata.MetadataSchema
566
- Name string
567
- }{Metadata: props.Metadata, Name: c.Type}) {
568
- constants = append(constants, c)
569
- constantLength += len(c.Values)
570
- }
571
- }
572
- if constantLength >= 10 {
573
- values := []*shimast.Node{}
574
- for _, c := range constants {
575
- for _, v := range c.Values {
576
- switch value := v.Value.(type) {
577
- case bool:
578
- if value {
579
- values = append(values, checkerProgrammer_factory.NewKeywordExpression(shimast.KindTrueKeyword))
580
- } else {
581
- values = append(values, checkerProgrammer_factory.NewKeywordExpression(shimast.KindFalseKeyword))
582
- }
583
- case int64, uint64:
584
- values = append(values, nativefactories.ExpressionFactory.Bigint(value))
585
- case int, float64:
586
- values = append(values, nativefactories.ExpressionFactory.Number(value))
587
- default:
588
- values = append(values, checkerProgrammer_factory.NewStringLiteral(fmt.Sprint(value), shimast.TokenFlagsNone))
589
- }
590
- }
591
- }
592
- setName := props.Functor.EmplaceVariable(
593
- fmt.Sprintf("%sv%d", props.Config.Prefix, props.Functor.Increment()),
594
- checkerProgrammer_factory.NewNewExpression(
595
- checkerProgrammer_factory.NewIdentifier("Set"),
596
- nil,
597
- checkerProgrammer_factory.NewNodeList([]*shimast.Node{
598
- checkerProgrammer_factory.NewArrayLiteralExpression(checkerProgrammer_factory.NewNodeList(values), false),
599
- }),
600
- ),
601
- )
602
- add(struct {
603
- Exact bool
604
- Left *shimast.Expression
605
- Right *shimast.Expression
606
- }{
607
- Exact: true,
608
- Left: checkerProgrammer_factory.NewKeywordExpression(shimast.KindTrueKeyword),
609
- Right: checkerProgrammer_factory.NewCallExpression(
610
- nativefactories.IdentifierFactory.Access(setName, "has"),
611
- nil,
612
- nil,
613
- checkerProgrammer_factory.NewNodeList([]*shimast.Node{props.Input}),
614
- shimast.NodeFlagsNone,
615
- ),
616
- })
617
- } else {
618
- for _, c := range constants {
619
- for _, v := range c.Values {
620
- add(struct {
621
- Exact bool
622
- Left *shimast.Expression
623
- Right *shimast.Expression
624
- }{Exact: true, Left: getConstantValue(v.Value)})
625
- }
626
- }
627
- }
628
-
629
- for _, atom := range props.Metadata.Atomics {
630
- if nativehelpers.AtomicPredicator.Atomic(struct {
631
- Metadata *nativemetadata.MetadataSchema
632
- Name string
633
- }{Metadata: props.Metadata, Name: atom.Type}) == false {
634
- continue
635
- }
636
- switch atom.Type {
637
- case "number":
638
- binaries = append(binaries, CheckerProgrammer_IBinary{
639
- Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
640
- Explore: props.Explore,
641
- Entry: nativeiterate.Check_number(nativeiterate.Check_numberProps{
642
- Context: props.Context,
643
- Numeric: props.Config.Numeric,
644
- Atomic: atom,
645
- Input: props.Input,
646
- }),
647
- Input: props.Input,
648
- }),
649
- Combined: false,
650
- })
651
- case "bigint":
652
- binaries = append(binaries, CheckerProgrammer_IBinary{
653
- Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
654
- Explore: props.Explore,
655
- Entry: nativeiterate.Check_bigint(nativeiterate.Check_bigintProps{
656
- Context: props.Context,
657
- Atomic: atom,
658
- Input: props.Input,
659
- }),
660
- Input: props.Input,
661
- }),
662
- Combined: false,
663
- })
664
- case "string":
665
- binaries = append(binaries, CheckerProgrammer_IBinary{
666
- Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
667
- Explore: props.Explore,
668
- Entry: nativeiterate.Check_string(nativeiterate.Check_stringProps{
669
- Context: props.Context,
670
- Atomic: atom,
671
- Input: props.Input,
672
- }),
673
- Input: props.Input,
674
- }),
675
- Combined: false,
676
- })
677
- default:
678
- add(struct {
679
- Exact bool
680
- Left *shimast.Expression
681
- Right *shimast.Expression
682
- }{
683
- Exact: true,
684
- Left: checkerProgrammer_factory.NewStringLiteral(atom.Type, shimast.TokenFlagsNone),
685
- Right: nativefactories.ValueFactory.TYPEOF(props.Input),
686
- })
687
- }
688
- }
689
-
690
- if len(props.Metadata.Templates) != 0 && nativehelpers.AtomicPredicator.Template(props.Metadata) {
691
- binaries = append(binaries, CheckerProgrammer_IBinary{
692
- Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
693
- Explore: props.Explore,
694
- Entry: nativeiterate.Check_template(nativeiterate.Check_templateProps{
695
- Templates: props.Metadata.Templates,
696
- Input: props.Input,
697
- }),
698
- Input: props.Input,
699
- }),
700
- Combined: false,
701
- })
702
- }
703
-
704
- for _, native := range props.Metadata.Natives {
705
- binaries = append(binaries, CheckerProgrammer_IBinary{
706
- Expression: nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: native.Name, Input: props.Input}),
707
- Combined: false,
708
- })
709
- }
710
-
711
- instances := []checkerProgrammer_IInstance{}
712
- prepare := func(next checkerProgrammer_IInstance) {
713
- instances = append(instances, next)
714
- }
715
- if len(props.Metadata.Sets) != 0 {
716
- body := (*shimast.Node)(nil)
717
- any := false
718
- names := []string{}
719
- for _, elem := range props.Metadata.Sets {
720
- names = append(names, "Set<"+elem.Value.GetName()+">")
721
- if elem.Value.Any {
722
- any = true
723
- }
724
- }
725
- if any == false {
726
- explore := props.Explore
727
- explore.From = "array"
728
- body = checkerProgrammer_explore_sets(checkerProgrammer_exploreSetsProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Sets: props.Metadata.Sets, Input: props.Input, Explore: explore})
729
- }
730
- prepare(checkerProgrammer_IInstance{
731
- Head: nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: "Set", Input: props.Input}),
732
- Expected: strings.Join(names, " | "),
733
- Body: body,
734
- })
735
- }
736
- if len(props.Metadata.Maps) != 0 {
737
- body := (*shimast.Node)(nil)
738
- any := false
739
- names := []string{}
740
- for _, elem := range props.Metadata.Maps {
741
- names = append(names, "Map<"+elem.Key.GetName()+", "+elem.Value.GetName()+">")
742
- if elem.Key.Any && elem.Value.Any {
743
- any = true
744
- }
745
- }
746
- if any == false {
747
- explore := props.Explore
748
- explore.From = "array"
749
- body = checkerProgrammer_explore_maps(checkerProgrammer_exploreMapsProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Maps: props.Metadata.Maps, Input: props.Input, Explore: explore})
750
- }
751
- prepare(checkerProgrammer_IInstance{
752
- Head: nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: "Map", Input: props.Input}),
753
- Expected: strings.Join(names, " | "),
754
- Body: body,
755
- })
756
- }
757
-
758
- if len(props.Metadata.Tuples)+len(props.Metadata.Arrays) > 0 {
759
- body := (*shimast.Node)(nil)
760
- expected := []string{}
761
- for _, tuple := range props.Metadata.Tuples {
762
- expected = append(expected, tuple.Type.Name)
763
- }
764
- for _, array := range props.Metadata.Arrays {
765
- expected = append(expected, array.GetName())
766
- }
767
- if len(props.Metadata.Arrays) == 0 {
768
- explore := props.Explore
769
- explore.From = "array"
770
- if len(props.Metadata.Tuples) == 1 {
771
- body = checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Tuple: props.Metadata.Tuples[0], Input: props.Input, Explore: explore})
772
- } else {
773
- body = checkerProgrammer_explore_tuples(checkerProgrammer_exploreTuplesProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Tuples: props.Metadata.Tuples, Input: props.Input, Explore: explore})
774
- }
775
- } else if checkerProgrammer_array_any(props.Metadata.Arrays) {
776
- body = nil
777
- } else if len(props.Metadata.Tuples) == 0 {
778
- explore := props.Explore
779
- explore.From = "array"
780
- if len(props.Metadata.Arrays) == 1 {
781
- body = checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Array: props.Metadata.Arrays[0], Input: props.Input, Explore: explore})
782
- } else {
783
- body = checkerProgrammer_explore_arrays(checkerProgrammer_exploreArraysProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Arrays: props.Metadata.Arrays, Input: props.Input, Explore: explore})
784
- }
785
- } else {
786
- body = checkerProgrammer_explore_arrays_and_tuples(checkerProgrammer_exploreArraysAndTuplesProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Definitions: checkerProgrammer_array_tuple_definitions(props.Metadata.Arrays, props.Metadata.Tuples), Input: props.Input, Explore: props.Explore})
787
- }
788
- prepare(checkerProgrammer_IInstance{
789
- Head: props.Config.Atomist(CheckerProgrammer_AtomistProps{
790
- Explore: props.Explore,
791
- Entry: nativehelpers.ICheckEntry{
792
- Expected: strings.Join(expected, " | "),
793
- Expression: nativefactories.ExpressionFactory.IsArray(props.Input),
794
- Conditions: [][]nativehelpers.ICheckEntry_ICondition{},
795
- },
796
- Input: props.Input,
797
- }),
798
- Expected: strings.Join(expected, " | "),
799
- Body: body,
800
- })
801
- }
802
-
803
- if len(props.Metadata.Objects) > 0 {
804
- checkArray := false
805
- for _, obj := range props.Metadata.Objects {
806
- all := true
807
- for _, prop := range obj.Type.Properties {
808
- if prop.Key.IsSoleLiteral() && prop.Value.IsRequired() {
809
- all = false
810
- break
811
- }
812
- }
813
- if all {
814
- checkArray = true
815
- break
816
- }
817
- }
818
- names := []string{}
819
- for _, obj := range props.Metadata.Objects {
820
- names = append(names, obj.Type.Name)
821
- }
822
- explore := props.Explore
823
- explore.From = "object"
824
- prepare(checkerProgrammer_IInstance{
825
- Head: nativefactories.ExpressionFactory.IsObject(nativefactories.ExpressionFactory_IsObjectProps{
826
- CheckNull: true,
827
- CheckArray: checkArray,
828
- Input: props.Input,
829
- }),
830
- Expected: strings.Join(names, " | "),
831
- Body: checkerProgrammer_explore_objects(checkerProgrammer_exploreObjectsProps{
832
- Config: props.Config, Functor: props.Functor, Metadata: props.Metadata, Input: props.Input, Explore: explore,
833
- }),
834
- })
835
- }
836
-
837
- if len(instances) != 0 {
838
- transformer := func(instance checkerProgrammer_IInstance) CheckerProgrammer_IBinary {
839
- if instance.Body != nil {
840
- return CheckerProgrammer_IBinary{
841
- Expression: checkerProgrammer_and(instance.Head, instance.Body),
842
- Combined: true,
843
- }
844
- }
845
- return CheckerProgrammer_IBinary{Expression: instance.Head, Combined: false}
846
- }
847
- if len(instances) == 1 {
848
- instance := instances[0]
849
- if instance.Body != nil {
850
- binaries = append(binaries, CheckerProgrammer_IBinary{
851
- Expression: props.Config.Combiner(CheckerProgrammer_CombinerProps{
852
- Explore: props.Explore,
853
- Logic: "and",
854
- Input: props.Input,
855
- Binaries: []CheckerProgrammer_IBinary{
856
- {Expression: instance.Head, Combined: false},
857
- {Expression: instance.Body, Combined: true},
858
- },
859
- Expected: props.Metadata.GetName(),
860
- }),
861
- Combined: true,
862
- })
863
- } else {
864
- binaries = append(binaries, transformer(instance))
865
- }
866
- } else {
867
- transformed := make([]CheckerProgrammer_IBinary, 0, len(instances))
868
- for _, instance := range instances {
869
- transformed = append(transformed, transformer(instance))
870
- }
871
- binaries = append(binaries, CheckerProgrammer_IBinary{
872
- Expression: props.Config.Combiner(CheckerProgrammer_CombinerProps{
873
- Explore: props.Explore,
874
- Logic: "or",
875
- Input: props.Input,
876
- Binaries: transformed,
877
- Expected: props.Metadata.GetName(),
878
- }),
879
- Combined: true,
880
- })
881
- }
882
- }
883
-
884
- if props.Metadata.Escaped != nil {
885
- var expression *shimast.Node
886
- if props.Metadata.Escaped.Original.Size() == 1 && len(props.Metadata.Escaped.Original.Natives) == 1 {
887
- expression = nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: props.Metadata.Escaped.Original.Natives[0].Name, Input: props.Input})
888
- } else {
889
- expression = checkerProgrammer_and(
890
- CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Metadata: props.Metadata.Escaped.Original, Input: props.Input, Explore: props.Explore}),
891
- checkerProgrammer_and(
892
- checkerProgrammer_decode_to_json(struct {
893
- Input *shimast.Expression
894
- CheckNull bool
895
- }{Input: props.Input, CheckNull: false}),
896
- checkerProgrammer_decode_escaped(checkerProgrammer_decodeEscapedProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Metadata: props.Metadata.Escaped.Returns, Input: props.Input, Explore: props.Explore}),
897
- ),
898
- )
899
- }
900
- binaries = append(binaries, CheckerProgrammer_IBinary{Combined: false, Expression: expression})
901
- }
902
-
903
- if len(top) != 0 && len(binaries) != 0 {
904
- next := append([]CheckerProgrammer_IBinary{}, top...)
905
- next = append(next, CheckerProgrammer_IBinary{
906
- Expression: props.Config.Combiner(CheckerProgrammer_CombinerProps{Explore: props.Explore, Logic: "or", Input: props.Input, Binaries: binaries, Expected: props.Metadata.GetName()}),
907
- Combined: true,
908
- })
909
- return props.Config.Combiner(CheckerProgrammer_CombinerProps{Explore: props.Explore, Logic: "and", Input: props.Input, Binaries: next, Expected: props.Metadata.GetName()})
910
- }
911
- if len(binaries) != 0 {
912
- return props.Config.Combiner(CheckerProgrammer_CombinerProps{Explore: props.Explore, Logic: "or", Input: props.Input, Binaries: binaries, Expected: props.Metadata.GetName()})
913
- }
914
- return props.Config.Success
490
+ if props.Metadata.Any {
491
+ return props.Config.Success
492
+ }
493
+
494
+ top := []CheckerProgrammer_IBinary{}
495
+ binaries := []CheckerProgrammer_IBinary{}
496
+ add := func(next struct {
497
+ Exact bool
498
+ Left *shimast.Expression
499
+ Right *shimast.Expression
500
+ }) {
501
+ checkerProgrammer_create_add(&binaries, props.Input, next.Exact, next.Left, next.Right)
502
+ }
503
+ getConstantValue := func(value any) *shimast.Node {
504
+ switch v := value.(type) {
505
+ case string:
506
+ return checkerProgrammer_factory.NewStringLiteral(v, shimast.TokenFlagsNone)
507
+ case int64:
508
+ return nativefactories.ExpressionFactory.Bigint(v)
509
+ case uint64:
510
+ return nativefactories.ExpressionFactory.Bigint(v)
511
+ case bool:
512
+ if v {
513
+ return checkerProgrammer_factory.NewKeywordExpression(shimast.KindTrueKeyword)
514
+ }
515
+ return checkerProgrammer_factory.NewKeywordExpression(shimast.KindFalseKeyword)
516
+ default:
517
+ return checkerProgrammer_factory.NewIdentifier(fmt.Sprint(value))
518
+ }
519
+ }
520
+
521
+ checkOptional := props.Metadata.Empty() || props.Metadata.IsUnionBucket()
522
+ if checkOptional || props.Metadata.Nullable {
523
+ if props.Metadata.Nullable {
524
+ add(struct {
525
+ Exact bool
526
+ Left *shimast.Expression
527
+ Right *shimast.Expression
528
+ }{Exact: props.Metadata.Nullable, Left: nativefactories.ValueFactory.NULL()})
529
+ } else {
530
+ checkerProgrammer_create_add(&top, props.Input, props.Metadata.Nullable, nativefactories.ValueFactory.NULL(), nil)
531
+ }
532
+ }
533
+ if checkOptional || !props.Metadata.IsRequired() {
534
+ if props.Metadata.IsRequired() {
535
+ checkerProgrammer_create_add(&top, props.Input, false, nativefactories.ValueFactory.UNDEFINED(), nil)
536
+ } else {
537
+ add(struct {
538
+ Exact bool
539
+ Left *shimast.Expression
540
+ Right *shimast.Expression
541
+ }{Exact: true, Left: nativefactories.ValueFactory.UNDEFINED()})
542
+ }
543
+ }
544
+
545
+ if len(props.Metadata.Functions) != 0 {
546
+ if nativehelpers.OptionPredicator.Functional(props.Context.Options) || props.Metadata.Size() != 1 {
547
+ add(struct {
548
+ Exact bool
549
+ Left *shimast.Expression
550
+ Right *shimast.Expression
551
+ }{
552
+ Exact: true,
553
+ Left: checkerProgrammer_factory.NewStringLiteral("function", shimast.TokenFlagsNone),
554
+ Right: nativefactories.ValueFactory.TYPEOF(props.Input),
555
+ })
556
+ } else {
557
+ binaries = append(binaries, CheckerProgrammer_IBinary{Combined: false, Expression: props.Config.Success})
558
+ }
559
+ }
560
+
561
+ constants := []*nativemetadata.MetadataConstant{}
562
+ constantLength := 0
563
+ for _, c := range props.Metadata.Constants {
564
+ if nativehelpers.AtomicPredicator.Constant(struct {
565
+ Metadata *nativemetadata.MetadataSchema
566
+ Name string
567
+ }{Metadata: props.Metadata, Name: c.Type}) {
568
+ constants = append(constants, c)
569
+ constantLength += len(c.Values)
570
+ }
571
+ }
572
+ if constantLength >= 10 {
573
+ values := []*shimast.Node{}
574
+ for _, c := range constants {
575
+ for _, v := range c.Values {
576
+ switch value := v.Value.(type) {
577
+ case bool:
578
+ if value {
579
+ values = append(values, checkerProgrammer_factory.NewKeywordExpression(shimast.KindTrueKeyword))
580
+ } else {
581
+ values = append(values, checkerProgrammer_factory.NewKeywordExpression(shimast.KindFalseKeyword))
582
+ }
583
+ case int64, uint64:
584
+ values = append(values, nativefactories.ExpressionFactory.Bigint(value))
585
+ case int, float64:
586
+ values = append(values, nativefactories.ExpressionFactory.Number(value))
587
+ default:
588
+ values = append(values, checkerProgrammer_factory.NewStringLiteral(fmt.Sprint(value), shimast.TokenFlagsNone))
589
+ }
590
+ }
591
+ }
592
+ setName := props.Functor.EmplaceVariable(
593
+ fmt.Sprintf("%sv%d", props.Config.Prefix, props.Functor.Increment()),
594
+ checkerProgrammer_factory.NewNewExpression(
595
+ checkerProgrammer_factory.NewIdentifier("Set"),
596
+ nil,
597
+ checkerProgrammer_factory.NewNodeList([]*shimast.Node{
598
+ checkerProgrammer_factory.NewArrayLiteralExpression(checkerProgrammer_factory.NewNodeList(values), false),
599
+ }),
600
+ ),
601
+ )
602
+ add(struct {
603
+ Exact bool
604
+ Left *shimast.Expression
605
+ Right *shimast.Expression
606
+ }{
607
+ Exact: true,
608
+ Left: checkerProgrammer_factory.NewKeywordExpression(shimast.KindTrueKeyword),
609
+ Right: checkerProgrammer_factory.NewCallExpression(
610
+ nativefactories.IdentifierFactory.Access(setName, "has"),
611
+ nil,
612
+ nil,
613
+ checkerProgrammer_factory.NewNodeList([]*shimast.Node{props.Input}),
614
+ shimast.NodeFlagsNone,
615
+ ),
616
+ })
617
+ } else {
618
+ for _, c := range constants {
619
+ for _, v := range c.Values {
620
+ add(struct {
621
+ Exact bool
622
+ Left *shimast.Expression
623
+ Right *shimast.Expression
624
+ }{Exact: true, Left: getConstantValue(v.Value)})
625
+ }
626
+ }
627
+ }
628
+
629
+ for _, atom := range props.Metadata.Atomics {
630
+ if nativehelpers.AtomicPredicator.Atomic(struct {
631
+ Metadata *nativemetadata.MetadataSchema
632
+ Name string
633
+ }{Metadata: props.Metadata, Name: atom.Type}) == false {
634
+ continue
635
+ }
636
+ switch atom.Type {
637
+ case "number":
638
+ binaries = append(binaries, CheckerProgrammer_IBinary{
639
+ Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
640
+ Explore: props.Explore,
641
+ Entry: nativeiterate.Check_number(nativeiterate.Check_numberProps{
642
+ Context: props.Context,
643
+ Numeric: props.Config.Numeric,
644
+ Atomic: atom,
645
+ Input: props.Input,
646
+ }),
647
+ Input: props.Input,
648
+ }),
649
+ Combined: false,
650
+ })
651
+ case "bigint":
652
+ binaries = append(binaries, CheckerProgrammer_IBinary{
653
+ Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
654
+ Explore: props.Explore,
655
+ Entry: nativeiterate.Check_bigint(nativeiterate.Check_bigintProps{
656
+ Context: props.Context,
657
+ Atomic: atom,
658
+ Input: props.Input,
659
+ }),
660
+ Input: props.Input,
661
+ }),
662
+ Combined: false,
663
+ })
664
+ case "string":
665
+ binaries = append(binaries, CheckerProgrammer_IBinary{
666
+ Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
667
+ Explore: props.Explore,
668
+ Entry: nativeiterate.Check_string(nativeiterate.Check_stringProps{
669
+ Context: props.Context,
670
+ Atomic: atom,
671
+ Input: props.Input,
672
+ }),
673
+ Input: props.Input,
674
+ }),
675
+ Combined: false,
676
+ })
677
+ default:
678
+ add(struct {
679
+ Exact bool
680
+ Left *shimast.Expression
681
+ Right *shimast.Expression
682
+ }{
683
+ Exact: true,
684
+ Left: checkerProgrammer_factory.NewStringLiteral(atom.Type, shimast.TokenFlagsNone),
685
+ Right: nativefactories.ValueFactory.TYPEOF(props.Input),
686
+ })
687
+ }
688
+ }
689
+
690
+ if len(props.Metadata.Templates) != 0 && nativehelpers.AtomicPredicator.Template(props.Metadata) {
691
+ binaries = append(binaries, CheckerProgrammer_IBinary{
692
+ Expression: props.Config.Atomist(CheckerProgrammer_AtomistProps{
693
+ Explore: props.Explore,
694
+ Entry: nativeiterate.Check_template(nativeiterate.Check_templateProps{
695
+ Templates: props.Metadata.Templates,
696
+ Input: props.Input,
697
+ }),
698
+ Input: props.Input,
699
+ }),
700
+ Combined: false,
701
+ })
702
+ }
703
+
704
+ for _, native := range props.Metadata.Natives {
705
+ binaries = append(binaries, CheckerProgrammer_IBinary{
706
+ Expression: nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: native.Name, Input: props.Input}),
707
+ Combined: false,
708
+ })
709
+ }
710
+
711
+ instances := []checkerProgrammer_IInstance{}
712
+ prepare := func(next checkerProgrammer_IInstance) {
713
+ instances = append(instances, next)
714
+ }
715
+ if len(props.Metadata.Sets) != 0 {
716
+ body := (*shimast.Node)(nil)
717
+ any := false
718
+ names := []string{}
719
+ for _, elem := range props.Metadata.Sets {
720
+ names = append(names, "Set<"+elem.Value.GetName()+">")
721
+ if elem.Value.Any {
722
+ any = true
723
+ }
724
+ }
725
+ if any == false {
726
+ explore := props.Explore
727
+ explore.From = "array"
728
+ body = checkerProgrammer_explore_sets(checkerProgrammer_exploreSetsProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Sets: props.Metadata.Sets, Input: props.Input, Explore: explore})
729
+ }
730
+ prepare(checkerProgrammer_IInstance{
731
+ Head: nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: "Set", Input: props.Input}),
732
+ Expected: strings.Join(names, " | "),
733
+ Body: body,
734
+ })
735
+ }
736
+ if len(props.Metadata.Maps) != 0 {
737
+ body := (*shimast.Node)(nil)
738
+ any := false
739
+ names := []string{}
740
+ for _, elem := range props.Metadata.Maps {
741
+ names = append(names, "Map<"+elem.Key.GetName()+", "+elem.Value.GetName()+">")
742
+ if elem.Key.Any && elem.Value.Any {
743
+ any = true
744
+ }
745
+ }
746
+ if any == false {
747
+ explore := props.Explore
748
+ explore.From = "array"
749
+ body = checkerProgrammer_explore_maps(checkerProgrammer_exploreMapsProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Maps: props.Metadata.Maps, Input: props.Input, Explore: explore})
750
+ }
751
+ prepare(checkerProgrammer_IInstance{
752
+ Head: nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: "Map", Input: props.Input}),
753
+ Expected: strings.Join(names, " | "),
754
+ Body: body,
755
+ })
756
+ }
757
+
758
+ if len(props.Metadata.Tuples)+len(props.Metadata.Arrays) > 0 {
759
+ body := (*shimast.Node)(nil)
760
+ expected := []string{}
761
+ for _, tuple := range props.Metadata.Tuples {
762
+ expected = append(expected, tuple.Type.Name)
763
+ }
764
+ for _, array := range props.Metadata.Arrays {
765
+ expected = append(expected, array.GetName())
766
+ }
767
+ if len(props.Metadata.Arrays) == 0 {
768
+ explore := props.Explore
769
+ explore.From = "array"
770
+ if len(props.Metadata.Tuples) == 1 {
771
+ body = checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Tuple: props.Metadata.Tuples[0], Input: props.Input, Explore: explore})
772
+ } else {
773
+ body = checkerProgrammer_explore_tuples(checkerProgrammer_exploreTuplesProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Tuples: props.Metadata.Tuples, Input: props.Input, Explore: explore})
774
+ }
775
+ } else if checkerProgrammer_array_any(props.Metadata.Arrays) {
776
+ body = nil
777
+ } else if len(props.Metadata.Tuples) == 0 {
778
+ explore := props.Explore
779
+ explore.From = "array"
780
+ if len(props.Metadata.Arrays) == 1 {
781
+ body = checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Array: props.Metadata.Arrays[0], Input: props.Input, Explore: explore})
782
+ } else {
783
+ body = checkerProgrammer_explore_arrays(checkerProgrammer_exploreArraysProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Arrays: props.Metadata.Arrays, Input: props.Input, Explore: explore})
784
+ }
785
+ } else {
786
+ body = checkerProgrammer_explore_arrays_and_tuples(checkerProgrammer_exploreArraysAndTuplesProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Definitions: checkerProgrammer_array_tuple_definitions(props.Metadata.Arrays, props.Metadata.Tuples), Input: props.Input, Explore: props.Explore})
787
+ }
788
+ prepare(checkerProgrammer_IInstance{
789
+ Head: props.Config.Atomist(CheckerProgrammer_AtomistProps{
790
+ Explore: props.Explore,
791
+ Entry: nativehelpers.ICheckEntry{
792
+ Expected: strings.Join(expected, " | "),
793
+ Expression: nativefactories.ExpressionFactory.IsArray(props.Input),
794
+ Conditions: [][]nativehelpers.ICheckEntry_ICondition{},
795
+ },
796
+ Input: props.Input,
797
+ }),
798
+ Expected: strings.Join(expected, " | "),
799
+ Body: body,
800
+ })
801
+ }
802
+
803
+ if len(props.Metadata.Objects) > 0 {
804
+ checkArray := false
805
+ for _, obj := range props.Metadata.Objects {
806
+ all := true
807
+ for _, prop := range obj.Type.Properties {
808
+ if prop.Key.IsSoleLiteral() && prop.Value.IsRequired() {
809
+ all = false
810
+ break
811
+ }
812
+ }
813
+ if all {
814
+ checkArray = true
815
+ break
816
+ }
817
+ }
818
+ names := []string{}
819
+ for _, obj := range props.Metadata.Objects {
820
+ names = append(names, obj.Type.Name)
821
+ }
822
+ explore := props.Explore
823
+ explore.From = "object"
824
+ prepare(checkerProgrammer_IInstance{
825
+ Head: nativefactories.ExpressionFactory.IsObject(nativefactories.ExpressionFactory_IsObjectProps{
826
+ CheckNull: true,
827
+ CheckArray: checkArray,
828
+ Input: props.Input,
829
+ }),
830
+ Expected: strings.Join(names, " | "),
831
+ Body: checkerProgrammer_explore_objects(checkerProgrammer_exploreObjectsProps{
832
+ Config: props.Config, Functor: props.Functor, Metadata: props.Metadata, Input: props.Input, Explore: explore,
833
+ }),
834
+ })
835
+ }
836
+
837
+ if len(instances) != 0 {
838
+ transformer := func(instance checkerProgrammer_IInstance) CheckerProgrammer_IBinary {
839
+ if instance.Body != nil {
840
+ return CheckerProgrammer_IBinary{
841
+ Expression: checkerProgrammer_and(instance.Head, instance.Body),
842
+ Combined: true,
843
+ }
844
+ }
845
+ return CheckerProgrammer_IBinary{Expression: instance.Head, Combined: false}
846
+ }
847
+ if len(instances) == 1 {
848
+ instance := instances[0]
849
+ if instance.Body != nil {
850
+ binaries = append(binaries, CheckerProgrammer_IBinary{
851
+ Expression: props.Config.Combiner(CheckerProgrammer_CombinerProps{
852
+ Explore: props.Explore,
853
+ Logic: "and",
854
+ Input: props.Input,
855
+ Binaries: []CheckerProgrammer_IBinary{
856
+ {Expression: instance.Head, Combined: false},
857
+ {Expression: instance.Body, Combined: true},
858
+ },
859
+ Expected: props.Metadata.GetName(),
860
+ }),
861
+ Combined: true,
862
+ })
863
+ } else {
864
+ binaries = append(binaries, transformer(instance))
865
+ }
866
+ } else {
867
+ transformed := make([]CheckerProgrammer_IBinary, 0, len(instances))
868
+ for _, instance := range instances {
869
+ transformed = append(transformed, transformer(instance))
870
+ }
871
+ binaries = append(binaries, CheckerProgrammer_IBinary{
872
+ Expression: props.Config.Combiner(CheckerProgrammer_CombinerProps{
873
+ Explore: props.Explore,
874
+ Logic: "or",
875
+ Input: props.Input,
876
+ Binaries: transformed,
877
+ Expected: props.Metadata.GetName(),
878
+ }),
879
+ Combined: true,
880
+ })
881
+ }
882
+ }
883
+
884
+ if props.Metadata.Escaped != nil {
885
+ var expression *shimast.Node
886
+ if props.Metadata.Escaped.Original.Size() == 1 && len(props.Metadata.Escaped.Original.Natives) == 1 {
887
+ expression = nativeiterate.Check_native(nativeiterate.Check_nativeProps{Name: props.Metadata.Escaped.Original.Natives[0].Name, Input: props.Input})
888
+ } else {
889
+ expression = checkerProgrammer_and(
890
+ CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Metadata: props.Metadata.Escaped.Original, Input: props.Input, Explore: props.Explore}),
891
+ checkerProgrammer_and(
892
+ checkerProgrammer_decode_to_json(struct {
893
+ Input *shimast.Expression
894
+ CheckNull bool
895
+ }{Input: props.Input, CheckNull: false}),
896
+ checkerProgrammer_decode_escaped(checkerProgrammer_decodeEscapedProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Metadata: props.Metadata.Escaped.Returns, Input: props.Input, Explore: props.Explore}),
897
+ ),
898
+ )
899
+ }
900
+ binaries = append(binaries, CheckerProgrammer_IBinary{Combined: false, Expression: expression})
901
+ }
902
+
903
+ if len(top) != 0 && len(binaries) != 0 {
904
+ next := append([]CheckerProgrammer_IBinary{}, top...)
905
+ next = append(next, CheckerProgrammer_IBinary{
906
+ Expression: props.Config.Combiner(CheckerProgrammer_CombinerProps{Explore: props.Explore, Logic: "or", Input: props.Input, Binaries: binaries, Expected: props.Metadata.GetName()}),
907
+ Combined: true,
908
+ })
909
+ return props.Config.Combiner(CheckerProgrammer_CombinerProps{Explore: props.Explore, Logic: "and", Input: props.Input, Binaries: next, Expected: props.Metadata.GetName()})
910
+ }
911
+ if len(binaries) != 0 {
912
+ return props.Config.Combiner(CheckerProgrammer_CombinerProps{Explore: props.Explore, Logic: "or", Input: props.Input, Binaries: binaries, Expected: props.Metadata.GetName()})
913
+ }
914
+ return props.Config.Success
915
915
  }
916
916
 
917
917
  func (checkerProgrammerNamespace) Decode_object(props CheckerProgrammer_DecodeObjectProps) *shimast.Node {
918
- props.Object.Validated = true
919
- return FeatureProgrammer.Decode_object(FeatureProgrammer_DecodeObjectProps{
920
- Config: FeatureProgrammer_DecodeObjectConfig{
921
- Prefix: props.Config.Prefix,
922
- Path: props.Config.Path,
923
- Trace: props.Config.Trace,
924
- },
925
- Functor: props.Functor,
926
- Object: props.Object,
927
- Input: props.Input,
928
- Explore: props.Explore,
929
- })
918
+ props.Object.Validated = true
919
+ return FeatureProgrammer.Decode_object(FeatureProgrammer_DecodeObjectProps{
920
+ Config: FeatureProgrammer_DecodeObjectConfig{
921
+ Prefix: props.Config.Prefix,
922
+ Path: props.Config.Path,
923
+ Trace: props.Config.Trace,
924
+ },
925
+ Functor: props.Functor,
926
+ Object: props.Object,
927
+ Input: props.Input,
928
+ Explore: props.Explore,
929
+ })
930
930
  }
931
931
 
932
932
  type checkerProgrammer_decodeArrayProps struct {
933
- Config CheckerProgrammer_IConfig
934
- Context nativecontext.ITypiaContext
935
- Functor *nativehelpers.FunctionProgrammer
936
- Array *nativemetadata.MetadataArray
937
- Input *shimast.Expression
938
- Explore CheckerProgrammer_IExplore
933
+ Config CheckerProgrammer_IConfig
934
+ Context nativecontext.ITypiaContext
935
+ Functor *nativehelpers.FunctionProgrammer
936
+ Array *nativemetadata.MetadataArray
937
+ Input *shimast.Expression
938
+ Explore CheckerProgrammer_IExplore
939
939
  }
940
940
 
941
941
  type checkerProgrammer_decodeArrayInlineProps = checkerProgrammer_decodeArrayProps
942
942
 
943
943
  func checkerProgrammer_decode_array(props checkerProgrammer_decodeArrayProps) *shimast.Node {
944
- if props.Array.Type.Recursive == false {
945
- return checkerProgrammer_decode_array_inline(props)
946
- }
947
- arrayExplore := props.Explore
948
- arrayExplore.Source = "function"
949
- arrayExplore.From = "array"
950
- index := 0
951
- if props.Array.Type.Index != nil {
952
- index = *props.Array.Type.Index
953
- }
954
- return checkerProgrammer_or(
955
- checkerProgrammer_factory.NewCallExpression(
956
- checkerProgrammer_factory.NewIdentifier(props.Functor.UseLocal(fmt.Sprintf("%sa%d", props.Config.Prefix, index))),
957
- nil,
958
- nil,
959
- checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
960
- Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
961
- Explore: arrayExplore,
962
- Input: props.Input,
963
- })),
964
- shimast.NodeFlagsNone,
965
- ),
966
- props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
967
- Input: props.Input,
968
- Expected: props.Array.Type.Name,
969
- Explore: &arrayExplore,
970
- }),
971
- )
944
+ if props.Array.Type.Recursive == false {
945
+ return checkerProgrammer_decode_array_inline(props)
946
+ }
947
+ arrayExplore := props.Explore
948
+ arrayExplore.Source = "function"
949
+ arrayExplore.From = "array"
950
+ index := 0
951
+ if props.Array.Type.Index != nil {
952
+ index = *props.Array.Type.Index
953
+ }
954
+ return checkerProgrammer_or(
955
+ checkerProgrammer_factory.NewCallExpression(
956
+ checkerProgrammer_factory.NewIdentifier(props.Functor.UseLocal(fmt.Sprintf("%sa%d", props.Config.Prefix, index))),
957
+ nil,
958
+ nil,
959
+ checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
960
+ Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
961
+ Explore: arrayExplore,
962
+ Input: props.Input,
963
+ })),
964
+ shimast.NodeFlagsNone,
965
+ ),
966
+ props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
967
+ Input: props.Input,
968
+ Expected: props.Array.Type.Name,
969
+ Explore: &arrayExplore,
970
+ }),
971
+ )
972
972
  }
973
973
 
974
974
  func checkerProgrammer_decode_array_inline(props checkerProgrammer_decodeArrayInlineProps) *shimast.Node {
975
- length := nativeiterate.Check_array_length(nativeiterate.Check_array_lengthProps{
976
- Context: props.Context,
977
- Array: props.Array,
978
- Input: props.Input,
979
- })
980
- main := FeatureProgrammer.Decode_array(FeatureProgrammer_DecodeArrayProps{
981
- Config: FeatureProgrammer_DecodeArrayConfig{
982
- Prefix: props.Config.Prefix,
983
- Trace: props.Config.Trace,
984
- Path: props.Config.Path,
985
- Decoder: func(next FeatureProgrammer_DecoderProps) *shimast.Node {
986
- return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
987
- Context: props.Context,
988
- Config: props.Config,
989
- Functor: props.Functor,
990
- Input: next.Input,
991
- Metadata: next.Metadata,
992
- Explore: next.Explore,
993
- })
994
- },
995
- },
996
- Functor: props.Functor,
997
- Combiner: func(next struct {
998
- Input *shimast.Expression
999
- Arrow *shimast.Node
1000
- }) *shimast.Node {
1001
- return props.Config.Joiner.Array(CheckerProgrammer_JoinerArrayProps{
1002
- Input: next.Input,
1003
- Arrow: next.Arrow,
1004
- })
1005
- },
1006
- Array: props.Array,
1007
- Input: props.Input,
1008
- Explore: props.Explore,
1009
- })
1010
- if length.Expression == nil && len(length.Conditions) == 0 {
1011
- return main
1012
- }
1013
- return checkerProgrammer_and(
1014
- props.Config.Atomist(CheckerProgrammer_AtomistProps{
1015
- Explore: props.Explore,
1016
- Input: props.Input,
1017
- Entry: length,
1018
- }),
1019
- main,
1020
- )
975
+ length := nativeiterate.Check_array_length(nativeiterate.Check_array_lengthProps{
976
+ Context: props.Context,
977
+ Array: props.Array,
978
+ Input: props.Input,
979
+ })
980
+ main := FeatureProgrammer.Decode_array(FeatureProgrammer_DecodeArrayProps{
981
+ Config: FeatureProgrammer_DecodeArrayConfig{
982
+ Prefix: props.Config.Prefix,
983
+ Trace: props.Config.Trace,
984
+ Path: props.Config.Path,
985
+ Decoder: func(next FeatureProgrammer_DecoderProps) *shimast.Node {
986
+ return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
987
+ Context: props.Context,
988
+ Config: props.Config,
989
+ Functor: props.Functor,
990
+ Input: next.Input,
991
+ Metadata: next.Metadata,
992
+ Explore: next.Explore,
993
+ })
994
+ },
995
+ },
996
+ Functor: props.Functor,
997
+ Combiner: func(next struct {
998
+ Input *shimast.Expression
999
+ Arrow *shimast.Node
1000
+ }) *shimast.Node {
1001
+ return props.Config.Joiner.Array(CheckerProgrammer_JoinerArrayProps{
1002
+ Input: next.Input,
1003
+ Arrow: next.Arrow,
1004
+ })
1005
+ },
1006
+ Array: props.Array,
1007
+ Input: props.Input,
1008
+ Explore: props.Explore,
1009
+ })
1010
+ if length.Expression == nil && len(length.Conditions) == 0 {
1011
+ return main
1012
+ }
1013
+ return checkerProgrammer_and(
1014
+ props.Config.Atomist(CheckerProgrammer_AtomistProps{
1015
+ Explore: props.Explore,
1016
+ Input: props.Input,
1017
+ Entry: length,
1018
+ }),
1019
+ main,
1020
+ )
1021
1021
  }
1022
1022
 
1023
1023
  type checkerProgrammer_decodeTupleProps struct {
1024
- Context nativecontext.ITypiaContext
1025
- Config CheckerProgrammer_IConfig
1026
- Functor *nativehelpers.FunctionProgrammer
1027
- Tuple *nativemetadata.MetadataTuple
1028
- Input *shimast.Expression
1029
- Explore CheckerProgrammer_IExplore
1024
+ Context nativecontext.ITypiaContext
1025
+ Config CheckerProgrammer_IConfig
1026
+ Functor *nativehelpers.FunctionProgrammer
1027
+ Tuple *nativemetadata.MetadataTuple
1028
+ Input *shimast.Expression
1029
+ Explore CheckerProgrammer_IExplore
1030
1030
  }
1031
1031
 
1032
1032
  type checkerProgrammer_decodeTupleInlineProps struct {
1033
- Context nativecontext.ITypiaContext
1034
- Config CheckerProgrammer_IConfig
1035
- Functor *nativehelpers.FunctionProgrammer
1036
- Tuple *nativemetadata.MetadataTupleType
1037
- Input *shimast.Expression
1038
- Explore CheckerProgrammer_IExplore
1033
+ Context nativecontext.ITypiaContext
1034
+ Config CheckerProgrammer_IConfig
1035
+ Functor *nativehelpers.FunctionProgrammer
1036
+ Tuple *nativemetadata.MetadataTupleType
1037
+ Input *shimast.Expression
1038
+ Explore CheckerProgrammer_IExplore
1039
1039
  }
1040
1040
 
1041
1041
  func checkerProgrammer_decode_tuple(props checkerProgrammer_decodeTupleProps) *shimast.Node {
1042
- if props.Tuple.Type.Recursive == false {
1043
- return checkerProgrammer_decode_tuple_inline(checkerProgrammer_decodeTupleInlineProps{
1044
- Context: props.Context,
1045
- Config: props.Config,
1046
- Functor: props.Functor,
1047
- Tuple: props.Tuple.Type,
1048
- Input: props.Input,
1049
- Explore: props.Explore,
1050
- })
1051
- }
1052
- arrayExplore := props.Explore
1053
- arrayExplore.Source = "function"
1054
- arrayExplore.From = "array"
1055
- index := 0
1056
- if props.Tuple.Type.Index != nil {
1057
- index = *props.Tuple.Type.Index
1058
- }
1059
- return checkerProgrammer_or(
1060
- checkerProgrammer_factory.NewCallExpression(
1061
- checkerProgrammer_factory.NewIdentifier(props.Functor.UseLocal(fmt.Sprintf("%st%d", props.Config.Prefix, index))),
1062
- nil,
1063
- nil,
1064
- checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
1065
- Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1066
- Explore: arrayExplore,
1067
- Input: props.Input,
1068
- })),
1069
- shimast.NodeFlagsNone,
1070
- ),
1071
- props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
1072
- Input: props.Input,
1073
- Expected: props.Tuple.Type.Name,
1074
- Explore: &arrayExplore,
1075
- }),
1076
- )
1042
+ if props.Tuple.Type.Recursive == false {
1043
+ return checkerProgrammer_decode_tuple_inline(checkerProgrammer_decodeTupleInlineProps{
1044
+ Context: props.Context,
1045
+ Config: props.Config,
1046
+ Functor: props.Functor,
1047
+ Tuple: props.Tuple.Type,
1048
+ Input: props.Input,
1049
+ Explore: props.Explore,
1050
+ })
1051
+ }
1052
+ arrayExplore := props.Explore
1053
+ arrayExplore.Source = "function"
1054
+ arrayExplore.From = "array"
1055
+ index := 0
1056
+ if props.Tuple.Type.Index != nil {
1057
+ index = *props.Tuple.Type.Index
1058
+ }
1059
+ return checkerProgrammer_or(
1060
+ checkerProgrammer_factory.NewCallExpression(
1061
+ checkerProgrammer_factory.NewIdentifier(props.Functor.UseLocal(fmt.Sprintf("%st%d", props.Config.Prefix, index))),
1062
+ nil,
1063
+ nil,
1064
+ checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
1065
+ Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1066
+ Explore: arrayExplore,
1067
+ Input: props.Input,
1068
+ })),
1069
+ shimast.NodeFlagsNone,
1070
+ ),
1071
+ props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
1072
+ Input: props.Input,
1073
+ Expected: props.Tuple.Type.Name,
1074
+ Explore: &arrayExplore,
1075
+ }),
1076
+ )
1077
1077
  }
1078
1078
 
1079
1079
  func checkerProgrammer_decode_tuple_inline(props checkerProgrammer_decodeTupleInlineProps) *shimast.Node {
1080
- binaries := []*shimast.Node{}
1081
- for index, metadata := range props.Tuple.Elements {
1082
- if metadata.Rest != nil {
1083
- continue
1084
- }
1085
- explore := props.Explore
1086
- explore.From = "array"
1087
- if len(props.Explore.Postfix) != 0 {
1088
- explore.Postfix = checkerProgrammer_postfix_of_tuple(props.Explore.Postfix) + fmt.Sprintf("[%d]\"", index)
1089
- } else {
1090
- explore.Postfix = fmt.Sprintf("\"[%d]\"", index)
1091
- }
1092
- binaries = append(binaries, CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1093
- Context: props.Context,
1094
- Config: props.Config,
1095
- Functor: props.Functor,
1096
- Input: checkerProgrammer_factory.NewElementAccessExpression(props.Input, nil, nativefactories.ExpressionFactory.Number(index), shimast.NodeFlagsNone),
1097
- Metadata: metadata,
1098
- Explore: explore,
1099
- }))
1100
- }
1101
-
1102
- var rest *shimast.Node
1103
- if len(props.Tuple.Elements) != 0 && props.Tuple.Elements[len(props.Tuple.Elements)-1].Rest != nil {
1104
- last := props.Tuple.Elements[len(props.Tuple.Elements)-1]
1105
- explore := props.Explore
1106
- start := len(props.Tuple.Elements) - 1
1107
- explore.Start = &start
1108
- rest = CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1109
- Config: props.Config,
1110
- Context: props.Context,
1111
- Functor: props.Functor,
1112
- Input: checkerProgrammer_factory.NewCallExpression(
1113
- nativefactories.IdentifierFactory.Access(props.Input, "slice"),
1114
- nil,
1115
- nil,
1116
- checkerProgrammer_factory.NewNodeList([]*shimast.Node{nativefactories.ExpressionFactory.Number(len(props.Tuple.Elements) - 1)}),
1117
- shimast.NodeFlagsNone,
1118
- ),
1119
- Metadata: checkerProgrammer_wrap_metadata_rest_tuple(last.Rest),
1120
- Explore: explore,
1121
- })
1122
- }
1123
-
1124
- arrayLength := nativefactories.IdentifierFactory.Access(props.Input, "length")
1125
- entries := []CheckerProgrammer_IBinary{}
1126
- if rest == nil {
1127
- allRequired := true
1128
- required := 0
1129
- for _, elem := range props.Tuple.Elements {
1130
- if elem.Optional == false {
1131
- required++
1132
- } else {
1133
- allRequired = false
1134
- }
1135
- }
1136
- if allRequired {
1137
- entries = append(entries, CheckerProgrammer_IBinary{
1138
- Combined: false,
1139
- Expression: checkerProgrammer_equal(
1140
- arrayLength,
1141
- nativefactories.ExpressionFactory.Number(len(props.Tuple.Elements)),
1142
- ),
1143
- })
1144
- } else {
1145
- entries = append(entries, CheckerProgrammer_IBinary{
1146
- Combined: false,
1147
- Expression: checkerProgrammer_and(
1148
- checkerProgrammer_binary(nativefactories.ExpressionFactory.Number(required), shimast.KindLessThanEqualsToken, arrayLength),
1149
- checkerProgrammer_binary(nativefactories.ExpressionFactory.Number(len(props.Tuple.Elements)), shimast.KindGreaterThanEqualsToken, arrayLength),
1150
- ),
1151
- })
1152
- }
1153
- }
1154
- if props.Config.Joiner.Tuple != nil {
1155
- entries = append(entries, CheckerProgrammer_IBinary{Expression: props.Config.Joiner.Tuple(binaries), Combined: true})
1156
- } else {
1157
- for _, expr := range binaries {
1158
- entries = append(entries, CheckerProgrammer_IBinary{Expression: expr, Combined: true})
1159
- }
1160
- }
1161
- if rest != nil {
1162
- entries = append(entries, CheckerProgrammer_IBinary{Expression: rest, Combined: true})
1163
- }
1164
- names := make([]string, 0, len(props.Tuple.Elements))
1165
- for _, elem := range props.Tuple.Elements {
1166
- names = append(names, elem.GetName())
1167
- }
1168
- return props.Config.Combiner(CheckerProgrammer_CombinerProps{
1169
- Explore: props.Explore,
1170
- Logic: "and",
1171
- Input: props.Input,
1172
- Binaries: entries,
1173
- Expected: "[" + strings.Join(names, ", ") + "]",
1174
- })
1080
+ binaries := []*shimast.Node{}
1081
+ for index, metadata := range props.Tuple.Elements {
1082
+ if metadata.Rest != nil {
1083
+ continue
1084
+ }
1085
+ explore := props.Explore
1086
+ explore.From = "array"
1087
+ if len(props.Explore.Postfix) != 0 {
1088
+ explore.Postfix = checkerProgrammer_postfix_of_tuple(props.Explore.Postfix) + fmt.Sprintf("[%d]\"", index)
1089
+ } else {
1090
+ explore.Postfix = fmt.Sprintf("\"[%d]\"", index)
1091
+ }
1092
+ binaries = append(binaries, CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1093
+ Context: props.Context,
1094
+ Config: props.Config,
1095
+ Functor: props.Functor,
1096
+ Input: checkerProgrammer_factory.NewElementAccessExpression(props.Input, nil, nativefactories.ExpressionFactory.Number(index), shimast.NodeFlagsNone),
1097
+ Metadata: metadata,
1098
+ Explore: explore,
1099
+ }))
1100
+ }
1101
+
1102
+ var rest *shimast.Node
1103
+ if len(props.Tuple.Elements) != 0 && props.Tuple.Elements[len(props.Tuple.Elements)-1].Rest != nil {
1104
+ last := props.Tuple.Elements[len(props.Tuple.Elements)-1]
1105
+ explore := props.Explore
1106
+ start := len(props.Tuple.Elements) - 1
1107
+ explore.Start = &start
1108
+ rest = CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1109
+ Config: props.Config,
1110
+ Context: props.Context,
1111
+ Functor: props.Functor,
1112
+ Input: checkerProgrammer_factory.NewCallExpression(
1113
+ nativefactories.IdentifierFactory.Access(props.Input, "slice"),
1114
+ nil,
1115
+ nil,
1116
+ checkerProgrammer_factory.NewNodeList([]*shimast.Node{nativefactories.ExpressionFactory.Number(len(props.Tuple.Elements) - 1)}),
1117
+ shimast.NodeFlagsNone,
1118
+ ),
1119
+ Metadata: checkerProgrammer_wrap_metadata_rest_tuple(last.Rest),
1120
+ Explore: explore,
1121
+ })
1122
+ }
1123
+
1124
+ arrayLength := nativefactories.IdentifierFactory.Access(props.Input, "length")
1125
+ entries := []CheckerProgrammer_IBinary{}
1126
+ if rest == nil {
1127
+ allRequired := true
1128
+ required := 0
1129
+ for _, elem := range props.Tuple.Elements {
1130
+ if elem.Optional == false {
1131
+ required++
1132
+ } else {
1133
+ allRequired = false
1134
+ }
1135
+ }
1136
+ if allRequired {
1137
+ entries = append(entries, CheckerProgrammer_IBinary{
1138
+ Combined: false,
1139
+ Expression: checkerProgrammer_equal(
1140
+ arrayLength,
1141
+ nativefactories.ExpressionFactory.Number(len(props.Tuple.Elements)),
1142
+ ),
1143
+ })
1144
+ } else {
1145
+ entries = append(entries, CheckerProgrammer_IBinary{
1146
+ Combined: false,
1147
+ Expression: checkerProgrammer_and(
1148
+ checkerProgrammer_binary(nativefactories.ExpressionFactory.Number(required), shimast.KindLessThanEqualsToken, arrayLength),
1149
+ checkerProgrammer_binary(nativefactories.ExpressionFactory.Number(len(props.Tuple.Elements)), shimast.KindGreaterThanEqualsToken, arrayLength),
1150
+ ),
1151
+ })
1152
+ }
1153
+ }
1154
+ if props.Config.Joiner.Tuple != nil {
1155
+ entries = append(entries, CheckerProgrammer_IBinary{Expression: props.Config.Joiner.Tuple(binaries), Combined: true})
1156
+ } else {
1157
+ for _, expr := range binaries {
1158
+ entries = append(entries, CheckerProgrammer_IBinary{Expression: expr, Combined: true})
1159
+ }
1160
+ }
1161
+ if rest != nil {
1162
+ entries = append(entries, CheckerProgrammer_IBinary{Expression: rest, Combined: true})
1163
+ }
1164
+ names := make([]string, 0, len(props.Tuple.Elements))
1165
+ for _, elem := range props.Tuple.Elements {
1166
+ names = append(names, elem.GetName())
1167
+ }
1168
+ return props.Config.Combiner(CheckerProgrammer_CombinerProps{
1169
+ Explore: props.Explore,
1170
+ Logic: "and",
1171
+ Input: props.Input,
1172
+ Binaries: entries,
1173
+ Expected: "[" + strings.Join(names, ", ") + "]",
1174
+ })
1175
1175
  }
1176
1176
 
1177
1177
  type checkerProgrammer_decodeEscapedProps struct {
1178
- Config CheckerProgrammer_IConfig
1179
- Context nativecontext.ITypiaContext
1180
- Functor *nativehelpers.FunctionProgrammer
1181
- Metadata *nativemetadata.MetadataSchema
1182
- Input *shimast.Expression
1183
- Explore CheckerProgrammer_IExplore
1178
+ Config CheckerProgrammer_IConfig
1179
+ Context nativecontext.ITypiaContext
1180
+ Functor *nativehelpers.FunctionProgrammer
1181
+ Metadata *nativemetadata.MetadataSchema
1182
+ Input *shimast.Expression
1183
+ Explore CheckerProgrammer_IExplore
1184
1184
  }
1185
1185
 
1186
1186
  func checkerProgrammer_decode_escaped(props checkerProgrammer_decodeEscapedProps) *shimast.Node {
1187
- return checkerProgrammer_factory.NewCallExpression(
1188
- checkerProgrammer_factory.NewParenthesizedExpression(
1189
- checkerProgrammer_factory.NewArrowFunction(
1190
- nil,
1191
- nil,
1192
- checkerProgrammer_factory.NewNodeList([]*shimast.Node{
1193
- nativefactories.IdentifierFactory.Parameter("input", nativefactories.TypeFactory.Keyword("any"), nil),
1194
- }),
1195
- nil,
1196
- nil,
1197
- checkerProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
1198
- CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1199
- Context: props.Context,
1200
- Config: props.Config,
1201
- Functor: props.Functor,
1202
- Metadata: props.Metadata,
1203
- Input: checkerProgrammer_factory.NewIdentifier("input"),
1204
- Explore: props.Explore,
1205
- }),
1206
- ),
1207
- ),
1208
- nil,
1209
- nil,
1210
- checkerProgrammer_factory.NewNodeList([]*shimast.Node{
1211
- checkerProgrammer_factory.NewCallExpression(
1212
- nativefactories.IdentifierFactory.Access(props.Input, "toJSON"),
1213
- nil,
1214
- nil,
1215
- nil,
1216
- shimast.NodeFlagsNone,
1217
- ),
1218
- }),
1219
- shimast.NodeFlagsNone,
1220
- )
1187
+ return checkerProgrammer_factory.NewCallExpression(
1188
+ checkerProgrammer_factory.NewParenthesizedExpression(
1189
+ checkerProgrammer_factory.NewArrowFunction(
1190
+ nil,
1191
+ nil,
1192
+ checkerProgrammer_factory.NewNodeList([]*shimast.Node{
1193
+ nativefactories.IdentifierFactory.Parameter("input", nativefactories.TypeFactory.Keyword("any"), nil),
1194
+ }),
1195
+ nil,
1196
+ nil,
1197
+ checkerProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
1198
+ CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1199
+ Context: props.Context,
1200
+ Config: props.Config,
1201
+ Functor: props.Functor,
1202
+ Metadata: props.Metadata,
1203
+ Input: checkerProgrammer_factory.NewIdentifier("input"),
1204
+ Explore: props.Explore,
1205
+ }),
1206
+ ),
1207
+ ),
1208
+ nil,
1209
+ nil,
1210
+ checkerProgrammer_factory.NewNodeList([]*shimast.Node{
1211
+ checkerProgrammer_factory.NewCallExpression(
1212
+ nativefactories.IdentifierFactory.Access(props.Input, "toJSON"),
1213
+ nil,
1214
+ nil,
1215
+ nil,
1216
+ shimast.NodeFlagsNone,
1217
+ ),
1218
+ }),
1219
+ shimast.NodeFlagsNone,
1220
+ )
1221
1221
  }
1222
1222
 
1223
1223
  type checkerProgrammer_exploreSetsProps struct {
1224
- Context nativecontext.ITypiaContext
1225
- Config CheckerProgrammer_IConfig
1226
- Functor *nativehelpers.FunctionProgrammer
1227
- Sets []*nativemetadata.MetadataSet
1228
- Input *shimast.Expression
1229
- Explore CheckerProgrammer_IExplore
1224
+ Context nativecontext.ITypiaContext
1225
+ Config CheckerProgrammer_IConfig
1226
+ Functor *nativehelpers.FunctionProgrammer
1227
+ Sets []*nativemetadata.MetadataSet
1228
+ Input *shimast.Expression
1229
+ Explore CheckerProgrammer_IExplore
1230
1230
  }
1231
1231
 
1232
1232
  func checkerProgrammer_explore_sets(props checkerProgrammer_exploreSetsProps) *shimast.Node {
1233
- return checkerProgrammer_factory.NewCallExpression(
1234
- nativehelpers.UnionExplorer.Set(nativehelpers.UnionExplorer_SetProps{
1235
- Config: nativehelpers.UnionExplorer_ArrayLikeConfig{
1236
- Checker: func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1237
- return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1238
- Context: props.Context,
1239
- Config: props.Config,
1240
- Functor: props.Functor,
1241
- Input: v.Input,
1242
- Metadata: v.Definition.(*nativemetadata.MetadataSchema),
1243
- Explore: featureProgrammer_as_explore(v.Explore),
1244
- })
1245
- },
1246
- Decoder: func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1247
- return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{
1248
- Config: props.Config, Context: props.Context, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore),
1249
- })
1250
- },
1251
- Empty: props.Config.Success,
1252
- Success: props.Config.Success,
1253
- Failure: func(v nativehelpers.UnionExplorer_ArrayLikeFailureProps) *shimast.Node {
1254
- explore := featureProgrammer_as_explore(v.Explore)
1255
- return checkerProgrammer_factory.NewReturnStatement(props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{Input: v.Input, Expected: v.Expected, Explore: &explore}))
1256
- },
1257
- },
1258
- Parameters: []*shimast.Node{},
1259
- Input: props.Input,
1260
- Sets: props.Sets,
1261
- Explore: props.Explore,
1262
- }),
1263
- nil,
1264
- nil,
1265
- nil,
1266
- shimast.NodeFlagsNone,
1267
- )
1233
+ return checkerProgrammer_factory.NewCallExpression(
1234
+ nativehelpers.UnionExplorer.Set(nativehelpers.UnionExplorer_SetProps{
1235
+ Config: nativehelpers.UnionExplorer_ArrayLikeConfig{
1236
+ Checker: func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1237
+ return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1238
+ Context: props.Context,
1239
+ Config: props.Config,
1240
+ Functor: props.Functor,
1241
+ Input: v.Input,
1242
+ Metadata: v.Definition.(*nativemetadata.MetadataSchema),
1243
+ Explore: featureProgrammer_as_explore(v.Explore),
1244
+ })
1245
+ },
1246
+ Decoder: func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1247
+ return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{
1248
+ Config: props.Config, Context: props.Context, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore),
1249
+ })
1250
+ },
1251
+ Empty: props.Config.Success,
1252
+ Success: props.Config.Success,
1253
+ Failure: func(v nativehelpers.UnionExplorer_ArrayLikeFailureProps) *shimast.Node {
1254
+ explore := featureProgrammer_as_explore(v.Explore)
1255
+ return checkerProgrammer_factory.NewReturnStatement(props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{Input: v.Input, Expected: v.Expected, Explore: &explore}))
1256
+ },
1257
+ },
1258
+ Parameters: []*shimast.Node{},
1259
+ Input: props.Input,
1260
+ Sets: props.Sets,
1261
+ Explore: props.Explore,
1262
+ }),
1263
+ nil,
1264
+ nil,
1265
+ nil,
1266
+ shimast.NodeFlagsNone,
1267
+ )
1268
1268
  }
1269
1269
 
1270
1270
  type checkerProgrammer_exploreMapsProps struct {
1271
- Context nativecontext.ITypiaContext
1272
- Config CheckerProgrammer_IConfig
1273
- Functor *nativehelpers.FunctionProgrammer
1274
- Input *shimast.Expression
1275
- Maps []*nativemetadata.MetadataMap
1276
- Explore CheckerProgrammer_IExplore
1271
+ Context nativecontext.ITypiaContext
1272
+ Config CheckerProgrammer_IConfig
1273
+ Functor *nativehelpers.FunctionProgrammer
1274
+ Input *shimast.Expression
1275
+ Maps []*nativemetadata.MetadataMap
1276
+ Explore CheckerProgrammer_IExplore
1277
1277
  }
1278
1278
 
1279
1279
  func checkerProgrammer_explore_maps(props checkerProgrammer_exploreMapsProps) *shimast.Node {
1280
- return checkerProgrammer_factory.NewCallExpression(
1281
- nativehelpers.UnionExplorer.Map(nativehelpers.UnionExplorer_MapProps{
1282
- Config: nativehelpers.UnionExplorer_ArrayLikeConfig{
1283
- Checker: func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1284
- pair := v.Definition.([]*nativemetadata.MetadataSchema)
1285
- explore := featureProgrammer_as_explore(v.Explore)
1286
- leftExplore := explore
1287
- leftExplore.Postfix = explore.Postfix + "[0]"
1288
- rightExplore := explore
1289
- rightExplore.Postfix = explore.Postfix + "[1]"
1290
- return checkerProgrammer_and(
1291
- CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1292
- Config: props.Config, Context: props.Context, Functor: props.Functor,
1293
- Input: checkerProgrammer_factory.NewElementAccessExpression(v.Input, nil, nativefactories.ExpressionFactory.Number(0), shimast.NodeFlagsNone), Metadata: pair[0], Explore: leftExplore,
1294
- }),
1295
- CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1296
- Config: props.Config, Context: props.Context, Functor: props.Functor,
1297
- Input: checkerProgrammer_factory.NewElementAccessExpression(v.Input, nil, nativefactories.ExpressionFactory.Number(1), shimast.NodeFlagsNone), Metadata: pair[1], Explore: rightExplore,
1298
- }),
1299
- )
1300
- },
1301
- Decoder: func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1302
- return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{
1303
- Context: props.Context, Config: props.Config, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore),
1304
- })
1305
- },
1306
- Empty: props.Config.Success,
1307
- Success: props.Config.Success,
1308
- Failure: func(v nativehelpers.UnionExplorer_ArrayLikeFailureProps) *shimast.Node {
1309
- explore := featureProgrammer_as_explore(v.Explore)
1310
- return checkerProgrammer_factory.NewReturnStatement(props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{Input: v.Input, Expected: v.Expected, Explore: &explore}))
1311
- },
1312
- },
1313
- Parameters: []*shimast.Node{},
1314
- Input: props.Input,
1315
- Maps: props.Maps,
1316
- Explore: props.Explore,
1317
- }),
1318
- nil,
1319
- nil,
1320
- nil,
1321
- shimast.NodeFlagsNone,
1322
- )
1280
+ return checkerProgrammer_factory.NewCallExpression(
1281
+ nativehelpers.UnionExplorer.Map(nativehelpers.UnionExplorer_MapProps{
1282
+ Config: nativehelpers.UnionExplorer_ArrayLikeConfig{
1283
+ Checker: func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1284
+ pair := v.Definition.([]*nativemetadata.MetadataSchema)
1285
+ explore := featureProgrammer_as_explore(v.Explore)
1286
+ leftExplore := explore
1287
+ leftExplore.Postfix = explore.Postfix + "[0]"
1288
+ rightExplore := explore
1289
+ rightExplore.Postfix = explore.Postfix + "[1]"
1290
+ return checkerProgrammer_and(
1291
+ CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1292
+ Config: props.Config, Context: props.Context, Functor: props.Functor,
1293
+ Input: checkerProgrammer_factory.NewElementAccessExpression(v.Input, nil, nativefactories.ExpressionFactory.Number(0), shimast.NodeFlagsNone), Metadata: pair[0], Explore: leftExplore,
1294
+ }),
1295
+ CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{
1296
+ Config: props.Config, Context: props.Context, Functor: props.Functor,
1297
+ Input: checkerProgrammer_factory.NewElementAccessExpression(v.Input, nil, nativefactories.ExpressionFactory.Number(1), shimast.NodeFlagsNone), Metadata: pair[1], Explore: rightExplore,
1298
+ }),
1299
+ )
1300
+ },
1301
+ Decoder: func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1302
+ return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{
1303
+ Context: props.Context, Config: props.Config, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore),
1304
+ })
1305
+ },
1306
+ Empty: props.Config.Success,
1307
+ Success: props.Config.Success,
1308
+ Failure: func(v nativehelpers.UnionExplorer_ArrayLikeFailureProps) *shimast.Node {
1309
+ explore := featureProgrammer_as_explore(v.Explore)
1310
+ return checkerProgrammer_factory.NewReturnStatement(props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{Input: v.Input, Expected: v.Expected, Explore: &explore}))
1311
+ },
1312
+ },
1313
+ Parameters: []*shimast.Node{},
1314
+ Input: props.Input,
1315
+ Maps: props.Maps,
1316
+ Explore: props.Explore,
1317
+ }),
1318
+ nil,
1319
+ nil,
1320
+ nil,
1321
+ shimast.NodeFlagsNone,
1322
+ )
1323
1323
  }
1324
1324
 
1325
1325
  type checkerProgrammer_exploreTuplesProps struct {
1326
- Config CheckerProgrammer_IConfig
1327
- Context nativecontext.ITypiaContext
1328
- Functor *nativehelpers.FunctionProgrammer
1329
- Tuples []*nativemetadata.MetadataTuple
1330
- Input *shimast.Expression
1331
- Explore CheckerProgrammer_IExplore
1326
+ Config CheckerProgrammer_IConfig
1327
+ Context nativecontext.ITypiaContext
1328
+ Functor *nativehelpers.FunctionProgrammer
1329
+ Tuples []*nativemetadata.MetadataTuple
1330
+ Input *shimast.Expression
1331
+ Explore CheckerProgrammer_IExplore
1332
1332
  }
1333
1333
 
1334
1334
  type checkerProgrammer_exploreArraysProps struct {
1335
- Config CheckerProgrammer_IConfig
1336
- Context nativecontext.ITypiaContext
1337
- Functor *nativehelpers.FunctionProgrammer
1338
- Arrays []*nativemetadata.MetadataArray
1339
- Input *shimast.Expression
1340
- Explore CheckerProgrammer_IExplore
1335
+ Config CheckerProgrammer_IConfig
1336
+ Context nativecontext.ITypiaContext
1337
+ Functor *nativehelpers.FunctionProgrammer
1338
+ Arrays []*nativemetadata.MetadataArray
1339
+ Input *shimast.Expression
1340
+ Explore CheckerProgrammer_IExplore
1341
1341
  }
1342
1342
 
1343
1343
  type checkerProgrammer_exploreArraysAndTuplesProps struct {
1344
- Config CheckerProgrammer_IConfig
1345
- Context nativecontext.ITypiaContext
1346
- Functor *nativehelpers.FunctionProgrammer
1347
- Definitions []any
1348
- Input *shimast.Expression
1349
- Explore CheckerProgrammer_IExplore
1344
+ Config CheckerProgrammer_IConfig
1345
+ Context nativecontext.ITypiaContext
1346
+ Functor *nativehelpers.FunctionProgrammer
1347
+ Definitions []any
1348
+ Input *shimast.Expression
1349
+ Explore CheckerProgrammer_IExplore
1350
1350
  }
1351
1351
 
1352
1352
  func checkerProgrammer_explore_tuples(props checkerProgrammer_exploreTuplesProps) *shimast.Node {
1353
- definitions := make([]any, 0, len(props.Tuples))
1354
- for _, tuple := range props.Tuples {
1355
- definitions = append(definitions, tuple)
1356
- }
1357
- return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1358
- Config: props.Config, Functor: props.Functor, Definitions: definitions, Input: props.Input, Explore: props.Explore,
1359
- Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1360
- tuples := make([]*nativemetadata.MetadataTuple, 0, len(next.Definitions))
1361
- for _, value := range next.Definitions {
1362
- tuples = append(tuples, value.(*nativemetadata.MetadataTuple))
1363
- }
1364
- return nativehelpers.UnionExplorer.Tuple(nativehelpers.UnionExplorer_TupleProps{
1365
- Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1366
- func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1367
- return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Tuple: v.Definition.(*nativemetadata.MetadataTuple), Explore: featureProgrammer_as_explore(v.Explore)})
1368
- },
1369
- func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1370
- return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Tuple: v.Definition.(*nativemetadata.MetadataTuple), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1371
- }),
1372
- Parameters: next.Parameters,
1373
- Tuples: tuples,
1374
- Input: next.Input,
1375
- Explore: next.Explore,
1376
- })
1377
- },
1378
- })
1353
+ definitions := make([]any, 0, len(props.Tuples))
1354
+ for _, tuple := range props.Tuples {
1355
+ definitions = append(definitions, tuple)
1356
+ }
1357
+ return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1358
+ Config: props.Config, Functor: props.Functor, Definitions: definitions, Input: props.Input, Explore: props.Explore,
1359
+ Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1360
+ tuples := make([]*nativemetadata.MetadataTuple, 0, len(next.Definitions))
1361
+ for _, value := range next.Definitions {
1362
+ tuples = append(tuples, value.(*nativemetadata.MetadataTuple))
1363
+ }
1364
+ return nativehelpers.UnionExplorer.Tuple(nativehelpers.UnionExplorer_TupleProps{
1365
+ Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1366
+ func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1367
+ return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Tuple: v.Definition.(*nativemetadata.MetadataTuple), Explore: featureProgrammer_as_explore(v.Explore)})
1368
+ },
1369
+ func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1370
+ return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Tuple: v.Definition.(*nativemetadata.MetadataTuple), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1371
+ }),
1372
+ Parameters: next.Parameters,
1373
+ Tuples: tuples,
1374
+ Input: next.Input,
1375
+ Explore: next.Explore,
1376
+ })
1377
+ },
1378
+ })
1379
1379
  }
1380
1380
 
1381
1381
  func checkerProgrammer_explore_arrays(props checkerProgrammer_exploreArraysProps) *shimast.Node {
1382
- definitions := make([]any, 0, len(props.Arrays))
1383
- for _, array := range props.Arrays {
1384
- definitions = append(definitions, array)
1385
- }
1386
- return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1387
- Config: props.Config, Functor: props.Functor, Definitions: definitions, Input: props.Input, Explore: props.Explore,
1388
- Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1389
- arrays := make([]*nativemetadata.MetadataArray, 0, len(next.Definitions))
1390
- for _, value := range next.Definitions {
1391
- arrays = append(arrays, value.(*nativemetadata.MetadataArray))
1392
- }
1393
- return nativehelpers.UnionExplorer.Array(nativehelpers.UnionExplorer_ArrayProps{
1394
- Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1395
- func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1396
- return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1397
- },
1398
- func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1399
- return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1400
- }),
1401
- Parameters: next.Parameters,
1402
- Arrays: arrays,
1403
- Input: next.Input,
1404
- Explore: next.Explore,
1405
- })
1406
- },
1407
- })
1382
+ definitions := make([]any, 0, len(props.Arrays))
1383
+ for _, array := range props.Arrays {
1384
+ definitions = append(definitions, array)
1385
+ }
1386
+ return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1387
+ Config: props.Config, Functor: props.Functor, Definitions: definitions, Input: props.Input, Explore: props.Explore,
1388
+ Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1389
+ arrays := make([]*nativemetadata.MetadataArray, 0, len(next.Definitions))
1390
+ for _, value := range next.Definitions {
1391
+ arrays = append(arrays, value.(*nativemetadata.MetadataArray))
1392
+ }
1393
+ return nativehelpers.UnionExplorer.Array(nativehelpers.UnionExplorer_ArrayProps{
1394
+ Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1395
+ func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1396
+ return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1397
+ },
1398
+ func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1399
+ return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1400
+ }),
1401
+ Parameters: next.Parameters,
1402
+ Arrays: arrays,
1403
+ Input: next.Input,
1404
+ Explore: next.Explore,
1405
+ })
1406
+ },
1407
+ })
1408
1408
  }
1409
1409
 
1410
1410
  func checkerProgrammer_explore_arrays_and_tuples(props checkerProgrammer_exploreArraysAndTuplesProps) *shimast.Node {
1411
- return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1412
- Config: props.Config, Functor: props.Functor, Definitions: props.Definitions, Input: props.Input, Explore: props.Explore,
1413
- Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1414
- return nativehelpers.UnionExplorer.Array_or_tuple(nativehelpers.UnionExplorer_ArrayOrTupleProps{
1415
- Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1416
- func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1417
- if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1418
- return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1419
- }
1420
- expected := []string{}
1421
- for _, elem := range props.Definitions {
1422
- switch x := elem.(type) {
1423
- case *nativemetadata.MetadataArray:
1424
- expected = append(expected, x.GetName())
1425
- case *nativemetadata.MetadataTuple:
1426
- expected = append(expected, x.Type.Name)
1427
- }
1428
- }
1429
- return props.Config.Atomist(CheckerProgrammer_AtomistProps{
1430
- Explore: featureProgrammer_as_explore(v.Explore),
1431
- Entry: nativehelpers.ICheckEntry{
1432
- Expected: strings.Join(expected, " | "),
1433
- Expression: CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Functor: props.Functor, Context: props.Context, Config: props.Config, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)}),
1434
- Conditions: [][]nativehelpers.ICheckEntry_ICondition{},
1435
- },
1436
- Input: v.Container,
1437
- })
1438
- },
1439
- func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1440
- if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1441
- return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1442
- }
1443
- return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Array: v.Definition.(*nativemetadata.MetadataArray), Explore: featureProgrammer_as_explore(v.Explore)})
1444
- }),
1445
- Parameters: next.Parameters,
1446
- Definitions: next.Definitions,
1447
- Input: next.Input,
1448
- Explore: next.Explore,
1449
- })
1450
- },
1451
- })
1411
+ return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1412
+ Config: props.Config, Functor: props.Functor, Definitions: props.Definitions, Input: props.Input, Explore: props.Explore,
1413
+ Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1414
+ return nativehelpers.UnionExplorer.Array_or_tuple(nativehelpers.UnionExplorer_ArrayOrTupleProps{
1415
+ Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1416
+ func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1417
+ if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1418
+ return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1419
+ }
1420
+ expected := []string{}
1421
+ for _, elem := range props.Definitions {
1422
+ switch x := elem.(type) {
1423
+ case *nativemetadata.MetadataArray:
1424
+ expected = append(expected, x.GetName())
1425
+ case *nativemetadata.MetadataTuple:
1426
+ expected = append(expected, x.Type.Name)
1427
+ }
1428
+ }
1429
+ return props.Config.Atomist(CheckerProgrammer_AtomistProps{
1430
+ Explore: featureProgrammer_as_explore(v.Explore),
1431
+ Entry: nativehelpers.ICheckEntry{
1432
+ Expected: strings.Join(expected, " | "),
1433
+ Expression: CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Functor: props.Functor, Context: props.Context, Config: props.Config, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)}),
1434
+ Conditions: [][]nativehelpers.ICheckEntry_ICondition{},
1435
+ },
1436
+ Input: v.Container,
1437
+ })
1438
+ },
1439
+ func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1440
+ if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1441
+ return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1442
+ }
1443
+ return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Array: v.Definition.(*nativemetadata.MetadataArray), Explore: featureProgrammer_as_explore(v.Explore)})
1444
+ }),
1445
+ Parameters: next.Parameters,
1446
+ Definitions: next.Definitions,
1447
+ Input: next.Input,
1448
+ Explore: next.Explore,
1449
+ })
1450
+ },
1451
+ })
1452
1452
  }
1453
1453
 
1454
1454
  type checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps struct {
1455
- Parameters []*shimast.Node
1456
- Definitions []any
1457
- Input *shimast.Expression
1458
- Explore CheckerProgrammer_IExplore
1455
+ Parameters []*shimast.Node
1456
+ Definitions []any
1457
+ Input *shimast.Expression
1458
+ Explore CheckerProgrammer_IExplore
1459
1459
  }
1460
1460
 
1461
1461
  type checkerProgrammer_exploreArrayLikeUnionTypesProps struct {
1462
- Config CheckerProgrammer_IConfig
1463
- Functor *nativehelpers.FunctionProgrammer
1464
- Factory func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node
1465
- Input *shimast.Expression
1466
- Definitions []any
1467
- Explore CheckerProgrammer_IExplore
1462
+ Config CheckerProgrammer_IConfig
1463
+ Functor *nativehelpers.FunctionProgrammer
1464
+ Factory func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node
1465
+ Input *shimast.Expression
1466
+ Definitions []any
1467
+ Explore CheckerProgrammer_IExplore
1468
1468
  }
1469
1469
 
1470
1470
  func checkerProgrammer_explore_array_like_union_types(props checkerProgrammer_exploreArrayLikeUnionTypesProps) *shimast.Node {
1471
- arrayExplore := props.Explore
1472
- arrayExplore.Source = "function"
1473
- arrayExplore.From = "array"
1474
- names := checkerProgrammer_definition_names(props.Definitions)
1475
- return checkerProgrammer_or(
1476
- checkerProgrammer_factory.NewCallExpression(
1477
- checkerProgrammer_factory.NewIdentifier(
1478
- props.Functor.EmplaceUnion(
1479
- props.Config.Prefix,
1480
- strings.Join(names, " | "),
1481
- func() *shimast.Node {
1482
- nextExplore := arrayExplore
1483
- nextExplore.Postfix = ""
1484
- return props.Factory(checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps{
1485
- Parameters: FeatureProgrammer.ParameterDeclarations(FeatureProgrammer_ParameterDeclarationsProps{
1486
- Config: FeatureProgrammer_ParameterConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1487
- Type: nativefactories.TypeFactory.Keyword("any"),
1488
- Input: checkerProgrammer_factory.NewIdentifier("input"),
1489
- }),
1490
- Definitions: props.Definitions,
1491
- Explore: nextExplore,
1492
- Input: checkerProgrammer_factory.NewIdentifier("input"),
1493
- })
1494
- },
1495
- ),
1496
- ),
1497
- nil,
1498
- nil,
1499
- checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
1500
- Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1501
- Input: props.Input,
1502
- Explore: props.Explore,
1503
- })),
1504
- shimast.NodeFlagsNone,
1505
- ),
1506
- props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
1507
- Input: props.Input,
1508
- Expected: strings.Join(names, " | "),
1509
- Explore: &arrayExplore,
1510
- }),
1511
- )
1471
+ arrayExplore := props.Explore
1472
+ arrayExplore.Source = "function"
1473
+ arrayExplore.From = "array"
1474
+ names := checkerProgrammer_definition_names(props.Definitions)
1475
+ return checkerProgrammer_or(
1476
+ checkerProgrammer_factory.NewCallExpression(
1477
+ checkerProgrammer_factory.NewIdentifier(
1478
+ props.Functor.EmplaceUnion(
1479
+ props.Config.Prefix,
1480
+ strings.Join(names, " | "),
1481
+ func() *shimast.Node {
1482
+ nextExplore := arrayExplore
1483
+ nextExplore.Postfix = ""
1484
+ return props.Factory(checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps{
1485
+ Parameters: FeatureProgrammer.ParameterDeclarations(FeatureProgrammer_ParameterDeclarationsProps{
1486
+ Config: FeatureProgrammer_ParameterConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1487
+ Type: nativefactories.TypeFactory.Keyword("any"),
1488
+ Input: checkerProgrammer_factory.NewIdentifier("input"),
1489
+ }),
1490
+ Definitions: props.Definitions,
1491
+ Explore: nextExplore,
1492
+ Input: checkerProgrammer_factory.NewIdentifier("input"),
1493
+ })
1494
+ },
1495
+ ),
1496
+ ),
1497
+ nil,
1498
+ nil,
1499
+ checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
1500
+ Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1501
+ Input: props.Input,
1502
+ Explore: props.Explore,
1503
+ })),
1504
+ shimast.NodeFlagsNone,
1505
+ ),
1506
+ props.Config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
1507
+ Input: props.Input,
1508
+ Expected: strings.Join(names, " | "),
1509
+ Explore: &arrayExplore,
1510
+ }),
1511
+ )
1512
1512
  }
1513
1513
 
1514
1514
  type checkerProgrammer_exploreObjectsProps struct {
1515
- Config CheckerProgrammer_IConfig
1516
- Functor *nativehelpers.FunctionProgrammer
1517
- Input *shimast.Expression
1518
- Metadata *nativemetadata.MetadataSchema
1519
- Explore CheckerProgrammer_IExplore
1515
+ Config CheckerProgrammer_IConfig
1516
+ Functor *nativehelpers.FunctionProgrammer
1517
+ Input *shimast.Expression
1518
+ Metadata *nativemetadata.MetadataSchema
1519
+ Explore CheckerProgrammer_IExplore
1520
1520
  }
1521
1521
 
1522
1522
  func checkerProgrammer_explore_objects(props checkerProgrammer_exploreObjectsProps) *shimast.Node {
1523
- if len(props.Metadata.Objects) == 1 {
1524
- return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
1525
- Config: props.Config,
1526
- Functor: props.Functor,
1527
- Object: props.Metadata.Objects[0].Type,
1528
- Input: props.Input,
1529
- Explore: props.Explore,
1530
- })
1531
- }
1532
- index := 0
1533
- if props.Metadata.Union_index != nil {
1534
- index = *props.Metadata.Union_index
1535
- }
1536
- return checkerProgrammer_factory.NewCallExpression(
1537
- checkerProgrammer_factory.NewIdentifier(props.Functor.UseLocal(fmt.Sprintf("%su%d", props.Config.Prefix, index))),
1538
- nil,
1539
- nil,
1540
- checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
1541
- Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1542
- Input: props.Input,
1543
- Explore: props.Explore,
1544
- })),
1545
- shimast.NodeFlagsNone,
1546
- )
1523
+ if len(props.Metadata.Objects) == 1 {
1524
+ return CheckerProgrammer.Decode_object(CheckerProgrammer_DecodeObjectProps{
1525
+ Config: props.Config,
1526
+ Functor: props.Functor,
1527
+ Object: props.Metadata.Objects[0].Type,
1528
+ Input: props.Input,
1529
+ Explore: props.Explore,
1530
+ })
1531
+ }
1532
+ index := 0
1533
+ if props.Metadata.Union_index != nil {
1534
+ index = *props.Metadata.Union_index
1535
+ }
1536
+ return checkerProgrammer_factory.NewCallExpression(
1537
+ checkerProgrammer_factory.NewIdentifier(props.Functor.UseLocal(fmt.Sprintf("%su%d", props.Config.Prefix, index))),
1538
+ nil,
1539
+ nil,
1540
+ checkerProgrammer_factory.NewNodeList(FeatureProgrammer.ArgumentsArray(FeatureProgrammer_ArgumentsArrayProps{
1541
+ Config: FeatureProgrammer_ArgumentsArrayConfig{Path: props.Config.Path, Trace: props.Config.Trace},
1542
+ Input: props.Input,
1543
+ Explore: props.Explore,
1544
+ })),
1545
+ shimast.NodeFlagsNone,
1546
+ )
1547
1547
  }
1548
1548
 
1549
1549
  func checkerProgrammer_array_like_config(context nativecontext.ITypiaContext, config CheckerProgrammer_IConfig, functor *nativehelpers.FunctionProgrammer, checker func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node, decoder func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node) nativehelpers.UnionExplorer_ArrayLikeConfig {
1550
- return nativehelpers.UnionExplorer_ArrayLikeConfig{
1551
- Checker: checker,
1552
- Decoder: decoder,
1553
- Empty: config.Success,
1554
- Success: config.Success,
1555
- Failure: func(v nativehelpers.UnionExplorer_ArrayLikeFailureProps) *shimast.Node {
1556
- explore := featureProgrammer_as_explore(v.Explore)
1557
- return checkerProgrammer_factory.NewReturnStatement(config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
1558
- Input: v.Input,
1559
- Expected: v.Expected,
1560
- Explore: &explore,
1561
- }))
1562
- },
1563
- }
1550
+ return nativehelpers.UnionExplorer_ArrayLikeConfig{
1551
+ Checker: checker,
1552
+ Decoder: decoder,
1553
+ Empty: config.Success,
1554
+ Success: config.Success,
1555
+ Failure: func(v nativehelpers.UnionExplorer_ArrayLikeFailureProps) *shimast.Node {
1556
+ explore := featureProgrammer_as_explore(v.Explore)
1557
+ return checkerProgrammer_factory.NewReturnStatement(config.Joiner.Failure(CheckerProgrammer_JoinerFailureProps{
1558
+ Input: v.Input,
1559
+ Expected: v.Expected,
1560
+ Explore: &explore,
1561
+ }))
1562
+ },
1563
+ }
1564
1564
  }
1565
1565
 
1566
1566
  type checkerProgrammer_IInstance struct {
1567
- Head *shimast.Node
1568
- Body *shimast.Node
1569
- Expected string
1567
+ Head *shimast.Node
1568
+ Body *shimast.Node
1569
+ Expected string
1570
1570
  }
1571
1571
 
1572
1572
  func checkerProgrammer_create_add(binaries *[]CheckerProgrammer_IBinary, input *shimast.Expression, exact bool, left *shimast.Expression, right *shimast.Expression) {
1573
- if right == nil {
1574
- right = input
1575
- }
1576
- operator := shimast.KindExclamationEqualsEqualsToken
1577
- if exact {
1578
- operator = shimast.KindEqualsEqualsEqualsToken
1579
- }
1580
- *binaries = append(*binaries, CheckerProgrammer_IBinary{
1581
- Expression: checkerProgrammer_binary(left, operator, right),
1582
- Combined: false,
1583
- })
1573
+ if right == nil {
1574
+ right = input
1575
+ }
1576
+ operator := shimast.KindExclamationEqualsEqualsToken
1577
+ if exact {
1578
+ operator = shimast.KindEqualsEqualsEqualsToken
1579
+ }
1580
+ *binaries = append(*binaries, CheckerProgrammer_IBinary{
1581
+ Expression: checkerProgrammer_binary(left, operator, right),
1582
+ Combined: false,
1583
+ })
1584
1584
  }
1585
1585
 
1586
1586
  func checkerProgrammer_binary(left *shimast.Expression, operator shimast.Kind, right *shimast.Expression) *shimast.Node {
1587
- return checkerProgrammer_factory.NewBinaryExpression(
1588
- nil,
1589
- left,
1590
- nil,
1591
- checkerProgrammer_factory.NewToken(operator),
1592
- right,
1593
- )
1587
+ return checkerProgrammer_factory.NewBinaryExpression(
1588
+ nil,
1589
+ left,
1590
+ nil,
1591
+ checkerProgrammer_factory.NewToken(operator),
1592
+ right,
1593
+ )
1594
1594
  }
1595
1595
 
1596
1596
  func checkerProgrammer_and(x *shimast.Expression, y *shimast.Expression) *shimast.Node {
1597
- return checkerProgrammer_binary(x, shimast.KindAmpersandAmpersandToken, y)
1597
+ return checkerProgrammer_binary(x, shimast.KindAmpersandAmpersandToken, y)
1598
1598
  }
1599
1599
 
1600
1600
  func checkerProgrammer_or(x *shimast.Expression, y *shimast.Expression) *shimast.Node {
1601
- return checkerProgrammer_binary(x, shimast.KindBarBarToken, y)
1601
+ return checkerProgrammer_binary(x, shimast.KindBarBarToken, y)
1602
1602
  }
1603
1603
 
1604
1604
  func checkerProgrammer_equal(x *shimast.Expression, y *shimast.Expression) *shimast.Node {
1605
- return checkerProgrammer_binary(x, shimast.KindEqualsEqualsEqualsToken, y)
1605
+ return checkerProgrammer_binary(x, shimast.KindEqualsEqualsEqualsToken, y)
1606
1606
  }
1607
1607
 
1608
1608
  func checkerProgrammer_array_any(arrays []*nativemetadata.MetadataArray) bool {
1609
- for _, elem := range arrays {
1610
- if elem.Type.Value.Any {
1611
- return true
1612
- }
1613
- }
1614
- return false
1609
+ for _, elem := range arrays {
1610
+ if elem.Type.Value.Any {
1611
+ return true
1612
+ }
1613
+ }
1614
+ return false
1615
1615
  }
1616
1616
 
1617
1617
  func checkerProgrammer_array_tuple_definitions(arrays []*nativemetadata.MetadataArray, tuples []*nativemetadata.MetadataTuple) []any {
1618
- output := []any{}
1619
- for _, tuple := range tuples {
1620
- output = append(output, tuple)
1621
- }
1622
- for _, array := range arrays {
1623
- output = append(output, array)
1624
- }
1625
- return output
1618
+ output := []any{}
1619
+ for _, tuple := range tuples {
1620
+ output = append(output, tuple)
1621
+ }
1622
+ for _, array := range arrays {
1623
+ output = append(output, array)
1624
+ }
1625
+ return output
1626
1626
  }
1627
1627
 
1628
1628
  func checkerProgrammer_definition_names(definitions []any) []string {
1629
- names := make([]string, 0, len(definitions))
1630
- for _, elem := range definitions {
1631
- switch v := elem.(type) {
1632
- case *nativemetadata.MetadataArray:
1633
- names = append(names, v.Type.Name)
1634
- case *nativemetadata.MetadataTuple:
1635
- names = append(names, v.Type.Name)
1636
- }
1637
- }
1638
- return names
1629
+ names := make([]string, 0, len(definitions))
1630
+ for _, elem := range definitions {
1631
+ switch v := elem.(type) {
1632
+ case *nativemetadata.MetadataArray:
1633
+ names = append(names, v.Type.Name)
1634
+ case *nativemetadata.MetadataTuple:
1635
+ names = append(names, v.Type.Name)
1636
+ }
1637
+ }
1638
+ return names
1639
1639
  }
1640
1640
 
1641
1641
  func checkerProgrammer_postfix_of_tuple(str string) string {
1642
- if len(str) > 0 && str[len(str)-1] == '"' {
1643
- return str[:len(str)-1]
1644
- }
1645
- return str + " + \""
1642
+ if len(str) > 0 && str[len(str)-1] == '"' {
1643
+ return str[:len(str)-1]
1644
+ }
1645
+ return str + " + \""
1646
1646
  }
1647
1647
 
1648
1648
  func checkerProgrammer_wrap_metadata_rest_tuple(rest *nativemetadata.MetadataSchema) *nativemetadata.MetadataSchema {
1649
- wrapper := nativemetadata.MetadataSchema_initialize()
1650
- wrapper.Arrays = append(wrapper.Arrays, nativemetadata.MetadataArray_create(nativemetadata.MetadataArray{
1651
- Type: nativemetadata.MetadataArrayType_create(nativemetadata.MetadataArrayType{
1652
- Name: "..." + rest.GetName(),
1653
- Value: rest,
1654
- Nullables: []bool{},
1655
- Recursive: false,
1656
- Index: nil,
1657
- }),
1658
- Tags: [][]nativemetadata.IMetadataTypeTag{},
1659
- }))
1660
- return wrapper
1649
+ wrapper := nativemetadata.MetadataSchema_initialize()
1650
+ wrapper.Arrays = append(wrapper.Arrays, nativemetadata.MetadataArray_create(nativemetadata.MetadataArray{
1651
+ Type: nativemetadata.MetadataArrayType_create(nativemetadata.MetadataArrayType{
1652
+ Name: "..." + rest.GetName(),
1653
+ Value: rest,
1654
+ Nullables: []bool{},
1655
+ Recursive: false,
1656
+ Index: nil,
1657
+ }),
1658
+ Tags: [][]nativemetadata.IMetadataTypeTag{},
1659
+ }))
1660
+ return wrapper
1661
1661
  }
1662
1662
 
1663
1663
  func checkerProgrammer_decode_to_json(props struct {
1664
- Input *shimast.Expression
1665
- CheckNull bool
1664
+ Input *shimast.Expression
1665
+ CheckNull bool
1666
1666
  }) *shimast.Node {
1667
- return checkerProgrammer_and(
1668
- nativefactories.ExpressionFactory.IsObject(nativefactories.ExpressionFactory_IsObjectProps{
1669
- CheckArray: false,
1670
- CheckNull: props.CheckNull,
1671
- Input: props.Input,
1672
- }),
1673
- checkerProgrammer_equal(
1674
- checkerProgrammer_factory.NewStringLiteral("function", shimast.TokenFlagsNone),
1675
- nativefactories.ValueFactory.TYPEOF(nativefactories.IdentifierFactory.Access(props.Input, "toJSON")),
1676
- ),
1677
- )
1667
+ return checkerProgrammer_and(
1668
+ nativefactories.ExpressionFactory.IsObject(nativefactories.ExpressionFactory_IsObjectProps{
1669
+ CheckArray: false,
1670
+ CheckNull: props.CheckNull,
1671
+ Input: props.Input,
1672
+ }),
1673
+ checkerProgrammer_equal(
1674
+ checkerProgrammer_factory.NewStringLiteral("function", shimast.TokenFlagsNone),
1675
+ nativefactories.ValueFactory.TYPEOF(nativefactories.IdentifierFactory.Access(props.Input, "toJSON")),
1676
+ ),
1677
+ )
1678
1678
  }
1679
1679
 
1680
1680
  func checkerProgrammer_errors(errors []nativefactories.MetadataFactory_IError) []nativecontext.TransformerError_MetadataFactory_IError {
1681
- output := make([]nativecontext.TransformerError_MetadataFactory_IError, 0, len(errors))
1682
- for _, err := range errors {
1683
- output = append(output, nativecontext.TransformerError_MetadataFactory_IError{
1684
- Name: err.Name,
1685
- Explore: nativecontext.TransformerError_MetadataFactory_IExplore{
1686
- Object: err.Explore.Object,
1687
- Property: err.Explore.Property,
1688
- Parameter: err.Explore.Parameter,
1689
- Output: err.Explore.Output,
1690
- },
1691
- Messages: err.Messages,
1692
- })
1693
- }
1694
- return output
1681
+ output := make([]nativecontext.TransformerError_MetadataFactory_IError, 0, len(errors))
1682
+ for _, err := range errors {
1683
+ output = append(output, nativecontext.TransformerError_MetadataFactory_IError{
1684
+ Name: err.Name,
1685
+ Explore: nativecontext.TransformerError_MetadataFactory_IExplore{
1686
+ Object: err.Explore.Object,
1687
+ Property: err.Explore.Property,
1688
+ Parameter: err.Explore.Parameter,
1689
+ Output: err.Explore.Output,
1690
+ },
1691
+ Messages: err.Messages,
1692
+ })
1693
+ }
1694
+ return output
1695
1695
  }