@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
@@ -1,185 +0,0 @@
1
- (* Shared corpus harness for the ProjectName SDK.
2
- *
3
- * Extracted from struct_corpus.ml so the primary-utility suite can drive the
4
- * SAME runner over test.json's "primary" section. OCaml runs a module's
5
- * top-level effects on link, so a harness sitting beside a `let () = ...` main
6
- * cannot be reused — linking it would run the struct corpus as a side effect.
7
- * This module deliberately has no main.
8
- *)
9
-
10
- (* Test runner for the shared JSON corpus (build/test/test.json).
11
- * Self-contained: an in-tree JSON reader builds the library's `value` type
12
- * directly, so the OCaml port is exercised exactly as in production. *)
13
-
14
- open Voxgig_struct
15
-
16
- let nullmark = "__NULL__"
17
- let undefmark = "__UNDEF__"
18
- let existsmark = "__EXISTS__"
19
-
20
- (* The JSON reader now lives in the runtime (sdk_json.ml) so the SDK's
21
- * generated config can use it; the corpus runs against that same function
22
- * rather than a second copy that could drift from it. *)
23
- let json_read = Sdk_json.json_read
24
-
25
- (* ---------------- fixJSON / equality ---------------- *)
26
-
27
- let rec fix_json v flag_null =
28
- match v with
29
- | Noval | Null -> if flag_null then Str nullmark else v
30
- | Map m -> let o = empty_map () in
31
- List.iter (fun (k, x) -> ignore (setprop o (Str k) (fix_json x flag_null))) m.entries; o
32
- | List r -> lst (List.map (fun x -> fix_json x flag_null) !r)
33
- | _ -> v
34
-
35
- (* Order-independent deep equality for maps; sequence equality for lists. *)
36
- let rec eqv a b =
37
- match a, b with
38
- | (Noval | Null), (Noval | Null) -> true
39
- | Bool x, Bool y -> x = y
40
- | Num x, Num y -> x = y
41
- | Str x, Str y -> x = y
42
- | List x, List y -> List.length !x = List.length !y && List.for_all2 eqv !x !y
43
- | Map x, Map y ->
44
- omap_len x = omap_len y &&
45
- List.for_all (fun (k, v) -> match omap_get y k with Some w -> eqv v w | None -> false) x.entries
46
- | _ -> a == b
47
-
48
- (* ---------------- match support ---------------- *)
49
-
50
- let matchval check base =
51
- let check = if check = Str undefmark || check = Str nullmark then Noval else check in
52
- if eqv check base then true
53
- else match check with
54
- | Str cs ->
55
- let basestr = stringify base in
56
- if String.length cs >= 2 && cs.[0] = '/' && cs.[String.length cs - 1] = '/' then
57
- Vregex.test_str (String.sub cs 1 (String.length cs - 2)) basestr
58
- else
59
- let low s = String.lowercase_ascii s in
60
- let contains hay needle =
61
- let hl = String.length hay and nl = String.length needle in
62
- let rec go i = if i + nl > hl then false
63
- else if String.sub hay i nl = needle then true else go (i + 1) in
64
- nl = 0 || go 0 in
65
- contains (low basestr) (low (stringify check))
66
- | Func _ -> true
67
- | _ -> false
68
-
69
- let do_match check base =
70
- let base = clone base in
71
- ignore (walk ~before:(fun _k v _p path ->
72
- (if not (isnode v) then begin
73
- let baseval = getpath base path in
74
- if eqv baseval v then ()
75
- else if v = Str undefmark && is_nullish baseval then ()
76
- else if v = Str existsmark && not (is_nullish baseval) then ()
77
- else if not (matchval v baseval) then
78
- raise (Struct_error (Printf.sprintf "MATCH: %s: [%s] <=> [%s]"
79
- (String.concat "." (List.map js_string (match path with List r -> !r | _ -> [])))
80
- (stringify v) (stringify baseval)))
81
- end);
82
- v) check)
83
-
84
- (* ---------------- result tracking ---------------- *)
85
-
86
- let npass = ref 0
87
- let nfail = ref 0
88
- let failures = ref []
89
-
90
- let record group name ok msg =
91
- if ok then incr npass
92
- else (incr nfail; failures := Printf.sprintf "FAIL %s %s - %s" group name msg :: !failures)
93
-
94
- (* ---------------- per-entry runner ---------------- *)
95
-
96
- let omap_v kvs =
97
- let m = empty_map () in
98
- List.iter (fun (k, v) -> ignore (setprop m (Str k) v)) kvs; m
99
-
100
- let getprop_raw_pub e k = (match e with Map m -> (match omap_get m k with Some x -> x | None -> Noval) | _ -> Noval)
101
- let entry_get e k = getprop_raw_pub e k
102
- let entry_has e k = match e with Map m -> omap_has m k | _ -> false
103
- let default_injdef_pub () =
104
- { d_meta = Noval; d_extra = Noval; d_errs = Noval; d_modify = None; d_handler = None;
105
- d_base = Noval; d_dparent = Noval; d_dpath = Noval; d_key = Noval }
106
-
107
- let resolve_args entry =
108
- if entry_has entry "ctx" then [entry_get entry "ctx"]
109
- else if entry_has entry "args" then (
110
- match entry_get entry "args" with
111
- | List r ->
112
- (* ts's resolveArgs writes the live first arg back as entry.ctx, so a
113
- `match: {ctx: ...}` resolves for args-style entries too. Without it
114
- every such assertion reads null and asserts nothing. *)
115
- (match !r with
116
- | (Map _ as first) :: _ -> ignore (setprop entry (Str "ctx") first)
117
- | _ -> ());
118
- !r
119
- | _ -> [])
120
- else if entry_has entry "in" then [clone (entry_get entry "in")]
121
- else [Noval]
122
-
123
- let check_result entry args res =
124
- let matched = ref false in
125
- (if entry_has entry "match" then begin
126
- do_match (entry_get entry "match")
127
- (omap_v ["in", entry_get entry "in"; "args", lst args;
128
- "out", entry_get entry "res"; "ctx", entry_get entry "ctx"]);
129
- matched := true
130
- end);
131
- let out = entry_get entry "out" in
132
- if eqv out res then ()
133
- else if !matched && (out = Str nullmark || is_nullish out) then ()
134
- else raise (Struct_error (Printf.sprintf "Expected: %s, got: %s" (stringify out) (stringify res)))
135
-
136
- let handle_error entry err =
137
- let msg = (match err with Struct_error m -> m | e -> Printexc.to_string e) in
138
- if entry_has entry "err" then begin
139
- let entry_err = entry_get entry "err" in
140
- if entry_err = Bool true || matchval entry_err (Str msg) then begin
141
- if entry_has entry "match" then
142
- do_match (entry_get entry "match")
143
- (omap_v ["in", entry_get entry "in"; "out", entry_get entry "res";
144
- (* ts hands do_match the ERROR OBJECT, so a corpus
145
- `match: {err: {message: ...}}` resolves; a bare string
146
- leaves err.message reading null. *)
147
- "ctx", entry_get entry "ctx";
148
- "err", omap_v ["message", Str msg]])
149
- end else
150
- raise (Struct_error (Printf.sprintf "ERROR MATCH: [%s] <=> [%s]" (stringify entry_err) msg))
151
- end else raise err
152
-
153
- let run_set ?(flags = []) group node subject =
154
- let flag_null = (match List.assoc_opt "null" flags with Some b -> b | None -> true) in
155
- let fixed = fix_json node flag_null in
156
- let testset = (match getprop fixed (Str "set") with List r -> !r | _ -> []) in
157
- List.iter (fun entry ->
158
- let name = js_string (entry_get entry "name") in
159
- try
160
- (if not (entry_has entry "out") && flag_null then ignore (setprop entry (Str "out") (Str nullmark)));
161
- let args = resolve_args entry in
162
- let res = fix_json (subject args) flag_null in
163
- ignore (setprop entry (Str "res") res);
164
- check_result entry args res;
165
- record group name true ""
166
- with
167
- | e ->
168
- (try handle_error entry e; record group name true ""
169
- with e2 -> record group name false
170
- (match e2 with Struct_error m -> m | _ -> Printexc.to_string e2)))
171
- testset
172
-
173
- let run_single group node actual_fn =
174
- try
175
- let expected = getprop_raw_pub node "out" in
176
- let actual = actual_fn (getprop_raw_pub node "in") in
177
- if eqv expected actual then record group "single" true ""
178
- else record group "single" false (Printf.sprintf "Expected: %s, got: %s" (stringify expected) (stringify actual))
179
- with e -> record group "single" false (match e with Struct_error m -> m | _ -> Printexc.to_string e)
180
-
181
- (* ---------------- arg helpers ---------------- *)
182
-
183
- let arg1 f = fun args -> f (match args with x :: _ -> x | [] -> Noval)
184
- let vget vin k = match vin with Map m -> (match omap_get m k with Some x -> x | None -> Noval) | _ -> Noval
185
- let vhas vin k = match vin with Map m -> omap_has m k | _ -> false
@@ -1,275 +0,0 @@
1
- # Vendored from voxgig/struct/perl (adapted).
2
- # Test runner that uses the test model in .sdk/test - mirrors the rb
3
- # struct_runner make_runner protocol on top of the perl struct port.
4
-
5
- use strict;
6
- use warnings;
7
-
8
- use File::Basename ();
9
- use Cwd ();
10
- use Scalar::Util ();
11
-
12
- my $__dir;
13
- BEGIN { $__dir = File::Basename::dirname(Cwd::abs_path(__FILE__)) }
14
- require(Cwd::abs_path("$__dir/../lib/Voxgig/Struct.pm"));
15
- require(Cwd::abs_path("$__dir/../core/helpers.pm"));
16
-
17
- package StructRunner;
18
-
19
- our $NULLMARK = '__NULL__'; # Represents a JSON null in tests
20
- our $UNDEFMARK = '__UNDEF__'; # Represents an undefined value
21
-
22
- # Canonical comparison string: sorted-key JSON so key order is ignored
23
- # (matches node's deepStrictEqual over the corpus).
24
- sub canon {
25
- my ($v) = @_;
26
- return Voxgig::Struct::_stringify_inner($v, 1);
27
- }
28
-
29
- # make_runner($testfile, $client)
30
- # Returns a sub that accepts a name (e.g. "struct") and an optional store,
31
- # and returns a hash (runpack) with:
32
- # spec -> the extracted spec for that name,
33
- # runset -> a sub to run a test set without extra flags,
34
- # runsetflags -> a sub to run a test set with flags,
35
- # subject -> the function (from the client utility) under test,
36
- # client -> the client instance.
37
- sub make_runner {
38
- my ($testfile, $client) = @_;
39
- return sub {
40
- my ($name, $store) = @_;
41
- $store = {} unless defined $store;
42
-
43
- my $utility = $client->utility;
44
- my $struct_utils = $utility->{struct};
45
-
46
- my $spec = resolve_spec($name, $testfile);
47
- my $clients = resolve_clients($client, $spec, $store, $struct_utils);
48
- my $subject = resolve_subject($name, $utility);
49
-
50
- my $runsetflags = sub {
51
- my ($testspec, $flags, $testsubject) = @_;
52
- my $use_subject = defined $testsubject ? $testsubject : $subject;
53
- $flags = resolve_flags($flags);
54
- my $testset = (Voxgig::Struct::ismap($testspec) && $testspec->{set}) || [];
55
- my $idx = 0;
56
- for my $entry (@{ Voxgig::Struct::islist($testset) ? $testset : [] }) {
57
- next unless Voxgig::Struct::ismap($entry);
58
- my $this_subject = $use_subject;
59
- if (exists $entry->{client} && defined $clients->{ $entry->{client} }) {
60
- my $cutil = $clients->{ $entry->{client} }->utility;
61
- $this_subject = resolve_subject($name, $cutil);
62
- }
63
- my @args = resolve_args($entry);
64
- my $got = eval { $this_subject->(@args) };
65
- my $err = $@;
66
- check_entry($name, $idx, $entry, $got, $err);
67
- $idx++;
68
- }
69
- };
70
-
71
- my $runset = sub {
72
- my ($testspec, $testsubject) = @_;
73
- $runsetflags->($testspec, {}, $testsubject);
74
- };
75
-
76
- return {
77
- spec => $spec,
78
- runset => $runset,
79
- runsetflags => $runsetflags,
80
- subject => $subject,
81
- client => $client,
82
- };
83
- };
84
- }
85
-
86
- # Loads the test JSON file and extracts the spec for the given name.
87
- # Follows the pattern: alltests.primary?[name] || alltests[name] || alltests.
88
- sub resolve_spec {
89
- my ($name, $testfile) = @_;
90
- my $text = do {
91
- open my $fh, '<:raw', $testfile or die "Cannot open $testfile: $!";
92
- local $/;
93
- <$fh>;
94
- };
95
- my $all_tests = Voxgig::Struct::parse_json($text);
96
- if (Voxgig::Struct::ismap($all_tests->{primary})
97
- && Voxgig::Struct::ismap($all_tests->{primary}{$name})) {
98
- return $all_tests->{primary}{$name};
99
- }
100
- return $all_tests->{$name} if Voxgig::Struct::ismap($all_tests->{$name});
101
- return $all_tests;
102
- }
103
-
104
- # If the spec contains a DEF section with client definitions, resolve them.
105
- sub resolve_clients {
106
- my ($client, $spec, $store, $struct_utils) = @_;
107
- my $clients = {};
108
- my $defs = Voxgig::Struct::ismap($spec) ? $spec->{DEF} : undef;
109
- if (Voxgig::Struct::ismap($defs) && Voxgig::Struct::ismap($defs->{client})) {
110
- for my $cn (keys %{ $defs->{client} }) {
111
- my $cdef = $defs->{client}{$cn};
112
- my $copts = (Voxgig::Struct::ismap($cdef->{test})
113
- && Voxgig::Struct::ismap($cdef->{test}{options}))
114
- ? $cdef->{test}{options} : {};
115
- $clients->{$cn} = $client->test($copts);
116
- }
117
- }
118
- return $clients;
119
- }
120
-
121
- # Returns the subject under test: the named entry of the utility map.
122
- sub resolve_subject {
123
- my ($name, $container, $subject) = @_;
124
- return $subject if defined $subject;
125
- return undef unless defined $container;
126
- return $container->{$name} if ref($container) eq 'HASH'
127
- || (Scalar::Util::reftype($container) // '') eq 'HASH';
128
- return undef;
129
- }
130
-
131
- # Ensure flags is a hash and set "null" flag to 1 if not provided.
132
- sub resolve_flags {
133
- my ($flags) = @_;
134
- $flags = {} unless defined $flags && ref $flags;
135
- $flags->{null} = 1 unless exists $flags->{null};
136
- return $flags;
137
- }
138
-
139
- # By default pass a clone of entry.in; entry.ctx / entry.args override.
140
- sub resolve_args {
141
- my ($entry) = @_;
142
- my @args;
143
- if (exists $entry->{ctx}) {
144
- @args = ($entry->{ctx});
145
- }
146
- elsif (exists $entry->{args}) {
147
- my $a = $entry->{args};
148
- @args = Voxgig::Struct::islist($a) ? @$a : ($a);
149
- }
150
- elsif (exists $entry->{in}) {
151
- @args = (Voxgig::Struct::clone($entry->{in}), $entry);
152
- }
153
- else {
154
- @args = (undef, $entry);
155
- }
156
- return @args;
157
- }
158
-
159
- # Compare the run outcome against the entry (out / err / match).
160
- sub check_entry {
161
- my ($label_base, $idx, $entry, $got, $err) = @_;
162
- my $label = "$label_base#$idx";
163
- my $err_field = $entry->{err};
164
-
165
- if (defined $err_field) {
166
- # An error is expected: the subject must throw, and (unless err is
167
- # literally true) the thrown message must contain the expected
168
- # substring or match the /regex/.
169
- if (!$err) {
170
- die "[$label] expected error but none thrown (err=" . canon($err_field) . ")\n";
171
- }
172
- my $msg = "$err";
173
- my $ok;
174
- if (Voxgig::Struct::is_jbool($err_field)) {
175
- $ok = $$err_field ? 1 : 0; # err: true -> any error
176
- }
177
- elsif (!ref $err_field) {
178
- if ($err_field =~ m{^/(.+)/$}s) {
179
- my $re = $1;
180
- $ok = ($msg =~ /$re/) ? 1 : 0;
181
- }
182
- else {
183
- $ok = (index(lc $msg, lc $err_field) >= 0) ? 1 : 0;
184
- }
185
- }
186
- else {
187
- $ok = 1;
188
- }
189
- die "[$label] ERROR MATCH: [" . canon($err_field) . "] <=> [$msg]\n" unless $ok;
190
- return;
191
- }
192
-
193
- die "[$label] unexpected error: $err\n" if $err;
194
-
195
- # Optional deep match against { in, out }.
196
- if (Voxgig::Struct::ismap($entry->{match})) {
197
- my $base = { 'in' => $entry->{in}, 'out' => $got };
198
- match($label, $entry->{match}, $base);
199
- }
200
-
201
- my $expected = exists $entry->{out} ? $entry->{out} : undef;
202
- my $got_j = canon($got);
203
- my $exp_j = canon($expected);
204
- if ($got_j ne $exp_j) {
205
- die "[$label] Mismatch: Expected $exp_j but got $got_j\n";
206
- }
207
- return;
208
- }
209
-
210
- # Compares scalar values along each path of the check structure against
211
- # the base.
212
- sub match {
213
- my ($label, $check, $base) = @_;
214
- _match_walk($label, $check, $base, []);
215
- return;
216
- }
217
-
218
- sub _match_walk {
219
- my ($label, $val, $base, $path) = @_;
220
- if (Voxgig::Struct::ismap($val)) {
221
- for my $k (keys %$val) {
222
- _match_walk($label, $val->{$k}, $base, [@$path, $k]);
223
- }
224
- }
225
- elsif (Voxgig::Struct::islist($val)) {
226
- for my $i (0 .. $#$val) {
227
- _match_walk($label, $val->[$i], $base, [@$path, $i]);
228
- }
229
- }
230
- else {
231
- my $baseval = ProjectNameHelpers::gpath($base, [@$path]);
232
- return if canon($val) eq canon($baseval);
233
- return if defined $val && !ref($val) && $val eq $UNDEFMARK && !defined $baseval;
234
- if (matchval($val, $baseval)) {
235
- return;
236
- }
237
- die "[$label] MATCH: " . join('.', @$path) . ' : ['
238
- . canon($val) . '] <=> [' . canon($baseval) . "]\n";
239
- }
240
- return;
241
- }
242
-
243
- sub matchval {
244
- my ($check, $base) = @_;
245
- return 1 if canon($check) eq canon($base);
246
- if (defined $check && !ref $check) {
247
- my $basestr = Voxgig::Struct::stringify($base);
248
- if ($check =~ m{^/(.+)/$}s) {
249
- my $re = $1;
250
- return ($basestr =~ /$re/) ? 1 : 0;
251
- }
252
- return (index(lc $basestr, lc Voxgig::Struct::stringify($check)) >= 0) ? 1 : 0;
253
- }
254
- return ref $check eq 'CODE' ? 1 : 0;
255
- }
256
-
257
- # StructTestClient is a minimal shim that provides the client interface
258
- # needed by the struct test runner within the SDK context.
259
- package StructTestClient;
260
-
261
- sub new {
262
- my ($class) = @_;
263
- return bless {}, $class;
264
- }
265
-
266
- sub utility {
267
- return { struct => ProjectNameHelpers::struct_facade() };
268
- }
269
-
270
- sub test {
271
- my ($self, $options) = @_;
272
- return $self;
273
- }
274
-
275
- 1;