@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,188 +0,0 @@
1
- // VENDORED: @voxgig/omni 0.1.2 (typescript/compat/struct.ts), import path adapted ('../src' -> './index').
2
- // Source: https://github.com/voxgig/omni @ 5956cc4e5ecdaeebd11eab8bb4b9462dfc76e018
3
- // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
- // Drop-in replacement for the in-situ test runner in the voxgig/struct
5
- // repository (`typescript/test/runner.ts`).
6
- //
7
- // struct's own runner and omni's runner implement the same spec format;
8
- // this module exposes omni behind struct's exact runner API, so a struct
9
- // port switches over by changing one import:
10
- //
11
- // -import { makeRunner, nullModifier, NULLMARK } from './runner'
12
- // +import { makeRunner, nullModifier, NULLMARK } from './omni'
13
- //
14
- // where `./omni` is a small resolver in the port's test directory that
15
- // locates a local omni checkout. Everything else - the corpus, the SDK,
16
- // the test file - is unchanged. This is the TypeScript peer of
17
- // javascript/compat/struct.js and python/voxgig_omni/compat/struct.py.
18
-
19
- import { dirname, isAbsolute, join, sep } from 'node:path'
20
- import { fileURLToPath } from 'node:url'
21
-
22
- import { EXISTSMARK, NULLMARK, UNDEFMARK, makeRunner as omnimakerunner, nullmodifier } from './index'
23
-
24
- import type { Json, Provider, Subject } from './index'
25
-
26
- // struct's data model is JSON-shaped `any` at its boundaries, and so is
27
- // its SDK; these aliases say that on purpose rather than by omission.
28
- export type StructSDK = any
29
- export type StructUtility = any
30
-
31
- // struct's runner API, name for name.
32
- export type StructSubject = (...args: any[]) => any
33
-
34
- export type StructRunSet = (testspec: any, testsubject?: StructSubject) => Promise<void>
35
-
36
- export type StructRunSetFlags = (
37
- testspec: any,
38
- flags: Record<string, any>,
39
- testsubject?: StructSubject,
40
- ) => Promise<void>
41
-
42
- export type StructRunPack = {
43
- spec: any
44
- runset: StructRunSet
45
- runsetflags: StructRunSetFlags
46
- subject?: StructSubject
47
- client: StructProvider
48
- }
49
-
50
- export type StructRunner = (name: string, store?: any) => Promise<StructRunPack>
51
-
52
- // An omni provider that is also a struct client: test code reaches through
53
- // the runpack's `client` as an SDK (`client.utility().struct`), so the
54
- // wrapper forwards `utility()` and `tester()` alongside the four hooks.
55
- export type StructProvider = Provider & {
56
- utility: () => StructUtility
57
- tester: (options?: any) => any
58
- sdk: StructSDK
59
- }
60
-
61
- // The directory this shim was loaded from: dist/compat when built, compat
62
- // when run from source. Its parent is the port root, so every frame from
63
- // inside omni is skipped when locating the caller.
64
- //
65
- // It is derived from __dirname rather than matched against a known path,
66
- // so it holds wherever the package sits - a checkout, or
67
- // node_modules/@voxgig/omni. The trailing separator matters: without it a
68
- // sibling whose name merely EXTENDS this one (`omni-js-extra` beside
69
- // `omni-js`) would read as inside.
70
- const OMNIDIR = dirname(__dirname)
71
-
72
- // A relative test-file path is resolved against the first stack frame
73
- // outside omni - the caller.
74
- //
75
- // PREFER AN ABSOLUTE PATH. This heuristic guesses at what "relative to"
76
- // means, and the guess is wrong whenever a consumer's test FILES sit at a
77
- // different depth from the module that loads the runner. struct's TypeScript
78
- // port is exactly that shape: its loader compiles to `dist-test/` and its
79
- // test files to `dist-test/utility/`, so the same relative string resolved
80
- // one directory too deep and read `typescript/build/test/test.json`. That
81
- // port now resolves the path itself, in `test/omni.ts`, and never reaches
82
- // this. (An earlier version of this comment asserted it already did - it did
83
- // not; this shim shipped before any consumer had proved it.)
84
- // A stack frame's file, as a filesystem path.
85
- //
86
- // An ESM caller's frame reports a file:// URL rather than a path, and
87
- // `dirname('file:///a/b.mjs')` yields 'file:/a', so a relative spec path
88
- // resolved against it died on `ENOENT ... 'file:/.../fib.json'`. Frames
89
- // that name no path at all - node: internals, data: URLs, eval - are
90
- // skipped rather than mistaken for the caller.
91
- function framepath(frame: any): string | null {
92
- const file = 'function' === typeof frame.getFileName ? frame.getFileName() : null
93
- if (null == file) {
94
- return null
95
- }
96
- if (file.startsWith('file://')) {
97
- try {
98
- return fileURLToPath(file)
99
- } catch {
100
- return null
101
- }
102
- }
103
- return isAbsolute(file) ? file : null
104
- }
105
-
106
- function callerdir(): string {
107
- const original = Error.prepareStackTrace
108
- Error.prepareStackTrace = (_err, stack) => stack
109
- const holder: any = {}
110
- Error.captureStackTrace(holder, callerdir)
111
- const stack: any = holder.stack
112
- Error.prepareStackTrace = original
113
-
114
- for (const frame of stack) {
115
- const file = framepath(frame)
116
- if (file && !file.startsWith(OMNIDIR + sep)) {
117
- return dirname(file)
118
- }
119
- }
120
-
121
- return process.cwd()
122
- }
123
-
124
- // Wrap a struct SDK client as an omni provider.
125
- function structprovider(sdk: StructSDK): StructProvider {
126
- return {
127
- // struct resolves a subject from the utility, or from utility.struct.
128
- subject: (name: string): Subject | undefined => {
129
- const utility = sdk.utility()
130
- return utility[name] || (utility.struct && utility.struct[name])
131
- },
132
-
133
- // A DEF.client entry becomes another SDK instance.
134
- client: async (options: Json) => structprovider(await sdk.tester(options)),
135
-
136
- // struct's SDK supplies its own context wrapper.
137
- contextify: (val: Json): Json => {
138
- const utility = sdk.utility()
139
- const hook =
140
- 'function' === typeof utility.contextify
141
- ? utility.contextify
142
- : 'function' === typeof utility.makeContext
143
- ? utility.makeContext
144
- : null
145
- const ctx = null == hook ? val : hook.call(utility, val)
146
- if (null != ctx && 'object' === typeof ctx) {
147
- ;(ctx as any).utility = utility
148
- }
149
- return ctx
150
- },
151
-
152
- // Client options may reference the runner store.
153
- inject: (options: Json, store: Json): Json => {
154
- const structutils = sdk.utility().struct
155
- if (structutils && 'function' === typeof structutils.inject) {
156
- return structutils.inject(options, store)
157
- }
158
- return options
159
- },
160
-
161
- utility: () => sdk.utility(),
162
- tester: (options?: any) => sdk.tester(options),
163
- sdk,
164
- }
165
- }
166
-
167
- // struct's makeRunner(testfile, client) signature, backed by omni.
168
- async function makeRunner(testfile: string, client: StructSDK): Promise<StructRunner> {
169
- const specpath = isAbsolute(testfile) ? testfile : join(callerdir(), testfile)
170
- const provider = structprovider(client)
171
- const runner = await omnimakerunner(specpath, provider)
172
-
173
- return async function structrunner(name: string, store?: any): Promise<StructRunPack> {
174
- const runpack = await runner(name, store)
175
-
176
- return {
177
- spec: runpack.spec,
178
- runset: runpack.runset,
179
- runsetflags: runpack.runsetflags,
180
- subject: runpack.subject,
181
- client: provider,
182
- }
183
- }
184
- }
185
-
186
- const nullModifier = nullmodifier
187
-
188
- export { EXISTSMARK, NULLMARK, UNDEFMARK, makeRunner, nullModifier, structprovider }
@@ -1,464 +0,0 @@
1
- // Test runner for Zig — loads build/test/test.json and drives specs
2
- // against subject functions, mirroring the TS/Go runner pattern.
3
-
4
- const std = @import("std");
5
- const regex = @import("../utility/voxgigstruct/regex.zig");
6
- const voxgig_struct = @import("voxgig-struct");
7
-
8
- const Allocator = std.mem.Allocator;
9
- const StdJsonValue = std.json.Value;
10
- const JsonValue = voxgig_struct.JsonValue;
11
-
12
- pub const NULLMARK = "__NULL__";
13
- pub const UNDEFMARK = "__UNDEF__";
14
- pub const EXISTSMARK = "__EXISTS__";
15
-
16
- pub const TEST_JSON_FILE = "../.sdk/test/test.json";
17
-
18
- // Subject that takes only a std.json.Value (for simple is* functions).
19
- pub const Subject = *const fn (StdJsonValue) StdJsonValue;
20
-
21
- // Subject that takes an allocator and our JsonValue type.
22
- pub const AllocSubject = *const fn (Allocator, JsonValue) JsonValue;
23
-
24
- /// A subject that receives the whole corpus ENTRY and returns std.json.
25
- ///
26
- /// `published` is an out-parameter for the context the subject built. std.json
27
- /// maps cannot be mutated in place safely from here — a put may reallocate the
28
- /// backing store and the caller would never see it — so a section that needs a
29
- /// `match: ctx.*` assertion hands its ctx back through this instead.
30
- pub const EntrySubject = *const fn (
31
- Allocator,
32
- StdJsonValue,
33
- *?StdJsonValue,
34
- /// The SDK's own error message. Zig errors carry no payload, so
35
- /// @errorName gives the tag ("Sdk") and never the text the corpus matches
36
- /// on. A subject that fails writes ctx.pending_err's message here.
37
- *?[]const u8,
38
- ) anyerror!StdJsonValue;
39
-
40
- pub const Spec = struct {
41
- data: StdJsonValue,
42
-
43
- pub fn get(self: Spec, key: []const u8) ?StdJsonValue {
44
- return switch (self.data) {
45
- .object => |obj| obj.get(key),
46
- else => null,
47
- };
48
- }
49
- };
50
-
51
- pub const RunPack = struct {
52
- spec: Spec,
53
- allocator: Allocator,
54
- file_data: []const u8,
55
- /// Cases actually executed, so a suite can assert it ran something.
56
- ran: usize = 0,
57
- parsed: std.json.Parsed(StdJsonValue),
58
-
59
- /// Run all entries in testspec.set against the subject function (no alloc, std types).
60
- pub fn runset(self: RunPack, testspec: StdJsonValue, subject: Subject) !void {
61
- try self.runsetflags(testspec, .{}, subject);
62
- }
63
-
64
- /// Run with flags (e.g. .{ .null_flag = false }).
65
- pub fn runsetflags(self: RunPack, testspec: StdJsonValue, flags: Flags, subject: Subject) !void {
66
- _ = self;
67
- const set = switch (testspec) {
68
- .object => |obj| obj.get("set") orelse return error.NoSetInSpec,
69
- else => return error.SpecNotObject,
70
- };
71
- const entries = switch (set) {
72
- .array => |arr| arr.items,
73
- else => return error.SetNotArray,
74
- };
75
-
76
- for (entries) |entry_val| {
77
- const entry = switch (entry_val) {
78
- .object => |obj| obj,
79
- else => continue,
80
- };
81
-
82
- const in_val: StdJsonValue = entry.get("in") orelse .null;
83
- const raw_out = entry.get("out");
84
- const expected: StdJsonValue = if (raw_out) |o| o else if (flags.null_flag) StdJsonValue{ .string = NULLMARK } else .null;
85
- const err_field = entry.get("err");
86
-
87
- const result = subject(in_val);
88
- if (err_field != null) continue;
89
- try checkResult(expected, result);
90
- }
91
- }
92
-
93
- /// Run all entries against an allocator-aware subject (uses our JsonValue type).
94
- pub fn runsetAlloc(self: RunPack, testspec: StdJsonValue, subject: AllocSubject) !void {
95
- try self.runsetAllocFlags(testspec, .{}, subject);
96
- }
97
-
98
- /// Run with flags against an allocator-aware subject.
99
- pub fn runsetAllocFlags(self: RunPack, testspec: StdJsonValue, flags: Flags, subject: AllocSubject) !void {
100
- const set = switch (testspec) {
101
- .object => |obj| obj.get("set") orelse return error.NoSetInSpec,
102
- else => return error.SpecNotObject,
103
- };
104
- const entries = switch (set) {
105
- .array => |arr| arr.items,
106
- else => return error.SetNotArray,
107
- };
108
-
109
- for (entries, 0..) |entry_val, entry_idx| {
110
- const entry = switch (entry_val) {
111
- .object => |obj| obj,
112
- else => continue,
113
- };
114
-
115
- const has_in = entry.get("in") != null;
116
- const in_val_std: StdJsonValue = entry.get("in") orelse
117
- if (flags.undef_as_null) .null else StdJsonValue{ .string = UNDEFMARK };
118
-
119
- const raw_out = entry.get("out");
120
- const expected: StdJsonValue = if (raw_out) |o| o else if (flags.null_flag) StdJsonValue{ .string = NULLMARK } else .null;
121
-
122
- const err_field = entry.get("err");
123
- _ = has_in;
124
-
125
- // Use an arena allocator for each test case.
126
- var arena = std.heap.ArenaAllocator.init(self.allocator);
127
- defer arena.deinit();
128
- const alloc = arena.allocator();
129
-
130
- // Convert std.json input to our JsonValue type.
131
- const in_val = voxgig_struct.fromStdJson(alloc, in_val_std) catch .null;
132
-
133
- const result_jval = subject(alloc, in_val);
134
-
135
- if (err_field != null) continue;
136
-
137
- // Convert our result back to std.json for comparison.
138
- const result = voxgig_struct.toStdJson(alloc, result_jval) catch StdJsonValue{ .null = {} };
139
-
140
- checkResult(expected, result) catch |e| {
141
- std.debug.print(" [test entry {d}]\n", .{entry_idx});
142
- return e;
143
- };
144
- }
145
- }
146
-
147
- /// Drive a section whose entries carry ctx/args/match/err.
148
- ///
149
- /// The subject receives the whole ENTRY, not the resolved args, because an
150
- /// args-style section has to publish the context it builds back onto the
151
- /// entry — a `match: ctx.*` assertion reads it from there.
152
- pub fn runsetEntry(self: *RunPack, testspec: StdJsonValue, subject: EntrySubject) !void {
153
- const set_val = switch (testspec) {
154
- .object => |obj| obj.get("set") orelse return,
155
- else => return,
156
- };
157
- if (set_val != .array) return;
158
-
159
- var failures: usize = 0;
160
-
161
- for (set_val.array.items, 0..) |entry_val, entry_idx| {
162
- if (entry_val != .object) continue;
163
- const entry = entry_val.object;
164
-
165
- var arena = std.heap.ArenaAllocator.init(self.allocator);
166
- defer arena.deinit();
167
- const alloc = arena.allocator();
168
-
169
- const err_field = entry.get("err");
170
-
171
- self.ran += 1;
172
- var published: ?StdJsonValue = null;
173
- var errmsg: ?[]const u8 = null;
174
-
175
- const res = subject(alloc, entry_val, &published, &errmsg) catch |e| {
176
- // An expected error: match its text, then any `match` block.
177
- if (err_field) |ef| {
178
- const msg = errmsg orelse @errorName(e);
179
- if (ef == .bool and ef.bool) continue;
180
- if (matchval(alloc, ef, StdJsonValue{ .string = msg })) continue;
181
- std.debug.print("\n ERROR MATCH [entry {d}]: [{s}] <=> [{s}]\n", .{
182
- entry_idx, fmtJson(ef), msg,
183
- });
184
- }
185
- failures += 1;
186
- continue;
187
- };
188
-
189
- if (err_field != null) {
190
- std.debug.print("\n expected an error [entry {d}]\n", .{entry_idx});
191
- failures += 1;
192
- continue;
193
- }
194
-
195
- var matched = false;
196
-
197
- if (entry.get("match")) |m| {
198
- var subj = std.json.ObjectMap.init(alloc);
199
- subj.put("out", res) catch {};
200
- if (entry.get("in")) |v| subj.put("in", v) catch {};
201
- if (published) |p| {
202
- subj.put("ctx", p) catch {};
203
- } else if (entry.get("ctx")) |v| {
204
- subj.put("ctx", v) catch {};
205
- }
206
- const subjval = StdJsonValue{ .object = subj };
207
-
208
- var path = std.ArrayList([]const u8).init(alloc);
209
- doMatch(alloc, m, subjval, &path) catch {
210
- std.debug.print(" [entry {d}]\n", .{entry_idx});
211
- failures += 1;
212
- continue;
213
- };
214
- matched = true;
215
- }
216
-
217
- const raw_out = entry.get("out");
218
-
219
- if (raw_out) |o| {
220
- if (jsonEqual(o, res)) continue;
221
- if (o == .string and std.mem.eql(u8, o.string, NULLMARK) and res == .null) continue;
222
- std.debug.print("\n FAIL [entry {d}]: expected {s} got {s}\n", .{
223
- entry_idx, fmtJson(o), fmtJson(res),
224
- });
225
- failures += 1;
226
- } else if (!matched) {
227
- // NO `out` MEANS EXPECT NULL, not "assert nothing". The
228
- // reference sets a missing out to the null marker before
229
- // running, so an entry like {"ctx": {"opname": "bad"}} asserts
230
- // that the utility yields nothing.
231
- if (res == .null) continue;
232
- std.debug.print("\n FAIL [entry {d}]: expected null got {s}\n", .{
233
- entry_idx, fmtJson(res),
234
- });
235
- failures += 1;
236
- }
237
- }
238
-
239
- if (0 < failures) return error.SectionFailed;
240
- }
241
-
242
- pub fn deinit(self: *RunPack) void {
243
- self.parsed.deinit();
244
- self.allocator.free(self.file_data);
245
- }
246
- };
247
-
248
- pub const Flags = struct {
249
- null_flag: bool = true,
250
- undef_as_null: bool = true,
251
- };
252
-
253
- /// Load test.json and return a named top-level spec section.
254
- ///
255
- /// makeRunner is this with "struct" baked in. The primary-utility suite needs
256
- /// "primary" from the same file, and duplicating the load would give the two
257
- /// suites separate copies of a corpus that is meant to be shared.
258
- pub fn makeRunnerFor(allocator: Allocator, section: []const u8) !RunPack {
259
- const data = try std.fs.cwd().readFileAlloc(allocator, TEST_JSON_FILE, 10 * 1024 * 1024);
260
- const parsed = try std.json.parseFromSlice(StdJsonValue, allocator, data, .{});
261
- const root = parsed.value;
262
-
263
- const spec_val = switch (root) {
264
- .object => |obj| obj.get(section) orelse return error.NoSectionInTestJson,
265
- else => return error.TestJsonNotObject,
266
- };
267
-
268
- return RunPack{
269
- .spec = Spec{ .data = spec_val },
270
- .allocator = allocator,
271
- .file_data = data,
272
- .parsed = parsed,
273
- };
274
- }
275
-
276
- /// Load test.json and return the "struct" spec.
277
- pub fn makeRunner(allocator: Allocator) !RunPack {
278
- const path = TEST_JSON_FILE;
279
- const data = try std.fs.cwd().readFileAlloc(allocator, path, 10 * 1024 * 1024);
280
- const parsed = try std.json.parseFromSlice(StdJsonValue, allocator, data, .{});
281
- const root = parsed.value;
282
-
283
- const spec_val = switch (root) {
284
- .object => |obj| obj.get("struct") orelse return error.NoStructInTestJson,
285
- else => return error.TestJsonNotObject,
286
- };
287
-
288
- return RunPack{
289
- .spec = Spec{ .data = spec_val },
290
- .allocator = allocator,
291
- .file_data = data,
292
- .parsed = parsed,
293
- };
294
- }
295
-
296
- // ---- Corpus matching: matchval / doMatch ----
297
- //
298
- // The primary corpus asserts with `match` as often as with `out`, and its
299
- // error expectations are regexes. runsetAlloc resolved only `in`, had no
300
- // match support and silently skipped any entry carrying `err` — so it could
301
- // drive the struct corpus but not this one. Semantics are the reference's:
302
- // exact equality first, then __UNDEF__/__EXISTS__ markers, then a /regex/, and
303
- // finally a case-insensitive substring.
304
-
305
- fn stringifyAlloc(alloc: Allocator, v: StdJsonValue) []const u8 {
306
- var buf = std.ArrayList(u8).init(alloc);
307
- if (v == .string) return v.string;
308
- std.json.stringify(v, .{}, buf.writer()) catch return "";
309
- return buf.items;
310
- }
311
-
312
- pub fn matchval(alloc: Allocator, check: StdJsonValue, base: StdJsonValue) bool {
313
- if (jsonEqual(check, base)) return true;
314
-
315
- if (check == .string) {
316
- const c = check.string;
317
- if (std.mem.eql(u8, c, UNDEFMARK)) return base == .null;
318
- if (std.mem.eql(u8, c, EXISTSMARK)) return base != .null;
319
-
320
- const basestr = stringifyAlloc(alloc, base);
321
-
322
- // A /pattern/ is a regex over the stringified base.
323
- if (2 <= c.len and c[0] == '/' and c[c.len - 1] == '/') {
324
- const pat = c[1 .. c.len - 1];
325
- var re = regex.compile(alloc, pat) orelse return false;
326
- defer re.deinit();
327
- return re.isMatch(basestr);
328
- }
329
-
330
- // Otherwise a case-insensitive substring, as the reference does.
331
- const lc_base = std.ascii.allocLowerString(alloc, basestr) catch return false;
332
- const lc_check = std.ascii.allocLowerString(alloc, c) catch return false;
333
- return std.mem.indexOf(u8, lc_base, lc_check) != null;
334
- }
335
-
336
- return false;
337
- }
338
-
339
- fn getPath(base: StdJsonValue, path: []const []const u8) StdJsonValue {
340
- var cur = base;
341
- for (path) |seg| {
342
- switch (cur) {
343
- .object => |o| cur = o.get(seg) orelse return StdJsonValue{ .null = {} },
344
- .array => |a| {
345
- const idx = std.fmt.parseInt(usize, seg, 10) catch return StdJsonValue{ .null = {} };
346
- if (idx >= a.items.len) return StdJsonValue{ .null = {} };
347
- cur = a.items[idx];
348
- },
349
- else => return StdJsonValue{ .null = {} },
350
- }
351
- }
352
- return cur;
353
- }
354
-
355
- /// Walk `check`; every LEAF must matchval against the same path in `base`.
356
- pub fn doMatch(
357
- alloc: Allocator,
358
- check: StdJsonValue,
359
- base: StdJsonValue,
360
- path: *std.ArrayList([]const u8),
361
- ) !void {
362
- switch (check) {
363
- .object => |o| {
364
- var it = o.iterator();
365
- while (it.next()) |kv| {
366
- try path.append(kv.key_ptr.*);
367
- try doMatch(alloc, kv.value_ptr.*, base, path);
368
- _ = path.pop();
369
- }
370
- },
371
- .array => |a| {
372
- for (a.items, 0..) |item, i| {
373
- const seg = try std.fmt.allocPrint(alloc, "{d}", .{i});
374
- try path.append(seg);
375
- try doMatch(alloc, item, base, path);
376
- _ = path.pop();
377
- }
378
- },
379
- else => {
380
- const baseval = getPath(base, path.items);
381
- if (!matchval(alloc, check, baseval)) {
382
- std.debug.print("\n MATCH: {s}: [{s}] <=> [{s}]\n", .{
383
- joinPath(alloc, path.items),
384
- fmtJson(check),
385
- fmtJson(baseval),
386
- });
387
- return error.MatchMismatch;
388
- }
389
- },
390
- }
391
- }
392
-
393
- fn joinPath(alloc: Allocator, parts: []const []const u8) []const u8 {
394
- return std.mem.join(alloc, ".", parts) catch "?";
395
- }
396
-
397
- // ---- Result comparison (operates on std.json.Value) ----
398
-
399
- fn checkResult(expected: StdJsonValue, result: StdJsonValue) !void {
400
- if (jsonEqual(expected, result)) return;
401
-
402
- if (expected == .string) {
403
- if (std.mem.eql(u8, expected.string, NULLMARK)) {
404
- if (result == .null) return;
405
- }
406
- }
407
-
408
- std.debug.print("\n FAIL: expected {s} got {s}\n", .{
409
- fmtJson(expected),
410
- fmtJson(result),
411
- });
412
- return error.ResultMismatch;
413
- }
414
-
415
- fn fmtJson(val: StdJsonValue) []const u8 {
416
- // Best-effort one-line representation for diagnostic output. Uses the
417
- // process-wide page allocator so the lifetime is OK for a print-and-die.
418
- var buf = std.ArrayList(u8).init(std.heap.page_allocator);
419
- std.json.stringify(val, .{}, buf.writer()) catch return "?";
420
- return buf.items;
421
- }
422
-
423
- /// Deep equality for std.json.Value.
424
- pub fn jsonEqual(a: StdJsonValue, b: StdJsonValue) bool {
425
- const TagType = std.meta.Tag(StdJsonValue);
426
- const tag_a: TagType = a;
427
- const tag_b: TagType = b;
428
-
429
- // Allow integer/float cross-comparison for numeric equality.
430
- if ((tag_a == .integer or tag_a == .float) and (tag_b == .integer or tag_b == .float)) {
431
- const fa: f64 = if (tag_a == .integer) @floatFromInt(a.integer) else a.float;
432
- const fb: f64 = if (tag_b == .integer) @floatFromInt(b.integer) else b.float;
433
- return fa == fb;
434
- }
435
-
436
- if (tag_a != tag_b) return false;
437
-
438
- return switch (a) {
439
- .null => true,
440
- .bool => |av| av == b.bool,
441
- .integer => |av| av == b.integer,
442
- .float => |av| av == b.float,
443
- .string => |av| std.mem.eql(u8, av, b.string),
444
- .number_string => |av| std.mem.eql(u8, av, b.number_string),
445
- .array => |av| {
446
- const bv = b.array;
447
- if (av.items.len != bv.items.len) return false;
448
- for (av.items, bv.items) |ai, bi| {
449
- if (!jsonEqual(ai, bi)) return false;
450
- }
451
- return true;
452
- },
453
- .object => |av| {
454
- const bv = b.object;
455
- if (av.count() != bv.count()) return false;
456
- var it = av.iterator();
457
- while (it.next()) |kv| {
458
- const bval = bv.get(kv.key_ptr.*) orelse return false;
459
- if (!jsonEqual(kv.value_ptr.*, bval)) return false;
460
- }
461
- return true;
462
- },
463
- };
464
- }