@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,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
- }