@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
@@ -0,0 +1,192 @@
1
+ // Smoke test for the vendored omni runner ITSELF.
2
+ //
3
+ // A runner that cannot FAIL a bad entry would turn every corpus suite
4
+ // vacuously green, so this pins the failure paths, not just the happy one:
5
+ // a wrong result must be reported, and an expected error that does NOT
6
+ // occur must be reported. It also exercises the whole adapter — the
7
+ // in-memory spec capability, the Json <-> Value bridge, and OmniReport's
8
+ // accumulation — because those are what stand between the vendored engine
9
+ // and the two corpus mains.
10
+ //
11
+ // The Scala peer of tm/java/test/OmniSmokeTest.java, tm/lua/test/
12
+ // omni_smoke_test.lua and tm/ts/test/omni.test.ts. There is no test
13
+ // framework in this target (see model/target/scala.aon), so it is a plain
14
+ // scala-cli main that exits non-zero on failure, like the corpus mains
15
+ // beside it.
16
+
17
+ import voxgig.omni.Json as OJson
18
+ import voxgig.struct.{Noval, VNum, Value}
19
+
20
+ object OmniSmoke {
21
+
22
+ // A minimal in-memory spec: no fixture file, no OMNI block (lenient v0,
23
+ // like the shared corpus). Built in omni's OWN value model - the runner
24
+ // walks nothing else.
25
+ def smokespec(): OJson = OJson.map(
26
+ "primary" -> OJson.map(
27
+ "smoke" -> OJson.map(
28
+ "basic" -> OJson.map(
29
+ "set" -> OJson.list(
30
+ OJson.map("in" -> OJson.num(1), "out" -> OJson.num(2)),
31
+ OJson.map("in" -> OJson.num(41), "out" -> OJson.num(42)))),
32
+ "bad" -> OJson.map(
33
+ "set" -> OJson.list(
34
+ OJson.map("in" -> OJson.num(1), "out" -> OJson.num(999)))),
35
+ "err" -> OJson.map(
36
+ "set" -> OJson.list(
37
+ OJson.map("in" -> OJson.num(0), "err" -> OJson.str("zero refused")))),
38
+ // A single {in, out} node rather than a `set`: the shape the four
39
+ // struct groups OmniRun.compare drives have.
40
+ "node" -> OJson.map("in" -> OJson.num(7), "out" -> OJson.num(7)))))
41
+
42
+ // The subject under test, in this SDK's struct value model - so a pass
43
+ // here also proves the resolver's Json <-> Value bridge round-trips.
44
+ def inc(v: Value): Value = v match {
45
+ case VNum(n) if 0.0 == n => throw new RuntimeException("smoke: zero refused")
46
+ case VNum(n) => VNum(n + 1.0)
47
+ case other => other
48
+ }
49
+
50
+ def identity(v: Value): Value = v
51
+
52
+ private var nfail = 0
53
+
54
+ private def check(what: String, ok: Boolean, detail: String): Unit =
55
+ if (ok) println("ok " + what)
56
+ else { nfail += 1; println("FAIL " + what + " - " + detail) }
57
+
58
+ private def run(name: String, group: String, subject: Value => Value): OmniReport = {
59
+ val report = new OmniReport("")
60
+ val spec = smokespec()
61
+ val run = OmniResolver.section(OmniResolver.makeRunner(spec), spec, "smoke", report)
62
+ run.runset(name, run.group(group))(subject)
63
+ report
64
+ }
65
+
66
+ private def freshrun(section: String, report: OmniReport): OmniRun = {
67
+ val spec = smokespec()
68
+ OmniResolver.section(OmniResolver.makeRunner(spec), spec, section, report)
69
+ }
70
+
71
+ def main(args: Array[String]): Unit = {
72
+ // 0. The section and its groups resolve at all.
73
+ val spec = smokespec()
74
+ val resolved =
75
+ OmniResolver.section(OmniResolver.makeRunner(spec), spec, "smoke",
76
+ new OmniReport("")).set("basic")
77
+ check("smoke section resolves", !resolved.isabsent, "primary.smoke did not resolve")
78
+
79
+ // 1. A correct subject passes, and every entry is counted.
80
+ val good = run("smoke.basic", "basic", inc)
81
+ check("runset passes a correct subject", good.failures.isEmpty,
82
+ good.failures.mkString(" | "))
83
+ check("runset counts every entry", 2 == good.passed,
84
+ "expected 2 checks, counted " + good.passed)
85
+
86
+ // 1b. The count is what the ENGINE RAN, not what the spec declares
87
+ // (OmniResolver decision 8). Counted here at the subject, the far
88
+ // side of the engine: a number the engine cannot move is not
89
+ // evidence that the engine ran.
90
+ var calls = 0
91
+ val counted = run("smoke.basic", "basic", v => { calls += 1; inc(v) })
92
+ check("the reported count is what the engine ran",
93
+ 2 == calls && calls == counted.passed,
94
+ "the engine invoked the subject " + calls + " times but the report " +
95
+ "counted " + counted.passed + " passes")
96
+
97
+ // 2. A WRONG result is reported. Without this the corpus suites would be
98
+ // vacuously green.
99
+ val bad = run("smoke.bad", "bad", inc)
100
+ check("runset fails a wrong result", bad.failures.nonEmpty,
101
+ "a wrong result went unreported - the corpus suites would be vacuously green")
102
+ check("the failure names the mismatch",
103
+ bad.failures.exists(_.contains("result mismatch")),
104
+ "expected a result mismatch failure, got: " + bad.failures.mkString(" | "))
105
+ check("a failed group counts nothing", 0 == bad.passed,
106
+ "a failed group still counted " + bad.passed + " passes")
107
+
108
+ // 3. An expected error is matched; a MISSING expected error is reported.
109
+ val raised = run("smoke.err", "err", inc)
110
+ check("an expected error is matched", raised.failures.isEmpty,
111
+ raised.failures.mkString(" | "))
112
+
113
+ val missed = run("smoke.err", "err", identity)
114
+ check("a missing expected error fails", missed.failures.nonEmpty,
115
+ "a missing expected error went unreported")
116
+ check("the failure names the missing error",
117
+ missed.failures.exists(_.contains("expected error did not occur")),
118
+ "expected an expected-error failure, got: " + missed.failures.mkString(" | "))
119
+
120
+ // 4. Absence, BOTH kinds (OmniResolver decision 7). Neither is ever a
121
+ // silent pass, and the two are not the same fact.
122
+ //
123
+ // 4a. The section is carried and the GROUP is gone. That is a corpus
124
+ // regression - it must FAIL, because a skip would let the group stop
125
+ // running behind a green banner.
126
+ val gone = new OmniReport("")
127
+ val gonerun = freshrun("smoke", gone)
128
+ gonerun.runset("smoke.nosuch", gonerun.group("nosuch"))(inc)
129
+ check("a group missing from a section this corpus carries fails",
130
+ gone.failures.exists(_.contains("smoke.nosuch")) && 0 == gone.passed,
131
+ "absent group: failures=" + gone.failures.mkString(" | ") +
132
+ " passed=" + gone.passed + " skipped=" + gone.skipped.mkString(","))
133
+
134
+ // 4b. The whole SECTION is missing - a project corpus older than the
135
+ // section (struct.nullsem, fleet-wide). SKIPPED and NAMED, not
136
+ // failed, and never counted as a pass.
137
+ val older = new OmniReport("")
138
+ val olderrun = freshrun("smoke", older)
139
+ olderrun.runset("nosuch.basic", olderrun.group("nosuch", "basic"))(inc)
140
+ check("a group whose whole section is absent is skipped, not passed",
141
+ older.skipped.exists(_.startsWith("nosuch.basic")) && 0 == older.passed &&
142
+ older.failures.isEmpty,
143
+ "absent section: skipped=" + older.skipped.mkString(",") +
144
+ " passed=" + older.passed + " failures=" + older.failures.mkString(" | "))
145
+
146
+ // 4c. `compare` - the single-node groups (merge/basic, inject/basic,
147
+ // transform/basic, walk/log) - is held to the SAME rule. It used to
148
+ // have no guard at all: an absent node became Noval on both sides,
149
+ // fixjson rendered both as NULLMARK, and NULLMARK deep-equals
150
+ // NULLMARK, so three struct groups could stop running and leave a run
151
+ // bit-identical to a healthy one.
152
+ val nonode = new OmniReport("")
153
+ val nonoderun = freshrun("smoke", nonode)
154
+ nonoderun.compare("smoke.nonode", nonoderun.group("nonode"), Noval, Noval)
155
+ check("compare fails an absent single-node group, never passes it",
156
+ nonode.failures.exists(_.contains("smoke.nonode")) && 0 == nonode.passed,
157
+ "absent compare node: failures=" + nonode.failures.mkString(" | ") +
158
+ " passed=" + nonode.passed + " skipped=" + nonode.skipped.mkString(","))
159
+
160
+ // 4d. A node that IS there but carries no in/out pair compares nothing
161
+ // for the same reason, so the shape is checked before the values.
162
+ val hollow = new OmniReport("")
163
+ val hollowrun = freshrun("smoke", hollow)
164
+ hollowrun.compare("smoke.hollow", hollowrun.group("bad"), Noval, Noval)
165
+ check("compare fails a node with no in/out pair",
166
+ hollow.failures.exists(_.contains("no in/out")) && 0 == hollow.passed,
167
+ "hollow compare node: failures=" + hollow.failures.mkString(" | ") +
168
+ " passed=" + hollow.passed)
169
+
170
+ // 4e. And a WELL-FORMED single-node group still passes, so 4c/4d are a
171
+ // guard and not a blanket refusal.
172
+ val onenode = new OmniReport("")
173
+ val onenoderun = freshrun("smoke", onenode)
174
+ onenoderun.compare("smoke.node", onenoderun.group("node"),
175
+ OmniResolver.tostruct(onenoderun.group("node").node.get("out")),
176
+ OmniResolver.tostruct(onenoderun.group("node").node.get("in")))
177
+ check("compare passes a well-formed single-node group",
178
+ onenode.failures.isEmpty && 1 == onenode.passed,
179
+ "single node: failures=" + onenode.failures.mkString(" | ") +
180
+ " passed=" + onenode.passed)
181
+
182
+ // 5. A report that checked NOTHING must fail, not pass: a whole corpus
183
+ // section going missing is exactly how a suite goes vacuously green.
184
+ val empty = new OmniReport("")
185
+ empty.requireran("nothing")
186
+ check("a run that checked nothing fails", empty.failures.nonEmpty,
187
+ "an empty run passed - a missing corpus section would go unnoticed")
188
+
189
+ println("\nOMNI SMOKE FAIL " + nfail)
190
+ if (0 < nfail) System.exit(1)
191
+ }
192
+ }
@@ -1,10 +1,14 @@
1
1
  // Primary-utility corpus driver.
2
2
  //
3
3
  // Drives every `primary` section of the shared corpus (../.sdk/test/test.json)
4
- // through this SDK's utilities, the way the ts reference harness does. The
5
- // match/args/err machinery is reused from Runner (StructCorpus.scala); what
6
- // this file adds is the bridge between the corpus Value ADT and the SDK's
7
- // Java-collection world, plus a live Context built from each corpus entry.
4
+ // through this SDK's utilities, the way the ts reference harness does.
5
+ //
6
+ // The ENGINE is the vendored @voxgig/omni runner (sdktest/vendor/omni),
7
+ // reached through sdktest/OmniResolver.scala this file was REWRITTEN IN
8
+ // PLACE by the vendor-tag rollout and keeps its name, so no emitted call site
9
+ // moved. What it still owns is the bridge only this SDK can supply: the
10
+ // corpus Value ADT <-> the SDK's Java-collection world, plus a live Context
11
+ // built from each corpus entry and published back for `match` to read.
8
12
 
9
13
  import voxgig.struct.{clone as sclone, *}
10
14
  import SCALAPACKAGE.core.*
@@ -31,6 +35,8 @@ object PrimaryCorpus {
31
35
  case VNum(n) =>
32
36
  // The corpus writes whole numbers as JSON integers; handing the SDK a
33
37
  // Double turned "1" into "1.0" everywhere it reached a URL or header.
38
+ // (omni parses every JSON number as a Double, so the narrowing has to
39
+ // happen on THIS boundary, not the omni one.)
34
40
  if (n == Math.floor(n) && !n.isInfinite) java.lang.Long.valueOf(n.toLong)
35
41
  else java.lang.Double.valueOf(n)
36
42
  case _ => null
@@ -72,15 +78,22 @@ object PrimaryCorpus {
72
78
 
73
79
  // ---- corpus access -----------------------------------------------------
74
80
 
75
- private var CORPUS: Value = Noval
81
+ // The whole corpus, and the omni runner built over it. One RunnerPack for
82
+ // the run; a section is resolved from it on demand (omni's own
83
+ // `primary.<name>` lookup, so the section names below ARE the corpus
84
+ // lookup keys).
85
+ private var ALL: voxgig.omni.Json = voxgig.omni.Json.Absent
86
+ private var PACK: voxgig.omni.RunnerPack = null
87
+ private var REPORT: OmniReport = null
76
88
 
77
- private def sectionBasic(name: String): Value = vget(vget(vget(CORPUS, "primary"), name), "basic")
89
+ private def sectionRun(name: String): OmniRun =
90
+ OmniResolver.section(PACK, ALL, name, REPORT)
78
91
 
79
92
  // makeSpec and prepareAuth read defaults off the CLIENT, as the ts reference
80
93
  // does via client.options(), so a section's DEF.setup cannot reach them
81
94
  // through ctx.options — those sections get their own client.
82
- private def sectionSetup(name: String): Value =
83
- vget(vget(vget(vget(vget(CORPUS, "primary"), name), "DEF"), "setup"), "a")
95
+ private def sectionSetup(run: OmniRun): Value =
96
+ OmniResolver.tostruct(run.set("DEF", "setup", "a"))
84
97
 
85
98
  // ---- live context from a corpus map ------------------------------------
86
99
 
@@ -151,11 +164,17 @@ object PrimaryCorpus {
151
164
 
152
165
  // The match reads the corpus map while the utilities mutate the live objects
153
166
  // hanging off the context, so without this every ctx.* assertion reads null.
167
+ //
168
+ // The map written here is args(0), which the resolver converts BACK into
169
+ // omni's own argument list after the call — that is why the `match: {ctx:
170
+ // ...}` assertions are retargeted onto `match: {args: {"0": ...}}`
171
+ // (OmniResolver decision 3): omni's Json is an immutable value model, so
172
+ // the copy it keeps in `entry.ctx` can never see these writes.
154
173
  private def publishCtx(ctxmap: Value, ctx: Context): Unit = ctxmap match {
155
174
  case VMap(m) =>
156
175
  if (ctx.spec != null) m.put("spec", specValue(ctx.spec))
157
176
  if (ctx.result != null) m.put("result", resultValue(ctx.result))
158
- if (ctx.response != null) m.put("response", VStr(Runner.EXISTSMARK))
177
+ if (ctx.response != null) m.put("response", VStr(OmniResolver.EXISTSMARK))
159
178
  case _ =>
160
179
  }
161
180
 
@@ -191,29 +210,37 @@ object PrimaryCorpus {
191
210
 
192
211
  private def argAt(args: Seq[Value], i: Int): Value = if (i < args.length) args(i) else Noval
193
212
 
194
- // A section driven with a ctx built from the corpus entry.
195
- private def runset(name: String, client: ProjectNameSDK)(f: (Context, Seq[Value]) => Value): Unit =
196
- Runner.runSet(name, sectionBasic(name), (args: Seq[Value]) => {
213
+ // A section driven with a ctx built from the corpus entry. `run.group`
214
+ // rather than `run.set`: the group carries its parent, so a `basic` that
215
+ // has gone missing out of a section this corpus carries FAILS instead of
216
+ // being skipped past (OmniResolver decision 7).
217
+ private def runset(name: String, client: ProjectNameSDK)(f: (Context, Seq[Value]) => Value): Unit = {
218
+ val run = sectionRun(name)
219
+ run.runsetargs(name, run.group("basic")) { args =>
197
220
  val ctxmap = argAt(args, 0)
198
221
  val ctx = corpusCtx(client, ctxmap)
199
222
  val out = f(ctx, args)
200
223
  publishCtx(ctxmap, ctx)
201
224
  out
202
- })
225
+ }
226
+ }
203
227
 
204
228
  // A section that takes a bare map or explicit args rather than a ctx.
205
- private def runsetArgs(name: String)(f: Seq[Value] => Value): Unit =
206
- Runner.runSet(name, sectionBasic(name), f)
229
+ private def runsetArgs(name: String)(f: Seq[Value] => Value): Unit = {
230
+ val run = sectionRun(name)
231
+ run.runsetargs(name, run.group("basic"))(f)
232
+ }
207
233
 
208
234
  private def clientFor(name: String, shared: ProjectNameSDK): ProjectNameSDK =
209
- sectionSetup(name) match {
235
+ sectionSetup(sectionRun(name)) match {
210
236
  case m @ VMap(_) => ProjectNameSDK.testSDK(null, jmap(m))
211
237
  case _ => shared
212
238
  }
213
239
 
214
240
  def run(testfile: String): Int = {
215
- val src = new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(testfile)), "UTF-8")
216
- CORPUS = Runner.jsonRead(src)
241
+ ALL = OmniResolver.loadspec(testfile)
242
+ PACK = OmniResolver.makeRunner(ALL)
243
+ REPORT = new OmniReport("PRIMARY CORPUS: ")
217
244
 
218
245
  val sdk = ProjectNameSDK.testSDK()
219
246
  val u = sdk.getUtility()
@@ -282,7 +309,8 @@ object PrimaryCorpus {
282
309
  VMap(m)
283
310
  }
284
311
 
285
- Runner.reportPrimary()
312
+ REPORT.requireran("primary")
313
+ REPORT.finish()
286
314
  }
287
315
  }
288
316
 
@@ -0,0 +1,229 @@
1
+ // VENDORED: @voxgig/omni sdk-20260904-1610-0 (scala/src/Json.scala)
2
+ // Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // The omni JSON value model, with a small in-tree parser.
5
+ //
6
+ // The omni runner must be able to test *any* library, and must add no
7
+ // third-party dependencies, so it carries its own JSON support rather than
8
+ // borrowing circe, upickle or the system under test.
9
+
10
+ package voxgig.omni
11
+
12
+ import scala.collection.immutable.ListMap
13
+
14
+ /** A JSON value. `Absent` is the marker for "no value at all", as distinct
15
+ * from `Null`.
16
+ */
17
+ enum Json:
18
+ case Absent
19
+ case Null
20
+ case Bool(value: Boolean)
21
+ case Num(value: Double)
22
+ case Str(value: String)
23
+ case JList(value: List[Json])
24
+ case JMap(value: ListMap[String, Json])
25
+
26
+ def ismap: Boolean = this match
27
+ case JMap(_) => true
28
+ case _ => false
29
+
30
+ def islist: Boolean = this match
31
+ case JList(_) => true
32
+ case _ => false
33
+
34
+ def isnode: Boolean = ismap || islist
35
+
36
+ def isabsent: Boolean = this match
37
+ case Absent => true
38
+ case _ => false
39
+
40
+ def isnull: Boolean = this match
41
+ case Null => true
42
+ case _ => false
43
+
44
+ def isnone: Boolean = isabsent || isnull
45
+
46
+ def isnum: Boolean = this match
47
+ case Num(_) => true
48
+ case _ => false
49
+
50
+ def isstr: Boolean = this match
51
+ case Str(_) => true
52
+ case _ => false
53
+
54
+ def asnum: Option[Double] = this match
55
+ case Num(value) => Some(value)
56
+ case _ => None
57
+
58
+ def asstr: Option[String] = this match
59
+ case Str(value) => Some(value)
60
+ case _ => None
61
+
62
+ def aslist: Option[List[Json]] = this match
63
+ case JList(value) => Some(value)
64
+ case _ => None
65
+
66
+ def asmap: Option[ListMap[String, Json]] = this match
67
+ case JMap(value) => Some(value)
68
+ case _ => None
69
+
70
+ /** Read a map entry. Returns Absent when missing. */
71
+ def get(key: String): Json = this match
72
+ case JMap(value) => value.getOrElse(key, Absent)
73
+ case _ => Absent
74
+
75
+ /** Is a map key present at all (even with a null value)? */
76
+ def has(key: String): Boolean = this match
77
+ case JMap(value) => value.contains(key)
78
+ case _ => false
79
+
80
+ /** A copy of this map with one entry set. */
81
+ def set(key: String, entry: Json): Json = this match
82
+ case JMap(value) => JMap(value.updated(key, entry))
83
+ case other => other
84
+
85
+ object Json:
86
+ def map(entries: (String, Json)*): Json = JMap(ListMap.from(entries))
87
+
88
+ def list(entries: Json*): Json = JList(entries.toList)
89
+
90
+ def num(value: Double): Json = Num(value)
91
+
92
+ def str(value: String): Json = Str(value)
93
+
94
+ /** Parse JSON text into the omni value model. */
95
+ def parse(text: String): Json =
96
+ val parser = Parser(text)
97
+ parser.skipws()
98
+ val value = parser.value()
99
+ parser.skipws()
100
+ if !parser.done then throw OmniError(s"omni: trailing JSON content at ${parser.pos}")
101
+ value
102
+
103
+ private class Parser(val text: String):
104
+ var pos: Int = 0
105
+
106
+ def done: Boolean = pos >= text.length
107
+
108
+ def skipws(): Unit =
109
+ while !done && (text(pos) == ' ' || text(pos) == '\t' || text(pos) == '\n' || text(pos) == '\r')
110
+ do pos += 1
111
+
112
+ def value(): Json =
113
+ if done then throw OmniError("omni: unexpected end of JSON")
114
+
115
+ text(pos) match
116
+ case '{' => mapval()
117
+ case '[' => listval()
118
+ case '"' => Json.Str(strval())
119
+ case 't' => word("true"); Json.Bool(true)
120
+ case 'f' => word("false"); Json.Bool(false)
121
+ case 'n' => word("null"); Json.Null
122
+ case _ => numval()
123
+
124
+ def word(want: String): Unit =
125
+ if !text.startsWith(want, pos) then throw OmniError(s"omni: bad JSON literal at $pos")
126
+ pos += want.length
127
+
128
+ def mapval(): Json =
129
+ var out = ListMap.empty[String, Json]
130
+ pos += 1 // {
131
+
132
+ skipws()
133
+ if !done && text(pos) == '}' then
134
+ pos += 1
135
+ return Json.JMap(out)
136
+
137
+ var running = true
138
+ while running do
139
+ skipws()
140
+ val key = strval()
141
+ skipws()
142
+
143
+ if done || text(pos) != ':' then throw OmniError(s"omni: expected ':' at $pos")
144
+ pos += 1
145
+
146
+ skipws()
147
+ out = out.updated(key, value())
148
+ skipws()
149
+
150
+ if done then throw OmniError("omni: unterminated JSON object")
151
+ if text(pos) == ',' then pos += 1
152
+ else if text(pos) == '}' then
153
+ pos += 1
154
+ running = false
155
+ else throw OmniError(s"omni: expected ',' or '}' at $pos")
156
+
157
+ Json.JMap(out)
158
+
159
+ def listval(): Json =
160
+ val out = scala.collection.mutable.ListBuffer.empty[Json]
161
+ pos += 1 // [
162
+
163
+ skipws()
164
+ if !done && text(pos) == ']' then
165
+ pos += 1
166
+ return Json.JList(out.toList)
167
+
168
+ var running = true
169
+ while running do
170
+ skipws()
171
+ out += value()
172
+ skipws()
173
+
174
+ if done then throw OmniError("omni: unterminated JSON array")
175
+ if text(pos) == ',' then pos += 1
176
+ else if text(pos) == ']' then
177
+ pos += 1
178
+ running = false
179
+ else throw OmniError(s"omni: expected ',' or ']' at $pos")
180
+
181
+ Json.JList(out.toList)
182
+
183
+ def strval(): String =
184
+ if done || text(pos) != '"' then throw OmniError(s"omni: expected string at $pos")
185
+ pos += 1
186
+
187
+ val out = StringBuilder()
188
+
189
+ while !done do
190
+ val ch = text(pos)
191
+ pos += 1
192
+
193
+ if ch == '"' then return out.toString
194
+
195
+ if ch != '\\' then out.append(ch)
196
+ else
197
+ if done then throw OmniError("omni: unterminated JSON string")
198
+ val escape = text(pos)
199
+ pos += 1
200
+ escape match
201
+ case '"' => out.append('"')
202
+ case '\\' => out.append('\\')
203
+ case '/' => out.append('/')
204
+ case 'b' => out.append('\b')
205
+ case 'f' => out.append('\f')
206
+ case 'n' => out.append('\n')
207
+ case 'r' => out.append('\r')
208
+ case 't' => out.append('\t')
209
+ case 'u' =>
210
+ if pos + 4 > text.length then throw OmniError("omni: bad JSON unicode escape")
211
+ out.append(Integer.parseInt(text.substring(pos, pos + 4), 16).toChar)
212
+ pos += 4
213
+ case other => throw OmniError(s"omni: bad JSON escape [$other] at $pos")
214
+
215
+ throw OmniError("omni: unterminated JSON string")
216
+
217
+ def numval(): Json =
218
+ val start = pos
219
+
220
+ if !done && (text(pos) == '-' || text(pos) == '+') then pos += 1
221
+
222
+ while !done && (text(pos).isDigit || text(pos) == '.' || text(pos) == 'e' ||
223
+ text(pos) == 'E' || text(pos) == '-' || text(pos) == '+')
224
+ do pos += 1
225
+
226
+ val span = text.substring(start, pos)
227
+ span.toDoubleOption match
228
+ case Some(value) => Json.Num(value)
229
+ case None => throw OmniError(s"omni: bad JSON number [$span] at $start")