@voxgig/sdkgen 4.8.2 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) 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/model/target/zig.aon +9 -0
  33. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  34. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  35. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  36. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  37. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  38. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  39. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  40. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  41. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  45. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  46. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  47. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  48. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  49. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  50. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  51. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  52. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  53. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  54. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  55. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  56. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  57. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  58. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  59. package/project/.sdk/tm/c/Makefile +38 -3
  60. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  61. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  62. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  63. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  64. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  65. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  66. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  67. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  68. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  69. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  70. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  71. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  72. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  73. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  74. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  75. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  76. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  77. package/project/.sdk/tm/cpp/Makefile +5 -1
  78. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  79. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  80. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  81. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  82. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  83. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  84. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  85. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  86. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  87. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  88. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  89. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  90. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  91. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  92. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  93. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  94. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  95. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  96. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  97. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  98. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  99. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  100. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  101. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  102. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  103. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  104. package/project/.sdk/tm/elixir/Makefile +11 -3
  105. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  106. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  107. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  108. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  109. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  110. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  111. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  112. package/project/.sdk/tm/go/core/context.go +32 -16
  113. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  133. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  134. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
  135. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  136. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
  137. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  138. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  139. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  140. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
  141. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
  142. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  143. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  144. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  145. package/project/.sdk/tm/go/test/omni/omni.go +902 -0
  146. package/project/.sdk/tm/go/test/omni/util.go +381 -0
  147. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  148. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  149. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  150. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  151. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  152. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  153. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  154. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  155. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  156. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  157. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  158. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  159. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  160. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  161. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  162. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  163. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  164. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  165. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  166. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  167. package/project/.sdk/tm/js/test/omni.js +251 -0
  168. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  169. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  170. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  171. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  172. package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
  173. package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
  174. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  175. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  176. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  177. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  178. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  179. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  180. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  181. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  182. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  183. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  184. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  185. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  186. package/project/.sdk/tm/lean/Makefile +12 -5
  187. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  188. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  189. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  190. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  191. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  192. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  193. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  194. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  195. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  196. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  197. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  198. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  199. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  200. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  201. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  202. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  203. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  204. package/project/.sdk/tm/ocaml/Makefile +37 -12
  205. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  206. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  207. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  208. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  209. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  210. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  211. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  212. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  213. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  214. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  215. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  216. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  217. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  218. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  219. package/project/.sdk/tm/php/test/Omni.php +691 -0
  220. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  221. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  222. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  223. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  224. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  225. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  226. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  227. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
  253. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  254. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  255. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  256. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  257. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
  258. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  259. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  260. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  261. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  262. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  263. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  264. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  265. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  266. package/project/.sdk/tm/py/test/omni.py +415 -0
  267. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  268. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  269. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  270. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  271. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
  272. package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
  273. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  274. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  275. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  276. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  277. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  278. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  279. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  280. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  281. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  282. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  283. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  284. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  285. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  286. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  287. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  288. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  289. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  290. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  291. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  292. package/project/.sdk/tm/scala/Makefile +16 -6
  293. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  294. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  295. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  296. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  297. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  298. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  299. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  300. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  301. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  302. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  303. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  304. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  305. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  306. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  307. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  308. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  309. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  310. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  311. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  312. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  313. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  326. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  327. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  328. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  329. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  330. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  345. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  346. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  347. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  348. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  349. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  350. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  351. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  352. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  353. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  354. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  355. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  356. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  357. package/project/.sdk/tm/zig/Makefile +15 -1
  358. package/project/.sdk/tm/zig/build.zig +23 -5
  359. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  360. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  361. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  362. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  363. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  364. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  365. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  366. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  367. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  368. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  369. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  370. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  371. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  372. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  373. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  374. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  375. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  376. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  377. package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
  378. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  379. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  380. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  381. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  382. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  383. package/project/sdkgen-package.json +1 -1
  384. package/src/action/doctor.ts +66 -2
  385. package/src/helpers/naming.ts +4 -2
  386. package/project/.sdk/tm/c/tests/runner.h +0 -274
  387. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  388. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  389. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  390. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  391. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  392. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  393. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  394. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  395. package/project/.sdk/tm/js/test/runner.js +0 -387
  396. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  397. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  398. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  399. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  400. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  401. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  402. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  403. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  404. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  405. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  406. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
  407. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
@@ -150,12 +150,12 @@ pub const Collector = struct {
150
150
 
151
151
  fn call(p: *anyopaque, _: std.mem.Allocator, arg: Value) anyerror!Value {
152
152
  const self: *Collector = @ptrCast(@alignCast(p));
153
- self.items.append(arg) catch {};
153
+ self.items.append(h.A(), arg) catch {};
154
154
  return vnull();
155
155
  }
156
156
  pub fn new() *Collector {
157
157
  const s = h.A().create(Collector) catch unreachable;
158
- s.* = .{ .items = std.ArrayList(Value).init(h.A()) };
158
+ s.* = .{ .items = .empty };
159
159
  return s;
160
160
  }
161
161
  pub fn fn_val(self: *Collector) Value {
@@ -205,7 +205,7 @@ pub const Recorder = struct {
205
205
 
206
206
  fn call(p: *anyopaque, opctx: *Context, url: []const u8, fetchdef: Value) E!Value {
207
207
  const self: *Recorder = @ptrCast(@alignCast(p));
208
- self.calls.append(h.jo(&.{
208
+ self.calls.append(h.A(), h.jo(&.{
209
209
  .{ "url", h.vstr(url) },
210
210
  .{ "fetchdef", fetchdef },
211
211
  })) catch {};
@@ -218,7 +218,7 @@ pub const Recorder = struct {
218
218
  }
219
219
  pub fn new(reply: ?ReplyFn) *Recorder {
220
220
  const s = h.A().create(Recorder) catch unreachable;
221
- s.* = .{ .calls = std.ArrayList(Value).init(h.A()), .reply = reply };
221
+ s.* = .{ .calls = .empty, .reply = reply };
222
222
  return s;
223
223
  }
224
224
  pub fn fetcher(self: *Recorder) Fetcher {
@@ -326,19 +326,19 @@ fn strLess(_: void, a: []const u8, b: []const u8) bool {
326
326
  fn fhBuildUrl(spec: *sdk.Spec) []const u8 {
327
327
  var url = std.fmt.allocPrint(h.A(), "{s}{s}", .{ spec.base, spec.path }) catch spec.path;
328
328
  if (spec.query == .object) {
329
- var keys = std.ArrayList([]const u8).init(h.A());
329
+ var keys: std.ArrayList([]const u8) = .empty;
330
330
  var it = spec.query.object.iterator();
331
331
  while (it.next()) |kv| {
332
- if (!h.is_noval(kv.value_ptr.*)) keys.append(kv.key_ptr.*) catch {};
332
+ if (!h.is_noval(kv.value_ptr.*)) keys.append(h.A(), kv.key_ptr.*) catch {};
333
333
  }
334
334
  if (keys.items.len != 0) {
335
335
  std.mem.sort([]const u8, keys.items, {}, strLess);
336
- var qs = std.ArrayList(u8).init(h.A());
336
+ var qs: std.ArrayList(u8) = .empty;
337
337
  for (keys.items) |k| {
338
- if (qs.items.len != 0) qs.append('&') catch {};
338
+ if (qs.items.len != 0) qs.append(h.A(), '&') catch {};
339
339
  const v = h.getp(spec.query, k);
340
340
  const part = std.fmt.allocPrint(h.A(), "{s}={s}", .{ h.esc_url(k), h.esc_url(h.scalar_str(v)) }) catch "";
341
- qs.appendSlice(part) catch {};
341
+ qs.appendSlice(h.A(), part) catch {};
342
342
  }
343
343
  url = std.fmt.allocPrint(h.A(), "{s}?{s}", .{ url, qs.items }) catch url;
344
344
  }
@@ -520,7 +520,7 @@ pub fn fh_make(server: ?Fetcher, feats: []const FeatSpec) *FhHarness {
520
520
  while (it.next()) |kv| h.setp(fopts, kv.key_ptr.*, kv.value_ptr.*);
521
521
  }
522
522
  fs.feat.callInit(rootctx, fopts);
523
- client.features.append(fs.feat) catch {};
523
+ client.features.append(h.A(), fs.feat) catch {};
524
524
  }
525
525
 
526
526
  utility.feature_hook(rootctx, "PostConstruct");
@@ -37,15 +37,15 @@ fn makeAlwaysOk() Value {
37
37
  }
38
38
 
39
39
  // A deterministic sleep recorder: appends each requested ms to `sleep_log`.
40
- var sleep_log: std.ArrayList(i64) = undefined;
40
+ var sleep_log: std.ArrayList(i64) = .empty;
41
41
  var sleep_log_init = false;
42
42
  var sleep_dummy: u8 = 0;
43
43
  fn sleepRecCall(_: *anyopaque, _: std.mem.Allocator, arg: Value) anyerror!Value {
44
44
  if (!sleep_log_init) {
45
- sleep_log = std.ArrayList(i64).init(h.A());
45
+ sleep_log = .empty;
46
46
  sleep_log_init = true;
47
47
  }
48
- sleep_log.append(h.to_int(arg)) catch {};
48
+ sleep_log.append(h.A(), h.to_int(arg)) catch {};
49
49
  return vnull();
50
50
  }
51
51
  fn sleepRec() Value {
@@ -200,7 +200,7 @@ test "gotcha6: netsim conn error code" {
200
200
  test "gotcha6: netsim seeded latency is deterministic" {
201
201
  const mk = struct {
202
202
  fn build() []const i64 {
203
- sleep_log = std.ArrayList(i64).init(h.A());
203
+ sleep_log = .empty;
204
204
  sleep_log_init = true;
205
205
  const opts = h.jo(&.{
206
206
  .{ "feature", h.jo(&.{.{ "netsim", h.jo(&.{
@@ -217,7 +217,7 @@ test "gotcha6: netsim seeded latency is deterministic" {
217
217
  while (i < 4) : (i += 1) {
218
218
  _ = client.sdkUtility.fetch(ctx, "http://x", h.jo(&.{.{ "url", h.vstr("http://x") }})) catch {};
219
219
  }
220
- return sleep_log.toOwnedSlice() catch &.{};
220
+ return sleep_log.toOwnedSlice(h.A()) catch &.{};
221
221
  }
222
222
  };
223
223
  const run1 = mk.build();
@@ -0,0 +1,515 @@
1
+ // The corpus test runner: vendored @voxgig/omni driven through its NATIVE
2
+ // API (`omni.makeRunner` / `Runner.runner` / `RunPack.runsetflagsargs`, see
3
+ // test/vendor/omni/omni.zig - that file is the authority), presented to the
4
+ // corpus drivers in the subject shapes they already use. No compat shim is
5
+ // vendored: the adapter below IS the whole bridge, per language, per the
6
+ // vendor-tag rollout (docs/design/vendor-tag-rollout.md, Decision 4). It
7
+ // supersedes test/struct_runner.zig entirely - both its engine half
8
+ // (runset/runsetAlloc/runsetEntry) and its assertion half (matchval/doMatch
9
+ // /jsonEqual, subsumed by omni.matchval / omni.deepequal).
10
+ //
11
+ // NAMED omniresolver, NOT omni: the vendored module is imported as
12
+ // `@import("omni")`, and a resolver at test/omni.zig would make
13
+ // `@import("omni")` and `@import("omni.zig")` a one-character slip apart -
14
+ // with the wrong one still compiling, because both expose `matchval`,
15
+ // `NULLMARK` and a `RunPack`. The two names cannot be confused.
16
+ //
17
+ // Zig-specific decisions, each load-bearing:
18
+ //
19
+ // 1. TWO VALUE MODELS, CONVERTED AT THE SUBJECT BOUNDARY. omni speaks
20
+ // `std.json.Value`; the SDK and the corpus subjects speak the vendored
21
+ // struct port's `JsonValue`, whose containers are pointer-stable
22
+ // (*MapRef / *ListRef) because the struct API mutates through them. The
23
+ // retiring runner converted per entry (fromStdJson in, toStdJson out)
24
+ // and this keeps doing exactly that - there is no third model.
25
+ //
26
+ // 2. THE ARGUMENT IS WRITTEN BACK, so `match: {args: ...}` can be checked.
27
+ // `struct.minor.setpath` asserts on all seven entries that the subject
28
+ // rewrote the store it was handed, and `struct.merge.integrity` asserts
29
+ // on all six that merge did NOT. Conversion is a copy, so a mutation
30
+ // lands on the copy; the bridge therefore drives omni's `SubjectArgs`
31
+ // form and returns the converted-back argument alongside the result.
32
+ // The retiring runner could check neither: it ignored `match` outright.
33
+ //
34
+ // 3. A FAILURE IS A MESSAGE, NOT AN ERROR VALUE. Zig error values carry no
35
+ // payload, so `@errorName` gives the tag and never the text an `err`
36
+ // entry matches on. Every subject shape therefore reports failure
37
+ // through an `errout: *?[]const u8` out-parameter. The retiring runner
38
+ // SKIPPED every entry carrying `err` in the struct corpus (55 of them);
39
+ // they are checked now.
40
+ //
41
+ // 4. ZERO-ARGUMENT ENTRIES (`noval`). The corpus carries entries with no
42
+ // `in`, `args` or `ctx`, meaning "call the subject with NO argument".
43
+ // omni's native rule passes one JSON null. The vendored struct port has
44
+ // no NOVAL member in `JsonValue` - it cannot express absence as a value
45
+ // - so the port's own spelling of no-value is the UNDEFMARK string, and
46
+ // the corpus subjects (typify -> T_noval, clone -> null) already read
47
+ // it. `Flags.noval` rewrites such entries to `args: ["__UNDEF__"]`
48
+ // before the group runs, the same spec-rewrite go's resolver uses for
49
+ // its NOVAL sentinel. It is opt-in per group because the port answers
50
+ // correctly from a plain null everywhere else, and handing those groups
51
+ // a marker string would change what they test.
52
+ //
53
+ // 5. THE CTX PUBLISH SLOTS ARE PRE-CREATED IN `contextify`. The primary
54
+ // corpus asserts `match: {ctx: {spec|result|response: ...}}` on nine
55
+ // entries, and omni reads that from the `entry.ctx` it recorded BEFORE
56
+ // the call. In go or java that map is a reference and a subject just
57
+ // writes into it; `std.json.ObjectMap` is a VALUE (its length lives in
58
+ // the struct, not behind the pointer), so a key the subject ADDS is
59
+ // invisible to omni's copy while a key it OVERWRITES is shared. So
60
+ // `contextify` pre-creates the three publishable slots and the bridge
61
+ // writes back through `getPtr` - an in-place overwrite of an existing
62
+ // slot, which both copies see. The slots go into a FRESH map, never
63
+ // into the one omni handed over: see `contextify` for why growing that
64
+ // one faults the binary. Consequence, stated plainly: a ctx leaf
65
+ // asserted as `__EXISTS__` is satisfied by the pre-created null, so
66
+ // that ONE assertion shape (primary.makeRequest[0]) is weaker here than
67
+ // in a reference-semantics port. Every concrete ctx leaf is checked in
68
+ // full. The fix belongs upstream - a pointer-stable entry map in the
69
+ // zig port, or a runner that re-reads `ctx` from the returned args.
70
+ //
71
+ // 6. THE COUNT IS THE GUARD. A runner that stops executing looks exactly
72
+ // like a passing one, which is how two targets in this rollout went
73
+ // green while running nothing. So every group compares the number of
74
+ // SUBJECT INVOCATIONS against the number of entries the group declares,
75
+ // and refuses an empty set outright; `CASES`/`GROUPS` accumulate a
76
+ // census the suite asserts a floor on at the end.
77
+
78
+ const std = @import("std");
79
+ const omni = @import("omni");
80
+ const vs = @import("voxgig-struct");
81
+
82
+ const Allocator = std.mem.Allocator;
83
+
84
+ /// omni's value model.
85
+ pub const Json = omni.Json;
86
+
87
+ /// The SDK's and the corpus subjects' value model.
88
+ pub const JsonValue = vs.JsonValue;
89
+
90
+ pub const NULLMARK = omni.NULLMARK;
91
+ pub const UNDEFMARK = omni.UNDEFMARK;
92
+ pub const EXISTSMARK = omni.EXISTSMARK;
93
+
94
+ /// The shared corpus, compiled by the project build. Relative to the target
95
+ /// directory, which is where `zig build test` runs.
96
+ pub const TEST_JSON_FILE = "../.sdk/test/test.json";
97
+
98
+ /// The running census, across every group this test binary drove. A suite
99
+ /// asserts a floor on these at the end: a file whose test blocks were
100
+ /// deleted, or a runner that stopped executing, shows up as a number.
101
+ pub var CASES: usize = 0;
102
+ pub var GROUPS: usize = 0;
103
+
104
+ pub fn resetcensus() void {
105
+ CASES = 0;
106
+ GROUPS = 0;
107
+ }
108
+
109
+ // 0.16 reads files through an `std.Io` rather than free functions on
110
+ // `std.fs`. The corpus loader is test-only and has no Io of its own to
111
+ // thread through, so it uses the statically initialised singleton std
112
+ // itself falls back to.
113
+ fn testIo() std.Io {
114
+ return std.Io.Threaded.global_single_threaded.io();
115
+ }
116
+
117
+ /// The struct-corpus subject: one value in, one value out.
118
+ pub const Subject = *const fn (Allocator, JsonValue) JsonValue;
119
+
120
+ /// A subject that can FAIL with a message - `validate` and `transform`
121
+ /// answer `{out, err}`, and the corpus asserts on the text.
122
+ pub const FallibleSubject = *const fn (Allocator, JsonValue, *?[]const u8) JsonValue;
123
+
124
+ /// The primary-corpus subject: omni's own argument list (a contextified ctx
125
+ /// map, or the entry's `args`, or its `in`), the ctx view to publish back
126
+ /// for `match: {ctx: ...}`, and the SDK's own failure message.
127
+ pub const CtxSubject = *const fn (
128
+ alloc: Allocator,
129
+ args: []const Json,
130
+ published: *?Json,
131
+ errout: *?[]const u8,
132
+ ) anyerror!Json;
133
+
134
+ /// Per-group run options.
135
+ pub const Flags = struct {
136
+ /// omni's null flag: nulls (in the group AND in the result) normalise to
137
+ /// NULLMARK, and an entry with no `out` expects one. The canonical
138
+ /// per-group setting is the reference driver's
139
+ /// (tm/ts/test/utility/StructUtility.test.ts).
140
+ null_: bool = true,
141
+ /// An entry with no `in`/`args`/`ctx` reaches the subject as the port's
142
+ /// no-value marker rather than as one null. See decision 4.
143
+ noval: bool = false,
144
+ /// The label failures are reported under. Defaults to the runner's
145
+ /// section name, which is the same for every group in a suite.
146
+ name: ?[]const u8 = null,
147
+ };
148
+
149
+ const SubjectKind = union(enum) {
150
+ value: Subject,
151
+ fallible: FallibleSubject,
152
+ ctx: CtxSubject,
153
+ };
154
+
155
+ // Per-run state, reachable from omni's hooks through their `data` pointer
156
+ // (Zig has no closures; a hook is a bare function pointer plus this).
157
+ const Host = struct {
158
+ alloc: Allocator,
159
+ kind: ?SubjectKind = null,
160
+ calls: usize = 0,
161
+ };
162
+
163
+ /// The ctx facets a primary subject may publish. Pre-created by
164
+ /// `contextify` so the write-back below is an in-place overwrite - see
165
+ /// decision 5.
166
+ const CTX_SLOTS = [_][]const u8{ "spec", "result", "response" };
167
+
168
+ fn hostof(data: ?*const anyopaque) *Host {
169
+ return @ptrCast(@alignCast(@constCast(data.?)));
170
+ }
171
+
172
+ /// Hand the subject a ctx/args[0] map that already carries the publishable
173
+ /// slots (decision 5) - built as a COPY, leaving the map omni handed over
174
+ /// untouched.
175
+ ///
176
+ /// `std.json.ObjectMap` is unmanaged and by value, so growing a copy
177
+ /// reallocates the entries buffer and frees the old one, and every other
178
+ /// holder of the same struct keeps pointing into freed memory. omni is such
179
+ /// a holder: it installs this return value as `args[0]` and as `entry.ctx`,
180
+ /// but the entry's own `args` list still carries the map it was parsed with,
181
+ /// and `fail` stringifies exactly that when it reports a mismatch. Growing
182
+ /// in place therefore turned every FAILING case into a general protection
183
+ /// fault - the suite aborting instead of naming the entry that differed.
184
+ ///
185
+ /// Copying keeps both sides sound: the parsed map is never touched, and the
186
+ /// map omni holds after this returns IS the map the subject is called with,
187
+ /// so `publish`'s in-place `getPtr` overwrite is visible to both.
188
+ fn contextify(self: *const omni.Provider, val: Json) Json {
189
+ const host = hostof(self.data);
190
+ if (.object != val) {
191
+ return val;
192
+ }
193
+
194
+ var out: std.json.ObjectMap = .{};
195
+ var it = val.object.iterator();
196
+ while (it.next()) |field| {
197
+ out.put(host.alloc, field.key_ptr.*, field.value_ptr.*) catch return val;
198
+ }
199
+ for (CTX_SLOTS) |slot| {
200
+ if (!out.contains(slot)) {
201
+ out.put(host.alloc, slot, Json{ .null = {} }) catch return val;
202
+ }
203
+ }
204
+ return .{ .object = out };
205
+ }
206
+
207
+ /// Overwrite the pre-created ctx slots in place. Only keys that ALREADY
208
+ /// exist are written: adding one would be invisible to omni's own copy of
209
+ /// the map (decision 5), so a silent no-op is better than a silent lie.
210
+ fn publish(args: []const Json, view: Json) void {
211
+ if (0 == args.len or .object != args[0] or .object != view) {
212
+ return;
213
+ }
214
+
215
+ const target = args[0].object;
216
+ var it = view.object.iterator();
217
+ while (it.next()) |field| {
218
+ if (target.getPtr(field.key_ptr.*)) |slot| {
219
+ slot.* = field.value_ptr.*;
220
+ }
221
+ }
222
+ }
223
+
224
+ const OOM = "omniresolver: out of memory";
225
+
226
+ fn call(self: *const omni.SubjectArgs, args: []const Json) omni.SubjectArgsResult {
227
+ const host = hostof(self.data);
228
+ host.calls += 1;
229
+
230
+ const alloc = host.alloc;
231
+ const kind = host.kind orelse return .{ .err = "omniresolver: no subject" };
232
+
233
+ switch (kind) {
234
+ .ctx => |subject| {
235
+ var view: ?Json = null;
236
+ var errmsg: ?[]const u8 = null;
237
+ const res = subject(alloc, args, &view, &errmsg) catch |e| {
238
+ return .{ .err = errmsg orelse @errorName(e) };
239
+ };
240
+ if (errmsg) |message| {
241
+ return .{ .err = message };
242
+ }
243
+ if (view) |published| {
244
+ publish(args, published);
245
+ }
246
+ return .{ .ok = .{ .args = args, .res = res } };
247
+ },
248
+
249
+ .value, .fallible => {
250
+ const inarg: Json = if (0 < args.len) args[0] else Json{ .null = {} };
251
+ const inval = vs.fromStdJson(alloc, inarg) catch return .{ .err = OOM };
252
+
253
+ var errmsg: ?[]const u8 = null;
254
+ const out = switch (kind) {
255
+ .value => |subject| subject(alloc, inval),
256
+ .fallible => |subject| subject(alloc, inval, &errmsg),
257
+ else => unreachable,
258
+ };
259
+ if (errmsg) |message| {
260
+ return .{ .err = message };
261
+ }
262
+
263
+ const res = vs.toStdJson(alloc, out) catch return .{ .err = OOM };
264
+
265
+ // Decision 2: hand the (possibly mutated) argument back, so
266
+ // `match: {args: ...}` sees what the subject did with it.
267
+ const back = alloc.alloc(Json, args.len) catch return .{ .err = OOM };
268
+ @memcpy(back, args);
269
+ if (0 < back.len) {
270
+ back[0] = vs.toStdJson(alloc, inval) catch args[0];
271
+ }
272
+
273
+ return .{ .ok = .{ .args = back, .res = res } };
274
+ },
275
+ }
276
+ }
277
+
278
+ /// The number of entries a group declares, or null when it has no `set`.
279
+ pub fn setlen(group: omni.Maybe) ?usize {
280
+ const set = omni.jget(group, "set") orelse return null;
281
+ if (.array != set) {
282
+ return null;
283
+ }
284
+ return set.array.items.len;
285
+ }
286
+
287
+ /// Normalise a group's entries for this port, before omni sees it. Two
288
+ /// rewrites, both stated in the header:
289
+ ///
290
+ /// - `noval` (decision 4): an entry with no `in`, `args` or `ctx` carries the
291
+ /// port's no-value marker as its single argument.
292
+ ///
293
+ /// - THE ABSENT RESULT. With the null flag OFF, canonical omni leaves a
294
+ /// missing `out` ABSENT and a canonical port answers `undefined`, so the
295
+ /// two agree. The vendored struct port has no `undefined`: `JsonValue` can
296
+ /// express a null and nothing weaker, and omni-zig's own `fixjson` returns
297
+ /// `Json{.null}` for an absent value because its signature has nowhere to
298
+ /// put absence. So an entry that asserts "the subject answered nothing"
299
+ /// asserts a NULL here - written in as an explicit `out`, in the port's own
300
+ /// vocabulary. Only for an entry that asserts nothing else: one carrying
301
+ /// `err` or `match` is already checked through another path, and giving it
302
+ /// an `out` would add an assertion the corpus never made.
303
+ ///
304
+ /// Rebuilds the group; the loaded spec is never mutated.
305
+ fn prepare(alloc: Allocator, group: Json, flags: Flags) !Json {
306
+ if (flags.null_ and !flags.noval) {
307
+ return group;
308
+ }
309
+
310
+ const set = omni.jget(group, "set") orelse return group;
311
+ if (.array != set) {
312
+ return group;
313
+ }
314
+
315
+ var patched = std.json.Array.init(alloc);
316
+ for (set.array.items) |entry| {
317
+ if (.object != entry) {
318
+ try patched.append(entry);
319
+ continue;
320
+ }
321
+
322
+ const noargs = !omni.jhas(entry, "in") and
323
+ !omni.jhas(entry, "args") and !omni.jhas(entry, "ctx");
324
+ const wantnoval = flags.noval and noargs;
325
+ const wantnull = !flags.null_ and
326
+ !omni.jhas(entry, "out") and
327
+ !omni.jhas(entry, "err") and
328
+ !omni.jhas(entry, "match");
329
+
330
+ if (!wantnoval and !wantnull) {
331
+ try patched.append(entry);
332
+ continue;
333
+ }
334
+
335
+ var copy: std.json.ObjectMap = .{};
336
+ var it = entry.object.iterator();
337
+ while (it.next()) |field| {
338
+ try copy.put(alloc, field.key_ptr.*, field.value_ptr.*);
339
+ }
340
+ if (wantnoval) {
341
+ try copy.put(alloc, "args", try omni.jlist(alloc, &.{omni.jstr(UNDEFMARK)}));
342
+ }
343
+ if (wantnull) {
344
+ try copy.put(alloc, "out", Json{ .null = {} });
345
+ }
346
+ try patched.append(.{ .object = copy });
347
+ }
348
+
349
+ return omni.jset(alloc, group, "set", .{ .array = patched });
350
+ }
351
+
352
+ /// A loaded corpus section plus the provider that hosts the subjects.
353
+ pub const Runner = struct {
354
+ parent: Allocator,
355
+ arena: *std.heap.ArenaAllocator,
356
+ alloc: Allocator,
357
+ host: *Host,
358
+ provider: *omni.Provider,
359
+ inner: omni.Runner,
360
+ pack: omni.RunPack,
361
+
362
+ /// The message of the last failure, for the smoke test.
363
+ failure: ?[]const u8 = null,
364
+ /// Suppress the failure report (the smoke test EXPECTS failures).
365
+ quiet: bool = false,
366
+
367
+ pub fn deinit(self: *Runner) void {
368
+ const parent = self.parent;
369
+ const arena = self.arena;
370
+ arena.deinit();
371
+ parent.destroy(arena);
372
+ }
373
+
374
+ /// The resolved section, as loaded.
375
+ pub fn spec(self: *const Runner) Json {
376
+ return self.pack.spec;
377
+ }
378
+
379
+ /// A named group, one level down (`walk` -> `basic`). Absent when the
380
+ /// corpus does not carry it: the SDK corpus may omit a section the
381
+ /// upstream struct corpus has, and the corpus is the contract.
382
+ pub fn group(self: *const Runner, section: []const u8, name: []const u8) omni.Maybe {
383
+ return omni.jget(omni.jget(self.pack.spec, section), name);
384
+ }
385
+
386
+ /// A named group at the top of the section (`makeSpec` -> `basic`).
387
+ pub fn set(self: *const Runner, name: []const u8) omni.Maybe {
388
+ return omni.jget(self.pack.spec, name);
389
+ }
390
+
391
+ pub fn runset(self: *Runner, group_: omni.Maybe, subject: Subject) !void {
392
+ return self.drive(group_, .{}, .{ .value = subject });
393
+ }
394
+
395
+ pub fn runsetflags(self: *Runner, group_: omni.Maybe, flags: Flags, subject: Subject) !void {
396
+ return self.drive(group_, flags, .{ .value = subject });
397
+ }
398
+
399
+ pub fn runseterr(self: *Runner, group_: omni.Maybe, flags: Flags, subject: FallibleSubject) !void {
400
+ return self.drive(group_, flags, .{ .fallible = subject });
401
+ }
402
+
403
+ pub fn runsetctx(self: *Runner, group_: omni.Maybe, flags: Flags, subject: CtxSubject) !void {
404
+ return self.drive(group_, flags, .{ .ctx = subject });
405
+ }
406
+
407
+ fn drive(self: *Runner, group_: omni.Maybe, flags: Flags, kind: SubjectKind) !void {
408
+ self.failure = null;
409
+
410
+ // A group the corpus does not carry is a skip; a group it carries
411
+ // EMPTY is a failure. The lenient (version 0) spec format lets an
412
+ // empty set pass silently, and an emptied section is precisely the
413
+ // regression this rollout exists to catch.
414
+ const found = group_ orelse return error.SkipZigTest;
415
+ const declared = setlen(found) orelse {
416
+ self.report("omniresolver: group has no `set`", flags);
417
+ return error.NoTestSet;
418
+ };
419
+ if (0 == declared) {
420
+ self.report("omniresolver: empty test set", flags);
421
+ return error.EmptyTestSet;
422
+ }
423
+
424
+ const usegroup = try prepare(self.alloc, found, flags);
425
+
426
+ self.host.kind = kind;
427
+ self.host.calls = 0;
428
+
429
+ const argsubject = omni.SubjectArgs{ .call = call, .data = self.host };
430
+
431
+ const failure = try self.pack.runsetflagsargs(
432
+ usegroup,
433
+ .{ .null_ = flags.null_, .name = flags.name },
434
+ &argsubject,
435
+ );
436
+
437
+ if (failure) |message| {
438
+ self.failure = message;
439
+ if (!self.quiet) {
440
+ std.debug.print("\n{s}\n", .{message});
441
+ }
442
+ return error.CorpusFailure;
443
+ }
444
+
445
+ // Decision 6. omni returns on the FIRST failure, so this can only
446
+ // differ when the engine ran fewer entries than the group declares
447
+ // - a section that silently stopped driving the subject.
448
+ if (self.host.calls != declared) {
449
+ const message = std.fmt.allocPrint(
450
+ self.alloc,
451
+ "omniresolver: {s}: ran {d} of {d} declared cases",
452
+ .{ flags.name orelse self.pack.name, self.host.calls, declared },
453
+ ) catch "omniresolver: case count mismatch";
454
+ self.failure = message;
455
+ if (!self.quiet) {
456
+ std.debug.print("\n{s}\n", .{message});
457
+ }
458
+ return error.CasesNotRun;
459
+ }
460
+
461
+ CASES += self.host.calls;
462
+ GROUPS += 1;
463
+ }
464
+
465
+ fn report(self: *Runner, message: []const u8, flags: Flags) void {
466
+ self.failure = message;
467
+ if (!self.quiet) {
468
+ std.debug.print("\n{s}: {s}\n", .{ message, flags.name orelse self.pack.name });
469
+ }
470
+ }
471
+ };
472
+
473
+ fn build(parent: Allocator, section: []const u8, spec: ?Json) !Runner {
474
+ const arena = try parent.create(std.heap.ArenaAllocator);
475
+ errdefer parent.destroy(arena);
476
+ arena.* = std.heap.ArenaAllocator.init(parent);
477
+ errdefer arena.deinit();
478
+
479
+ const alloc = arena.allocator();
480
+
481
+ const host = try alloc.create(Host);
482
+ host.* = .{ .alloc = alloc };
483
+
484
+ const provider = try alloc.create(omni.Provider);
485
+ provider.* = .{ .contextify = contextify, .data = host };
486
+
487
+ const inner = if (spec) |value|
488
+ try omni.makeRunnerSpec(alloc, value, provider)
489
+ else
490
+ try omni.makeRunner(alloc, testIo(), TEST_JSON_FILE, provider);
491
+
492
+ const pack = try inner.runner(section, null);
493
+
494
+ return .{
495
+ .parent = parent,
496
+ .arena = arena,
497
+ .alloc = alloc,
498
+ .host = host,
499
+ .provider = provider,
500
+ .inner = inner,
501
+ .pack = pack,
502
+ };
503
+ }
504
+
505
+ /// A runner over the shared corpus file, resolved at one named section
506
+ /// ("struct", "primary").
507
+ pub fn makeRunner(parent: Allocator, section: []const u8) !Runner {
508
+ return build(parent, section, null);
509
+ }
510
+
511
+ /// A runner over an in-memory spec (omni's own capability), which keeps the
512
+ /// smoke test free of fixture files.
513
+ pub fn makeRunnerSpec(parent: Allocator, spec: Json, section: []const u8) !Runner {
514
+ return build(parent, section, spec);
515
+ }