@voxgig/sdkgen 4.8.2 → 4.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -0,0 +1,647 @@
1
+ # The corpus test runner: vendored Voxgig::Omni driven through its NATIVE
2
+ # API (`makeRunner(specref, provider)`), presented to the corpus tests in
3
+ # the struct-runner shape they already use (`$R->{spec}`, `$R->{runset}`,
4
+ # `$R->{runsetflags}`, `$R->{client}`). No compat shim is vendored: the
5
+ # adapter below IS the whole bridge, per language, per the vendor-tag
6
+ # rollout (docs/design/vendor-tag-rollout.md, Decision 4). It is the perl
7
+ # peer of tm/ts/test/omni.ts and tm/py/test/omni.py, and it ports the
8
+ # value-model conversion from upstream struct's own perl bridge
9
+ # (voxgig/struct perl/t/OmniBridge.pm).
10
+ #
11
+ # Five local decisions, all required:
12
+ #
13
+ # 1. SPEC PATH. omni's own spec resolution expects the caller to hand it a
14
+ # usable path. A relative path is absolutized against THIS file's
15
+ # directory (t/), so the existing '../../.sdk/test/test.json' constant
16
+ # keeps working verbatim wherever the suite is run from.
17
+ #
18
+ # 2. TWO VALUE MODELS. omni-perl and this SDK's vendored struct model JSON
19
+ # with different sentinels and they disagree on all of them:
20
+ #
21
+ # concept omni SDK / struct-perl
22
+ # ------- ---- -----------------
23
+ # absent Voxgig::Omni::Absent Voxgig::Struct::None
24
+ # null undef Voxgig::Struct::Null (JNULL)
25
+ # boolean JSON::PP::Boolean Voxgig::Struct::Bool
26
+ #
27
+ # `tostruct` converts arguments IN PLACE (so `match.args` assertions on
28
+ # in-place mutation - minor.setpath, merge.integrity - see the very hash
29
+ # omni holds), `toomni` converts results as a copy. Both are ports of
30
+ # OmniBridge's converters, plus a guard: a live context VIEW (below) is
31
+ # never rewritten. A bare undef result reads as absent, because that is
32
+ # what a perl sub returning nothing means; a JSON null is JNULL here.
33
+ #
34
+ # 3. ZERO-ARGUMENT ENTRIES. Entries with no `in`, `args` or `ctx` mean
35
+ # "call the subject with no value". omni-perl's native rule passes one
36
+ # Voxgig::Omni::Absent argument; `tostruct` turns it into struct's NONE,
37
+ # which is exactly how this port's struct functions spell "called with
38
+ # nothing" (typify(NONE) is 1073741824 where typify(JNULL) is 4194432).
39
+ # That is the perl form of the correction the lua/php compat shims
40
+ # carry; no entry rewrite is needed here.
41
+ #
42
+ # 4. MATCH-VISIBLE CONTEXTS. The SDK's context is a BLESSED hash, and
43
+ # omni's ismap()/clone()/getpath() only walk plain ones - against a bare
44
+ # context every `match: {ctx: ...}` assertion would read ABSENT. So
45
+ # `contextify` answers a TIED plain hash (ProjectNameOmniViewTie) whose
46
+ # reads mirror the live context - snake_case fields answering to the
47
+ # corpus's camelCase keys, struct-model values converted to omni's on
48
+ # the way out - so omni's clone-at-match-time takes a faithful snapshot
49
+ # of the POST-EXECUTION context. Writes route through to the live
50
+ # object, which is how the runner's `ctx.client = provider` assignment
51
+ # lands where prepare_auth and friends read it back. Test subjects
52
+ # unwrap the live context with `livectx` before calling a utility
53
+ # (utilities call methods on it - `$ctx->make_error` - which no
54
+ # unblessed view can answer).
55
+ #
56
+ # 5. PROVIDER DELEGATION. Corpus-driven contexts get `ctx.client` set to
57
+ # the runner's provider (omni overwrites it on any ctx/args map entry),
58
+ # and generated utilities reach THROUGH it - `$ctx->{client}{features}`,
59
+ # `$ctx->{client}{mode}`, `$ctx->{client}->options_map`. A five-hook
60
+ # provider object would hide the live SDK, so the provider here is a
61
+ # READ-THROUGH view of it: a blessed tied hash whose omni hook keys are
62
+ # its own, whose every other key resolves against the live SDK instance,
63
+ # and whose method calls delegate to it - the perl spelling of ts's
64
+ # prototype delegation. (Upstream omni#56 tracks giving the stock
65
+ # provider the same shape.)
66
+ #
67
+ # THE VENDORED PERL PORT LACKS THE omni#54 RUNNER FIXES the TypeScript
68
+ # port has at this tag (upstream voxgig/omni#64 landed them for js/go/py
69
+ # only). Vendored files are resynced, never edited, so each gap is covered
70
+ # HERE instead:
71
+ #
72
+ # a. `match()` clones its base and the vendored clone()/jsonstr() have no
73
+ # cycle guard. Perl's live cycles all pass through BLESSED objects
74
+ # (context -> client -> root context; error -> ctx), which both walks
75
+ # already pass by reference - the exposure is the map-face views this
76
+ # resolver introduces. The view therefore HIDES the cycle edges
77
+ # (`client`/`utility` on every view; `ctx`/`result`/`spec` on error
78
+ # views - runner/SDK bookkeeping the corpus never asserts on) and
79
+ # carries its wrapping ancestry, so a repeated object stays unwrapped
80
+ # and every clone/jsonstr walk terminates.
81
+ #
82
+ # b. `errify`/`errmessage` collapse non-object throwables via plain
83
+ # stringification. The SDK's own errors are blessed with a '""'
84
+ # overload answering the message, so that gap cannot fire for them;
85
+ # subjects that answer WITH an error value (makePoint) go through
86
+ # `errify` below, which flattens the error to the {code,message} map
87
+ # the corpus asserts on.
88
+
89
+ use strict;
90
+ use warnings;
91
+
92
+ use File::Basename ();
93
+ use Cwd ();
94
+ use Scalar::Util ();
95
+ use JSON::PP ();
96
+
97
+ my $__dir;
98
+
99
+ BEGIN {
100
+ $__dir = File::Basename::dirname(Cwd::abs_path(__FILE__));
101
+ # The vendored omni port keeps its upstream package layout
102
+ # (Voxgig/Omni/*.pm), so it resolves through @INC rather than a
103
+ # file-path require.
104
+ unshift @INC, "$__dir/vendor/omni";
105
+ }
106
+
107
+ use Voxgig::Omni::Runner ();
108
+ use Voxgig::Omni::Util ();
109
+
110
+ require(Cwd::abs_path("$__dir/../lib/Voxgig/Struct.pm"));
111
+ require(Cwd::abs_path("$__dir/../core/helpers.pm"));
112
+ require(Cwd::abs_path("$__dir/../core/context.pm"));
113
+
114
+
115
+ # The corpus spells an entity as `{"name": ...}`; resolve_op wants an
116
+ # object with get_name. Nothing else is read from it.
117
+ package ProjectNameOmniEntityRef;
118
+
119
+ sub new {
120
+ my ($class, $name) = @_;
121
+ return bless { name => $name }, $class;
122
+ }
123
+
124
+ sub get_name { return $_[0]->{name} }
125
+
126
+
127
+ # --------------------------------------------------------------------------
128
+ # The map-face view: a TIED plain hash mirroring one live blessed object
129
+ # (decision 4 above). Plain, so omni's ismap()/clone()/getpath() walk it;
130
+ # tied, so every read is live and every write lands on the object.
131
+ # --------------------------------------------------------------------------
132
+ package ProjectNameOmniViewTie;
133
+
134
+ # Fields the map face does not list. client and utility both reach the
135
+ # SDK, whose root context reaches the client again - the cycle omni's
136
+ # guardless clone would follow forever; an error's ctx is the same cycle
137
+ # one hop in (make_error attaches the live context to every error), and
138
+ # its result/spec can hold the error back. Subjects still reach them all
139
+ # through the live object; the corpus never asserts on any of them.
140
+ my %HIDE = map { $_ => 1 } qw(client utility);
141
+ my %HIDE_ERR = map { $_ => 1 } qw(client utility ctx result spec);
142
+
143
+ sub TIEHASH {
144
+ my ($class, $target, $seen) = @_;
145
+ return bless {
146
+ target => $target,
147
+ seen => $seen || {},
148
+ iter => undef,
149
+ ix => 0,
150
+ }, $class;
151
+ }
152
+
153
+ sub _iserr { return Scalar::Util::blessed($_[0]) && $_[0]->isa('ProjectNameError') }
154
+
155
+ sub _names {
156
+ my ($self) = @_;
157
+ my $t = $self->{target};
158
+ my $hide = _iserr($t) ? \%HIDE_ERR : \%HIDE;
159
+ return [ sort grep {
160
+ !$hide->{$_} && !/^_/ && defined $t->{$_}
161
+ } keys %$t ];
162
+ }
163
+
164
+ # `status_text` -> `statusText`: the corpus speaks camelCase, the SDK is
165
+ # snake_case, and the map face is the corpus-facing side. An error's `msg`
166
+ # field answers to the corpus's `message`.
167
+ sub _camel {
168
+ my ($self, $name) = @_;
169
+ return 'message' if 'msg' eq $name && _iserr($self->{target});
170
+ my @parts = split /_/, $name, -1;
171
+ my $first = shift @parts;
172
+ $first = '' unless defined $first;
173
+ return $first . join('', map { length($_) ? ucfirst($_) : $_ } @parts);
174
+ }
175
+
176
+ sub _snake {
177
+ my ($name) = @_;
178
+ (my $s = $name) =~ s/([A-Z])/'_' . lc($1)/ge;
179
+ return $s;
180
+ }
181
+
182
+ sub _attrname {
183
+ my ($self, $key) = @_;
184
+ my $t = $self->{target};
185
+ $key = defined $key ? "$key" : '';
186
+ return 'msg' if 'message' eq $key && _iserr($t) && !exists $t->{message};
187
+ return $key if exists $t->{$key};
188
+ my $snake = _snake($key);
189
+ return $snake if exists $t->{$snake};
190
+ return undef;
191
+ }
192
+
193
+ sub _wrap {
194
+ my ($self, $name, $val) = @_;
195
+ my $t = $self->{target};
196
+ my $seen = $self->{seen};
197
+
198
+ # The live cycle edges stay raw: readable through the view, invisible
199
+ # to its key list (workaround a above).
200
+ return $val if 'client' eq $name || 'utility' eq $name;
201
+
202
+ # The corpus asserts `result.ok` as a JSON boolean; the SDK stores 1/0.
203
+ if ('ok' eq $name && Scalar::Util::blessed($t) && $t->isa('ProjectNameResult')
204
+ && defined $val && !ref $val) {
205
+ return $val ? JSON::PP::true : JSON::PP::false;
206
+ }
207
+
208
+ # A view held INSIDE the object graph continues THIS traversal's
209
+ # ancestry, not its own - a restarted chain never terminates on the
210
+ # cycle it re-enters.
211
+ if (ref($val) eq 'HASH' && tied(%$val)
212
+ && tied(%$val)->isa('ProjectNameOmniViewTie')) {
213
+ my $inner = tied(%$val)->{target};
214
+ return $inner if $seen->{ Scalar::Util::refaddr($inner) };
215
+ return ProjectNameOmni::objview($inner,
216
+ { %$seen, Scalar::Util::refaddr($t) => 1 });
217
+ }
218
+
219
+ if (Scalar::Util::blessed($val)) {
220
+ return undef if Voxgig::Struct::is_jnull($val);
221
+ return ($$val ? JSON::PP::true : JSON::PP::false)
222
+ if Voxgig::Struct::is_jbool($val);
223
+ return Voxgig::Omni::Util::ABSENT() if Voxgig::Struct::is_none($val);
224
+ return $val if $val->isa('Voxgig::Omni::Absent');
225
+
226
+ # A blessed hash (Spec, Result, Response, Error, Operation, Control,
227
+ # ...) becomes a nested view; a repeated object stays unwrapped, which
228
+ # match reads as ABSENT - no corpus case matches into a cycle.
229
+ if (('HASH' eq (Scalar::Util::reftype($val) || ''))) {
230
+ return $val if $seen->{ Scalar::Util::refaddr($val) };
231
+ return ProjectNameOmni::objview($val,
232
+ { %$seen, Scalar::Util::refaddr($t) => 1 });
233
+ }
234
+
235
+ return $val;
236
+ }
237
+
238
+ # Plain containers hold struct-model DATA (the contextified corpus
239
+ # input, SDK-built maps): convert a copy to omni's model so match's
240
+ # deepequal sees the values the corpus wrote.
241
+ if (ref($val) eq 'HASH' || ref($val) eq 'ARRAY') {
242
+ return ProjectNameOmni::toomni($val);
243
+ }
244
+
245
+ return $val;
246
+ }
247
+
248
+ sub FETCH {
249
+ my ($self, $key) = @_;
250
+ my $name = $self->_attrname($key);
251
+ return undef if !defined $name;
252
+ return $self->_wrap($name, $self->{target}{$name});
253
+ }
254
+
255
+ sub STORE {
256
+ my ($self, $key, $val) = @_;
257
+ my $name = $self->_attrname($key);
258
+ $name = _snake(defined $key ? "$key" : '') if !defined $name;
259
+ $self->{target}{$name} = $val;
260
+ return $val;
261
+ }
262
+
263
+ sub EXISTS {
264
+ my ($self, $key) = @_;
265
+ my $name = $self->_attrname($key);
266
+ return 0 if !defined $name;
267
+ # An undef-valued field is "not set" (perl's spelling of ts undefined):
268
+ # mirroring it as present would let `__EXISTS__` accept an unset field.
269
+ return defined $self->{target}{$name} ? 1 : 0;
270
+ }
271
+
272
+ sub DELETE {
273
+ my ($self, $key) = @_;
274
+ my $name = $self->_attrname($key);
275
+ return defined $name ? delete $self->{target}{$name} : undef;
276
+ }
277
+
278
+ sub CLEAR { return }
279
+
280
+ sub FIRSTKEY {
281
+ my ($self) = @_;
282
+ $self->{iter} = [ map { $self->_camel($_) } @{ $self->_names } ];
283
+ $self->{ix} = 0;
284
+ return $self->NEXTKEY;
285
+ }
286
+
287
+ sub NEXTKEY {
288
+ my ($self) = @_;
289
+ my $it = $self->{iter} || [];
290
+ my $i = $self->{ix}++;
291
+ return $i <= $#$it ? $it->[$i] : undef;
292
+ }
293
+
294
+ sub SCALAR {
295
+ my ($self) = @_;
296
+ return scalar @{ $self->_names };
297
+ }
298
+
299
+
300
+ # --------------------------------------------------------------------------
301
+ # The provider (decision 5): a blessed tied hash. Hash reads answer the
302
+ # omni hooks first and fall through to the live SDK's own fields
303
+ # (features, mode); method calls delegate to the SDK.
304
+ # --------------------------------------------------------------------------
305
+ package ProjectNameOmniProviderTie;
306
+
307
+ sub TIEHASH {
308
+ my ($class, $sdk, $hooks) = @_;
309
+ return bless { sdk => $sdk, hooks => $hooks, iter => undef, ix => 0 }, $class;
310
+ }
311
+
312
+ sub FETCH {
313
+ my ($self, $key) = @_;
314
+ return exists $self->{hooks}{$key} ? $self->{hooks}{$key} : $self->{sdk}{$key};
315
+ }
316
+
317
+ sub STORE {
318
+ my ($self, $key, $val) = @_;
319
+ if (exists $self->{hooks}{$key}) { $self->{hooks}{$key} = $val }
320
+ else { $self->{sdk}{$key} = $val }
321
+ return $val;
322
+ }
323
+
324
+ sub EXISTS {
325
+ my ($self, $key) = @_;
326
+ return exists $self->{hooks}{$key} || exists $self->{sdk}{$key};
327
+ }
328
+
329
+ sub DELETE { my ($self, $key) = @_; return delete $self->{hooks}{$key} }
330
+ sub CLEAR { return }
331
+
332
+ sub FIRSTKEY {
333
+ my ($self) = @_;
334
+ $self->{iter} = [ sort keys %{ $self->{hooks} } ];
335
+ $self->{ix} = 0;
336
+ return $self->NEXTKEY;
337
+ }
338
+
339
+ sub NEXTKEY {
340
+ my ($self) = @_;
341
+ my $it = $self->{iter} || [];
342
+ my $i = $self->{ix}++;
343
+ return $i <= $#$it ? $it->[$i] : undef;
344
+ }
345
+
346
+ sub SCALAR { return 1 }
347
+
348
+
349
+ package ProjectNameOmniProvider;
350
+
351
+ our $AUTOLOAD;
352
+
353
+ sub AUTOLOAD {
354
+ my $self = shift;
355
+ (my $name = $AUTOLOAD) =~ s/.*:://;
356
+ return if 'DESTROY' eq $name;
357
+ my $sdk = tied(%$self)->{sdk};
358
+ return $sdk->$name(@_);
359
+ }
360
+
361
+
362
+ # --------------------------------------------------------------------------
363
+ # The resolver proper.
364
+ # --------------------------------------------------------------------------
365
+ package ProjectNameOmni;
366
+
367
+ my $DIR = $__dir;
368
+
369
+ # Re-exported so the suites need no direct reach into the vendored tree.
370
+ use constant NULLMARK => Voxgig::Omni::Util::NULLMARK;
371
+ use constant UNDEFMARK => Voxgig::Omni::Util::UNDEFMARK;
372
+ use constant EXISTSMARK => Voxgig::Omni::Util::EXISTSMARK;
373
+
374
+ sub is_omni_error { return Voxgig::Omni::Runner::is_omni_error($_[0]) }
375
+
376
+ sub objview {
377
+ my ($target, $seen) = @_;
378
+ tie my %view, 'ProjectNameOmniViewTie', $target, $seen;
379
+ return \%view;
380
+ }
381
+
382
+ sub isview {
383
+ my ($val) = @_;
384
+ return ref($val) eq 'HASH' && tied(%$val)
385
+ && tied(%$val)->isa('ProjectNameOmniViewTie') ? 1 : 0;
386
+ }
387
+
388
+ # The live object behind a view (subjects call methods on it).
389
+ sub livectx {
390
+ my ($val) = @_;
391
+ return isview($val) ? tied(%$val)->{target} : $val;
392
+ }
393
+
394
+ # omni's model -> this port's, rewriting containers in place (decision 2).
395
+ # Safe: resolveargs clones `entry->{in}` and the runner's testspec is a
396
+ # fresh fixjson copy, so the containers rewritten are never the loaded
397
+ # spec's own.
398
+ sub tostruct {
399
+ my ($val) = @_;
400
+
401
+ return Voxgig::Struct::NONE() if Voxgig::Omni::Util::isabsent($val);
402
+ return Voxgig::Struct::JNULL() if !defined $val;
403
+ return ($val ? Voxgig::Struct::JTRUE() : Voxgig::Struct::JFALSE())
404
+ if JSON::PP::is_bool($val);
405
+
406
+ if (ref($val) eq 'HASH') {
407
+ return $val if isview($val);
408
+ for my $key (keys %$val) {
409
+ $val->{$key} = tostruct($val->{$key});
410
+ }
411
+ return $val;
412
+ }
413
+
414
+ if (ref($val) eq 'ARRAY') {
415
+ for my $index (0 .. $#$val) {
416
+ $val->[$index] = tostruct($val->[$index]);
417
+ }
418
+ return $val;
419
+ }
420
+
421
+ return $val;
422
+ }
423
+
424
+ # This port's model -> omni's, as a copy. A bare undef reads as absent: a
425
+ # perl sub that returns nothing returns undef, and this port spells a JSON
426
+ # null JNULL, so undef here is never "null".
427
+ sub toomni {
428
+ my ($val) = @_;
429
+
430
+ return $val if Voxgig::Omni::Util::isabsent($val);
431
+ return Voxgig::Omni::Util::ABSENT()
432
+ if !defined $val || Voxgig::Struct::is_none($val);
433
+ return undef if Voxgig::Struct::is_jnull($val);
434
+ return ($$val ? JSON::PP::true : JSON::PP::false)
435
+ if Voxgig::Struct::is_jbool($val);
436
+
437
+ if (ref($val) eq 'HASH') {
438
+ return $val if isview($val);
439
+ my %out;
440
+ for my $key (Voxgig::Struct::_map_keys($val)) {
441
+ $out{$key} = toomni($val->{$key});
442
+ }
443
+ return \%out;
444
+ }
445
+
446
+ if (ref($val) eq 'ARRAY') {
447
+ return [ map { toomni($_) } @$val ];
448
+ }
449
+
450
+ return $val;
451
+ }
452
+
453
+ # A subject whose arguments arrive in struct's model and whose result
454
+ # leaves in omni's.
455
+ sub wrapsubject {
456
+ my ($subject) = @_;
457
+ return $subject if ref($subject) ne 'CODE';
458
+ return sub {
459
+ my @conv = map { tostruct($_) } @_;
460
+ return toomni($subject->(@conv));
461
+ };
462
+ }
463
+
464
+ # The JSON form of an error VALUE, with the error's own fields carried
465
+ # along - what a subject answers when the corpus asserts a refusal by code
466
+ # (makePoint's `match: {out: {code: ...}}`).
467
+ our %HIDE_ERRFIELD = map { $_ => 1 } qw(ctx result spec msg);
468
+
469
+ sub errify {
470
+ my ($err) = @_;
471
+ return $err if !Scalar::Util::blessed($err);
472
+ my %out = ( name => ref($err), message => "$err" );
473
+ if ('HASH' eq (Scalar::Util::reftype($err) || '')) {
474
+ for my $key (keys %$err) {
475
+ next if $key =~ /^_/ || $HIDE_ERRFIELD{$key};
476
+ my $val = $err->{$key};
477
+ $out{$key} = $val if defined $val && !ref $val;
478
+ }
479
+ }
480
+ return \%out;
481
+ }
482
+
483
+ # The sdkgen corpus writes contexts as pure JSON, and the perl context
484
+ # constructor only adopts spec/result/response given as INSTANCES - so the
485
+ # JSON forms are materialised here, exactly as the retired inline runner's
486
+ # make_ctx_from_map did.
487
+ sub enrich {
488
+ my ($ctxmap, $ctx) = @_;
489
+
490
+ if (Voxgig::Struct::ismap($ctxmap->{spec}) && !Scalar::Util::blessed($ctxmap->{spec})) {
491
+ $ctx->{spec} = ProjectNameSpec->new($ctxmap->{spec});
492
+ }
493
+
494
+ my $res_map = $ctxmap->{result};
495
+ if (Voxgig::Struct::ismap($res_map) && !Scalar::Util::blessed($res_map)) {
496
+ $ctx->{result} = ProjectNameResult->new($res_map);
497
+ if (Voxgig::Struct::ismap($res_map->{err})
498
+ && defined $res_map->{err}{message} && !ref $res_map->{err}{message}) {
499
+ $ctx->{result}{err} = ProjectNameError->new('', $res_map->{err}{message});
500
+ }
501
+ }
502
+
503
+ my $resp_map = $ctxmap->{response};
504
+ if (Voxgig::Struct::ismap($resp_map) && !Scalar::Util::blessed($resp_map)) {
505
+ $ctx->{response} = ProjectNameResponse->new($resp_map);
506
+ if (ProjectNameHelpers::rb_truthy($resp_map->{body})) {
507
+ my $body_copy = $resp_map->{body};
508
+ $ctx->{response}{json_func} = sub { $body_copy };
509
+ }
510
+ if (Voxgig::Struct::ismap($resp_map->{headers})) {
511
+ my $lower = {};
512
+ $lower->{lc $_} = $resp_map->{headers}{$_} for keys %{ $resp_map->{headers} };
513
+ $ctx->{response}{headers} = $lower;
514
+ }
515
+ }
516
+
517
+ return $ctx;
518
+ }
519
+
520
+ # The omni hooks for an SDK subject - what upstream's compat shims call
521
+ # structprovider, inlined here because this resolver is the one consumer.
522
+ sub sdkhooks {
523
+ my ($sdk) = @_;
524
+ my $utility = $sdk->get_utility;
525
+ my $struct = $utility->{struct} || ProjectNameHelpers::struct_facade();
526
+
527
+ my $subject = sub {
528
+ # A subject resolves from the utility (the corpus's camelCase name in
529
+ # perl's snake_case spelling), or from the struct facade.
530
+ my ($name) = @_;
531
+ return undef if !defined $name;
532
+ my $found = $utility->{$name};
533
+ $found = $utility->{ ProjectNameOmniViewTie::_snake($name) } if !defined $found;
534
+ $found = $struct->{$name} if !defined $found;
535
+ return ref($found) eq 'CODE' ? wrapsubject($found) : undef;
536
+ };
537
+
538
+ my $client = sub {
539
+ # A DEF.client entry becomes another SDK instance - rewrapped with the
540
+ # same delegating shape, not a plain hook object.
541
+ my ($options) = @_;
542
+ return sdkprovider(ref($sdk)->test(undef, tostruct($options)));
543
+ };
544
+
545
+ my $contextify = sub {
546
+ my ($val) = @_;
547
+ my $ctxmap = Voxgig::Omni::Util::ismap($val) ? $val : {};
548
+ tostruct($ctxmap);
549
+ my $ent = $ctxmap->{entity};
550
+ if (Voxgig::Struct::ismap($ent) && !Scalar::Util::blessed($ent)
551
+ && defined $ent->{name} && !ref $ent->{name}) {
552
+ $ctxmap->{entity} = ProjectNameOmniEntityRef->new($ent->{name});
553
+ }
554
+ my $ctx = ProjectNameContext->new($ctxmap, undef);
555
+ enrich($ctxmap, $ctx);
556
+ $ctx->{utility} = $utility;
557
+ $ctx->{options} = $sdk->options_map if !defined $ctx->{options};
558
+ return objview($ctx);
559
+ };
560
+
561
+ my $inject = sub {
562
+ # Client options may reference the runner store.
563
+ my ($options, $store) = @_;
564
+ my $injector = $struct->{inject};
565
+ return ref($injector) eq 'CODE' ? $injector->($options, $store) : $options;
566
+ };
567
+
568
+ return {
569
+ subject => $subject,
570
+ client => $client,
571
+ contextify => $contextify,
572
+ inject => $inject,
573
+ sdk => $sdk,
574
+ };
575
+ }
576
+
577
+ sub sdkprovider {
578
+ my ($sdk) = @_;
579
+ tie my %provider, 'ProjectNameOmniProviderTie', $sdk, sdkhooks($sdk);
580
+ return bless \%provider, 'ProjectNameOmniProvider';
581
+ }
582
+
583
+ # struct's make_runner(testfile, client) signature, backed by vendored
584
+ # omni. Also accepts an already-parsed spec structure (omni's own
585
+ # capability), which keeps smoke tests free of fixture files.
586
+ sub make_runner {
587
+ my ($testfile, $client) = @_;
588
+
589
+ my $specref = $testfile;
590
+ if (defined $testfile && !ref $testfile && $testfile !~ m{^/}) {
591
+ $specref = Cwd::abs_path("$DIR/$testfile") || "$DIR/$testfile";
592
+ }
593
+
594
+ my $provider = sdkprovider($client);
595
+ my $runner = Voxgig::Omni::Runner::makeRunner($specref, $provider);
596
+
597
+ return sub {
598
+ my ($name, $store) = @_;
599
+ my $runpack = $runner->($name, defined $store ? $store : {});
600
+
601
+ my $omniflags = $runpack->{runsetflags};
602
+
603
+ # Explicitly passed subjects get the model conversion too - the
604
+ # corpus tests hand most subjects in per-set rather than by name.
605
+ my $runsetflags = sub {
606
+ my ($testspec, $flags, $testsubject) = @_;
607
+ return $omniflags->($testspec, $flags || {},
608
+ defined $testsubject ? wrapsubject($testsubject) : undef);
609
+ };
610
+
611
+ my $runset = sub {
612
+ my ($testspec, $testsubject) = @_;
613
+ return $runsetflags->($testspec, {}, $testsubject);
614
+ };
615
+
616
+ return {
617
+ spec => $runpack->{spec},
618
+ runset => $runset,
619
+ runsetflags => $runsetflags,
620
+ subject => $runpack->{subject},
621
+ client => $provider,
622
+ };
623
+ };
624
+ }
625
+
626
+ # struct's flag-modifier, in THIS port's value model: omni's own
627
+ # nullmodifier writes omni's null (undef), but the values it modifies flow
628
+ # into struct subjects, whose null is JNULL (ported from upstream struct's
629
+ # t/struct.t).
630
+ sub null_modifier {
631
+ my ($val, $key, $parent) = @_;
632
+ return if !defined $parent || !ref $parent;
633
+ return if ref $val || !defined $val;
634
+
635
+ my $nullmark = NULLMARK;
636
+ if ($val eq $nullmark) {
637
+ Voxgig::Struct::setprop($parent, $key, Voxgig::Struct::JNULL());
638
+ }
639
+ elsif (0 <= index($val, $nullmark)) {
640
+ my $text = $val;
641
+ $text =~ s/\Q$nullmark\E/null/g;
642
+ Voxgig::Struct::setprop($parent, $key, $text);
643
+ }
644
+ return;
645
+ }
646
+
647
+ 1;