@voxgig/sdkgen 4.8.2 → 4.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -0,0 +1,613 @@
1
+ // VENDORED: @voxgig/omni 0.1.4 (javascript/src/runner.js)
2
+ // Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // 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
+ return { name: 'Error', message: String(err) }
303
+ }
304
+
305
+ // The error base a `match.err` sees: the provider's own, when it has one.
306
+ function errbase(err, provider) {
307
+ return null != provider && null != provider.errify ? provider.errify(err) : errify(err)
308
+ }
309
+
310
+ function errmessage(err) {
311
+ return err instanceof Error ? err.message : String(err)
312
+ }
313
+
314
+ // The label of one entry, for failure messages.
315
+ function entryref(flags, index, entry) {
316
+ const label = flags.name || 'set'
317
+ const id = null != entry && null != entry.id ? ' (' + entry.id + ')' : ''
318
+ return label + '[' + index + ']' + id
319
+ }
320
+
321
+ function fail(flags, index, entry, reason, expected, actual) {
322
+ let msg = 'omni: ' + entryref(flags, index, entry) + ': ' + reason
323
+ if (undefined !== expected) {
324
+ msg += '\n expected: ' + expected
325
+ }
326
+ if (undefined !== actual) {
327
+ msg += '\n actual: ' + actual
328
+ }
329
+ msg += '\n entry: ' + stringify(entrysummary(entry))
330
+ return new OmniError(msg, entry)
331
+ }
332
+
333
+ // The spec-defined part of an entry (drop runner bookkeeping).
334
+ function entrysummary(entry) {
335
+ if (!ismap(entry)) {
336
+ return entry
337
+ }
338
+ const out = {}
339
+ for (const key of Object.keys(entry)) {
340
+ if ('res' !== key && 'thrown' !== key && 'ctx' !== key) {
341
+ out[key] = entry[key]
342
+ }
343
+ }
344
+ return out
345
+ }
346
+
347
+ function checkresult(flags, index, entry, args, res) {
348
+ let matched = false
349
+
350
+ if (null != entry.err) {
351
+ throw fail(
352
+ flags,
353
+ index,
354
+ entry,
355
+ 'expected error did not occur',
356
+ stringify(entry.err),
357
+ stringify(res),
358
+ )
359
+ }
360
+
361
+ if (null != entry.match) {
362
+ match(flags, index, entry, entry.match, {
363
+ in: entry.in,
364
+ args,
365
+ out: entry.res,
366
+ ctx: entry.ctx,
367
+ })
368
+ matched = true
369
+ }
370
+
371
+ const out = entry.out
372
+
373
+ if (out === res) {
374
+ return
375
+ }
376
+
377
+ // NOTE: a match with no explicit out is a complete check on its own.
378
+ if (matched && (NULLMARK === out || null == out)) {
379
+ return
380
+ }
381
+
382
+ if (!deepequal(res, out)) {
383
+ throw fail(flags, index, entry, 'result mismatch', stringify(out), stringify(res))
384
+ }
385
+ }
386
+
387
+ function handleerror(flags, index, entry, err, provider) {
388
+ entry.thrown = err
389
+
390
+ const entryerr = entry.err
391
+
392
+ if (null != entryerr) {
393
+ if (true === entryerr || matchval(entryerr, errmessage(err))) {
394
+ if (null != entry.match) {
395
+ match(flags, index, entry, entry.match, {
396
+ in: entry.in,
397
+ out: entry.res,
398
+ ctx: entry.ctx,
399
+ err: errbase(err, provider),
400
+ })
401
+ }
402
+ return
403
+ }
404
+
405
+ throw fail(flags, index, entry, 'error mismatch', stringify(entryerr), errmessage(err))
406
+ }
407
+
408
+ throw fail(flags, index, entry, 'unexpected error', undefined, errmessage(err))
409
+ }
410
+
411
+ // Check that every leaf of `check` is present, and matches, in `base`.
412
+ function match(flags, index, entry, check, base) {
413
+ const cbase = clone(base)
414
+
415
+ const at = (path) => (0 === path.length ? '<root>' : pathify(path))
416
+
417
+ walk(clone(check), (_key, val, _parent, path) => {
418
+ // An empty container in the check is a structural placeholder: it has
419
+ // no leaves to check, so it matches whatever is at that path. This is
420
+ // deliberate - voxgig/struct's corpus relies on it (struct-compat), and
421
+ // an empty sub-pattern matching anything is the usual partial-match
422
+ // convention. The leaf checks below are where the strictness lives.
423
+ if (!isnode(val)) {
424
+ const baseval = getpath(cbase, path)
425
+
426
+ // The sentinels are tested BEFORE the identity check below. Otherwise
427
+ // a subject returning the literal string "__UNDEF__" satisfies an
428
+ // assertion that the key is absent - two mutually exclusive states
429
+ // passing one check. A sentinel that accepts its own literal is not a
430
+ // sentinel. (NULLMARK still accepts NULLMARK: under the default null
431
+ // flag a real null has already been normalised to it, so the two are
432
+ // genuinely indistinguishable here - that one needs a raw-value
433
+ // escape, not an ordering change.)
434
+
435
+ // Explicitly absent: satisfied only by a genuinely missing key, never
436
+ // by a present null (the distinction the sentinels exist to keep).
437
+ if (UNDEFMARK === val) {
438
+ if (undefined === baseval) {
439
+ return val
440
+ }
441
+ throw fail(flags, index, entry, 'expected absent at ' + at(path), 'absent', stringify(baseval))
442
+ }
443
+
444
+ // Explicitly null: satisfied only by a present null.
445
+ if (NULLMARK === val) {
446
+ if (null === baseval || NULLMARK === baseval) {
447
+ return val
448
+ }
449
+ throw fail(flags, index, entry, 'expected null at ' + at(path), 'null', stringify(baseval))
450
+ }
451
+
452
+ // Explicitly present: any present value, including null.
453
+ if (EXISTSMARK === val) {
454
+ if (undefined !== baseval) {
455
+ return val
456
+ }
457
+ throw fail(flags, index, entry, 'expected present at ' + at(path), 'present', 'absent')
458
+ }
459
+
460
+ // Identical values match. This sits below the sentinel branches on
461
+ // purpose - see the note above.
462
+ if (baseval === val) {
463
+ return val
464
+ }
465
+
466
+ // A concrete expectation never matches a missing key - a match leaf
467
+ // against an absent value must fail, not substring-match "undefined".
468
+ if (undefined === baseval) {
469
+ throw fail(flags, index, entry, 'match failed at ' + at(path), stringify(val), 'absent')
470
+ }
471
+
472
+ if (!matchval(val, baseval)) {
473
+ throw fail(flags, index, entry, 'match failed at ' + at(path), stringify(val), stringify(baseval))
474
+ }
475
+ }
476
+
477
+ return val
478
+ })
479
+ }
480
+
481
+
482
+ // Match one leaf. Strings are matched as /regex/ or as a case-insensitive
483
+ // substring, which is what makes error-message expectations portable.
484
+ function matchval(check, base) {
485
+ if (check === base) {
486
+ return true
487
+ }
488
+
489
+ let want = check
490
+ if (UNDEFMARK === want || NULLMARK === want) {
491
+ want = null
492
+ }
493
+
494
+ if (null == want) {
495
+ return null == base || NULLMARK === base
496
+ }
497
+
498
+ if ('string' === typeof want) {
499
+ // An empty want is not a wildcard: the empty string is a substring of
500
+ // everything, so `match:{out:""}` (or `err:""`) would accept any value.
501
+ if ('' === want) {
502
+ return '' === base
503
+ }
504
+
505
+ const basestr = stringify(base)
506
+
507
+ const rem = want.match(/^\/(.+)\/$/)
508
+ if (rem) {
509
+ return new RegExp(rem[1]).test(basestr)
510
+ }
511
+
512
+ return basestr.toLowerCase().includes(want.toLowerCase())
513
+ }
514
+
515
+ if ('function' === typeof want) {
516
+ return true
517
+ }
518
+
519
+ return deepequal(want, base)
520
+ }
521
+
522
+ // Convert NULLMARK sentinels back into real nulls.
523
+ function nullmodifier(val, key, parent) {
524
+ if (NULLMARK === val) {
525
+ parent[key] = null
526
+ } else if ('string' === typeof val) {
527
+ parent[key] = val.split(NULLMARK).join('null')
528
+ }
529
+ }
530
+
531
+ // Make a runner for a spec file (or spec object) and a provider.
532
+ async function makeRunner(specref, provider) {
533
+ const alltests = loadspec(specref)
534
+ const specversion = resolveversion(alltests)
535
+ const useprovider = provider || {}
536
+
537
+ return async function runner(name, store) {
538
+ const spec = resolvespec(name, alltests)
539
+ const clients = await resolveclients(useprovider, spec, store || {})
540
+ const defsubject = resolvesubject(name, useprovider)
541
+
542
+ const runsetflags = async (testspec, flags, testsubject) => {
543
+ const useflags = resolveflags(flags)
544
+ useflags.name = useflags.name || name || 'set'
545
+
546
+ const subject = testsubject || defsubject
547
+ if (null == subject) {
548
+ throw new OmniError('omni: no test subject for: ' + useflags.name)
549
+ }
550
+
551
+ const testspecmap = fixjson(testspec, useflags)
552
+
553
+ if (!ismap(testspecmap) || !islist(testspecmap.set)) {
554
+ throw new OmniError('omni: test spec has no set: ' + useflags.name)
555
+ }
556
+
557
+ const testset = testspecmap.set
558
+
559
+ if (1 <= specversion) {
560
+ checkset(useflags, testspec, testset)
561
+ }
562
+
563
+ for (let index = 0; index < testset.length; index++) {
564
+ let entry = testset[index]
565
+
566
+ try {
567
+ entry = resolveentry(entry, useflags)
568
+
569
+ const testpack = resolvetestpack(name, entry, subject, useprovider, clients)
570
+ const args = resolveargs(entry, testpack, useprovider)
571
+
572
+ let res = await testpack.subject(...args)
573
+ res = fixjson(res, useflags)
574
+ entry.res = res
575
+
576
+ checkresult(useflags, index, entry, args, res)
577
+ } catch (err) {
578
+ if (err instanceof OmniError) {
579
+ throw err
580
+ }
581
+ handleerror(useflags, index, entry, err, useprovider)
582
+ }
583
+ }
584
+ }
585
+
586
+ const runset = async (testspec, testsubject) => runsetflags(testspec, {}, testsubject)
587
+
588
+ return {
589
+ spec,
590
+ runset,
591
+ runsetflags,
592
+ subject: defsubject,
593
+ client: useprovider,
594
+ }
595
+ }
596
+ }
597
+
598
+ module.exports = {
599
+ CAPABILITIES,
600
+ EXISTSMARK,
601
+ NULLMARK,
602
+ OmniError,
603
+ SPECVERSION,
604
+ UNDEFMARK,
605
+ errify,
606
+ fixjson,
607
+ loadspec,
608
+ makeRunner,
609
+ match,
610
+ matchval,
611
+ nullmodifier,
612
+ resolvespec,
613
+ }