@voxgig/sdkgen 4.8.2 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/model/target/zig.aon +9 -0
  33. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  34. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  35. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  36. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  37. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  38. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  39. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  40. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  41. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  45. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  46. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  47. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  48. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  49. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  50. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  51. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  52. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  53. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  54. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  55. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  56. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  57. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  58. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  59. package/project/.sdk/tm/c/Makefile +38 -3
  60. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  61. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  62. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  63. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  64. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  65. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  66. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  67. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  68. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  69. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  70. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  71. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  72. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  73. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  74. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  75. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  76. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  77. package/project/.sdk/tm/cpp/Makefile +5 -1
  78. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  79. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  80. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  81. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  82. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  83. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  84. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  85. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  86. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  87. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  88. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  89. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  90. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  91. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  92. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  93. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  94. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  95. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  96. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  97. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  98. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  99. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  100. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  101. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  102. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  103. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  104. package/project/.sdk/tm/elixir/Makefile +11 -3
  105. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  106. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  107. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  108. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  109. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  110. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  111. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  112. package/project/.sdk/tm/go/core/context.go +32 -16
  113. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  133. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  134. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
  135. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  136. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
  137. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  138. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  139. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  140. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
  141. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
  142. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  143. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  144. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  145. package/project/.sdk/tm/go/test/omni/omni.go +902 -0
  146. package/project/.sdk/tm/go/test/omni/util.go +381 -0
  147. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  148. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  149. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  150. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  151. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  152. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  153. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  154. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  155. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  156. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  157. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  158. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  159. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  160. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  161. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  162. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  163. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  164. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  165. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  166. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  167. package/project/.sdk/tm/js/test/omni.js +251 -0
  168. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  169. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  170. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  171. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  172. package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
  173. package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
  174. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  175. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  176. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  177. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  178. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  179. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  180. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  181. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  182. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  183. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  184. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  185. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  186. package/project/.sdk/tm/lean/Makefile +12 -5
  187. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  188. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  189. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  190. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  191. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  192. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  193. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  194. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  195. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  196. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  197. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  198. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  199. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  200. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  201. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  202. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  203. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  204. package/project/.sdk/tm/ocaml/Makefile +37 -12
  205. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  206. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  207. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  208. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  209. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  210. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  211. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  212. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  213. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  214. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  215. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  216. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  217. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  218. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  219. package/project/.sdk/tm/php/test/Omni.php +691 -0
  220. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  221. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  222. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  223. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  224. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  225. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  226. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  227. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
  253. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  254. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  255. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  256. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  257. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
  258. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  259. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  260. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  261. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  262. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  263. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  264. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  265. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  266. package/project/.sdk/tm/py/test/omni.py +415 -0
  267. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  268. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  269. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  270. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  271. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
  272. package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
  273. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  274. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  275. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  276. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  277. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  278. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  279. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  280. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  281. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  282. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  283. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  284. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  285. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  286. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  287. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  288. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  289. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  290. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  291. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  292. package/project/.sdk/tm/scala/Makefile +16 -6
  293. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  294. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  295. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  296. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  297. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  298. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  299. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  300. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  301. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  302. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  303. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  304. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  305. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  306. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  307. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  308. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  309. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  310. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  311. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  312. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  313. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  326. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  327. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  328. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  329. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  330. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  345. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  346. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  347. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  348. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  349. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  350. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  351. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  352. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  353. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  354. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  355. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  356. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  357. package/project/.sdk/tm/zig/Makefile +15 -1
  358. package/project/.sdk/tm/zig/build.zig +23 -5
  359. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  360. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  361. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  362. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  363. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  364. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  365. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  366. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  367. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  368. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  369. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  370. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  371. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  372. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  373. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  374. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  375. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  376. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  377. package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
  378. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  379. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  380. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  381. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  382. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  383. package/project/sdkgen-package.json +1 -1
  384. package/src/action/doctor.ts +66 -2
  385. package/src/helpers/naming.ts +4 -2
  386. package/project/.sdk/tm/c/tests/runner.h +0 -274
  387. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  388. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  389. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  390. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  391. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  392. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  393. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  394. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  395. package/project/.sdk/tm/js/test/runner.js +0 -387
  396. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  397. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  398. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  399. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  400. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  401. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  402. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  403. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  404. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  405. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  406. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
  407. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
@@ -1,275 +0,0 @@
1
- <?php
2
-
3
- namespace Voxgig\Struct;
4
-
5
- use Exception;
6
-
7
- // Vendored from voxgig/struct/php
8
- require_once __DIR__ . '/../utility/struct/Struct.php';
9
-
10
- class Runner {
11
-
12
- private const NULLMARK = "__NULL__";
13
- private const UNDEFMARK = "__UNDEF__";
14
-
15
- public static function makeRunner(string $testfile, $client): callable {
16
- return function (string $name, $store = null) use ($testfile, $client) {
17
- $store = $store ?? [];
18
- $utility = $client->utility();
19
- $structUtils = $utility->struct;
20
- $spec = self::resolveSpec($name, $testfile);
21
- $clients = self::resolveClients($client, $spec, $store, $structUtils);
22
- $subject = self::resolveSubject($name, $utility);
23
-
24
- $runsetflags = function ($testspec, array $flags = [], $testsubject = null) use ($name, $client, $structUtils, &$subject, $clients) {
25
- $subject = $testsubject ?? $subject;
26
- $flags = self::resolveFlags($flags);
27
- $testspecmap = self::fixJSON($testspec, $flags);
28
- if (!isset($testspecmap['set']) || !is_array($testspecmap['set'])) {
29
- throw new Exception("Test specification 'set' is missing or not an array");
30
- }
31
- $testset = $testspecmap['set'];
32
- foreach ($testset as &$entry) {
33
- try {
34
- $entry = self::resolveEntry($entry, $flags);
35
- $testpack = self::resolveTestPack($name, $entry, $subject, $client, $clients);
36
- $args = self::resolveArgs($entry, $testpack, $structUtils);
37
- $res = call_user_func_array($testpack['subject'], $args);
38
- $res = self::fixJSON($res, $flags);
39
- $entry['res'] = $res;
40
- self::checkResult($entry, $res, $structUtils);
41
- } catch (Exception $err) {
42
- self::handleError($entry, $err, $structUtils);
43
- }
44
- }
45
- };
46
-
47
- $runset = function ($testspec, $testsubject = null) use ($runsetflags) {
48
- $runsetflags($testspec, [], $testsubject);
49
- };
50
-
51
- return [
52
- 'spec' => $spec,
53
- 'runset' => $runset,
54
- 'runsetflags' => $runsetflags,
55
- 'subject' => $subject,
56
- 'client' => $client,
57
- ];
58
- };
59
- }
60
-
61
- private static function resolveSpec(string $name, string $testfile): array {
62
- // If $testfile is an absolute path, use it as-is; otherwise, build a path relative to __DIR__
63
- if (preg_match('/^(\/|[A-Za-z]:[\/\\\\])/', $testfile)) {
64
- $path = $testfile;
65
- } else {
66
- $path = rtrim(__DIR__, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $testfile;
67
- }
68
- $json = file_get_contents($path);
69
- if ($json === false) {
70
- throw new Exception("Unable to read test file at $path");
71
- }
72
- $alltests = json_decode($json, true);
73
- if (isset($alltests['primary'][$name])) {
74
- return $alltests['primary'][$name];
75
- } elseif (isset($alltests[$name])) {
76
- return $alltests[$name];
77
- } else {
78
- return $alltests;
79
- }
80
- }
81
-
82
- private static function resolveClients($client, array $spec, $store, $structUtils): array {
83
- $clients = [];
84
- if (isset($spec['DEF']) && isset($spec['DEF']['client'])) {
85
- foreach ($spec['DEF']['client'] as $cn => $cdef) {
86
- $copts = $cdef['test']['options'] ?? [];
87
- if (is_array($store) && method_exists($structUtils, 'inject')) {
88
- $structUtils->inject($copts, $store);
89
- }
90
- $clients[$cn] = $client->test($copts);
91
- }
92
- }
93
- return $clients;
94
- }
95
-
96
- private static function resolveSubject(string $name, $container, $subject = null) {
97
- return $subject ?? ($container->$name ?? null);
98
- }
99
-
100
- private static function resolveFlags($flags = null): array {
101
- if ($flags === null) {
102
- $flags = [];
103
- }
104
- $flags['null'] = $flags['null'] ?? true;
105
- $flags['null'] = (bool)$flags['null'];
106
- return $flags;
107
- }
108
-
109
- private static function resolveEntry($entry, array $flags) {
110
- if (!isset($entry['out']) && $flags['null']) {
111
- $entry['out'] = self::NULLMARK;
112
- }
113
- return $entry;
114
- }
115
-
116
- private static function checkResult(array $entry, $res, $structUtils) {
117
- $matched = false;
118
- if (isset($entry['match'])) {
119
- $result = [
120
- 'in' => $entry['in'] ?? null,
121
- 'out' => $entry['res'] ?? null,
122
- 'ctx' => $entry['ctx'] ?? null,
123
- ];
124
- self::match($entry['match'], $result, $structUtils);
125
- $matched = true;
126
- }
127
- if (isset($entry['out']) && $entry['out'] === $res) {
128
- return;
129
- }
130
- if ($matched && ($entry['out'] === self::NULLMARK || $entry['out'] === null)) {
131
- return;
132
- }
133
- if (json_encode($res) !== json_encode($entry['out'])) {
134
- throw new \AssertionError('Deep equality failed: expected ' .
135
- $structUtils->stringify($entry['out']) . ' but got ' .
136
- $structUtils->stringify($res));
137
- }
138
- }
139
-
140
- private static function handleError(&$entry, \Exception $err, $structUtils) {
141
- $entry['thrown'] = $err->getMessage();
142
- if (isset($entry['err'])) {
143
- if ($entry['err'] === true || self::matchval($entry['err'], $err->getMessage(), $structUtils)) {
144
- if (isset($entry['match'])) {
145
- self::match(
146
- $entry['match'],
147
- [
148
- 'in' => $entry['in'] ?? null,
149
- 'out' => $entry['res'] ?? null,
150
- 'ctx' => $entry['ctx'] ?? null,
151
- 'err' => $err->getMessage(),
152
- ],
153
- $structUtils
154
- );
155
- }
156
- return;
157
- }
158
- throw new \AssertionError('ERROR MATCH: [' . $structUtils->stringify($entry['err']) .
159
- '] <=> [' . $err->getMessage() . ']');
160
- } elseif ($err instanceof \AssertionError) {
161
- throw new \AssertionError($err->getMessage() .
162
- "\n\nENTRY: " . json_encode($entry, JSON_PRETTY_PRINT));
163
- } else {
164
- throw new Exception($err->getTraceAsString() .
165
- "\n\nENTRY: " . json_encode($entry, JSON_PRETTY_PRINT));
166
- }
167
- }
168
-
169
- private static function resolveArgs($entry, array $testpack, $structUtils): array {
170
- $args = [];
171
- if (isset($entry['in'])) {
172
- $args[] = $structUtils->clone($entry['in']);
173
- }
174
- if (isset($entry['ctx'])) {
175
- $args = [$entry['ctx']];
176
- } elseif (isset($entry['args'])) {
177
- $args = $entry['args'];
178
- }
179
- if ((isset($entry['ctx']) || isset($entry['args'])) && isset($args[0]) && is_array($args[0])) {
180
- $first = $structUtils->clone($args[0]);
181
- $first['client'] = $testpack['client'];
182
- $first['utility'] = $testpack['utility'];
183
- $args[0] = $first;
184
- $entry['ctx'] = $first;
185
- }
186
- return $args;
187
- }
188
-
189
- private static function resolveTestPack(string $name, $entry, $subject, $client, array $clients): array {
190
- $testpack = [
191
- 'client' => $client,
192
- 'subject' => $subject,
193
- 'utility' => $client->utility(),
194
- ];
195
- if (isset($entry['client'])) {
196
- $testpack['client'] = $clients[$entry['client']] ?? $client;
197
- $testpack['utility'] = $testpack['client']->utility();
198
- $testpack['subject'] = self::resolveSubject($name, $testpack['utility']);
199
- }
200
- return $testpack;
201
- }
202
-
203
- private static function match($check, $base, $structUtils): void {
204
- $structUtils->walk($check, function ($key, $val, $parent, $path) use ($base, $structUtils) {
205
- if (!is_array($val) && !is_object($val)) {
206
- $baseval = $structUtils->getpath($base, $path);
207
- if ($baseval === $val) {
208
- return;
209
- }
210
- if ($val === self::UNDEFMARK && $baseval === null) {
211
- return;
212
- }
213
- if (!self::matchval($val, $baseval, $structUtils)) {
214
- throw new \AssertionError(
215
- 'MATCH: ' . implode('.', $path) .
216
- ': [' . $structUtils->stringify($val) .
217
- '] <=> [' . $structUtils->stringify($baseval) . ']'
218
- );
219
- }
220
- }
221
- });
222
- }
223
-
224
- private static function matchval($check, $base, $structUtils): bool {
225
- $pass = ($check === $base);
226
- if (!$pass) {
227
- if (is_string($check)) {
228
- $basestr = $structUtils->stringify($base);
229
- if (preg_match('/^\/(.+)\/$/', $check, $matches)) {
230
- $pass = preg_match('/' . $matches[1] . '/', $basestr) === 1;
231
- } else {
232
- $pass = stripos($basestr, $structUtils->stringify($check)) !== false;
233
- }
234
- } elseif (is_callable($check)) {
235
- $pass = true;
236
- }
237
- }
238
- return $pass;
239
- }
240
-
241
- private static function fixJSON($val, array $flags) {
242
- if ($val === null) {
243
- return $flags['null'] ? self::NULLMARK : $val;
244
- }
245
- $replacer = function ($v) use ($flags, &$replacer) {
246
- if ($v === null && $flags['null']) {
247
- return self::NULLMARK;
248
- }
249
- if ($v instanceof \Exception) {
250
- return array_merge(get_object_vars($v), [
251
- 'name' => get_class($v),
252
- 'message' => $v->getMessage(),
253
- ]);
254
- }
255
- if (is_array($v)) {
256
- return array_map($replacer, $v);
257
- }
258
- if (is_object($v)) {
259
- $arr = get_object_vars($v);
260
- return array_map($replacer, $arr);
261
- }
262
- return $v;
263
- };
264
- $fixed = $replacer($val);
265
- return json_decode(json_encode($fixed), true);
266
- }
267
-
268
- public static function nullModifier($val, $key, array &$parent) {
269
- if ($val === self::NULLMARK) {
270
- $parent[$key] = null;
271
- } elseif (is_string($val)) {
272
- $parent[$key] = str_replace('__NULL__', 'null', $val);
273
- }
274
- }
275
- }
@@ -1,411 +0,0 @@
1
- # Vendored from voxgig/struct/py
2
- # Test runner that uses the test model in build/test.
3
-
4
- import os
5
- import json
6
- import re
7
- from typing import Any, Dict, List, Callable, TypedDict, Optional, Union
8
-
9
- from projectname_sdk.utility.voxgig_struct import voxgig_struct as vs
10
-
11
-
12
- NULLMARK = '__NULL__' # Value is JSON null
13
- UNDEFMARK = '__UNDEF__' # Value is not present (thus, undefined)
14
- EXISTSMARK = '__EXISTS__' # Value exists (not undefined).
15
-
16
-
17
- class RunPack(TypedDict):
18
- spec: Dict[str, Any]
19
- runset: Callable
20
- runsetflags: Callable
21
- subject: Callable
22
- client: Optional[Any]
23
-
24
-
25
- def makeRunner(testfile: str, client: Any):
26
-
27
- def runner(
28
- name: str,
29
- store: Any = None,
30
- ) -> RunPack:
31
- store = store or {}
32
-
33
- utility = client.utility()
34
- structUtils = utility.struct
35
-
36
- spec = resolve_spec(name, testfile)
37
- clients = resolve_clients(client, spec, store, structUtils)
38
- subject = resolve_subject(name, utility)
39
-
40
- def runsetflags(testspec, flags, testsubject):
41
- nonlocal subject, clients
42
-
43
- subject = testsubject or subject
44
- flags = resolve_flags(flags)
45
- testspecmap = fixJSON(testspec, flags)
46
- testset = testspecmap['set']
47
-
48
- for entry in testset:
49
- try:
50
- entry = resolve_entry(entry, flags)
51
-
52
- testpack = resolve_testpack(name, entry, subject, client, clients)
53
- args = resolve_args(entry, testpack, utility, structUtils)
54
-
55
- # Execute the test function
56
- res = testpack["subject"](*args)
57
- res = fixJSON(res, flags)
58
- entry['res'] = res
59
- check_result(entry, args, res, structUtils)
60
-
61
- except Exception as err:
62
- handle_error(entry, err, structUtils)
63
-
64
- def runset(testspec, testsubject):
65
- return runsetflags(testspec, {}, testsubject)
66
-
67
- runpack = {
68
- "spec": spec,
69
- "runset": runset,
70
- "runsetflags": runsetflags,
71
- "subject": subject,
72
- "client": client
73
- }
74
-
75
- return runpack
76
-
77
- return runner
78
-
79
-
80
- def resolve_spec(name: str, testfile: str) -> Dict[str, Any]:
81
- with open(testfile, 'r', encoding='utf-8') as f:
82
- alltests = json.load(f)
83
-
84
- if 'primary' in alltests and name in alltests['primary']:
85
- spec = alltests['primary'][name]
86
- elif name in alltests:
87
- spec = alltests[name]
88
- else:
89
- spec = alltests
90
-
91
- return spec
92
-
93
-
94
- def resolve_clients(client: Any, spec: Dict[str, Any], store: Any, structUtils: Any) -> Dict[str, Any]:
95
- clients = {}
96
- if 'DEF' in spec and 'client' in spec['DEF']:
97
- for client_name, client_val in structUtils.items(spec['DEF']['client']):
98
- # Get client options
99
- client_opts = client_val.get('test', {}).get('options', {})
100
-
101
- # Apply store injections if needed
102
- if isinstance(store, dict) and structUtils.inject:
103
- structUtils.inject(client_opts, store)
104
-
105
- # Create and store the client using the passed client object
106
- clients[client_name] = client.tester(client_opts)
107
-
108
- return clients
109
-
110
-
111
- def resolve_subject(name: str, container: Any):
112
- return getattr(container, name, getattr(container.struct, name, None))
113
-
114
-
115
- def check_result(entry, args, res, structUtils):
116
- matched = False
117
-
118
- if 'match' in entry:
119
- result = {'in': entry.get('in'), 'args': args, 'out': entry.get('res'), 'ctx': entry.get('ctx')}
120
- match(
121
- entry['match'],
122
- result,
123
- structUtils
124
- )
125
- matched = True
126
-
127
- out = entry.get('out')
128
-
129
- if out == res:
130
- return
131
-
132
- # NOTE: allow match with no out
133
- if matched and (NULLMARK == out or out is None):
134
- return
135
-
136
- try:
137
- cleaned_res = json.loads(json.dumps(res, default=str))
138
- except:
139
- # If can't be serialized just use the original
140
- cleaned_res = res
141
-
142
- # Compare result with expected output using deep equality
143
- if cleaned_res != out:
144
- raise AssertionError(
145
- f"Expected: {out}, got: {cleaned_res}\n"
146
- f"Test: {entry.get('name', 'unknown')}"
147
- )
148
-
149
-
150
- def handle_error(entry, err, structUtils):
151
- # Record the error in the entry
152
- entry['thrown'] = err
153
- entry_err = entry.get('err')
154
-
155
- # If the test expects an error
156
- if entry_err is not None:
157
- # If it's any error or matches expected pattern
158
- if entry_err is True or matchval(entry_err, str(err), structUtils):
159
- # If we also need to match error details
160
- if 'match' in entry:
161
- match(
162
- entry['match'],
163
- {
164
- 'in': entry.get('in'),
165
- 'out': entry.get('res'),
166
- 'ctx': entry.get('ctx'),
167
- 'err': fixJSON(err)
168
- },
169
- structUtils
170
- )
171
- # Error was expected, continue
172
- return True
173
-
174
- # Expected error didn't match the actual error
175
- raise AssertionError(
176
- f"ERROR MATCH: [{structUtils.stringify(entry_err)}] <=> [{str(err)}]"
177
- )
178
- # If the test doesn't expect an error
179
- elif isinstance(err, AssertionError):
180
- # Propagate assertion errors with added context
181
- raise AssertionError(
182
- f"{str(err)}\nTest: {entry.get('name', 'unknown')}"
183
- )
184
- else:
185
- # For other errors, include the full error stack
186
- import traceback
187
- raise AssertionError(
188
- f"{traceback.format_exc()}\nTest: {entry.get('name', 'unknown')}"
189
- )
190
-
191
-
192
- def resolve_testpack(
193
- name,
194
- entry,
195
- subject,
196
- client,
197
- clients,
198
- ):
199
- testpack = {
200
- "client": client,
201
- "subject": subject,
202
- "utility": client.utility(),
203
- }
204
-
205
- if 'client' in entry:
206
- testpack["client"] = clients[entry['client']]
207
- testpack["utility"] = testpack["client"].utility()
208
- testpack["subject"] = resolve_subject(name, testpack["utility"])
209
-
210
- return testpack
211
-
212
-
213
- def resolve_args(entry, testpack, utility, structUtils):
214
- args = []
215
-
216
- if 'ctx' in entry:
217
- args = [entry['ctx']]
218
- elif 'args' in entry:
219
- args = entry['args']
220
- elif 'in' in entry:
221
- args = [structUtils.clone(entry['in'])]
222
-
223
- # If we have context or arguments, we might need to patch them
224
- if ('ctx' in entry or 'args' in entry) and len(args) > 0:
225
- first = args[0]
226
- if structUtils.ismap(first):
227
- # Clone the argument
228
- first = structUtils.clone(first)
229
- first = utility.contextify(first)
230
- args[0] = first
231
- entry['ctx'] = first
232
- first.client = testpack["client"]
233
- first.utility = testpack["utility"]
234
-
235
- return args
236
-
237
-
238
- def resolve_flags(flags: Dict[str, Any] = None) -> Dict[str, bool]:
239
- if flags is None:
240
- flags = {}
241
-
242
- flags["null"] = flags.get("null", True)
243
-
244
- return flags
245
-
246
-
247
- def resolve_entry(entry: Dict[str, Any], flags: Dict[str, bool]) -> Dict[str, Any]:
248
- # Set default output value for missing 'out' field
249
- if 'out' not in entry and flags.get("null", True):
250
- entry["out"] = NULLMARK
251
-
252
- return entry
253
-
254
-
255
- def fixJSON(obj, flags={}):
256
- # Handle nulls
257
- if obj is None:
258
- return NULLMARK if flags.get("null", True) else None
259
-
260
- # Handle errors
261
- if isinstance(obj, Exception):
262
- return {
263
- **vars(obj),
264
- 'name': type(obj).__name__,
265
- 'message': str(obj)
266
- }
267
-
268
- # Handle collections recursively
269
- elif isinstance(obj, list):
270
- return [fixJSON(item, flags) for item in obj]
271
- elif isinstance(obj, dict):
272
- return {k: fixJSON(v, flags) for k, v in obj.items()}
273
-
274
- # Return everything else unchanged
275
- return obj
276
-
277
-
278
- def jsonfallback(obj):
279
- return f"<non-serializable: {type(obj).__name__}>"
280
-
281
-
282
- def match(check, base, structUtils):
283
- base = structUtils.clone(base)
284
-
285
- # Use walk function to iterate through the check structure
286
- def walk_apply(_key, val, _parent, path):
287
- if not structUtils.isnode(val):
288
- baseval = structUtils.getpath(base, path)
289
-
290
- if baseval == val:
291
- return val
292
-
293
- # Explicit undefined expected
294
- if UNDEFMARK == val and baseval is None:
295
- return val
296
-
297
- # Explicit defined expected
298
- if EXISTSMARK == val and baseval is not None:
299
- return val
300
-
301
- if not matchval(val, baseval, structUtils):
302
- raise AssertionError(
303
- f"MATCH: {'.'.join(map(str, path))}: "
304
- f"[{structUtils.stringify(val)}] <=> [{structUtils.stringify(baseval)}]"
305
- )
306
- return val
307
-
308
- # Use walk to apply the check function to each node
309
- structUtils.walk(check, walk_apply)
310
-
311
-
312
- def matchval(check, base, structUtils):
313
- # Handle undefined special case
314
- if check == '__UNDEF__' or check == NULLMARK:
315
- check = None
316
-
317
- if check == base:
318
- return True
319
-
320
- # String-based pattern matching
321
- if isinstance(check, str):
322
- # Convert base to string for comparison
323
- base_str = structUtils.stringify(base)
324
-
325
- # Check for regex pattern with /pattern/ syntax
326
- regex_match = re.match(r'^/(.+)/$', check)
327
-
328
- if regex_match:
329
- pattern = regex_match.group(1)
330
- return re.search(pattern, base_str) is not None
331
- else:
332
- # Case-insensitive substring check
333
- return structUtils.stringify(check).lower() in base_str.lower()
334
-
335
- # Functions automatically pass
336
- elif callable(check):
337
- return True
338
-
339
- # No match
340
- return False
341
-
342
-
343
- def nullModifier(val, key, parent, _state=None, _current=None, _store=None):
344
- if NULLMARK == val:
345
- parent[key] = None
346
- elif isinstance(val, str):
347
- parent[key] = val.replace(NULLMARK, "null")
348
-
349
-
350
- # StructTestClient shim for running struct tests in the SDK context.
351
- # Wraps voxgig_struct as the struct utility, providing the client
352
- # interface expected by the runner.
353
-
354
- class StructContext:
355
- def __init__(self):
356
- self.client = None
357
- self.utility = None
358
- self.meta = {}
359
-
360
-
361
- class StructTestUtility:
362
- def __init__(self, opts=None):
363
- self._opts = opts
364
- self.struct = vs.StructUtility()
365
-
366
- def contextify(self, ctxmap):
367
- ctx = StructContext()
368
- meta = ctxmap.get('meta', {})
369
- for k, v in meta.items():
370
- ctx.meta[k] = v
371
- return ctx
372
-
373
- def check(self, ctx):
374
- zed = "ZED"
375
-
376
- if self._opts is None:
377
- zed += ""
378
- else:
379
- foo = self._opts.get("foo")
380
- zed += "0" if foo is None else str(foo)
381
-
382
- zed += "_"
383
- zed += str(ctx.meta.get("bar"))
384
-
385
- return {"zed": zed}
386
-
387
-
388
- class StructTestClient:
389
- def __init__(self, opts=None):
390
- self._opts = opts or {}
391
- self._utility = StructTestUtility(opts)
392
-
393
- @staticmethod
394
- def test(opts=None):
395
- return StructTestClient(opts)
396
-
397
- def tester(self, opts=None):
398
- return StructTestClient(self._opts if opts is None else opts)
399
-
400
- def utility(self):
401
- return self._utility
402
-
403
-
404
- # Export the necessary components similar to TypeScript
405
- __all__ = [
406
- 'NULLMARK',
407
- 'UNDEFMARK',
408
- 'nullModifier',
409
- 'makeRunner',
410
- 'StructTestClient',
411
- ]