@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
@@ -1,15 +1,22 @@
1
1
  # Makefile for the ProjectName OCaml SDK (generated by @voxgig/sdkgen).
2
2
  #
3
3
  # The SDK is dependency-free: it compiles with the stock bytecode compiler
4
- # (ocamlc) — no opam packages, no dune. Two test executables are built:
4
+ # (ocamlc) — no opam packages, no dune. Four test executables are built:
5
5
  # run_sdk_test — the SDK pipeline + feature suite (Testutil harness)
6
+ # run_omni_smoke — the vendored omni runner's own failure paths
6
7
  # run_struct_corpus — the shared voxgig/struct JSON corpus
8
+ # run_primary_corpus — the shared primary-utility JSON corpus
9
+ #
10
+ # The two corpus suites run on the VENDORED @voxgig/omni engine
11
+ # (test/vendor/omni/omni.ml), driven through its native API by the local
12
+ # adapter test/omni_resolver.ml. Never edit anything under test/vendor —
13
+ # it is resynced from upstream by the sdkgen vendor tool.
7
14
  #
8
15
  # Entity modules (sdk_entity_*.ml) and per-entity tests are discovered by
9
16
  # wildcard; they are mutually independent so their relative order is free.
10
17
 
11
18
  OCAMLC = ocamlc
12
- INC = -I utility -I . -I test
19
+ INC = -I utility -I . -I test -I test/vendor/omni
13
20
 
14
21
  # The shared JSON corpus lives in the sibling .sdk workspace.
15
22
  CORPUS = ../.sdk/test/test.json
@@ -17,6 +24,10 @@ CORPUS = ../.sdk/test/test.json
17
24
  RUNTIME = utility/vregex.ml utility/voxgig_struct.ml sdk_json.ml \
18
25
  sdk_types.ml sdk_helpers.ml sdk_runtime.ml sdk_features.ml
19
26
 
27
+ # The vendored corpus engine plus the adapter that drives it. Order matters:
28
+ # the adapter references the vendored module.
29
+ OMNI = test/vendor/omni/omni.ml test/omni_resolver.ml
30
+
20
31
  ENTITIES = $(sort $(wildcard sdk_entity_*.ml))
21
32
 
22
33
  SDK = $(RUNTIME) sdk_config.ml $(ENTITIES) sdk_client.ml sdk_error.ml
@@ -33,32 +44,45 @@ SDK_TEST = $(RUNTIME) sdk_config.ml $(ENTITIES) sdk_client.ml sdk_error.ml \
33
44
  test/t_pipeline.ml test/t_feature.ml test/custom_utility.ml \
34
45
  $(ENTITY_TESTS) $(DOC_TESTS) test/t_main.ml
35
46
 
36
- CORPUS_SRC = utility/vregex.ml utility/voxgig_struct.ml sdk_json.ml \
37
- test/corpus_runner.ml test/struct_corpus.ml
47
+ # The struct corpus needs only the struct library and the corpus engine —
48
+ # omni carries its own JSON reader and regex engine, so nothing of the SDK
49
+ # runtime is linked here.
50
+ CORPUS_SRC = utility/vregex.ml utility/voxgig_struct.ml \
51
+ $(OMNI) test/struct_corpus.ml
38
52
 
39
53
  # The primary-utility corpus needs the whole SDK, because it drives the SDK's
40
54
  # own request-shaping utilities — not just the struct library.
41
55
  PRIMARY_SRC = $(RUNTIME) sdk_config.ml $(ENTITIES) sdk_client.ml sdk_error.ml \
42
- test/corpus_runner.ml test/primary_utility_test.ml
56
+ $(OMNI) test/primary_utility_test.ml
57
+
58
+ # The runner's own smoke test: an in-memory spec, no fixture file.
59
+ SMOKE_SRC = utility/vregex.ml utility/voxgig_struct.ml \
60
+ $(OMNI) test/omni_smoke_test.ml
43
61
 
44
- .PHONY: test test-sdk test-corpus test-primary build lint clean
62
+ .PHONY: test test-sdk test-omni test-corpus test-primary build lint clean
45
63
 
46
- test: test-sdk test-corpus test-primary
64
+ test: test-sdk test-omni test-corpus test-primary
47
65
 
48
66
  test-sdk: run_sdk_test
49
67
  ./run_sdk_test
50
68
 
69
+ test-omni: run_omni_smoke
70
+ ./run_omni_smoke
71
+
51
72
  test-corpus: run_struct_corpus
52
73
  ./run_struct_corpus $(CORPUS)
53
74
 
75
+ test-primary: run_primary_corpus
76
+ ./run_primary_corpus $(CORPUS)
77
+
54
78
  run_sdk_test: $(SDK_TEST)
55
79
  $(OCAMLC) $(INC) $(SDK_TEST) -o run_sdk_test
56
80
 
57
- run_struct_corpus: $(CORPUS_SRC)
58
- $(OCAMLC) -I utility -I test $(CORPUS_SRC) -o run_struct_corpus
81
+ run_omni_smoke: $(SMOKE_SRC)
82
+ $(OCAMLC) $(INC) $(SMOKE_SRC) -o run_omni_smoke
59
83
 
60
- test-primary: run_primary_corpus
61
- ./run_primary_corpus $(CORPUS)
84
+ run_struct_corpus: $(CORPUS_SRC)
85
+ $(OCAMLC) $(INC) $(CORPUS_SRC) -o run_struct_corpus
62
86
 
63
87
  run_primary_corpus: $(PRIMARY_SRC)
64
88
  $(OCAMLC) $(INC) $(PRIMARY_SRC) -o run_primary_corpus
@@ -71,4 +95,5 @@ lint:
71
95
 
72
96
  clean:
73
97
  rm -f *.cmi *.cmo test/*.cmi test/*.cmo utility/*.cmi utility/*.cmo \
74
- run_sdk_test run_struct_corpus a.out
98
+ test/vendor/omni/*.cmi test/vendor/omni/*.cmo \
99
+ run_sdk_test run_omni_smoke run_struct_corpus run_primary_corpus a.out
@@ -0,0 +1,284 @@
1
+ (* The corpus test runner: vendored @voxgig/omni driven through its NATIVE
2
+ * API (`Omni.make_runner` / `runpack.runsetflags_args`), presented to the
3
+ * corpus suites in the shape they already use (`spec`, `getset`, `runset`,
4
+ * `runset_args`, `report`). No compat shim is vendored: the adapter below IS
5
+ * the whole bridge, per language, per the vendor-tag rollout
6
+ * (docs/design/vendor-tag-rollout.md, Decision 4). It supersedes the whole of
7
+ * the retired test/corpus_runner.ml — engine AND the handful of value
8
+ * helpers that sat beside it, which are re-homed here rather than left in a
9
+ * file whose name no longer describes anything.
10
+ *
11
+ * It is the OCaml peer of tm/rust/tests/omni_resolver/mod.rs and
12
+ * tm/java/test/OmniResolver.java: the portable answer for a statically typed
13
+ * port with no reflection — omni's `provider` is closure-based, so nothing
14
+ * in omni ever has to name this SDK's types.
15
+ *
16
+ * OCaml-specific decisions, each load-bearing:
17
+ *
18
+ * 1. TWO VALUE MODELS, ONE CONVERSION PAIR. `Omni.json` and the SDK's
19
+ * `Voxgig_struct.value` are different variants, so every crossing is an
20
+ * explicit `tostruct` / `toomni`. `Omni.Absent` <-> `Voxgig_struct.Noval`
21
+ * and `Omni.Null` <-> `Voxgig_struct.Null` keep the two no-value states
22
+ * the corpus distinguishes apart — which is also why OCaml needs neither
23
+ * go's `novalargs` spec rewrite nor lua/php's compat shim for the
24
+ * corpus's ZERO-ARGUMENT entries. An entry with no `in`/`args`/`ctx`
25
+ * reaches the subject as one `Omni.Absent`, and that becomes exactly this
26
+ * port's own no-value, `Noval` — so `typify` answers T_NOVAL where a null
27
+ * would answer T_NULL, and the arity correction is structural rather than
28
+ * a special case.
29
+ *
30
+ * 2. ARGUMENTS ARE WRITTEN BACK. `Omni.subject_args` (`json array -> json`)
31
+ * is the channel omni provides for a subject that MUTATES its arguments,
32
+ * which `match: {args: ...}` then asserts on — `struct/minor/setpath`
33
+ * (7 entries) and `struct/merge/integrity` (6) turn on it. Decision 1
34
+ * handed the subject a CONVERTED COPY, and `Omni.json` is immutable, so
35
+ * every subject here runs through `runsetflags_args` and the wrapper
36
+ * converts the (possibly mutated) values back into omni's own array
37
+ * after the call. A dynamic port's shim gets this free from shared object
38
+ * identity; OCaml cannot.
39
+ *
40
+ * 3. `match: {ctx: ...}` IS RETARGETED ONTO `match: {args: {"0": ...}}`.
41
+ * The one place this port cannot follow canonical omni as written, and a
42
+ * VALUE-SEMANTICS consequence, not a choice. omni's `drive` stores the
43
+ * contextified first argument as `entry.ctx` and as `args[0]` — two
44
+ * copies of an immutable value — and `checkresult` reads `entry.ctx` for
45
+ * the ctx base. A subject's post-call writes (decision 2) can never reach
46
+ * that copy, and NINE `primary` entries assert exactly the post-call
47
+ * state (makeRequest, makeResponse, makeSpec, param, prepareAuth,
48
+ * resultBody, resultHeaders, transformRequest, transformResponse).
49
+ * `args[0]` IS the ctx of a ctx entry (omni itself sets
50
+ * `args = [entry.ctx]`), and the runner reads that array back after an
51
+ * args-subject call — so moving the assertion from `ctx` to `args.0`
52
+ * reads the SAME map, post-call, and preserves every leaf: nothing is
53
+ * dropped, weakened or skipped. `retargetctx` below does that rewrite on
54
+ * the spec handed to the engine. Rust and Swift face the identical
55
+ * problem and answer it identically; the upstream fix is for the port's
56
+ * `drive` to re-point `entry.ctx` at the returned `args[0]`, the way JS
57
+ * object identity does implicitly — a follow-up, never a hand-edit of a
58
+ * vendored file.
59
+ *
60
+ * 4. KEY ORDER AND NUMBERS NEED NOTHING. omni's OCaml port models a map as
61
+ * an ordered assoc list built in document order by its own parser, and
62
+ * compares maps order-independently (`deepequal`); this port's `omap` is
63
+ * also insertion-ordered. Both read every JSON number as `float`. So the
64
+ * round trip is lossless in both directions — unlike rust (BTreeMap) or
65
+ * go/csharp/java (integral doubles).
66
+ *
67
+ * 5. SUBJECT FAILURES ARRIVE AS `Failure`. omni's `errmessage` understands
68
+ * `Omni_error` and `Failure` and renders anything else through
69
+ * `Printexc`, which would turn `Voxgig_struct.Struct_error "Expected
70
+ * string, ..."` into `Voxgig_struct.Struct_error("Expected string, ...")`
71
+ * and break the 50-odd `validate`/`transform` entries that match on the
72
+ * message. So the wrappers translate `Struct_error` to `Failure`.
73
+ * `Omni_error` is deliberately NOT used: omni re-raises that as a runner
74
+ * error rather than treating it as a candidate for an `err` expectation.
75
+ * An SDK-branded error is translated the same way at the primary suite's
76
+ * call site, which is where `Sdk_types` is in scope.
77
+ *
78
+ * 6. FAILURES ARE ACCUMULATED, NOT RAISED. omni stops a group at its first
79
+ * bad entry and raises; the corpus suites report the whole corpus in one
80
+ * run. `drive` records the message and carries on, so one run still names
81
+ * every broken GROUP. A group that is ABSENT from the corpus, or present
82
+ * with an empty set, is recorded in `skipped` and printed by `report` —
83
+ * named out loud, never a silent vacuous pass. *)
84
+
85
+ module O = Omni
86
+ module V = Voxgig_struct
87
+
88
+ (* The sentinels, under the names the corpus suites already use. *)
89
+ let nullmark = O.nullmark
90
+ let undefmark = O.undefmark
91
+ let existsmark = O.existsmark
92
+
93
+ (* ---------------- value model conversion (decision 1) ---------------- *)
94
+
95
+ let rec tostruct (value : O.json) : V.value =
96
+ match value with
97
+ | O.Absent -> V.Noval
98
+ | O.Null -> V.Null
99
+ | O.Bool flag -> V.Bool flag
100
+ | O.Num entry -> V.Num entry
101
+ | O.Str text -> V.Str text
102
+ | O.JList entries -> V.List (ref (List.map tostruct entries))
103
+ | O.JMap entries -> V.Map { V.entries = List.map (fun (k, e) -> (k, tostruct e)) entries }
104
+
105
+ let rec toomni (value : V.value) : O.json =
106
+ match value with
107
+ | V.Noval -> O.Absent
108
+ | V.Null -> O.Null
109
+ | V.Bool flag -> O.Bool flag
110
+ | V.Num entry -> O.Num entry
111
+ | V.Str text -> O.Str text
112
+ | V.List entries -> O.JList (List.map toomni !entries)
113
+ | V.Map m -> O.JMap (List.map (fun (k, e) -> (k, toomni e)) m.V.entries)
114
+ (* Neither can appear in a JSON corpus, and no subject here returns one;
115
+ * rendered rather than dropped so an unexpected one FAILS visibly instead
116
+ * of vanishing into a null. *)
117
+ | V.Func _ -> O.Str "[Function]"
118
+ | V.Sentinel tag -> O.Str tag
119
+
120
+ (* ---------------- value helpers (re-homed from corpus_runner) -------- *)
121
+
122
+ (* Raw property read: absent answers Noval, never an alt. *)
123
+ let getp (value : V.value) (key : string) : V.value =
124
+ match value with
125
+ | V.Map m -> (match V.omap_get m key with Some x -> x | None -> V.Noval)
126
+ | _ -> V.Noval
127
+
128
+ let hasp (value : V.value) (key : string) : bool =
129
+ match value with V.Map m -> V.omap_has m key | _ -> false
130
+
131
+ let omap_v (pairs : (string * V.value) list) : V.value =
132
+ let m = V.empty_map () in
133
+ List.iter (fun (k, v) -> ignore (V.setprop m (V.Str k) v)) pairs;
134
+ m
135
+
136
+ let default_injdef () : V.injdef =
137
+ { V.d_meta = V.Noval; V.d_extra = V.Noval; V.d_errs = V.Noval; V.d_modify = None;
138
+ V.d_handler = None; V.d_base = V.Noval; V.d_dparent = V.Noval; V.d_dpath = V.Noval;
139
+ V.d_key = V.Noval }
140
+
141
+ (* ---------------- the run ------------------------------------------- *)
142
+
143
+ type run = {
144
+ pack : O.runpack;
145
+ mutable pass : int; (* corpus CASES executed and passed *)
146
+ mutable groups : int; (* corpus groups driven *)
147
+ mutable failures : string list;
148
+ mutable skipped : string list;
149
+ }
150
+
151
+ (* Every hook is optional and this SDK needs none of them: subjects are
152
+ * passed explicitly per group (so `subject` is unused), the primary suite
153
+ * builds its own per-section client from the corpus DEF.setup block (so
154
+ * `client`/`inject` are unused), contexts stay maps across the runner
155
+ * (decision 3, so `contextify` is unused), and no corpus entry asserts on
156
+ * an error CODE, so omni's own {name,message} errify is exactly right. *)
157
+ let provider = O.empty_provider
158
+
159
+ let make_run_spec (spec : O.json) (name : string) : run =
160
+ let runner = O.make_runner_spec spec provider in
161
+ { pack = runner name None; pass = 0; groups = 0; failures = []; skipped = [] }
162
+
163
+ let make_run (testfile : string) (name : string) : run =
164
+ make_run_spec (O.loadspec testfile) name
165
+
166
+ (* The resolved section of the spec (omni's `primary.<name>`, then `<name>`,
167
+ * then the whole spec). *)
168
+ let spec (r : run) : O.json = r.pack.O.spec
169
+
170
+ (* A named group, by a path of keys from the resolved section. *)
171
+ let getset (r : run) (keys : string list) : O.json =
172
+ List.fold_left (fun acc key -> O.jget acc key) (spec r) keys
173
+
174
+ (* A corpus group authored as ONE `{in, out}` pair rather than a set —
175
+ * `merge/basic`, `inject/basic`, `transform/basic`, `walk/log`. Wrapped into
176
+ * a one-entry set so it runs through the SAME engine as everything else
177
+ * instead of a bespoke code path beside it. `out` selects a sub-path of the
178
+ * authored `out` (walk/log asserts only on `out.after`). *)
179
+ let single ?(out = []) (node : O.json) : O.json =
180
+ let expected = List.fold_left (fun acc key -> O.jget acc key) (O.jget node "out") out in
181
+ O.JMap [ ("set", O.JList [ O.JMap [ ("in", O.jget node "in"); ("out", expected) ] ]) ]
182
+
183
+ (* ---------------- decision 3: retarget match.ctx --------------------- *)
184
+
185
+ let retargetctx (testspec : O.json) : O.json =
186
+ match testspec with
187
+ | O.JMap fields -> (
188
+ match O.jget testspec "set" with
189
+ | O.JList entries ->
190
+ let rewrite raw =
191
+ let check = O.jget raw "match" in
192
+ if O.ismap raw && O.ismap check && O.jhas check "ctx" && not (O.jhas check "args")
193
+ && (O.jhas raw "ctx" || O.jhas raw "args")
194
+ then begin
195
+ (* Drop the original leaf: it would read the stale pre-call copy
196
+ * omni keeps in `entry.ctx`. *)
197
+ let trimmed =
198
+ match check with
199
+ | O.JMap kv -> O.JMap (List.filter (fun (k, _) -> k <> "ctx") kv)
200
+ | other -> other
201
+ in
202
+ let retargeted = O.jset trimmed "args" (O.JMap [ ("0", O.jget check "ctx") ]) in
203
+ O.jset raw "match" retargeted
204
+ end
205
+ else raw
206
+ in
207
+ let rewritten = O.JList (List.map rewrite entries) in
208
+ O.JMap (List.map (fun (k, v) -> if k = "set" then (k, rewritten) else (k, v)) fields)
209
+ | _ -> testspec)
210
+ | _ -> testspec
211
+
212
+ (* ---------------- subject wrappers (decisions 2 and 5) --------------- *)
213
+
214
+ let guard (call : unit -> V.value) : V.value =
215
+ try call () with V.Struct_error message -> raise (Failure message)
216
+
217
+ let wrap1 (subject : V.value -> V.value) : O.json array -> O.json =
218
+ fun cells ->
219
+ let first = if 0 < Array.length cells then tostruct cells.(0) else V.Noval in
220
+ let res = guard (fun () -> subject first) in
221
+ if 0 < Array.length cells then cells.(0) <- toomni first;
222
+ toomni res
223
+
224
+ let wrapargs (subject : V.value array -> V.value) : O.json array -> O.json =
225
+ fun cells ->
226
+ let vals = Array.map tostruct cells in
227
+ let res = guard (fun () -> subject vals) in
228
+ Array.iteri (fun index v -> cells.(index) <- toomni v) vals;
229
+ toomni res
230
+
231
+ (* ---------------- driving one group ---------------------------------- *)
232
+
233
+ let entrycount (node : O.json) : int =
234
+ match O.jget node "set" with O.JList entries -> List.length entries | _ -> -1
235
+
236
+ let oneline (text : string) : string =
237
+ String.concat " | " (String.split_on_char '\n' text)
238
+
239
+ let drive (r : run) (nullflag : bool) (label : string) (node : O.json)
240
+ (call : O.json array -> O.json) : unit =
241
+ let count = entrycount node in
242
+ if count <= 0 then
243
+ (* Absent, malformed, or empty. NAMED, never silent: a group that stopped
244
+ * running is the failure mode the vendored engine exists to prevent. *)
245
+ r.skipped <- Printf.sprintf "%s (%s)" label
246
+ (if O.isabsent node then "absent from corpus"
247
+ else if count = 0 then "empty set" else "no set")
248
+ :: r.skipped
249
+ else begin
250
+ r.groups <- r.groups + 1;
251
+ let flags = { O.null = nullflag; O.name = Some label } in
252
+ let usespec = retargetctx node in
253
+ match r.pack.O.runsetflags_args usespec flags call with
254
+ | () -> r.pass <- r.pass + count
255
+ | exception O.Omni_error message -> r.failures <- oneline message :: r.failures
256
+ end
257
+
258
+ (* Run one group whose subject takes the entry's single argument. *)
259
+ let runset (r : run) ?(nullflag = true) (label : string) (node : O.json)
260
+ (subject : V.value -> V.value) : unit =
261
+ drive r nullflag label node (wrap1 subject)
262
+
263
+ (* Run one group whose subject takes omni's whole argument array. This is the
264
+ * shape the `primary` suite needs: a `ctx` entry arrives as `args.(0)`, a
265
+ * MAP, which the call site turns into a live context and writes the
266
+ * observable state back into (decisions 2 and 3). *)
267
+ let runset_args (r : run) ?(nullflag = true) (label : string) (node : O.json)
268
+ (subject : V.value array -> V.value) : unit =
269
+ drive r nullflag label node (wrapargs subject)
270
+
271
+ (* ---------------- reporting ------------------------------------------ *)
272
+
273
+ let report (r : run) (prefix : string) : unit =
274
+ List.iter (fun m -> print_endline ("FAIL " ^ m)) (List.rev r.failures);
275
+ if [] <> r.skipped then
276
+ List.iter (fun s -> print_endline ("SKIP " ^ s)) (List.rev r.skipped);
277
+ Printf.printf "\n%sPASS %d FAIL %d\n" prefix r.pass (List.length r.failures);
278
+ Printf.printf "%sGROUPS %d SKIPPED %d\n" prefix r.groups (List.length r.skipped);
279
+ (* A run that executes nothing is not a pass. *)
280
+ if 0 = r.pass then begin
281
+ print_endline (prefix ^ "the corpus executed no cases");
282
+ exit 1
283
+ end;
284
+ if [] <> r.failures then exit 1
@@ -0,0 +1,169 @@
1
+ (* ProjectName SDK omni runner smoke test.
2
+ *
3
+ * Smoke tests for the VENDORED omni runner itself, and for the two
4
+ * load-bearing decisions in Omni_resolver. A runner that cannot FAIL a bad
5
+ * entry would turn every corpus suite vacuously green, so the failure paths
6
+ * are pinned here, not just the happy one. (OCaml peer of ts's
7
+ * test/omni.test.ts, py's test_omni_smoke.py and lua's
8
+ * test/omni_smoke_test.lua.)
9
+ *
10
+ * The spec is built IN MEMORY, in omni's own value model — no fixture file,
11
+ * and no OMNI block (lenient v0, like the shared corpus).
12
+ *)
13
+
14
+ module O = Omni
15
+ module R = Omni_resolver
16
+ module V = Voxgig_struct
17
+
18
+ (* ---------------- a tiny assertion harness ---------------- *)
19
+
20
+ let npass = ref 0
21
+ let nfail = ref 0
22
+
23
+ let check (name : string) (cond : bool) : unit =
24
+ if cond then incr npass
25
+ else begin
26
+ incr nfail;
27
+ print_endline ("FAIL " ^ name)
28
+ end
29
+
30
+ let contains (hay : string) (needle : string) : bool =
31
+ let hl = String.length hay and nl = String.length needle in
32
+ let rec go at = if at + nl > hl then false
33
+ else if String.sub hay at nl = needle then true else go (at + 1) in
34
+ nl = 0 || go 0
35
+
36
+ let onefailure (name : string) (r : R.run) (want : string) : unit =
37
+ match r.R.failures with
38
+ | [ message ] ->
39
+ check (name ^ ": failure mentions " ^ want) (contains message want)
40
+ | other ->
41
+ check (name ^ ": expected exactly one failure, got "
42
+ ^ string_of_int (List.length other)) false
43
+
44
+ (* ---------------- the in-memory spec ---------------- *)
45
+
46
+ let num n = O.Num (float_of_int n)
47
+
48
+ let makespec () =
49
+ O.JMap [ ("primary", O.JMap [ ("smoke", O.JMap [
50
+
51
+ ("basic", O.JMap [ ("set", O.JList [
52
+ O.JMap [ ("in", num 1); ("out", num 2) ];
53
+ O.JMap [ ("in", num 41); ("out", num 42) ] ]) ]);
54
+
55
+ ("bad", O.JMap [ ("set", O.JList [
56
+ O.JMap [ ("in", num 1); ("out", num 999) ] ]) ]);
57
+
58
+ ("err", O.JMap [ ("set", O.JList [
59
+ O.JMap [ ("in", num 0); ("err", O.Str "zero refused") ] ]) ]);
60
+
61
+ ("empty", O.JMap [ ("set", O.JList []) ]);
62
+
63
+ (* Resolver decision 2: a subject that MUTATES its argument, which
64
+ * `match.args` then asserts on. Without the write-back this passes
65
+ * vacuously - the assertion would read the unmutated input. *)
66
+ ("mutate", O.JMap [ ("set", O.JList [
67
+ O.JMap [ ("in", O.JMap [ ("x", num 1) ]);
68
+ ("match", O.JMap [ ("args", O.JMap [ ("0", O.JMap [ ("x", num 2) ]) ]) ]);
69
+ ("out", num 2) ] ]) ]);
70
+
71
+ (* Resolver decision 3: `match: {ctx: ...}` must read the POST-call ctx.
72
+ * omni's own `entry.ctx` is a pre-call copy, so without the retarget
73
+ * this entry fails. *)
74
+ ("ctx", O.JMap [ ("set", O.JList [
75
+ O.JMap [ ("ctx", O.JMap [ ("a", num 1) ]);
76
+ ("match", O.JMap [ ("ctx", O.JMap [ ("b", num 2) ]) ]);
77
+ ("out", num 1) ] ]) ]);
78
+
79
+ ]) ]) ]
80
+
81
+ let pack () : R.run = R.make_run_spec (makespec ()) "smoke"
82
+
83
+ (* ---------------- subjects ---------------- *)
84
+
85
+ let inc (v : V.value) : V.value =
86
+ match v with
87
+ | V.Num n -> if 0.0 = n then failwith "smoke: zero refused" else V.Num (n +. 1.0)
88
+ | other -> other
89
+
90
+ let identity (v : V.value) : V.value = v
91
+
92
+ (* Mutates its argument in place and returns the new value. *)
93
+ let bump (v : V.value) : V.value =
94
+ ignore (V.setprop v (V.Str "x") (V.Num 2.0));
95
+ V.Num 2.0
96
+
97
+ (* Does NOT mutate: the negative control for decision 2. *)
98
+ let nobump (_v : V.value) : V.value = V.Num 2.0
99
+
100
+ (* Writes a key onto the ctx map AFTER it was handed over: the positive
101
+ * control for decision 3. *)
102
+ let ctxwrite (args : V.value array) : V.value =
103
+ ignore (V.setprop args.(0) (V.Str "b") (V.Num 2.0));
104
+ V.Num 1.0
105
+
106
+ let ctxnowrite (_args : V.value array) : V.value = V.Num 1.0
107
+
108
+ (* ---------------- the tests ---------------- *)
109
+
110
+ let () =
111
+ (* A correct subject passes, and every case is counted. *)
112
+ let r = pack () in
113
+ R.runset r "basic" (R.getset r ["basic"]) inc;
114
+ check "basic: no failures" ([] = r.R.failures);
115
+ check "basic: both cases ran" (2 = r.R.pass);
116
+
117
+ (* A wrong result FAILS, and the resolver records it rather than
118
+ * swallowing it. This is the anti-vacuity check the rollout exists for. *)
119
+ let r = pack () in
120
+ R.runset r "bad" (R.getset r ["bad"]) inc;
121
+ onefailure "bad" r "result mismatch";
122
+ check "bad: no case counted as passing" (0 = r.R.pass);
123
+
124
+ (* An expected error is matched. *)
125
+ let r = pack () in
126
+ R.runset r "err" (R.getset r ["err"]) inc;
127
+ check "err: expected error matched" ([] = r.R.failures);
128
+ check "err: case counted" (1 = r.R.pass);
129
+
130
+ (* An expected error that does NOT occur must fail. *)
131
+ let r = pack () in
132
+ R.runset r "err" (R.getset r ["err"]) identity;
133
+ onefailure "err-missing" r "expected error did not occur";
134
+
135
+ (* A group absent from the spec is NAMED, never a silent pass. *)
136
+ let r = pack () in
137
+ R.runset r "nosuch" (R.getset r ["nosuch"]) inc;
138
+ check "absent: no failures" ([] = r.R.failures);
139
+ check "absent: nothing counted" (0 = r.R.pass);
140
+ check "absent: named as skipped" (1 = List.length r.R.skipped);
141
+
142
+ (* An EMPTY set is likewise named, not counted as a pass. *)
143
+ let r = pack () in
144
+ R.runset r "empty" (R.getset r ["empty"]) inc;
145
+ check "empty: nothing counted" (0 = r.R.pass);
146
+ check "empty: named as skipped" (1 = List.length r.R.skipped);
147
+
148
+ (* Decision 2: argument mutation reaches `match.args`. *)
149
+ let r = pack () in
150
+ R.runset r "mutate" (R.getset r ["mutate"]) bump;
151
+ check "mutate: write-back reaches match.args" ([] = r.R.failures);
152
+ check "mutate: case counted" (1 = r.R.pass);
153
+
154
+ let r = pack () in
155
+ R.runset r "mutate" (R.getset r ["mutate"]) nobump;
156
+ onefailure "mutate-missing" r "match failed at args.0.x";
157
+
158
+ (* Decision 3: `match.ctx` reads the POST-call ctx. *)
159
+ let r = pack () in
160
+ R.runset_args r "ctx" (R.getset r ["ctx"]) ctxwrite;
161
+ check "ctx: retarget reaches post-call ctx" ([] = r.R.failures);
162
+ check "ctx: case counted" (1 = r.R.pass);
163
+
164
+ let r = pack () in
165
+ R.runset_args r "ctx" (R.getset r ["ctx"]) ctxnowrite;
166
+ onefailure "ctx-missing" r "match failed at args.0.b";
167
+
168
+ Printf.printf "\nOMNI SMOKE: PASS %d FAIL %d\n" !npass !nfail;
169
+ if 0 < !nfail then exit 1