@voxgig/sdkgen 4.8.2 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/model/target/zig.aon +9 -0
  33. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  34. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  35. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  36. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  37. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  38. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  39. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  40. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  41. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  45. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  46. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  47. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  48. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  49. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  50. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  51. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  52. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  53. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  54. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  55. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  56. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  57. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  58. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  59. package/project/.sdk/tm/c/Makefile +38 -3
  60. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  61. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  62. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  63. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  64. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  65. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  66. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  67. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  68. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  69. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  70. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  71. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  72. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  73. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  74. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  75. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  76. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  77. package/project/.sdk/tm/cpp/Makefile +5 -1
  78. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  79. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  80. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  81. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  82. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  83. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  84. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  85. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  86. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  87. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  88. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  89. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  90. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  91. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  92. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  93. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  94. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  95. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  96. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  97. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  98. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  99. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  100. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  101. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  102. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  103. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  104. package/project/.sdk/tm/elixir/Makefile +11 -3
  105. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  106. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  107. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  108. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  109. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  110. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  111. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  112. package/project/.sdk/tm/go/core/context.go +32 -16
  113. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  133. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  134. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
  135. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  136. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
  137. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  138. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  139. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  140. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
  141. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
  142. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  143. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  144. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  145. package/project/.sdk/tm/go/test/omni/omni.go +902 -0
  146. package/project/.sdk/tm/go/test/omni/util.go +381 -0
  147. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  148. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  149. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  150. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  151. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  152. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  153. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  154. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  155. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  156. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  157. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  158. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  159. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  160. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  161. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  162. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  163. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  164. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  165. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  166. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  167. package/project/.sdk/tm/js/test/omni.js +251 -0
  168. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  169. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  170. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  171. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  172. package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
  173. package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
  174. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  175. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  176. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  177. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  178. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  179. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  180. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  181. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  182. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  183. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  184. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  185. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  186. package/project/.sdk/tm/lean/Makefile +12 -5
  187. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  188. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  189. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  190. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  191. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  192. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  193. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  194. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  195. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  196. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  197. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  198. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  199. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  200. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  201. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  202. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  203. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  204. package/project/.sdk/tm/ocaml/Makefile +37 -12
  205. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  206. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  207. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  208. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  209. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  210. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  211. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  212. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  213. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  214. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  215. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  216. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  217. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  218. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  219. package/project/.sdk/tm/php/test/Omni.php +691 -0
  220. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  221. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  222. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  223. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  224. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  225. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  226. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  227. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
  253. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  254. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  255. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  256. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  257. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
  258. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  259. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  260. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  261. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  262. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  263. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  264. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  265. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  266. package/project/.sdk/tm/py/test/omni.py +415 -0
  267. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  268. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  269. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  270. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  271. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
  272. package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
  273. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  274. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  275. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  276. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  277. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  278. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  279. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  280. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  281. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  282. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  283. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  284. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  285. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  286. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  287. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  288. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  289. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  290. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  291. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  292. package/project/.sdk/tm/scala/Makefile +16 -6
  293. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  294. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  295. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  296. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  297. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  298. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  299. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  300. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  301. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  302. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  303. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  304. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  305. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  306. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  307. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  308. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  309. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  310. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  311. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  312. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  313. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  326. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  327. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  328. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  329. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  330. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  345. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  346. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  347. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  348. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  349. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  350. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  351. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  352. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  353. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  354. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  355. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  356. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  357. package/project/.sdk/tm/zig/Makefile +15 -1
  358. package/project/.sdk/tm/zig/build.zig +23 -5
  359. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  360. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  361. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  362. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  363. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  364. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  365. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  366. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  367. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  368. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  369. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  370. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  371. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  372. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  373. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  374. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  375. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  376. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  377. package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
  378. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  379. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  380. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  381. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  382. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  383. package/project/sdkgen-package.json +1 -1
  384. package/src/action/doctor.ts +66 -2
  385. package/src/helpers/naming.ts +4 -2
  386. package/project/.sdk/tm/c/tests/runner.h +0 -274
  387. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  388. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  389. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  390. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  391. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  392. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  393. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  394. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  395. package/project/.sdk/tm/js/test/runner.js +0 -387
  396. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  397. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  398. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  399. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  400. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  401. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  402. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  403. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  404. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  405. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  406. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
  407. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
@@ -0,0 +1,229 @@
1
+ // VENDORED: @voxgig/omni 0.1.4 (javascript/src/util.js)
2
+ // Source: https://github.com/voxgig/omni @ 274708cc2d12b21707d975543953f845f8444be0 [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ // Omni internal JSON utilities.
5
+ //
6
+ // This module is deliberately self-contained: the omni runner must be able
7
+ // to test *any* library, including libraries that provide these same
8
+ // operations, so it can never borrow them from the system under test.
9
+ // Zero third-party dependencies, by design.
10
+
11
+ const NULLMARK = '__NULL__' // Value is JSON null.
12
+ const UNDEFMARK = '__UNDEF__' // Value is not present (thus, undefined).
13
+ const EXISTSMARK = '__EXISTS__' // Value exists (not undefined).
14
+
15
+ // A map (JSON object)?
16
+ function ismap(val) {
17
+ return null != val && 'object' === typeof val && !Array.isArray(val)
18
+ }
19
+
20
+ // A list (JSON array)?
21
+ function islist(val) {
22
+ return Array.isArray(val)
23
+ }
24
+
25
+ // A container (map or list)?
26
+ function isnode(val) {
27
+ return ismap(val) || islist(val)
28
+ }
29
+
30
+ // Deep copy a JSON value. Non-JSON values (functions, class instances) are
31
+ // passed through by reference - the runner only ever clones test data.
32
+ function clone(val) {
33
+ if (islist(val)) {
34
+ return val.map((entry) => clone(entry))
35
+ }
36
+
37
+ if (ismap(val)) {
38
+ const out = {}
39
+ for (const key of Object.keys(val)) {
40
+ out[key] = clone(val[key])
41
+ }
42
+ return out
43
+ }
44
+
45
+ return val
46
+ }
47
+
48
+ // Read a value from a nested structure by path. Returns undefined when any
49
+ // step is missing.
50
+ function getpath(val, path) {
51
+ let current = val
52
+
53
+ for (const part of path) {
54
+ if (islist(current)) {
55
+ const index = 'number' === typeof part ? part : parseInt(String(part), 10)
56
+ if (isNaN(index) || index < 0 || index >= current.length) {
57
+ return undefined
58
+ }
59
+ current = current[index]
60
+ } else if (ismap(current)) {
61
+ const key = String(part)
62
+ if (!Object.prototype.hasOwnProperty.call(current, key)) {
63
+ return undefined
64
+ }
65
+ current = current[key]
66
+ } else {
67
+ return undefined
68
+ }
69
+ }
70
+
71
+ return current
72
+ }
73
+
74
+ // Depth-first walk, applying `apply` to every node and leaf, children
75
+ // first, then the containing node. `apply` may replace the value.
76
+ function walk(val, apply, key, parent, path) {
77
+ const curpath = path || []
78
+
79
+ if (isnode(val)) {
80
+ if (islist(val)) {
81
+ for (let index = 0; index < val.length; index++) {
82
+ val[index] = walk(val[index], apply, index, val, [...curpath, index])
83
+ }
84
+ } else {
85
+ for (const childkey of Object.keys(val)) {
86
+ val[childkey] = walk(val[childkey], apply, childkey, val, [...curpath, childkey])
87
+ }
88
+ }
89
+ }
90
+
91
+ return apply(key, val, parent, curpath)
92
+ }
93
+
94
+ // Deep structural equality. Numbers compare by value, booleans never equal
95
+ // numbers, map key order is not significant.
96
+ function deepequal(a, b) {
97
+ if (a === b) {
98
+ return true
99
+ }
100
+
101
+ if (null == a || null == b) {
102
+ return (undefined === a && undefined === b) || (null === a && null === b)
103
+ }
104
+
105
+ const atype = typeof a
106
+ const btype = typeof b
107
+
108
+ if ('number' === atype && 'number' === btype) {
109
+ return a === b || (isNaN(a) && isNaN(b))
110
+ }
111
+
112
+ if (atype !== btype) {
113
+ return false
114
+ }
115
+
116
+ if (islist(a) && islist(b)) {
117
+ if (a.length !== b.length) {
118
+ return false
119
+ }
120
+ for (let index = 0; index < a.length; index++) {
121
+ if (!deepequal(a[index], b[index])) {
122
+ return false
123
+ }
124
+ }
125
+ return true
126
+ }
127
+
128
+ if (ismap(a) && ismap(b)) {
129
+ const akeys = Object.keys(a)
130
+ const bkeys = Object.keys(b)
131
+ if (akeys.length !== bkeys.length) {
132
+ return false
133
+ }
134
+ for (const key of akeys) {
135
+ if (!Object.prototype.hasOwnProperty.call(b, key)) {
136
+ return false
137
+ }
138
+ if (!deepequal(a[key], b[key])) {
139
+ return false
140
+ }
141
+ }
142
+ return true
143
+ }
144
+
145
+ return false
146
+ }
147
+
148
+ // Compact JSON text with map keys sorted, so that messages are identical
149
+ // in every port regardless of local map ordering.
150
+ // GUARDED against cycles: this renders FAILURE MESSAGES, and an entry
151
+ // carrying a live cyclic value (voxgig/sdkgen's corpus bookkeeping does)
152
+ // recursed until the stack gave out. A cycle renders as "[Circular]".
153
+ // `seen` tracks the ANCESTORS of the current value, not every value
154
+ // visited: it is removed again on the way out, so the same object
155
+ // appearing twice as siblings - a DAG, not a cycle - still renders in
156
+ // full.
157
+ function jsonstr(val, seen) {
158
+ if (undefined === val) {
159
+ return 'undefined'
160
+ }
161
+
162
+ if (null === val) {
163
+ return 'null'
164
+ }
165
+
166
+ if ('string' === typeof val) {
167
+ return JSON.stringify(val)
168
+ }
169
+
170
+ if ('number' === typeof val) {
171
+ return Number.isFinite(val) ? String(val) : 'null'
172
+ }
173
+
174
+ if ('boolean' === typeof val) {
175
+ return val ? 'true' : 'false'
176
+ }
177
+
178
+ if (islist(val) || ismap(val)) {
179
+ seen = seen || new Set()
180
+
181
+ if (seen.has(val)) {
182
+ return '"[Circular]"'
183
+ }
184
+
185
+ seen.add(val)
186
+
187
+ const out = islist(val)
188
+ ? '[' + val.map((entry) => jsonstr(entry, seen)).join(',') + ']'
189
+ : '{' + Object.keys(val).sort()
190
+ .map((key) => JSON.stringify(key) + ':' + jsonstr(val[key], seen)).join(',') + '}'
191
+
192
+ seen.delete(val)
193
+
194
+ return out
195
+ }
196
+
197
+ if ('function' === typeof val) {
198
+ return '[Function' + (val.name ? ' ' + val.name : '') + ']'
199
+ }
200
+
201
+ return JSON.stringify(String(val))
202
+ }
203
+
204
+ // Human readable form of a value: strings verbatim, everything else as
205
+ // compact JSON.
206
+ function stringify(val) {
207
+ return 'string' === typeof val ? val : jsonstr(val)
208
+ }
209
+
210
+ // Render a path as a dotted string.
211
+ function pathify(path) {
212
+ return (path || []).map((part) => String(part)).join('.')
213
+ }
214
+
215
+ module.exports = {
216
+ NULLMARK,
217
+ UNDEFMARK,
218
+ EXISTSMARK,
219
+ clone,
220
+ deepequal,
221
+ getpath,
222
+ islist,
223
+ ismap,
224
+ isnode,
225
+ jsonstr,
226
+ pathify,
227
+ stringify,
228
+ walk,
229
+ }
@@ -33,7 +33,7 @@ class Utility private constructor(register: Boolean) {
33
33
  lateinit var prepareAuth: (Context) -> Spec
34
34
  lateinit var prepareBody: (Context) -> Any?
35
35
  lateinit var prepareHeaders: (Context) -> MutableMap<String, Any?>
36
- lateinit var prepareMethod: (Context) -> String
36
+ lateinit var prepareMethod: (Context) -> String?
37
37
  lateinit var prepareParams: (Context) -> MutableMap<String, Any?>
38
38
  lateinit var preparePath: (Context) -> String
39
39
  lateinit var prepareQuery: (Context) -> MutableMap<String, Any?>
@@ -0,0 +1,343 @@
1
+ package KOTLINPACKAGE.sdktest
2
+
3
+ // The corpus test runner: vendored @voxgig/omni driven through its NATIVE
4
+ // API (voxgig.omni.makeRunner(spec, provider)), presented to the corpus
5
+ // tests in the struct-runner shape they already use (run.spec, run.runset,
6
+ // run.runsetflags, run.client). No compat shim is vendored: the adapter
7
+ // below IS the whole bridge, per language, per the vendor-tag rollout
8
+ // (docs/design/vendor-tag-rollout.md, Decision 4). It supersedes the
9
+ // engine half of RunnerSupport (runset/matchDeep) and the whole
10
+ // StructRunner class (support lives on in RunnerSupport).
11
+ //
12
+ // Kotlin-specific decisions, each load-bearing:
13
+ //
14
+ // 1. TWO VALUE MODELS. The vendored kotlin omni port has a sealed `Json`
15
+ // (Absent/Null/Bool/Num/Str/JList/JMap); the SDK runtime has plain
16
+ // `Any?` - LinkedHashMap, MutableList, String, Long/Double, Boolean,
17
+ // null, and Struct.UNDEF for "no value". `toStruct`/`toOmni` convert at
18
+ // the subject boundary. Integral numbers cross as Long, matching what
19
+ // the SDK's own Json parser feeds the utilities. Ported from the
20
+ // struct kotlin port's own omni bridge (voxgig/struct
21
+ // kotlin/src/test/kotlin/voxgig/struct/Omni.kt).
22
+ //
23
+ // 2. ZERO-ARGUMENT ENTRIES. The corpus carries entries with no `in`,
24
+ // `args` or `ctx`, meaning "call the subject with NO argument". The
25
+ // kotlin port already distinguishes that case natively - such an entry
26
+ // arrives as one `Json.Absent` argument - so no novalargs spec rewrite
27
+ // (go) and no compat shim (lua/php) is needed: `toStruct(Json.Absent)`
28
+ // IS `Struct.UNDEF`, the port's own no-value sentinel, and
29
+ // `toOmni(Struct.UNDEF)` is `Json.Absent` on the way out.
30
+ //
31
+ // 3. MUTATED ARGUMENTS CANNOT CROSS BY IDENTITY. `toStruct` builds new
32
+ // containers, so an in-place rewrite by the subject would be invisible
33
+ // to the runner - and `match: {args: ...}` asserts exactly that
34
+ // (minor/setpath, merge/integrity), as does every `match: {ctx: ...}`
35
+ // read of state a subject wrote back with `omniSyncCtx`. So the
36
+ // wrapped subject REFILLS omni's own (mutable) containers in place
37
+ // after the call (`writeback`), which the runner then matches against.
38
+ // Safe because the runner clones `entry.in` before handing it over.
39
+ //
40
+ // 4. CONTEXTS STAY MAPS ACROSS THE RUNNER. omni sets `entry.ctx` to
41
+ // args[0] and `match: {ctx: ...}` assertions read THROUGH it with
42
+ // omni's own getpath, which walks Json maps only. So the subjects
43
+ // receive the MAP, build the typed Context with
44
+ // OmniResolver.omniCtx(args[0], ...) at the call site, run the
45
+ // utility, and write the observable ctx state back into the same map
46
+ // with omniSyncCtx - which is what makes the live SDK reachable
47
+ // through ctx.client for the generated utilities (omni#56; the same
48
+ // idiom as the go and java resolvers). NOTE: this port's runner marks
49
+ // `ctx.client` with `Json.Bool(true)` - presence, not identity - so a
50
+ // DEF-built client can never be resolved back from the ctx map;
51
+ // sections that need a specially-optioned client construct it at the
52
+ // call site (makeSpec/prepareAuth), same as the retired engine did.
53
+ //
54
+ // 5. THE VENDORED KOTLIN PORT LACKS THE omni#54 RUNNER FIXES the
55
+ // TypeScript port has at this tag (voxgig/omni#64 landed them for
56
+ // js/go/py only): Util.jsonstr has no cycle guard, and the match base
57
+ // is rebuilt per check rather than guarded. Both only bite on CYCLIC
58
+ // values - and a `Json` value built by this resolver's `toOmni` from
59
+ // acyclic corpus data cannot be cyclic, because typed SDK state (a
60
+ // Context, a client) never enters the Json world (decision 4). The
61
+ // errify half (non-Error throwables) cannot arise: kotlin subjects
62
+ // fail by THROWING, and the errify hook below keeps the SDK error's
63
+ // code for `match: {err: {code: ...}}` assertions.
64
+
65
+ import java.nio.file.Paths
66
+ import java.util.LinkedHashMap
67
+ import kotlin.math.abs
68
+ import kotlin.math.floor
69
+
70
+ import voxgig.omni.Flags
71
+ import voxgig.omni.Json
72
+ import voxgig.omni.Provider
73
+ import voxgig.omni.RunPack
74
+ import voxgig.omni.Subject as OmniSubject
75
+ import voxgig.omni.errify as omniErrify
76
+ import voxgig.omni.loadspec
77
+ import voxgig.omni.makeRunner as makeOmniRunner
78
+
79
+ import KOTLINPACKAGE.core.Context
80
+ import KOTLINPACKAGE.core.Helpers
81
+ import KOTLINPACKAGE.core.ProjectNameSDK
82
+ import KOTLINPACKAGE.core.SdkError
83
+ import KOTLINPACKAGE.core.Utility
84
+ import KOTLINPACKAGE.utility.struct.Struct
85
+
86
+ @Suppress("UNCHECKED_CAST")
87
+ object OmniResolver {
88
+
89
+ // The sentinels, under the names the corpus tests already use.
90
+ const val NULLMARK = voxgig.omni.NULLMARK
91
+ const val UNDEFMARK = voxgig.omni.UNDEFMARK
92
+ const val EXISTSMARK = voxgig.omni.EXISTSMARK
93
+
94
+ /** The function under test, in this port's plain-value shape. */
95
+ fun interface Subject {
96
+ fun call(args: MutableList<Any?>): Any?
97
+ }
98
+
99
+ /** Resolves one named section of the spec. */
100
+ fun interface NamedRunner {
101
+ fun runner(name: String, store: Any?): Run
102
+ }
103
+
104
+ /**
105
+ * What the runner returns for one named spec section - the struct-runner
106
+ * shape the corpus call sites consume. A failing entry throws
107
+ * voxgig.omni.OmniError, which fails the JUnit test with the entry named.
108
+ */
109
+ class Run internal constructor(
110
+ private val pack: RunPack,
111
+ val client: ProjectNameSDK?,
112
+ ) {
113
+ /** The resolved spec section, in this port's plain-value shape. */
114
+ val spec: MutableMap<String, Any?> =
115
+ toStruct(pack.spec) as? MutableMap<String, Any?> ?: linkedMapOf()
116
+
117
+ /** A named group of the resolved spec. */
118
+ fun set(name: String): Any? = spec[name]
119
+
120
+ /** Run one set of test entries with omni's default flags. */
121
+ fun runset(testspec: Any?, subject: Subject?) {
122
+ runsetflags(testspec, Flags(), subject)
123
+ }
124
+
125
+ /** Run one set of test entries with explicit flags. */
126
+ fun runsetflags(testspec: Any?, flags: Flags, subject: Subject?) {
127
+ val wrapped: OmniSubject? = if (null == subject) {
128
+ null
129
+ } else {
130
+ { jargs ->
131
+ val pargs = jargs.mapTo(mutableListOf<Any?>()) { toStruct(it) }
132
+ val got = subject.call(pargs)
133
+ // Refill omni's own containers so `match.args` / `match.ctx`
134
+ // see in-place mutation (decision 3 above).
135
+ for (index in jargs.indices) {
136
+ writeback(jargs[index], pargs[index])
137
+ }
138
+ toOmni(got)
139
+ }
140
+ }
141
+ pack.runsetflags(toOmni(testspec), flags, wrapped)
142
+ }
143
+ }
144
+
145
+ /**
146
+ * The struct runner's makeRunner(testfile, client) signature, backed by
147
+ * vendored omni. `testfile` is a spec path (absolutized against the
148
+ * working directory - omni's docs say a port must resolve the path
149
+ * itself) or an already-parsed spec value (omni's own capability), which
150
+ * keeps smoke tests free of fixture files.
151
+ */
152
+ fun makeRunner(testfile: Any?, client: ProjectNameSDK?): NamedRunner {
153
+ val spec: Json = when (testfile) {
154
+ is Json -> testfile
155
+ is String -> loadspec(Paths.get(testfile).toAbsolutePath().normalize().toString())
156
+ else -> toOmni(testfile)
157
+ }
158
+
159
+ val runner = makeOmniRunner(spec, sdkProvider(client))
160
+
161
+ return NamedRunner { name, store ->
162
+ Run(runner.runner(name, if (null == store) Json.Absent else toOmni(store)), client)
163
+ }
164
+ }
165
+
166
+ /** omni's value model -> this port's (see decision 1 above). */
167
+ fun toStruct(value: Json): Any? = when (value) {
168
+ is Json.Absent -> Struct.UNDEF
169
+ is Json.Null -> null
170
+ is Json.Bool -> value.value
171
+ is Json.Num -> {
172
+ val d = value.value
173
+ // Integral JSON numbers become Long, exactly as the SDK's own
174
+ // zero-dep Json parser produces them - the utilities' arithmetic
175
+ // and string rendering are written against that contract.
176
+ if (d.isFinite() && floor(d) == d && abs(d) < 9007199254740992.0) d.toLong() else d
177
+ }
178
+ is Json.Str -> value.value
179
+ is Json.JList -> value.value.mapTo(mutableListOf()) { toStruct(it) }
180
+ is Json.JMap ->
181
+ LinkedHashMap<String, Any?>().also { out ->
182
+ value.value.forEach { (key, entry) -> out[key] = toStruct(entry) }
183
+ }
184
+ }
185
+
186
+ /**
187
+ * This port's value model -> omni's. A function or a sentinel has no
188
+ * JSON form and omni only ever stringifies one, so it becomes its own
189
+ * rendering rather than silently collapsing to null.
190
+ */
191
+ fun toOmni(value: Any?): Json = when {
192
+ value is Json -> value
193
+ value === Struct.UNDEF -> Json.Absent
194
+ null == value -> Json.Null
195
+ value is Boolean -> Json.Bool(value)
196
+ value is Number -> Json.Num(value.toDouble())
197
+ value is String -> Json.Str(value)
198
+ value is List<*> -> Json.JList(value.mapTo(mutableListOf()) { toOmni(it) })
199
+ value is Map<*, *> ->
200
+ Json.JMap(
201
+ LinkedHashMap<String, Json>().also { out ->
202
+ value.forEach { (key, entry) -> out["$key"] = toOmni(entry) }
203
+ },
204
+ )
205
+ else -> Json.Str(Struct.stringify(value))
206
+ }
207
+
208
+ /** Refill omni's own container from the (possibly rewritten) argument. */
209
+ private fun writeback(target: Json, source: Any?) {
210
+ if (target is Json.JMap && source is Map<*, *>) {
211
+ target.value.clear()
212
+ source.forEach { (key, entry) -> target.value["$key"] = toOmni(entry) }
213
+ } else if (target is Json.JList && source is List<*>) {
214
+ target.value.clear()
215
+ source.forEach { entry -> target.value.add(toOmni(entry)) }
216
+ }
217
+ }
218
+
219
+ /** Wrap a live client as an omni provider (see decision 4 above). */
220
+ private fun sdkProvider(client: ProjectNameSDK?): Provider = Provider(
221
+ // NO subject-by-name hook: the SDK's Utility fields are TYPED function
222
+ // properties (a Context in, a typed value out), so a generic name
223
+ // lookup cannot produce omni's (List<Json>) -> Json subject without a
224
+ // per-name adapter; every corpus call site passes its subject
225
+ // explicitly, so the hook would be dead weight (the java resolver's
226
+ // decision, unchanged here).
227
+ subject = null,
228
+
229
+ // A DEF.client entry becomes another live test SDK, wrapped the same
230
+ // way. (This port's runner cannot hand the provider back through the
231
+ // ctx map - see decision 4 - so a section needing that client also
232
+ // constructs it at the call site.)
233
+ client = { options ->
234
+ val opts = toStruct(options) as? MutableMap<String, Any?>
235
+ sdkProvider(ProjectNameSDK.testSDK(null, opts ?: linkedMapOf()))
236
+ },
237
+
238
+ contextify = null,
239
+
240
+ // Client options may reference the runner store.
241
+ inject = { options, store ->
242
+ val popts = toStruct(options)
243
+ Struct.inject(popts, toStruct(store))
244
+ toOmni(popts)
245
+ },
246
+
247
+ // Keep the SDK error's code beside its message, so a corpus
248
+ // `match: {err: {code: ...}}` can assert on it - the kotlin analogue
249
+ // of the omni#54 errify fix (see decision 5 above).
250
+ errify = { err ->
251
+ if (err is SdkError) {
252
+ val out = LinkedHashMap<String, Json>()
253
+ out["name"] = Json.str("SdkError")
254
+ out["message"] = Json.str(err.message)
255
+ if (err.code.isNotEmpty()) {
256
+ out["code"] = Json.str(err.code)
257
+ }
258
+ Json.JMap(out)
259
+ } else {
260
+ omniErrify(err)
261
+ }
262
+ },
263
+ )
264
+
265
+ /**
266
+ * Build the typed Context a generated utility takes from the ctx MAP
267
+ * omni handed the subject (args[0]). (The engine half of the retired
268
+ * RunnerSupport.runset call sites did this as makeCtxFromMap + fixctx,
269
+ * per section, by hand.)
270
+ */
271
+ fun omniCtx(arg: Any?, client: ProjectNameSDK?, utility: Utility?): Context {
272
+ val ctxmap = Helpers.toMapAny(arg) ?: linkedMapOf()
273
+ val ctx = RunnerSupport.makeCtxFromMap(ctxmap, client, utility)
274
+ RunnerSupport.fixctx(ctx, client)
275
+ return ctx
276
+ }
277
+
278
+ /**
279
+ * Write the OBSERVABLE state of a typed context back into the ctx map
280
+ * the entry holds, which is where a `match: {ctx: ...}` assertion reads
281
+ * (through the wrapped subject's writeback - decision 3). The subject
282
+ * mutated the typed context; the map is what the runner can walk. (The
283
+ * retired engine call sites did this per section, by hand, as "update
284
+ * entry ctx for match".)
285
+ */
286
+ fun omniSyncCtx(arg: Any?, ctx: Context?) {
287
+ val ctxmap = Helpers.toMapAny(arg)
288
+ if (null == ctxmap || null == ctx) {
289
+ return
290
+ }
291
+
292
+ val spec = ctx.spec
293
+ if (null != spec) {
294
+ val out = linkedMapOf<String, Any?>(
295
+ "base" to spec.base,
296
+ "prefix" to spec.prefix,
297
+ "suffix" to spec.suffix,
298
+ "path" to spec.path,
299
+ "method" to spec.method,
300
+ "params" to spec.params,
301
+ "query" to spec.query,
302
+ "headers" to spec.headers,
303
+ "step" to spec.step,
304
+ "alias" to spec.alias,
305
+ )
306
+ if (null != spec.body) {
307
+ out["body"] = spec.body
308
+ }
309
+ if (spec.url.isNotEmpty()) {
310
+ out["url"] = spec.url
311
+ }
312
+ ctxmap["spec"] = out
313
+ }
314
+
315
+ val result = ctx.result
316
+ if (null != result) {
317
+ val out = linkedMapOf<String, Any?>(
318
+ "ok" to result.ok,
319
+ "status" to result.status,
320
+ "statusText" to result.statusText,
321
+ "headers" to result.headers,
322
+ )
323
+ if (null != result.body) {
324
+ out["body"] = result.body
325
+ }
326
+ val err = result.err
327
+ if (null != err) {
328
+ out["err"] = linkedMapOf<String, Any?>("message" to err.message)
329
+ }
330
+ if (null != result.resdata) {
331
+ out["resdata"] = result.resdata
332
+ }
333
+ if (null != result.resmatch) {
334
+ out["resmatch"] = result.resmatch
335
+ }
336
+ ctxmap["result"] = out
337
+ }
338
+
339
+ if (null != ctx.response) {
340
+ ctxmap["response"] = "exists"
341
+ }
342
+ }
343
+ }
@@ -0,0 +1,100 @@
1
+ package KOTLINPACKAGE.sdktest
2
+
3
+ // Smoke tests for the vendored omni runner itself: a runner that cannot
4
+ // FAIL a bad entry would turn every corpus suite vacuously green, so pin
5
+ // the failure paths, not just the happy one. (The kotlin peer of
6
+ // tm/ts/test/omni.test.ts and tm/java/test/OmniSmokeTest.java.)
7
+
8
+ import org.junit.jupiter.api.Assertions.assertNotNull
9
+ import org.junit.jupiter.api.Assertions.assertThrows
10
+ import org.junit.jupiter.api.Assertions.assertTrue
11
+ import org.junit.jupiter.api.Test
12
+
13
+ import voxgig.omni.OmniError
14
+
15
+ import KOTLINPACKAGE.core.ProjectNameSDK
16
+
17
+ class OmniSmokeTest {
18
+
19
+ // A minimal in-memory spec: no fixture file, no OMNI block (lenient v0,
20
+ // like the shared corpus).
21
+ private fun smokeSpec(): MutableMap<String, Any?> = linkedMapOf(
22
+ "primary" to linkedMapOf<String, Any?>(
23
+ "smoke" to linkedMapOf<String, Any?>(
24
+ "basic" to linkedMapOf<String, Any?>(
25
+ "set" to mutableListOf<Any?>(
26
+ linkedMapOf<String, Any?>("in" to 1, "out" to 2),
27
+ linkedMapOf<String, Any?>("in" to 41, "out" to 42),
28
+ ),
29
+ ),
30
+ "bad" to linkedMapOf<String, Any?>(
31
+ "set" to mutableListOf<Any?>(
32
+ linkedMapOf<String, Any?>("in" to 1, "out" to 999),
33
+ ),
34
+ ),
35
+ "err" to linkedMapOf<String, Any?>(
36
+ "set" to mutableListOf<Any?>(
37
+ linkedMapOf<String, Any?>("in" to 0, "err" to "zero refused"),
38
+ ),
39
+ ),
40
+ ),
41
+ ),
42
+ )
43
+
44
+ private val smokeInc = OmniResolver.Subject { args ->
45
+ val n = (args[0] as Number).toInt()
46
+ if (0 == n) {
47
+ throw RuntimeException("smoke: zero refused")
48
+ }
49
+ n + 1
50
+ }
51
+
52
+ private fun smokeRun(): OmniResolver.Run {
53
+ val runner = OmniResolver.makeRunner(smokeSpec(), ProjectNameSDK.testSDK())
54
+ val run = runner.runner("smoke", null)
55
+ assertNotNull(run.spec, "smoke spec section did not resolve")
56
+ return run
57
+ }
58
+
59
+ @Test
60
+ fun runsetPassesACorrectSubject() {
61
+ val run = smokeRun()
62
+ run.runset(run.spec["basic"], smokeInc)
63
+ }
64
+
65
+ @Test
66
+ fun runsetFailsAWrongResult() {
67
+ val run = smokeRun()
68
+
69
+ val err = assertThrows(
70
+ OmniError::class.java,
71
+ { run.runset(run.spec["bad"], smokeInc) },
72
+ "a wrong result went unreported - the corpus suites would be vacuously green",
73
+ )
74
+
75
+ assertTrue(
76
+ err.message.orEmpty().contains("result mismatch"),
77
+ "expected a result mismatch failure, got: ${err.message}",
78
+ )
79
+ }
80
+
81
+ @Test
82
+ fun expectedErrorIsMatchedAndAMissingOneFails() {
83
+ val run = smokeRun()
84
+
85
+ // The erroring subject satisfies the expected-error entry.
86
+ run.runset(run.spec["err"], smokeInc)
87
+
88
+ // A subject that does NOT raise must fail that same entry.
89
+ val err = assertThrows(
90
+ OmniError::class.java,
91
+ { run.runset(run.spec["err"], OmniResolver.Subject { args -> args[0] }) },
92
+ "a missing expected error went unreported",
93
+ )
94
+
95
+ assertTrue(
96
+ err.message.orEmpty().contains("expected error did not occur"),
97
+ "expected an expected-error failure, got: ${err.message}",
98
+ )
99
+ }
100
+ }