@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,456 @@
1
+ -- ProjectName SDK corpus test runner: vendored @voxgig/omni driven through
2
+ -- its NATIVE API (`makeRunner(specref, provider)`), presented to the corpus
3
+ -- tests in the struct-runner shape they already use (`R.spec`, `R.runset`,
4
+ -- `R.runsetflags`, `R.client`). No compat shim is vendored: the adapter
5
+ -- below IS the whole bridge, per language, per the vendor-tag rollout
6
+ -- (docs/design/vendor-tag-rollout.md, Decision 4). It is the lua peer of
7
+ -- tm/ts/test/omni.ts / tm/py/test/omni.py, and a port of upstream omni's
8
+ -- own lua struct shim (voxgig/omni lua/compat/struct.lua) onto the REAL
9
+ -- generated SDK.
10
+ --
11
+ -- Four local decisions, all required:
12
+ --
13
+ -- 1. SPEC PATH. omni's own spec loading expects a usable path. A relative
14
+ -- path is absolutized against THIS module's directory (test/), so the
15
+ -- existing '../../.sdk/test/test.json' constant keeps working verbatim
16
+ -- wherever the suite is run from.
17
+ --
18
+ -- 2. PROVIDER DELEGATION. Corpus-driven contexts get `ctx.client` set to
19
+ -- the runner's provider (omni overwrites it on any ctx/args map entry).
20
+ -- A five-hook provider object HIDES the live SDK from the generated
21
+ -- utilities that reach through it - prepare_auth and prepare_headers via
22
+ -- `ctx.client:options_map()`, feature_add appending to client.features.
23
+ -- So the provider here is a READ-THROUGH view of the live SDK instance:
24
+ -- a table holding the omni hooks whose metatable delegates reads to the
25
+ -- SDK (`__index`) and routes writes onto it (`__newindex`) - the lua
26
+ -- spelling of ts's prototype delegation. (Upstream omni#56 tracks
27
+ -- giving the stock provider the same shape.)
28
+ --
29
+ -- 3. TWO VALUE MODELS, converted at the subject boundary. omni marks maps
30
+ -- and lists by METATABLE IDENTITY and models null/absent as sentinel
31
+ -- tables (a lua table cannot hold nil); the SDK and the vendored struct
32
+ -- speak dkjson's `__jsontype` convention with plain lua nil. Neither
33
+ -- recognises the other, so `wrapsubject` converts every argument on the
34
+ -- way in (tostruct) and the result on the way out (toomni), splicing
35
+ -- argument mutations back where omni's `match` can see them. This is
36
+ -- the port of upstream's compat shim, with ONE deliberate change: a
37
+ -- table that belongs to neither model (a live SDK object - the
38
+ -- provider, a Context, the utility) passes through BY REFERENCE as a
39
+ -- leaf, so subjects keep real object identity through `ctx.client`.
40
+ --
41
+ -- 4. NO-VALUE ARITY (the zero-argument correction six upstream compat
42
+ -- shims carry). An entry with no `in`/`args`/`ctx` must reach the
43
+ -- subject as NO value, not as one null. omni models absence as an
44
+ -- explicit ABSENT sentinel; the vendored struct's own NOVAL sentinel
45
+ -- (upstream struct/lua 0.1.1) is what an absent argument becomes, so
46
+ -- `typify()` answers T_noval where `typify(nil)` answers T_null. A
47
+ -- port without NOVAL gets trailing absent arguments TRIMMED instead,
48
+ -- which `select('#', ...)` reads as a zero-arity call.
49
+ --
50
+ -- THE VENDORED LUA PORT AND THE omni#54 RUNNER FIXES, checked per the
51
+ -- rollout: lua's `match` already reads its base directly (no clone), its
52
+ -- `errmessage` already keeps a message-bearing table's message (the SDK's
53
+ -- error type answers through __tostring), and its walkers recurse only
54
+ -- into omni-marked tables, so live cyclic objects are leaves to them. No
55
+ -- resolver workaround is needed at this tag; decision 3's leaf rule is
56
+ -- what keeps it that way.
57
+
58
+ local u = require("test.vendor.omni.util")
59
+ local Runner = require("test.vendor.omni.runner")
60
+ local vs = require("utility.struct.struct")
61
+
62
+ local _test_dir = debug.getinfo(1, "S").source:match("^@(.+/)") or "./"
63
+
64
+ local M = {}
65
+
66
+ M.NULLMARK = u.NULLMARK
67
+ M.UNDEFMARK = u.UNDEFMARK
68
+ M.EXISTSMARK = u.EXISTSMARK
69
+ M.JSON_NULL = u.NULL
70
+ M.ABSENT = u.ABSENT
71
+
72
+ -- omni's own model constructors and error type, re-exported for the smoke
73
+ -- test (an in-memory spec must be built in omni's value model).
74
+ M.map = u.map
75
+ M.list = u.list
76
+ M.OmniError = Runner.OmniError
77
+ M.isomnierror = Runner.isomnierror
78
+
79
+ --- The two value models, and the translation between them (decision 3).
80
+
81
+ local ARRAYMT = { __jsontype = "array" }
82
+ local OBJECTMT = { __jsontype = "object" }
83
+
84
+ --- omni's model -> struct's/SDK's.
85
+ ---
86
+ --- Returns `(value, kind)` where kind is 'value', 'null' or 'absent'.
87
+ --- Three states, not two: omni's NULL and ABSENT both become a lua `nil`,
88
+ --- but they are NOT interchangeable at the call boundary - an absent
89
+ --- argument becomes the port's no-value, a null stays nil.
90
+ local function tostruct(val, seen)
91
+ if u.NULL == val then
92
+ return nil, "null"
93
+ end
94
+ if u.ABSENT == val then
95
+ return nil, "absent"
96
+ end
97
+ if "table" ~= type(val) then
98
+ return val, "value"
99
+ end
100
+
101
+ -- Decision 3's leaf rule: a table that is not omni-marked is a LIVE
102
+ -- object (the provider, a Context, the utility). It crosses by
103
+ -- reference, keeping identity and methods.
104
+ local islist = u.islist(val)
105
+ if not islist and not u.ismap(val) then
106
+ return val, "value"
107
+ end
108
+
109
+ seen = seen or {}
110
+ if nil ~= seen[val] then
111
+ return seen[val], "value"
112
+ end
113
+
114
+ local out = setmetatable({}, islist and ARRAYMT or OBJECTMT)
115
+ seen[val] = out
116
+
117
+ if islist then
118
+ for index = 1, #val do
119
+ local entry, kind = tostruct(val[index], seen)
120
+ -- A null INSIDE a list has to stay a slot, or the list shortens -
121
+ -- and the slot is the STRING "null", which is what struct/lua's own
122
+ -- runner put there and what the port is written against ("Preserve
123
+ -- null in arrays as the string "null" to avoid nil holes").
124
+ if "value" == kind then
125
+ out[index] = entry
126
+ else
127
+ out[index] = "null"
128
+ end
129
+ end
130
+ else
131
+ for key, entry in pairs(val) do
132
+ local converted, kind = tostruct(entry, seen)
133
+ if "value" == kind then
134
+ out[key] = converted
135
+ end
136
+ end
137
+ end
138
+
139
+ return out, "value"
140
+ end
141
+
142
+ --- Convert a value from omni's model into the SDK's (nulls become lua
143
+ --- nil), re-exported for test files that read spec sections directly -
144
+ --- DEF.setup options handed to `sdk.test`, corpus fixtures cloned before
145
+ --- driving a subject by hand.
146
+ function M.tostruct(val)
147
+ local out = tostruct(val)
148
+ return out
149
+ end
150
+
151
+ --- struct's/SDK's model -> omni's.
152
+ local function toomni(val, seen)
153
+ if "table" ~= type(val) then
154
+ return val
155
+ end
156
+ if u.NULL == val or u.ABSENT == val then
157
+ return val
158
+ end
159
+ -- Already omni-marked: a subject handed its input straight back.
160
+ if u.ismap(val) or u.islist(val) then
161
+ return val
162
+ end
163
+
164
+ -- Struct marks with __jsontype; a live object carries some OTHER
165
+ -- metatable and stays a leaf (decision 3). An unmarked plain table is
166
+ -- classified the way struct/lua's own `islist` does it: at least one
167
+ -- key, and the numeric keys are 1..n with nothing else (`count > 0`
168
+ -- matters - an unmarked EMPTY table is a MAP to struct, and calling it
169
+ -- a list turns every `{}` that comes back through merge or clone into
170
+ -- `[]`).
171
+ local mt = getmetatable(val)
172
+ local jsontype = mt and mt.__jsontype
173
+ if nil ~= mt and nil == jsontype then
174
+ return val
175
+ end
176
+
177
+ local islist
178
+ if "array" == jsontype then
179
+ islist = true
180
+ elseif "object" == jsontype then
181
+ islist = false
182
+ else
183
+ local count, max = 0, 0
184
+ islist = true
185
+ for key in pairs(val) do
186
+ if "number" ~= type(key) then
187
+ islist = false
188
+ break
189
+ end
190
+ count = count + 1
191
+ if key > max then
192
+ max = key
193
+ end
194
+ end
195
+ islist = islist and 0 < count and max == count
196
+ end
197
+
198
+ seen = seen or {}
199
+ if nil ~= seen[val] then
200
+ return seen[val]
201
+ end
202
+
203
+ local out = islist and u.list({}) or u.map({})
204
+ seen[val] = out
205
+
206
+ if islist then
207
+ for index = 1, #val do
208
+ out[index] = toomni(val[index], seen)
209
+ end
210
+ else
211
+ for key, entry in pairs(val) do
212
+ out[key] = toomni(entry, seen)
213
+ end
214
+ end
215
+
216
+ return out
217
+ end
218
+
219
+ --- Replace the CONTENTS of an omni table with another's, keeping the
220
+ --- original table's identity and its map/list metatable. Used to write an
221
+ --- argument mutation back where omni's `match` can see it.
222
+ local function splice(into, from)
223
+ local keys = {}
224
+ for key in pairs(into) do
225
+ keys[#keys + 1] = key
226
+ end
227
+ for _, key in ipairs(keys) do
228
+ into[key] = nil
229
+ end
230
+ for key, value in pairs(from) do
231
+ into[key] = value
232
+ end
233
+ end
234
+
235
+ --- A subject that speaks the SDK's value model on the way in and omni's on
236
+ --- the way out. Arity is preserved exactly: `select('#', ...)` is what
237
+ --- tells an entry with no `in` (zero arguments) from one with `in: null`
238
+ --- (one) - decision 4.
239
+ local function wrapsubject(subject, noval)
240
+ if "function" ~= type(subject) then
241
+ return nil
242
+ end
243
+ return function(...)
244
+ local count = select("#", ...)
245
+ local args = table.pack(...)
246
+ local converted, presence = {}, {}
247
+ for index = 1, count do
248
+ local value, kind = tostruct(args[index])
249
+ -- NOT `kind and value or nil`: when `value` is `false` that whole
250
+ -- expression is `nil`, so every `in: false` entry arrived as absent.
251
+ presence[index] = ("absent" ~= kind)
252
+ if "value" == kind then
253
+ converted[index] = value
254
+ end
255
+ end
256
+
257
+ -- An absent argument becomes the port's own no-value, so `typify()`
258
+ -- can answer T_noval where `typify(nil)` answers T_null. Without a
259
+ -- sentinel there is nothing to send, so trailing absents shorten the
260
+ -- call instead and the port sees a zero-arity call.
261
+ if nil ~= noval then
262
+ for index = 1, count do
263
+ if not presence[index] then
264
+ converted[index] = noval
265
+ end
266
+ end
267
+ else
268
+ while 0 < count and not presence[count] do
269
+ count = count - 1
270
+ end
271
+ end
272
+
273
+ local result = subject(table.unpack(converted, 1, count))
274
+
275
+ -- SDK utilities MUTATE the value they are given (result_body rewrites
276
+ -- ctx.result in place), and the corpus checks it via `match`. But
277
+ -- `tostruct` built a copy, so the mutation landed on the copy - splice
278
+ -- the result back into omni's own table, keeping its identity so its
279
+ -- map/list marking survives. Only a converted COPY is written back: a
280
+ -- leaf that crossed by reference (decision 3) mutated in place
281
+ -- already, and self-splicing it would wipe it.
282
+ for index = 1, count do
283
+ local original, mutated = args[index], converted[index]
284
+ if
285
+ "table" == type(original)
286
+ and "table" == type(mutated)
287
+ and original ~= mutated
288
+ and (u.ismap(original) or u.islist(original))
289
+ then
290
+ splice(original, toomni(mutated))
291
+ end
292
+ end
293
+
294
+ -- The port's no-value is omni's absent, explicitly.
295
+ if nil ~= noval and noval == result then
296
+ return u.ABSENT
297
+ end
298
+ -- A plain `nil` back from the SDK is ABSENT, not NULL. The port has
299
+ -- one `nil` for both, and the corpus decides which way: measured
300
+ -- upstream over the struct corpus, reading it as null costs 43
301
+ -- entries, reading it as absent costs 6 (named in the struct suite's
302
+ -- drop guards).
303
+ if nil == result then
304
+ return u.ABSENT
305
+ end
306
+ return toomni(result)
307
+ end
308
+ end
309
+
310
+ --- `makeContext` -> `make_context`: corpus subject names are camelCase,
311
+ --- the SDK utility is snake_case.
312
+ local function snake(name)
313
+ return (name:gsub("%u", function(c)
314
+ return "_" .. c:lower()
315
+ end))
316
+ end
317
+
318
+ --- Read `name` off the SDK's utility the way struct's runner does: the
319
+ --- utility itself (either spelling), then the struct utilities.
320
+ local function lookup(utility, name)
321
+ if nil == utility then
322
+ return nil
323
+ end
324
+ local found = utility[name]
325
+ if nil == found then
326
+ found = utility[snake(name)]
327
+ end
328
+ if nil == found and nil ~= utility.struct then
329
+ found = utility.struct[name]
330
+ end
331
+ return found
332
+ end
333
+
334
+ --- Wrap the live SDK as an omni provider (decision 2): the omni hooks sit
335
+ --- in the table, everything else delegates to the SDK - reads through
336
+ --- `__index`, writes through `__newindex`.
337
+ local function sdkprovider(client)
338
+ -- The LIVE utility, not the copy `get_utility()` hands out - the corpus
339
+ -- suites reach the struct utilities through `client.utility().struct`
340
+ -- (mirrors ts), so they are attached here once.
341
+ local utility = client._utility
342
+ if nil ~= utility and nil == utility.struct then
343
+ utility.struct = vs
344
+ end
345
+
346
+ local noval = nil ~= utility and nil ~= utility.struct
347
+ and utility.struct.NOVAL or nil
348
+
349
+ local provider = {}
350
+
351
+ provider.sdk = client
352
+
353
+ provider.subject = function(name)
354
+ return wrapsubject(lookup(utility, name), noval)
355
+ end
356
+
357
+ -- A DEF.client entry becomes another SDK instance - rewrapped with the
358
+ -- same delegating shape, not a plain hook object.
359
+ provider.client = function(options)
360
+ local opts = tostruct(options)
361
+ return sdkprovider(client.test(nil, opts))
362
+ end
363
+
364
+ -- omni's resolveargs installs `client` on a contextified map argument;
365
+ -- the utility is added here so corpus contexts carry both (struct's
366
+ -- runner handed its contexts the same pair). The ctx STAYS an omni map -
367
+ -- the subject adapters materialise a real Context from it, and
368
+ -- wrapsubject splices their writebacks into it for `match: {ctx: ...}`.
369
+ provider.contextify = function(val)
370
+ if nil ~= utility and nil ~= utility.contextify then
371
+ val = utility.contextify(val)
372
+ end
373
+ if u.ismap(val) then
374
+ rawset(val, "utility", utility)
375
+ end
376
+ return val
377
+ end
378
+
379
+ -- Client options may reference the runner store.
380
+ provider.inject = function(options, store)
381
+ if nil ~= utility and nil ~= utility.struct
382
+ and nil ~= utility.struct.inject then
383
+ utility.struct.inject(options, store)
384
+ end
385
+ return options
386
+ end
387
+
388
+ provider.utility = function()
389
+ return utility
390
+ end
391
+
392
+ return setmetatable(provider, {
393
+ __index = client,
394
+ __newindex = function(_, key, value)
395
+ client[key] = value
396
+ end,
397
+ })
398
+ end
399
+
400
+
401
+ --- struct's makeRunner(testfile, client) signature, backed by vendored
402
+ --- omni. Also accepts an already-parsed spec (omni's own capability, in
403
+ --- omni's value model), which keeps smoke tests free of fixture files.
404
+ function M.makeRunner(testfile, client)
405
+ local specref = testfile
406
+ if "string" == type(testfile) and "/" ~= testfile:sub(1, 1) then
407
+ specref = _test_dir .. testfile
408
+ end
409
+
410
+ local provider = sdkprovider(client)
411
+ local runner = Runner.makeRunner(specref, provider)
412
+
413
+ local utility = client._utility
414
+ local noval = nil ~= utility and nil ~= utility.struct
415
+ and utility.struct.NOVAL or nil
416
+
417
+ return function(name, store)
418
+ local runpack = runner(name, store or u.map({}))
419
+
420
+ -- Explicitly passed subjects speak the SDK's model too - the corpus
421
+ -- tests hand most subjects in per-set rather than by name.
422
+ local runsetflags = function(testspec, flags, testsubject)
423
+ return runpack.runsetflags(testspec, flags, wrapsubject(testsubject, noval))
424
+ end
425
+
426
+ return {
427
+ spec = runpack.spec,
428
+ runset = function(testspec, testsubject)
429
+ return runsetflags(testspec, {}, testsubject)
430
+ end,
431
+ runsetflags = runsetflags,
432
+ subject = runpack.subject,
433
+ -- The read-through provider: tests treat it as the SDK (its members
434
+ -- all resolve), and omni hands it to corpus contexts as ctx.client.
435
+ client = provider,
436
+ }
437
+ end
438
+ end
439
+
440
+ --- Convert NULLMARK sentinels back into real nulls.
441
+ ---
442
+ --- NOT a delegation to omni's `nullmodifier`, deliberately: omni's
443
+ --- RETURNS the replacement value, while struct/lua's `inject` passes this
444
+ --- as its `modify` hook and expects it to MUTATE `parent[key]` in place.
445
+ --- It writes a real lua `nil` rather than omni's NULL sentinel, because
446
+ --- that is what struct's own modifier wrote and what the corpus expects
447
+ --- to come back out.
448
+ function M.nullModifier(val, key, parent)
449
+ if M.NULLMARK == val then
450
+ parent[key] = nil
451
+ elseif "string" == type(val) then
452
+ parent[key] = (val:gsub(M.NULLMARK, "null"))
453
+ end
454
+ end
455
+
456
+ return M
@@ -0,0 +1,103 @@
1
+ -- ProjectName SDK omni runner smoke test
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. (Lua peer of ts's
6
+ -- test/omni.test.ts and py's test_omni_smoke.py.)
7
+
8
+ local assert = require("luassert")
9
+
10
+ local sdk = require("project-name-_sdk")
11
+ local omni = require("test.omni")
12
+
13
+ local makeRunner, isomnierror = omni.makeRunner, omni.isomnierror
14
+ local map, list = omni.map, omni.list
15
+
16
+
17
+ -- A minimal in-memory spec: no fixture file, no OMNI block (lenient v0,
18
+ -- like the shared corpus). Built in omni's own value model - a plain lua
19
+ -- table is invisible to its walkers.
20
+ local function makespec()
21
+ return map({
22
+ primary = map({
23
+ smoke = map({
24
+ basic = map({
25
+ set = list({
26
+ map({ ["in"] = 1, out = 2 }),
27
+ map({ ["in"] = 41, out = 42 }),
28
+ }),
29
+ }),
30
+ bad = map({
31
+ set = list({
32
+ map({ ["in"] = 1, out = 999 }),
33
+ }),
34
+ }),
35
+ err = map({
36
+ set = list({
37
+ map({ ["in"] = 0, err = "zero refused" }),
38
+ }),
39
+ }),
40
+ }),
41
+ }),
42
+ })
43
+ end
44
+
45
+
46
+ local function inc(n)
47
+ if 0 == n then
48
+ error("smoke: zero refused")
49
+ end
50
+ return n + 1
51
+ end
52
+
53
+
54
+ -- Run `fn`, requiring it to raise an omni failure whose message contains
55
+ -- `want`.
56
+ local function mustfail(fn, want)
57
+ local ok, err = pcall(fn)
58
+ assert.is_false(ok, "expected the runner to FAIL, but it passed")
59
+ assert.is_true(isomnierror(err),
60
+ "expected an omni error, got: " .. tostring(err))
61
+ assert.is_truthy(string.find(tostring(err), want, 1, true),
62
+ "expected failure containing '" .. want .. "', got: " .. tostring(err))
63
+ end
64
+
65
+
66
+ describe("omni smoke", function()
67
+
68
+ local function pack()
69
+ local runner = makeRunner(makespec(), sdk.test(nil, nil))
70
+ return runner("smoke")
71
+ end
72
+
73
+
74
+ it("runset passes a correct subject", function()
75
+ local R = pack()
76
+ R.runset(R.spec.basic, inc)
77
+ end)
78
+
79
+
80
+ it("runset fails a wrong result with an omni error", function()
81
+ local R = pack()
82
+ mustfail(function()
83
+ R.runset(R.spec.bad, inc)
84
+ end, "result mismatch")
85
+ end)
86
+
87
+
88
+ it("an expected error is matched, and a missing expected error fails", function()
89
+ local R = pack()
90
+
91
+ -- The expected error occurs: passes.
92
+ R.runset(R.spec.err, inc)
93
+
94
+ -- The expected error does NOT occur: must fail.
95
+ local R2 = pack()
96
+ mustfail(function()
97
+ R2.runset(R2.spec.err, function(n)
98
+ return n
99
+ end)
100
+ end, "expected error did not occur")
101
+ end)
102
+
103
+ end)