@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
@@ -0,0 +1,628 @@
1
+ // VENDORED: @voxgig/omni 0.1.4 (javascript/src/runner.js)
2
+ // Source: https://github.com/voxgig/omni @ 274708cc2d12b21707d975543953f845f8444be0 [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // Omni: the shared multi-language test runner.
5
+ //
6
+ // Port of the canonical TypeScript implementation
7
+ // (typescript/src/Runner.ts). Behaviour must match, case for case.
8
+
9
+ const { readFileSync } = require('node:fs')
10
+
11
+ const {
12
+ EXISTSMARK,
13
+ NULLMARK,
14
+ UNDEFMARK,
15
+ clone,
16
+ deepequal,
17
+ getpath,
18
+ islist,
19
+ ismap,
20
+ isnode,
21
+ pathify,
22
+ stringify,
23
+ walk,
24
+ } = require('./util')
25
+
26
+ // The newest spec format version this runner understands. A spec with no
27
+ // OMNI block is version 0: the original, lenient format, frozen forever.
28
+ // Version 1 turns on strict entry validation (see checkentry).
29
+ const SPECVERSION = 1
30
+
31
+ // Capability strings this runner supports beyond the version baseline. A
32
+ // spec's OMNI.requires list is checked against this: an unknown capability
33
+ // refuses the spec loudly at load time, instead of a lagging port silently
34
+ // mis-running it. (Empty today; future format features mint a string here.)
35
+ const CAPABILITIES = []
36
+
37
+ // The complete set of fields an entry may carry. Under version 1 anything
38
+ // else is an error: an unrecognised key is almost always a typo'd
39
+ // assertion, and a typo'd assertion is a test that silently stopped
40
+ // testing.
41
+ const ENTRYFIELDS = ['in', 'args', 'ctx', 'out', 'err', 'match', 'client', 'id', 'doc']
42
+
43
+ // A test failure (or a malformed spec). Distinct from errors thrown by the
44
+ // subject under test, which are candidates for an `err` expectation.
45
+ class OmniError extends Error {
46
+ constructor(message, entry) {
47
+ super(message)
48
+ this.name = 'OmniError'
49
+ this.entry = entry
50
+ }
51
+ }
52
+
53
+ // Load a spec: either a path to a JSON file, or an already-parsed object.
54
+ function loadspec(specref) {
55
+ if ('string' === typeof specref) {
56
+ return JSON.parse(readFileSync(specref, 'utf8'))
57
+ }
58
+ return specref
59
+ }
60
+
61
+ // Read the spec's format version from its optional top-level OMNI block,
62
+ // and refuse a spec this runner cannot faithfully run: a version newer
63
+ // than SPECVERSION, or a required capability not in CAPABILITIES.
64
+ function resolveversion(alltests) {
65
+ const meta = ismap(alltests) ? alltests.OMNI : undefined
66
+
67
+ if (undefined === meta) {
68
+ return 0
69
+ }
70
+
71
+ if (!ismap(meta) || 'number' !== typeof meta.version || 0 !== meta.version % 1) {
72
+ throw new OmniError('omni: malformed OMNI version block')
73
+ }
74
+
75
+ if (meta.version < 0 || SPECVERSION < meta.version) {
76
+ throw new OmniError('omni: unsupported spec version: ' + meta.version)
77
+ }
78
+
79
+ const requires = meta.requires
80
+ if (undefined !== requires) {
81
+ if (!islist(requires)) {
82
+ throw new OmniError('omni: malformed OMNI requires list')
83
+ }
84
+ for (const cap of requires) {
85
+ if ('string' !== typeof cap || !CAPABILITIES.includes(cap)) {
86
+ throw new OmniError('omni: spec requires unsupported capability: ' + stringify(cap))
87
+ }
88
+ }
89
+ }
90
+
91
+ return meta.version
92
+ }
93
+
94
+ // Strict entry validation, applied when the spec declares version 1 or
95
+ // later. The lenient format converts each of these mistakes into a silent
96
+ // pass or a dead field; here they fail with the entry named.
97
+ function checkentry(flags, index, entry) {
98
+ if (!ismap(entry)) {
99
+ throw fail(flags, index, entry, 'entry is not a map')
100
+ }
101
+
102
+ for (const key of Object.keys(entry)) {
103
+ if (!ENTRYFIELDS.includes(key)) {
104
+ throw fail(flags, index, entry, 'unknown entry field: ' + key)
105
+ }
106
+ }
107
+
108
+ let argsources = 0
109
+ for (const key of ['in', 'args', 'ctx']) {
110
+ if (undefined !== entry[key]) {
111
+ argsources++
112
+ }
113
+ }
114
+ if (1 < argsources) {
115
+ throw fail(flags, index, entry, 'entry has more than one of in, args, ctx')
116
+ }
117
+
118
+ if (null != entry.err && undefined !== entry.out) {
119
+ throw fail(flags, index, entry, 'entry has both err and out')
120
+ }
121
+
122
+ if (undefined !== entry.id && 'string' !== typeof entry.id) {
123
+ throw fail(flags, index, entry, 'entry id is not a string')
124
+ }
125
+ }
126
+
127
+ // Validate a version-1 group up front, against the AUTHORED entries -
128
+ // null-normalisation would otherwise rewrite an authored null (e.g.
129
+ // id: null) into a sentinel string and hide it from validation. A
130
+ // malformed spec is a spec error, not a test result, so it fails before
131
+ // any subject runs.
132
+ function checkset(flags, testspec, normalset) {
133
+ const origset =
134
+ ismap(testspec) && islist(testspec.set) ? testspec.set : normalset
135
+
136
+ if (0 === origset.length && true !== (ismap(testspec) ? testspec.empty : undefined)) {
137
+ throw new OmniError('omni: empty test set: ' + flags.name)
138
+ }
139
+
140
+ for (let index = 0; index < origset.length; index++) {
141
+ checkentry(flags, index, origset[index])
142
+ }
143
+ }
144
+
145
+ // Find the named section of a spec: `primary.<name>`, then `<name>`, then
146
+ // the whole spec.
147
+ function resolvespec(name, alltests) {
148
+ if (null == name) {
149
+ return alltests
150
+ }
151
+
152
+ const primary = alltests.primary
153
+ if (ismap(primary) && null != primary[name]) {
154
+ return primary[name]
155
+ }
156
+
157
+ if (ismap(alltests) && null != alltests[name]) {
158
+ return alltests[name]
159
+ }
160
+
161
+ return alltests
162
+ }
163
+
164
+ // Build the named clients declared by the spec's DEF.client block.
165
+ async function resolveclients(provider, spec, store) {
166
+ const clients = {}
167
+
168
+ const defclient = ismap(spec) && ismap(spec.DEF) ? spec.DEF.client : undefined
169
+ if (!ismap(defclient)) {
170
+ return clients
171
+ }
172
+
173
+ // A spec may define clients that a given test run never references.
174
+ if (null == provider.client) {
175
+ return clients
176
+ }
177
+
178
+ for (const clientname of Object.keys(defclient)) {
179
+ const cdef = defclient[clientname]
180
+ const copts = clone((ismap(cdef) && ismap(cdef.test) ? cdef.test.options : undefined) || {})
181
+
182
+ if (ismap(store) && null != provider.inject) {
183
+ provider.inject(copts, store)
184
+ }
185
+
186
+ clients[clientname] = await provider.client(copts)
187
+ }
188
+
189
+ return clients
190
+ }
191
+
192
+ function resolvesubject(name, provider) {
193
+ if (null == name || null == provider.subject) {
194
+ return undefined
195
+ }
196
+ return provider.subject(name) || undefined
197
+ }
198
+
199
+ function resolveflags(flags) {
200
+ const out = null == flags ? {} : { ...flags }
201
+ out.null = null == out.null ? true : !!out.null
202
+ return out
203
+ }
204
+
205
+ // An entry with no `out` expects a null (or absent) result.
206
+ function resolveentry(entry, flags) {
207
+ if (null == entry.out && flags.null) {
208
+ entry.out = NULLMARK
209
+ }
210
+ return entry
211
+ }
212
+
213
+ function resolvetestpack(name, entry, subject, provider, clients) {
214
+ const testpack = { client: provider, subject }
215
+
216
+ if (null != entry.client) {
217
+ const client = clients[entry.client]
218
+ if (null == client) {
219
+ throw new OmniError('omni: unknown client: ' + entry.client, entry)
220
+ }
221
+ testpack.client = client
222
+ testpack.subject = resolvesubject(name, client) || subject
223
+ }
224
+
225
+ return testpack
226
+ }
227
+
228
+ // Build the argument list for one entry: `ctx`, `args`, or `in`.
229
+ function resolveargs(entry, testpack, provider) {
230
+ let args
231
+
232
+ if (undefined !== entry.ctx) {
233
+ args = [entry.ctx]
234
+ } else if (undefined !== entry.args) {
235
+ args = entry.args
236
+ } else {
237
+ args = [clone(entry.in)]
238
+ }
239
+
240
+ if (undefined !== entry.ctx || undefined !== entry.args) {
241
+ let first = args[0]
242
+ if (ismap(first)) {
243
+ first = clone(first)
244
+ if (null != provider.contextify) {
245
+ first = provider.contextify(first)
246
+ }
247
+ args[0] = first
248
+ entry.ctx = first
249
+ if (ismap(first)) {
250
+ first.client = testpack.client
251
+ }
252
+ }
253
+ }
254
+
255
+ return args
256
+ }
257
+
258
+ // Normalise a value for comparison: JSON nulls (and absent values) become
259
+ // NULLMARK, errors become {name,message} maps. Always a fresh copy.
260
+ function fixjson(val, flags) {
261
+ const donull = null == flags || null == flags.null ? true : !!flags.null
262
+ return fixjsonval(val, donull)
263
+ }
264
+
265
+ function fixjsonval(val, donull) {
266
+ if (null == val) {
267
+ return donull ? NULLMARK : val
268
+ }
269
+
270
+ if (val instanceof Error) {
271
+ return errify(val)
272
+ }
273
+
274
+ if (islist(val)) {
275
+ return val.map((entry) => fixjsonval(entry, donull))
276
+ }
277
+
278
+ if (ismap(val)) {
279
+ const out = {}
280
+ for (const key of Object.keys(val)) {
281
+ out[key] = fixjsonval(val[key], donull)
282
+ }
283
+ return out
284
+ }
285
+
286
+ return val
287
+ }
288
+
289
+ // THE SPREAD IS THE CONTRACT, not an accident of JavaScript. An error's
290
+ // OWN enumerable properties survive into the base, so a library whose
291
+ // errors carry a `code` (or a `status`, or a `path`) can assert on it
292
+ // with `match: {err: {code: 'x'}}` rather than pattern-matching prose.
293
+ //
294
+ // Only JavaScript gets that for free. `Provider.errify` is how the other
295
+ // ports reach the same place: it overrides this function entirely, so a
296
+ // library supplies its own structured base and omni needs to know
297
+ // nothing about the shape of it.
298
+ function errify(err) {
299
+ if (err instanceof Error) {
300
+ return { ...err, name: err.name, message: err.message }
301
+ }
302
+
303
+ // An error-SHAPED plain map ({name, message, ...}) spreads the same way
304
+ // an Error does - collapsing it to String(err) yields '[object Object]',
305
+ // which fails both the `err` check and every `match.err.*` leaf.
306
+ if (null != err && 'object' === typeof err) {
307
+ return { name: 'Error', ...err }
308
+ }
309
+
310
+ return { name: 'Error', message: String(err) }
311
+ }
312
+
313
+ // The error base a `match.err` sees: the provider's own, when it has one.
314
+ function errbase(err, provider) {
315
+ return null != provider && null != provider.errify ? provider.errify(err) : errify(err)
316
+ }
317
+
318
+ function errmessage(err) {
319
+ return err instanceof Error ? err.message
320
+ : null != err && 'string' === typeof err.message ? err.message
321
+ : String(err)
322
+ }
323
+
324
+ // The label of one entry, for failure messages.
325
+ function entryref(flags, index, entry) {
326
+ const label = flags.name || 'set'
327
+ const id = null != entry && null != entry.id ? ' (' + entry.id + ')' : ''
328
+ return label + '[' + index + ']' + id
329
+ }
330
+
331
+ function fail(flags, index, entry, reason, expected, actual) {
332
+ let msg = 'omni: ' + entryref(flags, index, entry) + ': ' + reason
333
+ if (undefined !== expected) {
334
+ msg += '\n expected: ' + expected
335
+ }
336
+ if (undefined !== actual) {
337
+ msg += '\n actual: ' + actual
338
+ }
339
+ msg += '\n entry: ' + stringify(entrysummary(entry))
340
+ return new OmniError(msg, entry)
341
+ }
342
+
343
+ // The spec-defined part of an entry (drop runner bookkeeping).
344
+ function entrysummary(entry) {
345
+ if (!ismap(entry)) {
346
+ return entry
347
+ }
348
+ const out = {}
349
+ for (const key of Object.keys(entry)) {
350
+ if ('res' !== key && 'thrown' !== key && 'ctx' !== key) {
351
+ out[key] = entry[key]
352
+ }
353
+ }
354
+ return out
355
+ }
356
+
357
+ function checkresult(flags, index, entry, args, res) {
358
+ let matched = false
359
+
360
+ if (null != entry.err) {
361
+ throw fail(
362
+ flags,
363
+ index,
364
+ entry,
365
+ 'expected error did not occur',
366
+ stringify(entry.err),
367
+ stringify(res),
368
+ )
369
+ }
370
+
371
+ if (null != entry.match) {
372
+ match(flags, index, entry, entry.match, {
373
+ in: entry.in,
374
+ args,
375
+ out: entry.res,
376
+ ctx: entry.ctx,
377
+ })
378
+ matched = true
379
+ }
380
+
381
+ const out = entry.out
382
+
383
+ if (out === res) {
384
+ return
385
+ }
386
+
387
+ // NOTE: a match with no explicit out is a complete check on its own.
388
+ if (matched && (NULLMARK === out || null == out)) {
389
+ return
390
+ }
391
+
392
+ if (!deepequal(res, out)) {
393
+ throw fail(flags, index, entry, 'result mismatch', stringify(out), stringify(res))
394
+ }
395
+ }
396
+
397
+ function handleerror(flags, index, entry, err, provider) {
398
+ entry.thrown = err
399
+
400
+ const entryerr = entry.err
401
+
402
+ if (null != entryerr) {
403
+ if (true === entryerr || matchval(entryerr, errmessage(err))) {
404
+ if (null != entry.match) {
405
+ match(flags, index, entry, entry.match, {
406
+ in: entry.in,
407
+ out: entry.res,
408
+ ctx: entry.ctx,
409
+ err: errbase(err, provider),
410
+ })
411
+ }
412
+ return
413
+ }
414
+
415
+ throw fail(flags, index, entry, 'error mismatch', stringify(entryerr), errmessage(err))
416
+ }
417
+
418
+ throw fail(flags, index, entry, 'unexpected error', undefined, errmessage(err))
419
+ }
420
+
421
+ // Check that every leaf of `check` is present, and matches, in `base`.
422
+ function match(flags, index, entry, check, base) {
423
+ // Read the base DIRECTLY. The clone bought nothing - the walk below only
424
+ // reads, via getpath - and it blows the stack on a cyclic base. A port
425
+ // that drives entries with live objects rather than pure JSON produces
426
+ // those routinely: voxgig/sdkgen's corpus matches against a live client
427
+ // context whose root context reaches the client again.
428
+ const cbase = base
429
+
430
+ const at = (path) => (0 === path.length ? '<root>' : pathify(path))
431
+
432
+ walk(clone(check), (_key, val, _parent, path) => {
433
+ // An empty container in the check is a structural placeholder: it has
434
+ // no leaves to check, so it matches whatever is at that path. This is
435
+ // deliberate - voxgig/struct's corpus relies on it (struct-compat), and
436
+ // an empty sub-pattern matching anything is the usual partial-match
437
+ // convention. The leaf checks below are where the strictness lives.
438
+ if (!isnode(val)) {
439
+ const baseval = getpath(cbase, path)
440
+
441
+ // The sentinels are tested BEFORE the identity check below. Otherwise
442
+ // a subject returning the literal string "__UNDEF__" satisfies an
443
+ // assertion that the key is absent - two mutually exclusive states
444
+ // passing one check. A sentinel that accepts its own literal is not a
445
+ // sentinel. (NULLMARK still accepts NULLMARK: under the default null
446
+ // flag a real null has already been normalised to it, so the two are
447
+ // genuinely indistinguishable here - that one needs a raw-value
448
+ // escape, not an ordering change.)
449
+
450
+ // Explicitly absent: satisfied only by a genuinely missing key, never
451
+ // by a present null (the distinction the sentinels exist to keep).
452
+ if (UNDEFMARK === val) {
453
+ if (undefined === baseval) {
454
+ return val
455
+ }
456
+ throw fail(flags, index, entry, 'expected absent at ' + at(path), 'absent', stringify(baseval))
457
+ }
458
+
459
+ // Explicitly null: satisfied only by a present null.
460
+ if (NULLMARK === val) {
461
+ if (null === baseval || NULLMARK === baseval) {
462
+ return val
463
+ }
464
+ throw fail(flags, index, entry, 'expected null at ' + at(path), 'null', stringify(baseval))
465
+ }
466
+
467
+ // Explicitly present: any present value, including null.
468
+ if (EXISTSMARK === val) {
469
+ if (undefined !== baseval) {
470
+ return val
471
+ }
472
+ throw fail(flags, index, entry, 'expected present at ' + at(path), 'present', 'absent')
473
+ }
474
+
475
+ // Identical values match. This sits below the sentinel branches on
476
+ // purpose - see the note above.
477
+ if (baseval === val) {
478
+ return val
479
+ }
480
+
481
+ // A concrete expectation never matches a missing key - a match leaf
482
+ // against an absent value must fail, not substring-match "undefined".
483
+ if (undefined === baseval) {
484
+ throw fail(flags, index, entry, 'match failed at ' + at(path), stringify(val), 'absent')
485
+ }
486
+
487
+ if (!matchval(val, baseval)) {
488
+ throw fail(flags, index, entry, 'match failed at ' + at(path), stringify(val), stringify(baseval))
489
+ }
490
+ }
491
+
492
+ return val
493
+ })
494
+ }
495
+
496
+
497
+ // Match one leaf. Strings are matched as /regex/ or as a case-insensitive
498
+ // substring, which is what makes error-message expectations portable.
499
+ function matchval(check, base) {
500
+ if (check === base) {
501
+ return true
502
+ }
503
+
504
+ let want = check
505
+ if (UNDEFMARK === want || NULLMARK === want) {
506
+ want = null
507
+ }
508
+
509
+ if (null == want) {
510
+ return null == base || NULLMARK === base
511
+ }
512
+
513
+ if ('string' === typeof want) {
514
+ // An empty want is not a wildcard: the empty string is a substring of
515
+ // everything, so `match:{out:""}` (or `err:""`) would accept any value.
516
+ if ('' === want) {
517
+ return '' === base
518
+ }
519
+
520
+ const basestr = stringify(base)
521
+
522
+ const rem = want.match(/^\/(.+)\/$/)
523
+ if (rem) {
524
+ return new RegExp(rem[1]).test(basestr)
525
+ }
526
+
527
+ return basestr.toLowerCase().includes(want.toLowerCase())
528
+ }
529
+
530
+ if ('function' === typeof want) {
531
+ return true
532
+ }
533
+
534
+ return deepequal(want, base)
535
+ }
536
+
537
+ // Convert NULLMARK sentinels back into real nulls.
538
+ function nullmodifier(val, key, parent) {
539
+ if (NULLMARK === val) {
540
+ parent[key] = null
541
+ } else if ('string' === typeof val) {
542
+ parent[key] = val.split(NULLMARK).join('null')
543
+ }
544
+ }
545
+
546
+ // Make a runner for a spec file (or spec object) and a provider.
547
+ async function makeRunner(specref, provider) {
548
+ const alltests = loadspec(specref)
549
+ const specversion = resolveversion(alltests)
550
+ const useprovider = provider || {}
551
+
552
+ return async function runner(name, store) {
553
+ const spec = resolvespec(name, alltests)
554
+ const clients = await resolveclients(useprovider, spec, store || {})
555
+ const defsubject = resolvesubject(name, useprovider)
556
+
557
+ const runsetflags = async (testspec, flags, testsubject) => {
558
+ const useflags = resolveflags(flags)
559
+ useflags.name = useflags.name || name || 'set'
560
+
561
+ const subject = testsubject || defsubject
562
+ if (null == subject) {
563
+ throw new OmniError('omni: no test subject for: ' + useflags.name)
564
+ }
565
+
566
+ const testspecmap = fixjson(testspec, useflags)
567
+
568
+ if (!ismap(testspecmap) || !islist(testspecmap.set)) {
569
+ throw new OmniError('omni: test spec has no set: ' + useflags.name)
570
+ }
571
+
572
+ const testset = testspecmap.set
573
+
574
+ if (1 <= specversion) {
575
+ checkset(useflags, testspec, testset)
576
+ }
577
+
578
+ for (let index = 0; index < testset.length; index++) {
579
+ let entry = testset[index]
580
+
581
+ try {
582
+ entry = resolveentry(entry, useflags)
583
+
584
+ const testpack = resolvetestpack(name, entry, subject, useprovider, clients)
585
+ const args = resolveargs(entry, testpack, useprovider)
586
+
587
+ let res = await testpack.subject(...args)
588
+ res = fixjson(res, useflags)
589
+ entry.res = res
590
+
591
+ checkresult(useflags, index, entry, args, res)
592
+ } catch (err) {
593
+ if (err instanceof OmniError) {
594
+ throw err
595
+ }
596
+ handleerror(useflags, index, entry, err, useprovider)
597
+ }
598
+ }
599
+ }
600
+
601
+ const runset = async (testspec, testsubject) => runsetflags(testspec, {}, testsubject)
602
+
603
+ return {
604
+ spec,
605
+ runset,
606
+ runsetflags,
607
+ subject: defsubject,
608
+ client: useprovider,
609
+ }
610
+ }
611
+ }
612
+
613
+ module.exports = {
614
+ CAPABILITIES,
615
+ EXISTSMARK,
616
+ NULLMARK,
617
+ OmniError,
618
+ SPECVERSION,
619
+ UNDEFMARK,
620
+ errify,
621
+ fixjson,
622
+ loadspec,
623
+ makeRunner,
624
+ match,
625
+ matchval,
626
+ nullmodifier,
627
+ resolvespec,
628
+ }