@voxgig/sdkgen 4.8.2 → 4.8.3

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 (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -1,8 +1,14 @@
1
1
  package JAVAPACKAGE.sdktest;
2
2
 
3
- // Shared test-runner support: env overrides, sdk-test-control.json skips,
4
- // the ../.sdk/test/test.json spec loader, and the runset/match engine whose
5
- // matching logic mirrors js/test/runner.js (and the go runner_test.go).
3
+ // Shared test-runner SUPPORT (vendor-tag rollout): env overrides, the
4
+ // sdk-test-control.json skip machinery, live pacing, the
5
+ // ../.sdk/test/test.json spec loader, ctx/entity conversion helpers, and
6
+ // the canon/jsonStr comparison helpers the feature tests use. The corpus
7
+ // ENGINE that used to live beside them (runset/matchDeep/matchString) is
8
+ // retired: both corpora now run on the vendored omni runner through
9
+ // OmniResolver.java. The class name is unchanged so the emitted
10
+ // TestEntity/TestDirect call sites (RunnerSupport.skipReason,
11
+ // RunnerSupport.envOverride, ...) need no churn.
6
12
 
7
13
  import java.nio.file.Files;
8
14
  import java.nio.file.Path;
@@ -13,7 +19,6 @@ import java.util.Map;
13
19
  import java.util.Objects;
14
20
  import java.util.TreeMap;
15
21
  import java.util.function.Supplier;
16
- import java.util.regex.Pattern;
17
22
 
18
23
  import JAVAPACKAGE.core.Context;
19
24
  import JAVAPACKAGE.core.Entity;
@@ -260,123 +265,6 @@ public final class RunnerSupport {
260
265
  return Helpers.toMapAny(cur);
261
266
  }
262
267
 
263
- @FunctionalInterface
264
- public interface RunSubject {
265
- Object run(Map<String, Object> entry) throws Exception;
266
- }
267
-
268
- // runset drives a test.json entry set against a subject, mirroring the
269
- // matching semantics of the go/js runners. All entry failures are
270
- // reported together as one AssertionError.
271
- public static void runset(Map<String, Object> testspec, RunSubject subject) {
272
- if (testspec == null || !(testspec.get("set") instanceof List)) {
273
- return;
274
- }
275
- List<Object> set = (List<Object>) testspec.get("set");
276
-
277
- List<String> failures = new ArrayList<>();
278
-
279
- for (int i = 0; i < set.size(); i++) {
280
- Map<String, Object> entry = Helpers.toMapAny(set.get(i));
281
- if (entry == null) {
282
- continue;
283
- }
284
-
285
- String mark = entry.get("mark") == null ? "" : " (mark=" + entry.get("mark") + ")";
286
-
287
- Object result = null;
288
- Exception err = null;
289
- try {
290
- result = subject.run(entry);
291
- }
292
- catch (Exception e) {
293
- err = e;
294
- }
295
-
296
- Object expectedErr = entry.get("err");
297
-
298
- if (err != null) {
299
- if (expectedErr != null) {
300
- String errMsg = err.getMessage() == null ? String.valueOf(err) : err.getMessage();
301
- if (expectedErr instanceof String
302
- && !matchString((String) expectedErr, errMsg)) {
303
- failures.add("entry " + i + mark + ": error mismatch: got \"" + errMsg
304
- + "\", want contains \"" + expectedErr + "\"");
305
- }
306
- Map<String, Object> matchSpec = Helpers.toMapAny(entry.get("match"));
307
- if (matchSpec != null) {
308
- Map<String, Object> resultMap = new LinkedHashMap<>();
309
- resultMap.put("in", entry.get("in"));
310
- resultMap.put("out", jsonNormalize(result));
311
- Map<String, Object> errRec = new LinkedHashMap<>();
312
- errRec.put("message", errMsg);
313
- resultMap.put("err", errRec);
314
- matchDeep(failures, i, mark, matchSpec, resultMap, "");
315
- }
316
- continue;
317
- }
318
- failures.add("entry " + i + mark + ": unexpected error: " + err);
319
- continue;
320
- }
321
-
322
- if (expectedErr != null) {
323
- failures.add("entry " + i + mark + ": expected error containing \""
324
- + expectedErr + "\" but got result: " + jsonStr(result));
325
- continue;
326
- }
327
-
328
- boolean matched = false;
329
- Map<String, Object> matchSpec = Helpers.toMapAny(entry.get("match"));
330
- if (matchSpec != null) {
331
- Map<String, Object> resultMap = new LinkedHashMap<>();
332
- resultMap.put("in", entry.get("in"));
333
- resultMap.put("out", jsonNormalize(result));
334
- if (entry.get("args") != null) {
335
- resultMap.put("args", entry.get("args"));
336
- }
337
- else if (entry.get("in") != null) {
338
- List<Object> args = new ArrayList<>();
339
- args.add(entry.get("in"));
340
- resultMap.put("args", args);
341
- }
342
- if (entry.get("ctx") != null) {
343
- resultMap.put("ctx", entry.get("ctx"));
344
- }
345
- matchDeep(failures, i, mark, matchSpec, resultMap, "");
346
- matched = true;
347
- }
348
-
349
- Object expectedOut = entry.get("out");
350
- if (expectedOut == null && matched) {
351
- continue;
352
- }
353
- if (expectedOut != null) {
354
- Object normResult = jsonNormalize(result);
355
- Object normExpected = jsonNormalize(expectedOut);
356
- if (!Objects.equals(canon(normResult), canon(normExpected))) {
357
- failures.add("entry " + i + mark + ": output mismatch:\n got: "
358
- + jsonStr(normResult) + "\n want: " + jsonStr(normExpected));
359
- }
360
- }
361
- }
362
-
363
- if (!failures.isEmpty()) {
364
- throw new AssertionError(String.join("\n", failures));
365
- }
366
- }
367
-
368
- public static Object jsonNormalize(Object val) {
369
- if (val == null) {
370
- return null;
371
- }
372
- try {
373
- return Json.parse(Struct.jsonify(val));
374
- }
375
- catch (RuntimeException e) {
376
- return val;
377
- }
378
- }
379
-
380
268
  public static String jsonStr(Object val) {
381
269
  try {
382
270
  return Struct.jsonify(val);
@@ -419,79 +307,6 @@ public final class RunnerSupport {
419
307
  return String.valueOf(v);
420
308
  }
421
309
 
422
- static void matchDeep(List<String> failures, int entryIdx, String mark,
423
- Object check, Object base, String path) {
424
-
425
- if (check == null) {
426
- return;
427
- }
428
-
429
- if (check instanceof Map) {
430
- for (Map.Entry<String, Object> e : ((Map<String, Object>) check).entrySet()) {
431
- String childPath = path + "." + e.getKey();
432
- Object baseVal = base instanceof Map
433
- ? ((Map<String, Object>) base).get(e.getKey()) : null;
434
- matchDeep(failures, entryIdx, mark, e.getValue(), baseVal, childPath);
435
- }
436
- }
437
- else if (check instanceof List) {
438
- List<Object> checkList = (List<Object>) check;
439
- for (int i = 0; i < checkList.size(); i++) {
440
- String childPath = path + "[" + i + "]";
441
- Object baseVal = null;
442
- if (base instanceof List && i < ((List<Object>) base).size()) {
443
- baseVal = ((List<Object>) base).get(i);
444
- }
445
- matchDeep(failures, entryIdx, mark, checkList.get(i), baseVal, childPath);
446
- }
447
- }
448
- else {
449
- if ("__EXISTS__".equals(check)) {
450
- if (base == null) {
451
- failures.add("entry " + entryIdx + mark + ": match " + path
452
- + ": expected value to exist but got null");
453
- }
454
- return;
455
- }
456
- if ("__UNDEF__".equals(check)) {
457
- if (base != null) {
458
- failures.add("entry " + entryIdx + mark + ": match " + path
459
- + ": expected null but got " + base);
460
- }
461
- return;
462
- }
463
-
464
- Object normCheck = jsonNormalize(check);
465
- Object normBase = jsonNormalize(base);
466
-
467
- if (!Objects.equals(canon(normCheck), canon(normBase))) {
468
- if (check instanceof String && !"".equals(check)) {
469
- String baseStr = Struct.stringify(base);
470
- if (matchString((String) check, baseStr)) {
471
- return;
472
- }
473
- }
474
- failures.add("entry " + entryIdx + mark + ": match " + path + ": got "
475
- + jsonStr(normBase) + ", want " + jsonStr(normCheck));
476
- }
477
- }
478
- }
479
-
480
- // matchString checks if val matches pattern. If pattern is /regex/, use
481
- // regex; otherwise do case-insensitive contains.
482
- public static boolean matchString(String pattern, String val) {
483
- if (pattern.length() >= 2 && pattern.startsWith("/") && pattern.endsWith("/")) {
484
- try {
485
- return Pattern.compile(pattern.substring(1, pattern.length() - 1))
486
- .matcher(val).find();
487
- }
488
- catch (RuntimeException e) {
489
- return false;
490
- }
491
- }
492
- return val.toLowerCase().contains(pattern.toLowerCase());
493
- }
494
-
495
310
  // makeCtxFromMap creates a Context from a JSON test entry's ctx or args map.
496
311
  public static Context makeCtxFromMap(Map<String, Object> ctxmap,
497
312
  ProjectNameSDK client, Utility utility) {
@@ -1,14 +1,19 @@
1
1
  package JAVAPACKAGE.sdktest;
2
2
 
3
- // Drives the shared struct corpus (../.sdk/test/test.json, root key "struct")
4
- // against the vendored struct utility, mirroring the go target's
5
- // struct_utility_test.go coverage. Adapted from the voxgig struct java
6
- // port's StructCorpusTest; here the corpus is a green-bar test — any
7
- // failing entry fails the build. Categories absent from this SDK's
8
- // test.json are skipped.
3
+ // Drives the shared struct corpus (../.sdk/test/test.json, root key
4
+ // "struct") against the vendored struct utility THROUGH the vendored omni
5
+ // runner (OmniResolver over test/vendor/omni) - the engine half of the
6
+ // retired StructRunner. Mirrors the go target's struct_utility_test.go
7
+ // coverage. A missing category or section FAILS (the old runner skipped it
8
+ // silently - a renamed fixture reported PASS while running zero
9
+ // assertions); a failing entry throws OmniError with the entry named.
9
10
 
10
- import org.junit.jupiter.api.AfterAll;
11
+ import static org.junit.jupiter.api.Assertions.assertNotNull;
12
+ import static org.junit.jupiter.api.Assertions.assertTrue;
13
+
14
+ import org.junit.jupiter.api.Assumptions;
11
15
  import org.junit.jupiter.api.DynamicTest;
16
+ import org.junit.jupiter.api.Test;
12
17
  import org.junit.jupiter.api.TestFactory;
13
18
 
14
19
  import java.util.ArrayList;
@@ -17,15 +22,34 @@ import java.util.List;
17
22
  import java.util.Locale;
18
23
  import java.util.Map;
19
24
  import java.util.Objects;
20
- import java.util.TreeMap;
21
25
  import java.util.function.Function;
22
26
 
27
+ import JAVAPACKAGE.core.Helpers;
28
+ import JAVAPACKAGE.core.ProjectNameSDK;
23
29
  import JAVAPACKAGE.utility.struct.Struct;
24
30
 
25
31
  @SuppressWarnings({"unchecked", "rawtypes"})
26
32
  public class StructCorpusTest {
27
33
 
28
- private static final Map<String, StructRunner.Result> SCOREBOARD = new TreeMap<>();
34
+ static final String TEST_JSON_FILE = "../.sdk/test/test.json";
35
+
36
+ private static OmniResolver.Run RUN;
37
+
38
+ static synchronized OmniResolver.Run structRun() {
39
+ if (RUN == null) {
40
+ RUN = OmniResolver
41
+ .makeRunner(TEST_JSON_FILE, ProjectNameSDK.testSDK())
42
+ .runner("struct", new LinkedHashMap<String, Object>());
43
+ assertNotNull(RUN.spec, "struct section not found in test.json");
44
+ }
45
+ return RUN;
46
+ }
47
+
48
+ /** A subject in the struct-corpus shape: one argument in, one value out. */
49
+ @FunctionalInterface
50
+ interface StructSubject {
51
+ Object apply(Object in) throws Exception;
52
+ }
29
53
 
30
54
  private static Object getp(Object in, String key) {
31
55
  if (in instanceof Map<?, ?> m) {
@@ -41,6 +65,33 @@ public class StructCorpusTest {
41
65
  return def;
42
66
  }
43
67
 
68
+ // The struct-corpus nullModifier (was StructRunner.NULL_MODIFIER): a bare
69
+ // "__NULL__" becomes a real null, and an embedded "__NULL__" inside a
70
+ // larger string is rewritten to the literal text "null". Mirrors omni's
71
+ // nullmodifier for struct's own Modify callback shape.
72
+ static final Struct.Modify NULL_MODIFIER =
73
+ (val, key, parent, inj, store) -> {
74
+ if (!(val instanceof String s)) {
75
+ return;
76
+ }
77
+ Object repl;
78
+ if (OmniResolver.NULLMARK.equals(s)) {
79
+ repl = null;
80
+ }
81
+ else if (s.contains(OmniResolver.NULLMARK)) {
82
+ repl = s.replace(OmniResolver.NULLMARK, "null");
83
+ }
84
+ else {
85
+ return;
86
+ }
87
+ if (parent instanceof Map<?, ?> m) {
88
+ ((Map<String, Object>) m).put(Objects.toString(key), repl);
89
+ }
90
+ else if (parent instanceof List<?> l && key instanceof Number n) {
91
+ ((List<Object>) l).set(n.intValue(), repl);
92
+ }
93
+ };
94
+
44
95
  @TestFactory
45
96
  Iterable<DynamicTest> corpus() {
46
97
  List<DynamicTest> tests = new ArrayList<>();
@@ -242,10 +293,10 @@ public class StructCorpusTest {
242
293
 
243
294
  // ===== inject =====
244
295
  // inject.string passes the nullModifier so a resolved JSON null (encoded by
245
- // the runner's fixJSON as "__NULL__") renders as the literal text "null".
296
+ // the runner as "__NULL__") renders as the literal text "null".
246
297
  add(tests, "inject", "string", true, in -> {
247
298
  Map<String, Object> opts = new LinkedHashMap<>();
248
- opts.put("modify", StructRunner.NULL_MODIFIER);
299
+ opts.put("modify", NULL_MODIFIER);
249
300
  return Struct.inject(getp(in, "val"), getp(in, "store"), opts);
250
301
  });
251
302
  add(tests, "inject", "deep", true, in -> Struct.inject(getp(in, "val"), getp(in, "store")));
@@ -306,46 +357,72 @@ public class StructCorpusTest {
306
357
  return tests;
307
358
  }
308
359
 
360
+ // The struct.nullsem section: does a PRESENT key holding a JSON null
361
+ // read as "no value"? Opt-in per target (create-sdkgen ships it; an
362
+ // older project corpus may predate it - the abort below says so OUT
363
+ // LOUD, as a skipped test, rather than passing vacuously). All lanes
364
+ // run {null: false}: without the flag the runner rewrites every null to
365
+ // '__NULL__' and the section asserts nothing about null at all.
366
+ @Test
367
+ public void nullsem() {
368
+ OmniResolver.Run run = structRun();
369
+ Map<String, Object> nullsem = Helpers.toMapAny(run.spec.get("nullsem"));
370
+ if (nullsem == null) {
371
+ Assumptions.abort(
372
+ "corpus predates struct.nullsem - refresh .sdk/test/struct from create-sdkgen");
373
+ }
374
+ Map<String, Object> flags = OmniResolver.flags("null", false);
375
+
376
+ run.runsetflags(nullsem.get("getprop"), flags, (args) -> {
377
+ Object in = args[0];
378
+ Object alt = getpDef(in, "alt", Struct.UNDEF);
379
+ return alt == Struct.UNDEF
380
+ ? Struct.getprop(getp(in, "val"), getp(in, "key"))
381
+ : Struct.getprop(getp(in, "val"), getp(in, "key"), alt);
382
+ });
383
+
384
+ run.runsetflags(nullsem.get("getelem"), flags, (args) -> {
385
+ Object in = args[0];
386
+ Object alt = getpDef(in, "alt", Struct.UNDEF);
387
+ return alt == Struct.UNDEF
388
+ ? Struct.getelem(getp(in, "val"), getp(in, "key"))
389
+ : Struct.getelem(getp(in, "val"), getp(in, "key"), alt);
390
+ });
391
+
392
+ run.runsetflags(nullsem.get("getpath"), flags, (args) ->
393
+ Struct.getpath(getp(args[0], "store"), getp(args[0], "path")));
394
+
395
+ run.runsetflags(nullsem.get("haskey"), flags, (args) ->
396
+ Struct.haskey(getp(args[0], "src"), getp(args[0], "key")));
397
+
398
+ run.runsetflags(nullsem.get("keysof"), flags, (args) ->
399
+ Struct.keysof(args[0]));
400
+ }
401
+
309
402
  private void add(
310
403
  List<DynamicTest> tests,
311
404
  String category,
312
405
  String name,
313
406
  boolean nullFlag,
314
- StructRunner.Subject subject) {
407
+ StructSubject subject) {
315
408
  tests.add(
316
409
  DynamicTest.dynamicTest(
317
410
  category + "-" + name,
318
411
  () -> {
319
- Map<String, Object> spec = StructRunner.getSpec(category, name);
320
- if (spec == null) {
321
- // Category/name absent from this SDK's corpus: skip.
322
- return;
323
- }
324
- StructRunner.Result r =
325
- StructRunner.runsetflags(category + "." + name, spec, nullFlag, subject);
326
- SCOREBOARD.put(category + "." + name, r);
327
- if (!r.failures.isEmpty()) {
328
- throw new AssertionError(
329
- category + "." + name + ": " + r.passed + "/" + r.total
330
- + " passed; failures:\n " + String.join("\n ", r.failures));
331
- }
412
+ OmniResolver.Run run = structRun();
413
+ Map<String, Object> cat = Helpers.toMapAny(run.spec.get(category));
414
+ assertNotNull(cat, "struct corpus category missing: " + category
415
+ + " - check .sdk/test/struct/");
416
+ Map<String, Object> spec = Helpers.toMapAny(cat.get(name));
417
+ assertNotNull(spec, "struct corpus section missing: "
418
+ + category + "." + name + " - check .sdk/test/struct/");
419
+ Object set = spec.get("set");
420
+ assertTrue(set instanceof List && !((List<Object>) set).isEmpty(),
421
+ "struct corpus section is EMPTY: " + category + "." + name
422
+ + " - zero cases would run");
423
+ run.runsetflags(spec, OmniResolver.flags("null", nullFlag),
424
+ (args) -> subject.apply(
425
+ 0 < args.length ? args[0] : Struct.UNDEF));
332
426
  }));
333
427
  }
334
-
335
- @AfterAll
336
- static void printScoreboard() {
337
- int totalP = 0;
338
- int totalT = 0;
339
- StringBuilder banner = new StringBuilder();
340
- banner.append("\n========= STRUCT CORPUS SCOREBOARD =========\n");
341
- for (Map.Entry<String, StructRunner.Result> e : SCOREBOARD.entrySet()) {
342
- StructRunner.Result r = e.getValue();
343
- banner.append(String.format(" %-30s %4d / %4d%n", e.getKey(), r.passed, r.total));
344
- totalP += r.passed;
345
- totalT += r.total;
346
- }
347
- banner.append(String.format(" %-30s %4d / %4d%n", "TOTAL", totalP, totalT));
348
- banner.append("============================================\n");
349
- System.out.println(banner);
350
- }
351
428
  }