@voxgig/sdkgen 4.8.1 → 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 +2 -2
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -0,0 +1,691 @@
1
+ <?php
2
+ declare(strict_types=1);
3
+
4
+ // The corpus test runner: vendored Voxgig\Omni driven through its NATIVE
5
+ // API (`Runner::makeRunner($specref, $provider)`), presented to the corpus
6
+ // tests in the struct-runner shape they already use (`$R['spec']`,
7
+ // `$R['runset']`, `$R['runsetflags']`, `$R['client']`). No compat shim is
8
+ // vendored: the adapter below IS the whole bridge, per language, per the
9
+ // vendor-tag rollout (docs/design/vendor-tag-rollout.md, Decision 4). It is
10
+ // the PHP peer of tm/py/test/omni.py and tm/go/test/omniresolver_test.go.
11
+ //
12
+ // PHP-specific decisions, each load-bearing:
13
+ //
14
+ // 1. SPEC PATH. omni expects a usable path; a relative one is absolutized
15
+ // against THIS file's directory (test/), so the existing
16
+ // '../../.sdk/test/test.json' constant works from any working directory.
17
+ //
18
+ // 2. CONTEXTS STAY MAPS ACROSS THE RUNNER - WITH REFERENCE SLOTS. omni
19
+ // sets `entry.ctx` to the contextified args[0], and `match: {ctx: ...}`
20
+ // reads THROUGH it with omni's own getpath, which walks PHP ARRAYS
21
+ // only - a typed ProjectNameContext there would make every ctx
22
+ // assertion read "absent". So contextify returns the MAP, a subject
23
+ // builds the typed context with `ctx_from_map` at the call site, runs
24
+ // the utility, and writes the observable state back with `sync_ctx`
25
+ // (go's maps-plus-sync idiom). PHP arrays are copy-on-write VALUE
26
+ // types, so a plain map's post-execution writes would be invisible to
27
+ // the copy `entry.ctx` holds - `ctxview` therefore makes every element
28
+ // a REFERENCE into one shared frame: all the copies omni hands around
29
+ // (args[0], entry.ctx, the subject's parameter) read and write the
30
+ // same slots. Keys a sync may CREATE (spec/result/response) are
31
+ // pre-seeded with omni's own Absent sentinel, which every match branch
32
+ // already treats as "genuinely missing" - so `__EXISTS__` still fails
33
+ // until the subject really produced the value.
34
+ //
35
+ // 3. NO-ARGUMENT ENTRIES. Corpus entries with no `in`, `args` or `ctx`
36
+ // mean "call the subject with NO argument". PHP cannot spell that
37
+ // against fixed-arity subjects (ArgumentCountError), so the upstream
38
+ // php compat shim's correction is ported here: such entries are
39
+ // rewritten IN MEMORY to `args: [Struct::undef()]` - the port's own
40
+ // no-value sentinel, which typifies as T_noval, the canonical reading.
41
+ //
42
+ // 4. THE EMPTY-MAP COLLAPSE (struct lane only). PHP is the one port that
43
+ // cannot tell `{}` from `[]` after `json_decode($json, true)`: both
44
+ // become `[]`, and the vendored struct reads `[]` as an empty LIST.
45
+ // The struct corpus carries hundreds of empty maps, so the struct-lane
46
+ // loader (`makeStructRunner`) decodes with objects preserved, converts
47
+ // to omni's array model, and keeps an empty map as a MARKER string
48
+ // resolved at the last boundary: to a real `stdClass` inside subject
49
+ // arguments, to `[]` everywhere the comparison looks (ported from
50
+ // upstream omni's php compat shim). The SDK lane (`makeRunner`) keeps
51
+ // omni's plain decode - the generated utilities speak arrays, exactly
52
+ // what the retired inline engine fed them.
53
+ //
54
+ // 5. THE VENDORED PHP PORT LACKS THE omni#54 RUNNER FIXES the TypeScript
55
+ // port has at this tag (omni#57 tracks porting them): jsonstr has no
56
+ // cycle guard and match clones its base. Both only bite on CYCLIC
57
+ // values, and this port's clone/fixjson walk ARRAYS only, passing
58
+ // objects through by reference - so decision 2 (JSON-only maps in
59
+ // entries, typed state kept out of them) is also what keeps every
60
+ // value the runner clones or stringifies acyclic. The errify half
61
+ // (non-Error throwables) cannot arise: PHP only throws \Throwable.
62
+
63
+ require_once __DIR__ . '/vendor/omni/Runner.php';
64
+ require_once __DIR__ . '/../utility/struct/Struct.php';
65
+
66
+ use Voxgig\Omni\Absent;
67
+ use Voxgig\Omni\OmniError;
68
+ use Voxgig\Omni\Runner as OmniRunner;
69
+ use Voxgig\Omni\Util as OmniUtil;
70
+ use Voxgig\Struct\Struct;
71
+
72
+ final class ProjectNameOmni
73
+ {
74
+ public const NULLMARK = OmniUtil::NULLMARK;
75
+ public const UNDEFMARK = OmniUtil::UNDEFMARK;
76
+ public const EXISTSMARK = OmniUtil::EXISTSMARK;
77
+
78
+ /** Stands in for an empty map between the struct-lane load and the call boundary. */
79
+ public const EMPTYMAPMARK = '__STRUCTCOMPAT_EMPTYMAP__';
80
+
81
+ /** The entry keys that supply an argument list. */
82
+ private const ARGKEYS = ['in', 'args', 'ctx'];
83
+
84
+ /** ctx keys `sync_ctx` may create, pre-seeded as reference slots. */
85
+ private const SYNCKEYS = ['spec', 'result', 'response'];
86
+
87
+ // ------------------------------------------------------------------
88
+ // The SDK (primary/feature) lane.
89
+ // ------------------------------------------------------------------
90
+
91
+ /**
92
+ * struct's makeRunner($testfile, $client) signature, backed by
93
+ * vendored omni. Also accepts an already-parsed spec value (omni's
94
+ * own capability), which keeps smoke tests free of fixture files.
95
+ */
96
+ public static function makeRunner($testfile, $client): callable
97
+ {
98
+ $provider = self::sdkprovider($client);
99
+ $runner = OmniRunner::makeRunner(self::specref($testfile), $provider);
100
+ return self::structshape($runner, $provider, Struct::undef());
101
+ }
102
+
103
+ /** An omni provider over the live SDK instance. */
104
+ private static function sdkprovider($client): array
105
+ {
106
+ $provider = [];
107
+
108
+ // A subject resolves from the utility (camelCase or the php
109
+ // spelling) - the corpus tests pass explicit subjects, so this is
110
+ // only the fallback omni's own resolution path uses.
111
+ $provider['subject'] = function (string $name) use ($client) {
112
+ $utility = $client->get_utility();
113
+ $found = $utility->{$name} ?? null;
114
+ if (null === $found) {
115
+ $found = $utility->{self::snake($name)} ?? null;
116
+ }
117
+ return $found;
118
+ };
119
+
120
+ // A DEF.client entry becomes another SDK instance - rewrapped
121
+ // with the same provider shape, so `entry.client` selection keeps
122
+ // working and ctx_from_map can unwrap it. `defbuilt` marks it: only
123
+ // a DEF-built client may override a call site's own (a subject that
124
+ // constructed a special DEF.setup client must keep it, and the BASE
125
+ // provider is on every ctx entry).
126
+ $provider['client'] = function ($options) use ($client) {
127
+ $cls = get_class($client);
128
+ $def = self::sdkprovider($cls::test(null, is_array($options) ? $options : []));
129
+ $def['defbuilt'] = true;
130
+ return $def;
131
+ };
132
+
133
+ // Corpus contexts stay maps; see decision 2 above.
134
+ $provider['contextify'] = function ($val) {
135
+ return self::ctxview(is_array($val) ? $val : []);
136
+ };
137
+
138
+ // Client options may reference the runner store. The vendored
139
+ // runner discards the return, so inject through the reference.
140
+ $provider['inject'] = function (&$options, $store) {
141
+ $options = Struct::inject($options, $store);
142
+ return $options;
143
+ };
144
+
145
+ $provider['sdk'] = $client;
146
+
147
+ return $provider;
148
+ }
149
+
150
+ // ------------------------------------------------------------------
151
+ // The struct-corpus lane.
152
+ // ------------------------------------------------------------------
153
+
154
+ /**
155
+ * The struct corpus driven through the same vendored omni, with the
156
+ * php-only empty-map preservation (decision 4). Subjects are wrapped
157
+ * so results speak omni's value model (objects become maps, the
158
+ * struct no-value sentinel becomes omni's Absent).
159
+ */
160
+ public static function makeStructRunner($testfile, $client): callable
161
+ {
162
+ $provider = self::sdkprovider($client);
163
+ $runner = OmniRunner::makeRunner(self::loadstructspec(self::specref($testfile)), $provider);
164
+ return self::structshape($runner, $provider, Struct::undef(), true);
165
+ }
166
+
167
+ /** Present an omni runner in the struct-runner shape. */
168
+ private static function structshape(callable $runner, array $provider, $sentinel, bool $structlane = false): callable
169
+ {
170
+ return function (?string $name = null, $store = null) use ($runner, $provider, $sentinel, $structlane): array {
171
+ $runpack = $runner($name, null === $store ? [] : $store);
172
+
173
+ $omniflags = $runpack['runsetflags'];
174
+
175
+ $runsetflags = function ($testspec, ?array $flags = [], $testsubject = null) use ($omniflags, $sentinel, $structlane): void {
176
+ if ($structlane) {
177
+ $testspec = self::emptymaps($testspec);
178
+ $testsubject = self::wrapsubject($testsubject, $sentinel);
179
+ }
180
+ $omniflags(
181
+ self::undefargs($testspec, $sentinel),
182
+ $flags ?? [],
183
+ $testsubject
184
+ );
185
+ };
186
+
187
+ $runset = function ($testspec, $testsubject = null) use ($runsetflags): void {
188
+ $runsetflags($testspec, [], $testsubject);
189
+ };
190
+
191
+ return [
192
+ 'spec' => $runpack['spec'],
193
+ 'runset' => $runset,
194
+ 'runsetflags' => $runsetflags,
195
+ 'subject' => $runpack['subject'],
196
+ 'client' => $provider,
197
+ ];
198
+ };
199
+ }
200
+
201
+ /** A relative spec path is resolved against THIS directory (test/). */
202
+ private static function specref($testfile)
203
+ {
204
+ if (!is_string($testfile)) {
205
+ return $testfile;
206
+ }
207
+ if (1 === preg_match('/^(\/|[A-Za-z]:[\/\\\\])/', $testfile)) {
208
+ return $testfile;
209
+ }
210
+ return __DIR__ . DIRECTORY_SEPARATOR . $testfile;
211
+ }
212
+
213
+ // ------------------------------------------------------------------
214
+ // Context machinery (decision 2).
215
+ // ------------------------------------------------------------------
216
+
217
+ /**
218
+ * The backing frames of every live ctx view. A frame must OUTLIVE the
219
+ * function that builds its view: `return` dissolves a reference whose
220
+ * only other holder is a dying local (the refcount falls to one and
221
+ * PHP drops the is_ref flag), which silently turns the view back into
222
+ * an ordinary value array. Holding the frame here keeps each slot's
223
+ * refcount above one, so the reference elements survive the return -
224
+ * and every later copy.
225
+ */
226
+ private static array $frames = [];
227
+
228
+ /**
229
+ * A ctx map whose elements are references into one shared frame, so
230
+ * every copy the runner hands around (args[0], entry.ctx, the
231
+ * subject's parameter) reads and writes the same slots.
232
+ */
233
+ public static function ctxview(array $map): array
234
+ {
235
+ foreach (self::SYNCKEYS as $k) {
236
+ if (!array_key_exists($k, $map)) {
237
+ $map[$k] = Absent::mark();
238
+ }
239
+ }
240
+
241
+ $fi = count(self::$frames);
242
+ self::$frames[$fi] = $map;
243
+
244
+ $view = [];
245
+ foreach (array_keys(self::$frames[$fi]) as $k) {
246
+ $view[$k] = &self::$frames[$fi][$k];
247
+ }
248
+ return $view;
249
+ }
250
+
251
+ /**
252
+ * Build the typed context a generated utility takes from the ctx MAP
253
+ * omni handed the subject. The map's `client` entry - the provider,
254
+ * or a DEF-built one - resolves back to the live SDK it wraps. (The
255
+ * engine half of the retired inline runner did this as
256
+ * make_ctx_from_map.)
257
+ */
258
+ public static function ctx_from_map($ctxmap, $client, $utility)
259
+ {
260
+ if (!is_array($ctxmap)) {
261
+ $ctxmap = [];
262
+ }
263
+
264
+ // Only a DEF-built client overrides the caller's: the base
265
+ // provider is on every ctx entry, and a call site that
266
+ // constructed a special client (a DEF.setup options set) keeps it.
267
+ $mapclient = $ctxmap['client'] ?? null;
268
+ if (is_array($mapclient) && true === ($mapclient['defbuilt'] ?? null)
269
+ && is_object($mapclient['sdk'] ?? null)) {
270
+ $client = $mapclient['sdk'];
271
+ $utility = $client->get_utility();
272
+ }
273
+
274
+ // The typed constructors want plain data: drop the runner's
275
+ // bookkeeping (the provider array, unset Absent slots).
276
+ $clean = [];
277
+ foreach ($ctxmap as $k => $v) {
278
+ if ('client' === $k || 'utility' === $k || $v instanceof Absent) {
279
+ continue;
280
+ }
281
+ $clean[$k] = $v;
282
+ }
283
+
284
+ $ctx = new ProjectNameContext($clean, null);
285
+
286
+ $ctx->client = $client;
287
+ $ctx->utility = $utility;
288
+
289
+ if ($ctx->options === null) {
290
+ $ctx->options = $client->options_map();
291
+ }
292
+
293
+ if (isset($clean['spec']) && is_array($clean['spec'])) {
294
+ $ctx->spec = new ProjectNameSpec($clean['spec']);
295
+ }
296
+
297
+ if (isset($clean['result']) && is_array($clean['result'])) {
298
+ $ctx->result = new ProjectNameResult($clean['result']);
299
+ if (isset($clean['result']['err']) && is_array($clean['result']['err'])) {
300
+ $msg = $clean['result']['err']['message'] ?? '';
301
+ $ctx->result->err = new ProjectNameError('', is_string($msg) ? $msg : '');
302
+ }
303
+ }
304
+
305
+ if (isset($clean['response']) && is_array($clean['response'])) {
306
+ $ctx->response = new ProjectNameResponse($clean['response']);
307
+ if (isset($clean['response']['body'])) {
308
+ $body_copy = $clean['response']['body'];
309
+ $ctx->response->json_func = function () use ($body_copy) { return $body_copy; };
310
+ $ctx->response->body = $body_copy;
311
+ }
312
+ if (isset($clean['response']['headers']) && is_array($clean['response']['headers'])) {
313
+ $lower_headers = [];
314
+ foreach ($clean['response']['headers'] as $k => $v) {
315
+ $lower_headers[strtolower((string) $k)] = $v;
316
+ }
317
+ $ctx->response->headers = $lower_headers;
318
+ }
319
+ }
320
+
321
+ return $ctx;
322
+ }
323
+
324
+ /**
325
+ * Write the OBSERVABLE state of a typed context back into the ctx map
326
+ * the entry holds - where a `match: {ctx: ...}` assertion reads. The
327
+ * subject mutated the typed context; the map is what the runner can
328
+ * walk. Writes land in the shared frame through the view's reference
329
+ * slots. (The retired engine did this per section, by hand, as
330
+ * "update entry ctx for match".)
331
+ */
332
+ public static function sync_ctx(array $ctxmap, $ctx): void
333
+ {
334
+ if (null === $ctx) {
335
+ return;
336
+ }
337
+
338
+ if ($ctx->spec !== null) {
339
+ $spec = [
340
+ 'base' => $ctx->spec->base,
341
+ 'prefix' => $ctx->spec->prefix,
342
+ 'suffix' => $ctx->spec->suffix,
343
+ 'path' => $ctx->spec->path,
344
+ 'method' => $ctx->spec->method,
345
+ 'params' => $ctx->spec->params,
346
+ 'query' => $ctx->spec->query,
347
+ 'headers' => $ctx->spec->headers,
348
+ 'step' => $ctx->spec->step,
349
+ 'alias' => $ctx->spec->alias_map,
350
+ ];
351
+ if ($ctx->spec->body !== null) {
352
+ $spec['body'] = $ctx->spec->body;
353
+ }
354
+ if (is_string($ctx->spec->url ?? null) && '' !== $ctx->spec->url) {
355
+ $spec['url'] = $ctx->spec->url;
356
+ }
357
+ $ctxmap['spec'] = $spec;
358
+ }
359
+
360
+ if ($ctx->result !== null) {
361
+ $res = [
362
+ 'ok' => $ctx->result->ok,
363
+ 'status' => $ctx->result->status,
364
+ 'statusText' => $ctx->result->status_text,
365
+ 'headers' => $ctx->result->headers,
366
+ ];
367
+ if ($ctx->result->body !== null) {
368
+ $res['body'] = $ctx->result->body;
369
+ }
370
+ if ($ctx->result->err !== null) {
371
+ $res['err'] = ['message' => ($ctx->result->err instanceof \Throwable)
372
+ ? $ctx->result->err->getMessage() : (string) $ctx->result->err];
373
+ }
374
+ if ($ctx->result->resdata !== null) {
375
+ $res['resdata'] = $ctx->result->resdata;
376
+ }
377
+ $ctxmap['result'] = $res;
378
+ }
379
+
380
+ if ($ctx->response !== null) {
381
+ $ctxmap['response'] = 'exists';
382
+ }
383
+ }
384
+
385
+ /** A corpus argument shaped {"message","code"} as an SDK error value. */
386
+ public static function err_from_map($m): ?ProjectNameError
387
+ {
388
+ if (!is_array($m)) {
389
+ return null;
390
+ }
391
+ $msg = $m['message'] ?? '';
392
+ if (!is_string($msg) || '' === $msg) {
393
+ return null;
394
+ }
395
+ $code = $m['code'] ?? '';
396
+ return new ProjectNameError(is_string($code) ? $code : '', $msg);
397
+ }
398
+
399
+ /** (value, err) tuple convention -> value-or-throw, omni's shape. */
400
+ public static function unwrap(array $pair)
401
+ {
402
+ [$val, $err] = $pair;
403
+ if ($err !== null) {
404
+ if ($err instanceof \Throwable) {
405
+ throw $err;
406
+ }
407
+ throw new \Exception((string) $err);
408
+ }
409
+ return $val;
410
+ }
411
+
412
+ /** `makeContext` -> `make_context`: the SDK utility is snake_case. */
413
+ private static function snake(string $name): string
414
+ {
415
+ return strtolower(preg_replace('/([a-z0-9])([A-Z])/', '$1_$2', $name) ?? $name);
416
+ }
417
+
418
+ // ------------------------------------------------------------------
419
+ // No-argument entries (decision 3; ported from upstream omni's php
420
+ // compat shim).
421
+ // ------------------------------------------------------------------
422
+
423
+ /**
424
+ * Rewrite entries carrying none of `in`, `args`, `ctx` to an explicit
425
+ * `args` of one no-value sentinel - in memory, for this port only.
426
+ * The corpus on disk is untouched.
427
+ */
428
+ public static function undefargs($testspec, $sentinel)
429
+ {
430
+ if (null === $sentinel || !OmniUtil::ismap($testspec)) {
431
+ return $testspec;
432
+ }
433
+
434
+ $set = $testspec['set'] ?? null;
435
+ if (!OmniUtil::islist($set)) {
436
+ return $testspec;
437
+ }
438
+
439
+ $found = false;
440
+ foreach ($set as $entry) {
441
+ if (self::noargs($entry)) {
442
+ $found = true;
443
+ break;
444
+ }
445
+ }
446
+ if (!$found) {
447
+ return $testspec;
448
+ }
449
+
450
+ $patched = [];
451
+ foreach ($set as $entry) {
452
+ if (self::noargs($entry)) {
453
+ $entry['args'] = [$sentinel];
454
+ }
455
+ $patched[] = $entry;
456
+ }
457
+
458
+ $out = $testspec;
459
+ $out['set'] = $patched;
460
+ return $out;
461
+ }
462
+
463
+ /** An entry that supplies no argument list at all. */
464
+ private static function noargs($entry): bool
465
+ {
466
+ if (!OmniUtil::ismap($entry) && self::EMPTYMAPMARK !== $entry) {
467
+ return false;
468
+ }
469
+ if (self::EMPTYMAPMARK === $entry) {
470
+ return true;
471
+ }
472
+ foreach (self::ARGKEYS as $key) {
473
+ if (array_key_exists($key, $entry)) {
474
+ return false;
475
+ }
476
+ }
477
+ return true;
478
+ }
479
+
480
+ // ------------------------------------------------------------------
481
+ // The struct lane's empty-map preservation (decision 4; ported from
482
+ // upstream omni's php compat shim).
483
+ // ------------------------------------------------------------------
484
+
485
+ /** Load a struct-lane spec so that an empty map survives the decode. */
486
+ public static function loadstructspec($specref)
487
+ {
488
+ if (!is_string($specref)) {
489
+ return $specref;
490
+ }
491
+ $text = file_get_contents($specref);
492
+ if (false === $text) {
493
+ throw new OmniError('omni resolver: cannot read spec: ' . $specref);
494
+ }
495
+ return self::mapempty(json_decode($text, false, 512, JSON_THROW_ON_ERROR));
496
+ }
497
+
498
+ /** Objects to arrays; an empty object becomes the marker. */
499
+ private static function mapempty($val)
500
+ {
501
+ if ($val instanceof \stdClass) {
502
+ $vars = get_object_vars($val);
503
+ if (0 === count($vars)) {
504
+ return self::EMPTYMAPMARK;
505
+ }
506
+ $out = [];
507
+ foreach ($vars as $key => $subval) {
508
+ $out[$key] = self::mapempty($subval);
509
+ }
510
+ return $out;
511
+ }
512
+
513
+ if (is_array($val)) {
514
+ $out = [];
515
+ foreach ($val as $key => $subval) {
516
+ $out[$key] = self::mapempty($subval);
517
+ }
518
+ return $out;
519
+ }
520
+
521
+ return $val;
522
+ }
523
+
524
+ /**
525
+ * Resolve the marker per side: argument positions keep it (resolved
526
+ * to a real stdClass inside the subject wrapper), everywhere else it
527
+ * becomes `[]`, which is what the array-model comparison will see.
528
+ */
529
+ public static function emptymaps($testspec)
530
+ {
531
+ if (!OmniUtil::ismap($testspec)) {
532
+ return $testspec;
533
+ }
534
+
535
+ $set = $testspec['set'] ?? null;
536
+ if (!OmniUtil::islist($set)) {
537
+ return $testspec;
538
+ }
539
+
540
+ $patched = [];
541
+ foreach ($set as $entry) {
542
+ // A whole entry may be the marker - a degenerate `{}` entry.
543
+ if (self::EMPTYMAPMARK === $entry) {
544
+ $entry = [];
545
+ }
546
+
547
+ if (OmniUtil::ismap($entry)) {
548
+ foreach ($entry as $key => $val) {
549
+ if (in_array($key, self::ARGKEYS, true)) {
550
+ continue;
551
+ }
552
+ $entry[$key] = self::unmark($val);
553
+ }
554
+ }
555
+ $patched[] = $entry;
556
+ }
557
+
558
+ $out = $testspec;
559
+ $out['set'] = $patched;
560
+ return $out;
561
+ }
562
+
563
+ /** Result side: the marker becomes `[]`. */
564
+ public static function unmark($val)
565
+ {
566
+ if (self::EMPTYMAPMARK === $val) {
567
+ return [];
568
+ }
569
+
570
+ if (is_array($val)) {
571
+ $out = [];
572
+ foreach ($val as $key => $subval) {
573
+ $out[$key] = self::unmark($subval);
574
+ }
575
+ return $out;
576
+ }
577
+
578
+ return $val;
579
+ }
580
+
581
+ /** Argument side: the marker becomes a real empty map. */
582
+ public static function argval($val)
583
+ {
584
+ if (self::EMPTYMAPMARK === $val) {
585
+ return new \stdClass();
586
+ }
587
+
588
+ if (is_array($val)) {
589
+ $out = [];
590
+ foreach ($val as $key => $subval) {
591
+ $out[$key] = self::argval($subval);
592
+ }
593
+ return $out;
594
+ }
595
+
596
+ return $val;
597
+ }
598
+
599
+ /**
600
+ * The struct-lane OBJECT model: every map becomes a stdClass, lists
601
+ * stay PHP arrays - exactly what the retired engine's object-mode
602
+ * decode fed the struct utilities, so the subjects keep receiving the
603
+ * value shapes they always have. (Results go the other way, through
604
+ * structfix.)
605
+ */
606
+ public static function objmodel($val)
607
+ {
608
+ if (is_array($val)) {
609
+ if (array_is_list($val)) {
610
+ $out = [];
611
+ foreach ($val as $subval) {
612
+ $out[] = self::objmodel($subval);
613
+ }
614
+ return $out;
615
+ }
616
+ $out = new \stdClass();
617
+ foreach ($val as $key => $subval) {
618
+ $out->{$key} = self::objmodel($subval);
619
+ }
620
+ return $out;
621
+ }
622
+
623
+ return $val;
624
+ }
625
+
626
+ /**
627
+ * Normalise a struct result to omni's value model: objects become
628
+ * maps, and the struct no-value sentinel becomes omni's Absent. The
629
+ * sentinel is checked BEFORE the object walk (it is itself stdClass).
630
+ */
631
+ public static function structfix($val, $sentinel)
632
+ {
633
+ if (null !== $sentinel && $val === $sentinel) {
634
+ return Absent::mark();
635
+ }
636
+
637
+ if (is_array($val)) {
638
+ $out = [];
639
+ foreach ($val as $key => $subval) {
640
+ $out[$key] = self::structfix($subval, $sentinel);
641
+ }
642
+ return $out;
643
+ }
644
+
645
+ if (is_object($val) && !($val instanceof \Throwable)
646
+ && !($val instanceof \Closure) && !OmniUtil::isabsent($val)) {
647
+ $out = [];
648
+ foreach (get_object_vars($val) as $key => $subval) {
649
+ $out[$key] = self::structfix($subval, $sentinel);
650
+ }
651
+ return $out;
652
+ }
653
+
654
+ return $val;
655
+ }
656
+
657
+ /** A subject whose arguments and result speak the two value models. */
658
+ public static function wrapsubject($subject, $sentinel)
659
+ {
660
+ if (null === $subject || !is_callable($subject)) {
661
+ return $subject;
662
+ }
663
+
664
+ return function (...$args) use ($subject, $sentinel) {
665
+ $args = self::objmodel(self::argval($args));
666
+ return self::structfix($subject(...$args), $sentinel);
667
+ };
668
+ }
669
+
670
+ /**
671
+ * Convert NULLMARK sentinels back into real nulls. The struct port's
672
+ * inject walks stdClass nodes as well as arrays, so the parent may be
673
+ * either; extra trailing parameters match struct's five-argument
674
+ * modifier convention.
675
+ */
676
+ public static function nullModifier($val, $key, &$parent = null, $state = null, $store = null): void
677
+ {
678
+ if (is_object($parent) && !($parent instanceof \ArrayAccess)) {
679
+ if (OmniUtil::NULLMARK === $val) {
680
+ $parent->{$key} = null;
681
+ } elseif (is_string($val)) {
682
+ $parent->{$key} = str_replace(OmniUtil::NULLMARK, 'null', $val);
683
+ }
684
+ return;
685
+ }
686
+
687
+ if (is_array($parent)) {
688
+ OmniRunner::nullmodifier($val, $key, $parent);
689
+ }
690
+ }
691
+ }