@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,629 +0,0 @@
1
- package sdktest
2
-
3
- import (
4
- "encoding/json"
5
- "fmt"
6
- "os"
7
- "path/filepath"
8
- "reflect"
9
- "regexp"
10
- "runtime"
11
- "strings"
12
- "sync"
13
- "testing"
14
-
15
- sdk "GOMODULE"
16
-
17
- vs "github.com/voxgig/struct"
18
- )
19
-
20
- var envLocalOnce sync.Once
21
-
22
- func loadEnvLocal() {
23
- envLocalOnce.Do(func() {
24
- _, filename, _, _ := runtime.Caller(0)
25
- dir := filepath.Dir(filename)
26
- envFile := filepath.Join(dir, "..", "..", ".env.local")
27
-
28
- data, err := os.ReadFile(envFile)
29
- if err != nil {
30
- return
31
- }
32
- for _, line := range strings.Split(string(data), "\n") {
33
- line = strings.TrimSpace(line)
34
- if line == "" || strings.HasPrefix(line, "#") {
35
- continue
36
- }
37
- parts := strings.SplitN(line, "=", 2)
38
- if len(parts) == 2 {
39
- key := strings.TrimSpace(parts[0])
40
- val := strings.TrimSpace(parts[1])
41
- os.Setenv(key, val)
42
- }
43
- }
44
- })
45
- }
46
-
47
- func envOverride(m map[string]any) map[string]any {
48
- if os.Getenv("PROJECTENV_TEST_LIVE") == "TRUE" ||
49
- os.Getenv("PROJECTENV_TEST_OVERRIDE") == "TRUE" {
50
- for key := range m {
51
- envval := os.Getenv(key)
52
- if envval != "" {
53
- envval = strings.TrimSpace(envval)
54
- if strings.HasPrefix(envval, "{") {
55
- var parsed any
56
- if err := json.Unmarshal([]byte(envval), &parsed); err == nil {
57
- m[key] = parsed
58
- continue
59
- }
60
- }
61
- m[key] = envval
62
- }
63
- }
64
- }
65
-
66
- if explain := os.Getenv("PROJECTENV_TEST_EXPLAIN"); explain != "" {
67
- m["PROJECTENV_TEST_EXPLAIN"] = explain
68
- }
69
-
70
- return m
71
- }
72
-
73
- type entityTestSetup struct {
74
- client *sdk.ProjectNameSDK
75
- data map[string]any
76
- idmap map[string]any
77
- env map[string]any
78
- explain bool
79
- live bool
80
- syntheticOnly bool
81
- now int64
82
- }
83
-
84
- var (
85
- cachedTestControl map[string]any
86
- cachedTestControlOnce sync.Once
87
- )
88
-
89
- // loadTestControl reads sdk-test-control.json from this test dir; caches
90
- // after first read. Returns an empty-skip default if the file is missing
91
- // or invalid so tests never crash on a bad config.
92
- func loadTestControl() map[string]any {
93
- cachedTestControlOnce.Do(func() {
94
- _, filename, _, _ := runtime.Caller(0)
95
- dir := filepath.Dir(filename)
96
- ctrlPath := filepath.Join(dir, "sdk-test-control.json")
97
- def := map[string]any{
98
- "version": 1,
99
- "test": map[string]any{"skip": map[string]any{
100
- "live": map[string]any{"direct": []any{}, "entityOp": []any{}},
101
- "unit": map[string]any{"direct": []any{}, "entityOp": []any{}},
102
- }},
103
- }
104
- data, err := os.ReadFile(ctrlPath)
105
- if err != nil {
106
- cachedTestControl = def
107
- return
108
- }
109
- var parsed map[string]any
110
- if err := json.Unmarshal(data, &parsed); err != nil {
111
- cachedTestControl = def
112
- return
113
- }
114
- cachedTestControl = parsed
115
- })
116
- return cachedTestControl
117
- }
118
-
119
- // isControlSkipped checks sdk-test-control.json for a skip entry.
120
- // Returns (skip, reason).
121
- func isControlSkipped(kind, name, mode string) (bool, string) {
122
- ctrl := loadTestControl()
123
- test, _ := ctrl["test"].(map[string]any)
124
- if test == nil {
125
- return false, ""
126
- }
127
- skip, _ := test["skip"].(map[string]any)
128
- if skip == nil {
129
- return false, ""
130
- }
131
- modeMap, _ := skip[mode].(map[string]any)
132
- if modeMap == nil {
133
- return false, ""
134
- }
135
- items, _ := modeMap[kind].([]any)
136
- for _, raw := range items {
137
- item, _ := raw.(map[string]any)
138
- if item == nil {
139
- continue
140
- }
141
- reason, _ := item["reason"].(string)
142
- if kind == "direct" {
143
- if t, _ := item["test"].(string); t == name {
144
- return true, reason
145
- }
146
- }
147
- if kind == "entityOp" {
148
- ent, _ := item["entity"].(string)
149
- op, _ := item["op"].(string)
150
- if ent+"."+op == name {
151
- return true, reason
152
- }
153
- }
154
- }
155
- return false, ""
156
- }
157
-
158
- // liveDelayMs returns the configured per-test live delay in ms; default 500.
159
- // liveClientOptions returns the extra SDK options every LIVE client is
160
- // constructed with, from sdk-test-control.json `test.client.options`.
161
- //
162
- // The generated live client knows two things: the base URL (from the spec)
163
- // and the credential (from the environment). Everything else about how a
164
- // particular API wants to be talked to - which features to switch on, and
165
- // with what settings - is a property of THAT API, known to the project and
166
- // to nothing in the toolchain.
167
- //
168
- // Merged UNDER the generated fields, so the suite's own base/apikey/server
169
- // values win: this ADDS to the live client, it does not redirect it.
170
- //
171
- // That contract is enforced HERE rather than left to each merge site: the
172
- // generated map only names a field when the model calls for one, so a
173
- // "base" in this block would face no competing value and would silently
174
- // redirect the whole suite - credential included - to another host.
175
- var liveReserved = map[string]bool{
176
- "base": true, "prefix": true, "suffix": true,
177
- "server": true, "apikey": true, "secret": true,
178
- }
179
-
180
- func liveClientOptions() map[string]any {
181
- ctrl := loadTestControl()
182
- test, _ := ctrl["test"].(map[string]any)
183
- if test == nil {
184
- return map[string]any{}
185
- }
186
- client, _ := test["client"].(map[string]any)
187
- if client == nil {
188
- return map[string]any{}
189
- }
190
- opts, _ := client["options"].(map[string]any)
191
- if opts == nil {
192
- return map[string]any{}
193
- }
194
-
195
- out := map[string]any{}
196
- for k, v := range opts {
197
- if !liveReserved[k] {
198
- out[k] = v
199
- }
200
- }
201
- return out
202
- }
203
-
204
-
205
- func liveDelayMs() int {
206
- ctrl := loadTestControl()
207
- test, _ := ctrl["test"].(map[string]any)
208
- if test == nil {
209
- return 500
210
- }
211
- live, _ := test["live"].(map[string]any)
212
- if live == nil {
213
- return 500
214
- }
215
- switch v := live["delayMs"].(type) {
216
- case float64:
217
- if v >= 0 {
218
- return int(v)
219
- }
220
- case int:
221
- if v >= 0 {
222
- return v
223
- }
224
- }
225
- return 500
226
- }
227
-
228
- var cachedTestSpec map[string]any
229
-
230
- func loadTestSpec(t *testing.T) map[string]any {
231
- t.Helper()
232
- if cachedTestSpec != nil {
233
- return cachedTestSpec
234
- }
235
- data, err := os.ReadFile("../../.sdk/test/test.json")
236
- if err != nil {
237
- t.Fatalf("Failed to load test.json: %v", err)
238
- }
239
- var spec map[string]any
240
- if err := json.Unmarshal(data, &spec); err != nil {
241
- t.Fatalf("Failed to parse test.json: %v", err)
242
- }
243
- cachedTestSpec = spec
244
- return spec
245
- }
246
-
247
- func getSpec(spec map[string]any, keys ...string) map[string]any {
248
- var cur any = spec
249
- for _, key := range keys {
250
- if m, ok := cur.(map[string]any); ok {
251
- cur = m[key]
252
- } else {
253
- return nil
254
- }
255
- }
256
- if m, ok := cur.(map[string]any); ok {
257
- return m
258
- }
259
- return nil
260
- }
261
-
262
- type RunSubject func(entry map[string]any) (any, error)
263
-
264
- // PENDING sections are the ones deliberately left empty in the shared corpus
265
- // (.sdk/test/primary/<name>.aon). Everything else MUST contribute cases.
266
- var pendingSections = map[string]bool{
267
- "fetcher": true, "makeFetchDef": true, "makeResult": true,
268
- "featureAdd": true, "featureHook": true, "featureInit": true,
269
- }
270
-
271
- // runset drives one section of the shared test corpus.
272
- //
273
- // It used to `return` silently when "set" was missing or not a list, so a
274
- // renamed section, a fixture that failed to compile, or an empty set reported
275
- // PASS while running zero assertions — the whole point of a shared oracle
276
- // lost without a single red test. Both conditions are now fatal, except for
277
- // the sections explicitly marked PENDING in the corpus.
278
- func runset(t *testing.T, testspec map[string]any, subject RunSubject) {
279
- t.Helper()
280
- runsetNamed(t, "", testspec, subject)
281
- }
282
-
283
- func runsetNamed(t *testing.T, name string, testspec map[string]any, subject RunSubject) {
284
- t.Helper()
285
-
286
- if testspec == nil {
287
- t.Fatalf("test corpus section %q missing — check the name against .sdk/test/primary/", name)
288
- }
289
-
290
- set, ok := testspec["set"].([]any)
291
- if !ok {
292
- t.Fatalf("test corpus section %q has no `set` list — zero cases would run", name)
293
- }
294
-
295
- if 0 == len(set) && !pendingSections[name] {
296
- t.Fatalf("test corpus section %q is EMPTY — zero cases would run; "+
297
- "add cases, or mark the fixture PENDING in .sdk/test/primary/", name)
298
- }
299
-
300
- for i, e := range set {
301
- entry, ok := e.(map[string]any)
302
- if !ok {
303
- continue
304
- }
305
-
306
- mark := ""
307
- if m := entry["mark"]; m != nil {
308
- mark = fmt.Sprintf(" (mark=%v)", m)
309
- }
310
-
311
- result, err := subject(entry)
312
-
313
- expectedErr := entry["err"]
314
-
315
- if err != nil {
316
- if expectedErr != nil {
317
- errMsg := err.Error()
318
- if expStr, ok := expectedErr.(string); ok {
319
- if !matchString(expStr, errMsg) {
320
- t.Errorf("entry %d%s: error mismatch: got %q, want contains %q",
321
- i, mark, errMsg, expStr)
322
- }
323
- } else if expBool, ok := expectedErr.(bool); ok && expBool {
324
- // err: true means any error is acceptable
325
- }
326
- if matchSpec, ok := entry["match"].(map[string]any); ok {
327
- resultMap := map[string]any{
328
- "in": entry["in"],
329
- "out": jsonNormalize(result),
330
- "err": map[string]any{"message": err.Error()},
331
- }
332
- matchDeep(t, i, mark, matchSpec, resultMap, "")
333
- }
334
- continue
335
- }
336
- t.Errorf("entry %d%s: unexpected error: %v", i, mark, err)
337
- continue
338
- }
339
-
340
- if expectedErr != nil {
341
- t.Errorf("entry %d%s: expected error containing %q but got result: %v",
342
- i, mark, expectedErr, jsonStr(result))
343
- continue
344
- }
345
-
346
- matched := false
347
- if matchSpec, ok := entry["match"].(map[string]any); ok {
348
- resultMap := map[string]any{
349
- "in": entry["in"],
350
- "out": jsonNormalize(result),
351
- }
352
- if args := entry["args"]; args != nil {
353
- resultMap["args"] = args
354
- } else if entry["in"] != nil {
355
- resultMap["args"] = []any{entry["in"]}
356
- }
357
- if ctxData := entry["ctx"]; ctxData != nil {
358
- resultMap["ctx"] = ctxData
359
- }
360
- matchDeep(t, i, mark, matchSpec, resultMap, "")
361
- matched = true
362
- }
363
-
364
- expectedOut := entry["out"]
365
- if expectedOut == nil && matched {
366
- continue
367
- }
368
- if expectedOut != nil {
369
- normResult := jsonNormalize(result)
370
- normExpected := jsonNormalize(expectedOut)
371
- if !reflect.DeepEqual(normResult, normExpected) {
372
- t.Errorf("entry %d%s: output mismatch:\n got: %v\n want: %v",
373
- i, mark, jsonStr(normResult), jsonStr(normExpected))
374
- }
375
- }
376
- }
377
- }
378
-
379
- func jsonNormalize(val any) any {
380
- if val == nil {
381
- return nil
382
- }
383
- j, err := json.Marshal(val)
384
- if err != nil {
385
- return val
386
- }
387
- var out any
388
- json.Unmarshal(j, &out)
389
- return out
390
- }
391
-
392
- func jsonStr(val any) string {
393
- j, err := json.Marshal(val)
394
- if err != nil {
395
- return fmt.Sprintf("%v", val)
396
- }
397
- return string(j)
398
- }
399
-
400
- func matchDeep(t *testing.T, entryIdx int, mark string, check any, base any, path string) {
401
- t.Helper()
402
-
403
- if check == nil {
404
- return
405
- }
406
-
407
- checkMap, isMap := check.(map[string]any)
408
- checkList, isList := check.([]any)
409
-
410
- if isMap {
411
- for key, checkVal := range checkMap {
412
- childPath := path + "." + key
413
- var baseVal any
414
- if baseMap, ok := base.(map[string]any); ok {
415
- baseVal = baseMap[key]
416
- }
417
- matchDeep(t, entryIdx, mark, checkVal, baseVal, childPath)
418
- }
419
- } else if isList {
420
- for i, checkVal := range checkList {
421
- childPath := fmt.Sprintf("%s[%d]", path, i)
422
- var baseVal any
423
- if baseList, ok := base.([]any); ok && i < len(baseList) {
424
- baseVal = baseList[i]
425
- }
426
- matchDeep(t, entryIdx, mark, checkVal, baseVal, childPath)
427
- }
428
- } else {
429
- checkStr, isStr := check.(string)
430
- if isStr && checkStr == "__EXISTS__" {
431
- if base == nil {
432
- t.Errorf("entry %d%s: match %s: expected value to exist but got nil",
433
- entryIdx, mark, path)
434
- }
435
- return
436
- }
437
- if isStr && checkStr == "__UNDEF__" {
438
- if base != nil {
439
- t.Errorf("entry %d%s: match %s: expected nil but got %v",
440
- entryIdx, mark, path, base)
441
- }
442
- return
443
- }
444
-
445
- normCheck := jsonNormalize(check)
446
- normBase := jsonNormalize(base)
447
-
448
- if !reflect.DeepEqual(normCheck, normBase) {
449
- if isStr && checkStr != "" {
450
- baseStr := vs.Stringify(base)
451
- if matchString(checkStr, baseStr) {
452
- return
453
- }
454
- }
455
- t.Errorf("entry %d%s: match %s: got %v, want %v",
456
- entryIdx, mark, path, jsonStr(normBase), jsonStr(normCheck))
457
- }
458
- }
459
- }
460
-
461
- // matchString checks if val matches pattern. If pattern is /regex/, use regexp;
462
- // otherwise do case-insensitive contains.
463
- func matchString(pattern string, val string) bool {
464
- if len(pattern) >= 2 && pattern[0] == '/' && pattern[len(pattern)-1] == '/' {
465
- re, err := regexp.Compile(pattern[1 : len(pattern)-1])
466
- if err != nil {
467
- return false
468
- }
469
- return re.MatchString(val)
470
- }
471
- return strings.Contains(strings.ToLower(val), strings.ToLower(pattern))
472
- }
473
-
474
- // makeCtxFromMap creates a Context from a JSON test entry's ctx or args map.
475
- func makeCtxFromMap(ctxmap map[string]any, client *sdk.ProjectNameSDK, utility *sdk.Utility) *sdk.Context {
476
- if ctxmap == nil {
477
- ctxmap = map[string]any{}
478
- }
479
-
480
- ctx := sdk.NewContext(ctxmap, nil)
481
-
482
- if client != nil {
483
- ctx.Client = client
484
- ctx.Utility = utility
485
- }
486
- if ctx.Options == nil && client != nil {
487
- ctx.Options = client.OptionsMap()
488
- }
489
-
490
- // Handle spec from JSON map (NewContext expects *Spec, but JSON gives map)
491
- if specMap, ok := ctxmap["spec"].(map[string]any); ok {
492
- ctx.Spec = sdk.NewSpec(specMap)
493
- }
494
-
495
- // Handle result from JSON map
496
- if resMap, ok := ctxmap["result"].(map[string]any); ok {
497
- ctx.Result = sdk.NewResult(resMap)
498
- if errMap, ok := resMap["err"].(map[string]any); ok {
499
- if msg, ok := errMap["message"].(string); ok {
500
- ctx.Result.Err = &sdk.ProjectNameError{Msg: msg}
501
- }
502
- }
503
- }
504
-
505
- // Handle response from JSON map
506
- if respMap, ok := ctxmap["response"].(map[string]any); ok {
507
- ctx.Response = sdk.NewResponse(respMap)
508
- if body := respMap["body"]; body != nil {
509
- bodyCopy := body
510
- ctx.Response.JsonFunc = func() any { return bodyCopy }
511
- }
512
- if headers, ok := respMap["headers"].(map[string]any); ok {
513
- lowerHeaders := map[string]any{}
514
- for k, v := range headers {
515
- lowerHeaders[strings.ToLower(k)] = v
516
- }
517
- ctx.Response.Headers = lowerHeaders
518
- }
519
- }
520
-
521
- return ctx
522
- }
523
-
524
- func fixctx(ctx *sdk.Context, client *sdk.ProjectNameSDK) {
525
- if ctx != nil && ctx.Client != nil && ctx.Options == nil {
526
- ctx.Options = ctx.Client.OptionsMap()
527
- }
528
- }
529
-
530
- // errFromMap creates an error from a JSON map like {"message": "...", "code": "..."}
531
- func errFromMap(m map[string]any) error {
532
- if m == nil {
533
- return nil
534
- }
535
- msg, _ := m["message"].(string)
536
- if msg == "" {
537
- return nil
538
- }
539
- code, _ := m["code"].(string)
540
- return &sdk.ProjectNameError{Msg: msg, Code: code}
541
- }
542
-
543
- // ctxToMatchMap converts a Context to a map suitable for match comparison.
544
- func ctxToMatchMap(ctx *sdk.Context) map[string]any {
545
- m := map[string]any{}
546
-
547
- if ctx.Spec != nil {
548
- spec := map[string]any{
549
- "base": ctx.Spec.Base,
550
- "prefix": ctx.Spec.Prefix,
551
- "suffix": ctx.Spec.Suffix,
552
- "path": ctx.Spec.Path,
553
- "method": ctx.Spec.Method,
554
- "params": ctx.Spec.Params,
555
- "query": ctx.Spec.Query,
556
- "headers": ctx.Spec.Headers,
557
- "step": ctx.Spec.Step,
558
- "alias": ctx.Spec.Alias,
559
- }
560
- if ctx.Spec.Body != nil {
561
- spec["body"] = ctx.Spec.Body
562
- }
563
- if ctx.Spec.Url != "" {
564
- spec["url"] = ctx.Spec.Url
565
- }
566
- m["spec"] = spec
567
- }
568
-
569
- if ctx.Result != nil {
570
- res := map[string]any{
571
- "ok": ctx.Result.Ok,
572
- "status": ctx.Result.Status,
573
- "statusText": ctx.Result.StatusText,
574
- "headers": ctx.Result.Headers,
575
- }
576
- if ctx.Result.Body != nil {
577
- res["body"] = ctx.Result.Body
578
- }
579
- if ctx.Result.Err != nil {
580
- res["err"] = map[string]any{
581
- "message": ctx.Result.Err.Error(),
582
- }
583
- }
584
- if ctx.Result.Resdata != nil {
585
- res["resdata"] = ctx.Result.Resdata
586
- }
587
- if ctx.Result.Resmatch != nil {
588
- res["resmatch"] = ctx.Result.Resmatch
589
- }
590
- m["result"] = res
591
- }
592
-
593
- if ctx.Response != nil {
594
- m["response"] = "exists"
595
- }
596
-
597
- return m
598
- }
599
-
600
- // entityData extracts the data map from an op result.
601
- //
602
- // Every entity operation resolves to the ENTITY (see AGENTS.md), so a flow
603
- // test that wants the record takes this hop. A plain map passes through
604
- // unchanged, so this is safe for the direct/prepare results too.
605
- func entityData(v any) any {
606
- if ent, ok := v.(sdk.Entity); ok {
607
- return ent.Data()
608
- }
609
- return v
610
- }
611
-
612
- // entityListToData extracts data maps from a list of Entity objects.
613
- func entityListToData(list []any) []any {
614
- var out []any
615
- for _, item := range list {
616
- if ent, ok := item.(sdk.Entity); ok {
617
- d := ent.Data()
618
- if dm, ok := d.(map[string]any); ok {
619
- out = append(out, dm)
620
- }
621
- } else if m, ok := item.(map[string]any); ok {
622
- out = append(out, m)
623
- }
624
- }
625
- if out == nil {
626
- out = []any{}
627
- }
628
- return out
629
- }