@voxgig/sdkgen 4.8.2 → 4.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -1,28 +1,56 @@
1
1
  // Struct utility tests — run the shared `struct` corpus subtree from
2
- // ../.sdk/test/test.json against the vendored voxgig struct port
3
- // (mirrors tm/go/test/struct_utility_test.go).
2
+ // ../.sdk/test/test.json against the vendored voxgig struct port.
3
+ //
4
+ // The corpus is driven by the VENDORED omni runner through the adapter in
5
+ // tests/omni_resolver/mod.rs (which superseded the hand-written
6
+ // tests/struct_runner/mod.rs). Group labels, null flags and subjects are
7
+ // unchanged; the engine underneath them is now the shared one.
4
8
 
5
- mod struct_runner;
9
+ mod omni_resolver;
6
10
 
7
11
  use std::cell::RefCell;
8
12
  use std::rc::Rc;
9
13
 
10
- use struct_runner::*;
14
+ use omni_resolver::*;
11
15
 
12
16
  use RUSTCRATE::utility::voxgigstruct::ordered_map::OrderedMap;
13
17
  use RUSTCRATE::utility::voxgigstruct::value::Value;
14
18
  use RUSTCRATE::utility::voxgigstruct::*;
15
19
 
16
20
 
21
+ /// Groups this SDK's corpus subset does not carry, so a run over it reports
22
+ /// zero checks for them BY DESIGN.
23
+ ///
24
+ /// `Run::report` holds this list to the corpus in both directions: a group
25
+ /// that goes absent without being named here fails the suite, and a name
26
+ /// here that is no longer absent fails it too. Nothing else stops a renamed
27
+ /// or deleted group from taking its whole check count away while `cargo
28
+ /// test` still prints `ok`.
29
+ ///
30
+ /// `sentinels` is the Group A null-unification block (UNDEF_SPEC.md): the
31
+ /// subjects below are wired and ready, and the entries arrive with the
32
+ /// corpus refresh that adds `struct.sentinels`.
33
+ const EXPECTED_SKIPS: &[&str] = &[
34
+ "sentinels-getprop_unify",
35
+ "sentinels-getelem_absent",
36
+ "sentinels-haskey_unify",
37
+ "sentinels-isempty_unify",
38
+ "sentinels-isnode_unify",
39
+ "sentinels-stringify_null",
40
+ ];
41
+
42
+
17
43
  #[test]
18
44
  fn struct_utility() {
19
- let spec = test_json();
20
- let s = vget(&spec, "struct");
21
- let mut run = Run::new();
45
+ let mut run = Run::section("struct");
46
+ // A detached handle on the resolved section, so a `set!` argument does
47
+ // not borrow `run` while `run` is borrowed mutably by the call.
48
+ let s = run.spec.clone();
49
+ let all = run.all.clone();
22
50
 
23
51
  macro_rules! set {
24
52
  ($cat:expr, $name:expr) => {
25
- vget_path(&s, &[$cat, $name])
53
+ jpath(&s, &[$cat, $name])
26
54
  };
27
55
  }
28
56
 
@@ -211,6 +239,28 @@ fn struct_utility() {
211
239
  |v| Value::str(stringify(&v, None, false)),
212
240
  );
213
241
 
242
+ // -------- nullsem (does a PRESENT key holding JSON null read as "no
243
+ // value"?) — the peer of go's `nullsem` subtest and py's test_nullsem.
244
+ // null_flag is false throughout so a stored null survives into the
245
+ // subject rather than being normalised to a sentinel string.
246
+ run.run_set(&set!("nullsem", "getprop"), false, "nullsem-getprop", |vin| {
247
+ let alt = vget(&vin, "alt");
248
+ get_prop(&vget(&vin, "val"), &vget(&vin, "key"), alt)
249
+ });
250
+ run.run_set(&set!("nullsem", "getelem"), false, "nullsem-getelem", |vin| {
251
+ let alt = vget(&vin, "alt");
252
+ get_elem(&vget(&vin, "val"), &vget(&vin, "key"), alt)
253
+ });
254
+ run.run_set(&set!("nullsem", "getpath"), false, "nullsem-getpath", |vin| {
255
+ get_path(&vget(&vin, "store"), &vget(&vin, "path"), None)
256
+ });
257
+ run.run_set(&set!("nullsem", "haskey"), false, "nullsem-haskey", |vin| {
258
+ b(has_key(&vget(&vin, "src"), &vget(&vin, "key")))
259
+ });
260
+ run.run_set(&set!("nullsem", "keysof"), false, "nullsem-keysof", |v| {
261
+ keys_of(&v)
262
+ });
263
+
214
264
  // -------- walk ---------------------------------------------------
215
265
  run.run_set(&set!("walk", "basic"), true, "walk-basic", |vin| {
216
266
  let mut walkpath = |_k: &Value, val: &Value, _p: &Value, path: &[String]| -> Value {
@@ -223,7 +273,7 @@ fn struct_utility() {
223
273
  });
224
274
  // walk.log — three runs (after-only / before-only / both) of a logging callback.
225
275
  {
226
- let log_spec = vget_path(&s, &["walk", "log"]);
276
+ let log_spec = tostruct(&jpath(&s, &["walk", "log"]));
227
277
  let input = clone(&vget(&log_spec, "in"));
228
278
  let want = vget(&log_spec, "out");
229
279
  let mk_log = |inp: &Value, before: bool, after: bool| -> Value {
@@ -377,8 +427,7 @@ fn struct_utility() {
377
427
  });
378
428
  // merge.basic is a single { in, out } object (not a `set`); handle inline.
379
429
  {
380
- let mb = vget(&s, "merge");
381
- let basic = vget(&mb, "basic");
430
+ let basic = tostruct(&jpath(&s, &["merge", "basic"]));
382
431
  let bin = clone(&vget(&basic, "in"));
383
432
  let bout = fix_json(&vget(&basic, "out"), true);
384
433
  let got = fix_json(&merge(&bin, None), true);
@@ -455,7 +504,7 @@ fn struct_utility() {
455
504
  // -------- inject -------------------------------------------------
456
505
  {
457
506
  // inject.basic is a single { in: {val, store}, out } object.
458
- let basic = vget_path(&s, &["inject", "basic"]);
507
+ let basic = tostruct(&jpath(&s, &["inject", "basic"]));
459
508
  let bin = vget(&basic, "in");
460
509
  let bout = fix_json(&vget(&basic, "out"), true);
461
510
  let got = fix_json(
@@ -504,7 +553,7 @@ fn struct_utility() {
504
553
 
505
554
  // -------- transform ---------------------------------------------
506
555
  {
507
- let basic = vget_path(&s, &["transform", "basic"]);
556
+ let basic = tostruct(&jpath(&s, &["transform", "basic"]));
508
557
  let bin = vget(&basic, "in");
509
558
  let bout = fix_json(&vget(&basic, "out"), true);
510
559
  let got = match transform(
@@ -620,7 +669,7 @@ fn struct_utility() {
620
669
  Value::map_of([("zed".to_string(), Value::str(format!("ZED{foo_s}_{bar_s}")))])
621
670
  }
622
671
  {
623
- let check = vget_path(&spec, &["primary", "check"]);
672
+ let check = tostruct(&jpath(&all, &["primary", "check"]));
624
673
  // resolve clients from DEF.client (options are inject()'d against {} — a no-op here)
625
674
  let def_clients = vget_path(&check, &["DEF", "client"]);
626
675
  let mut clients: OrderedMap<Value> = OrderedMap::new();
@@ -657,20 +706,9 @@ fn struct_utility() {
657
706
  }
658
707
 
659
708
  // -------- report -------------------------------------------------
660
- if !run.failures.is_empty() {
661
- let n = run.failures.len();
662
- let mut msg = format!("\n{} corpus check(s) failed ({} passed):\n", n, run.passed);
663
- for f in run.failures.iter().take(60) {
664
- msg.push_str(" - ");
665
- msg.push_str(f);
666
- msg.push('\n');
667
- }
668
- if n > 60 {
669
- msg.push_str(&format!(" ... and {} more\n", n - 60));
670
- }
671
- panic!("{msg}");
672
- }
673
- eprintln!("corpus: {} checks passed", run.passed);
709
+ // Strict: any group that went absent, any expected skip that did not
710
+ // happen, and any corpus group nothing here drives, is a FAILURE.
711
+ run.report("corpus", EXPECTED_SKIPS);
674
712
  }
675
713
 
676
714
  // Function values embedded in data: `get_elem` with a callable `alt`, and
@@ -0,0 +1,412 @@
1
+ // VENDORED: @voxgig/omni sdk-20260904-1610-0 (rust/src/json.rs)
2
+ // Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ //! The omni JSON value model, with a small in-tree parser.
5
+ //!
6
+ //! The omni runner must be able to test *any* library, and must add no
7
+ //! third-party dependencies, so it carries its own JSON support rather
8
+ //! than borrowing serde or the system under test.
9
+
10
+ use std::collections::BTreeMap;
11
+ use std::fmt;
12
+
13
+ /// A JSON value. `Absent` is the marker for "no value at all", as distinct
14
+ /// from `Null`.
15
+ #[derive(Clone, Debug, PartialEq)]
16
+ pub enum Json {
17
+ Absent,
18
+ Null,
19
+ Bool(bool),
20
+ Num(f64),
21
+ Str(String),
22
+ List(Vec<Json>),
23
+ Map(BTreeMap<String, Json>),
24
+ }
25
+
26
+ impl Json {
27
+ /// A map (JSON object)?
28
+ pub fn ismap(&self) -> bool {
29
+ matches!(self, Json::Map(_))
30
+ }
31
+
32
+ /// A list (JSON array)?
33
+ pub fn islist(&self) -> bool {
34
+ matches!(self, Json::List(_))
35
+ }
36
+
37
+ /// A container (map or list)?
38
+ pub fn isnode(&self) -> bool {
39
+ self.ismap() || self.islist()
40
+ }
41
+
42
+ /// Absent (no value at all)?
43
+ pub fn isabsent(&self) -> bool {
44
+ matches!(self, Json::Absent)
45
+ }
46
+
47
+ /// Null (a JSON null)?
48
+ pub fn isnull(&self) -> bool {
49
+ matches!(self, Json::Null)
50
+ }
51
+
52
+ /// Absent or null?
53
+ pub fn isnone(&self) -> bool {
54
+ self.isabsent() || self.isnull()
55
+ }
56
+
57
+ /// A JSON number? Booleans are not numbers.
58
+ pub fn isnum(&self) -> bool {
59
+ matches!(self, Json::Num(_))
60
+ }
61
+
62
+ pub fn asnum(&self) -> Option<f64> {
63
+ match self {
64
+ Json::Num(num) => Some(*num),
65
+ _ => None,
66
+ }
67
+ }
68
+
69
+ pub fn asstr(&self) -> Option<&str> {
70
+ match self {
71
+ Json::Str(text) => Some(text),
72
+ _ => None,
73
+ }
74
+ }
75
+
76
+ pub fn asmap(&self) -> Option<&BTreeMap<String, Json>> {
77
+ match self {
78
+ Json::Map(map) => Some(map),
79
+ _ => None,
80
+ }
81
+ }
82
+
83
+ pub fn aslist(&self) -> Option<&Vec<Json>> {
84
+ match self {
85
+ Json::List(list) => Some(list),
86
+ _ => None,
87
+ }
88
+ }
89
+
90
+ /// Read a map entry. Returns `Absent` when missing.
91
+ pub fn get(&self, key: &str) -> Json {
92
+ match self {
93
+ Json::Map(map) => map.get(key).cloned().unwrap_or(Json::Absent),
94
+ _ => Json::Absent,
95
+ }
96
+ }
97
+
98
+ /// Is a map key present at all (even with a null value)?
99
+ pub fn has(&self, key: &str) -> bool {
100
+ match self {
101
+ Json::Map(map) => map.contains_key(key),
102
+ _ => false,
103
+ }
104
+ }
105
+
106
+ /// Build a map value.
107
+ pub fn map(entries: Vec<(&str, Json)>) -> Json {
108
+ let mut out = BTreeMap::new();
109
+ for (key, val) in entries {
110
+ out.insert(key.to_string(), val);
111
+ }
112
+ Json::Map(out)
113
+ }
114
+
115
+ /// Build a list value.
116
+ pub fn list(entries: Vec<Json>) -> Json {
117
+ Json::List(entries)
118
+ }
119
+
120
+ /// Build a string value.
121
+ pub fn str(text: &str) -> Json {
122
+ Json::Str(text.to_string())
123
+ }
124
+ }
125
+
126
+ impl fmt::Display for Json {
127
+ fn fmt(&self, out: &mut fmt::Formatter<'_>) -> fmt::Result {
128
+ write!(out, "{}", super::util::jsonstr(self))
129
+ }
130
+ }
131
+
132
+ impl From<f64> for Json {
133
+ fn from(val: f64) -> Json {
134
+ Json::Num(val)
135
+ }
136
+ }
137
+
138
+ impl From<i64> for Json {
139
+ fn from(val: i64) -> Json {
140
+ Json::Num(val as f64)
141
+ }
142
+ }
143
+
144
+ impl From<usize> for Json {
145
+ fn from(val: usize) -> Json {
146
+ Json::Num(val as f64)
147
+ }
148
+ }
149
+
150
+ impl From<bool> for Json {
151
+ fn from(val: bool) -> Json {
152
+ Json::Bool(val)
153
+ }
154
+ }
155
+
156
+ impl From<&str> for Json {
157
+ fn from(val: &str) -> Json {
158
+ Json::Str(val.to_string())
159
+ }
160
+ }
161
+
162
+ impl From<String> for Json {
163
+ fn from(val: String) -> Json {
164
+ Json::Str(val)
165
+ }
166
+ }
167
+
168
+ /// Maximum nesting depth the parser will follow. Omni specs are trusted
169
+ /// input, so this is crash-safety, not a security boundary: past this
170
+ /// depth the recursive parser would overflow the stack and abort the
171
+ /// process, so it returns an error instead. 1024 is far beyond any real
172
+ /// spec, and low enough that reaching the limit itself fits comfortably
173
+ /// in a default (2MiB) test-thread stack even in debug builds.
174
+ const MAX_DEPTH: usize = 1024;
175
+
176
+ /// Parse JSON text into a [`Json`] value.
177
+ pub fn parse(text: &str) -> Result<Json, String> {
178
+ let chars: Vec<char> = text.chars().collect();
179
+ let mut pos = 0usize;
180
+
181
+ skipws(&chars, &mut pos);
182
+ let val = parseval(&chars, &mut pos, 0)?;
183
+ skipws(&chars, &mut pos);
184
+
185
+ if pos < chars.len() {
186
+ return Err(format!("omni: trailing JSON content at {}", pos));
187
+ }
188
+
189
+ Ok(val)
190
+ }
191
+
192
+ fn skipws(chars: &[char], pos: &mut usize) {
193
+ while *pos < chars.len() {
194
+ let char = chars[*pos];
195
+ if char == ' ' || char == '\t' || char == '\n' || char == '\r' {
196
+ *pos += 1;
197
+ } else {
198
+ break;
199
+ }
200
+ }
201
+ }
202
+
203
+ fn parseval(chars: &[char], pos: &mut usize, depth: usize) -> Result<Json, String> {
204
+ if depth > MAX_DEPTH {
205
+ return Err(format!("omni: JSON nested too deeply at {}", pos));
206
+ }
207
+
208
+ if *pos >= chars.len() {
209
+ return Err("omni: unexpected end of JSON".to_string());
210
+ }
211
+
212
+ match chars[*pos] {
213
+ '{' => parsemap(chars, pos, depth),
214
+ '[' => parselist(chars, pos, depth),
215
+ '"' => Ok(Json::Str(parsestr(chars, pos)?)),
216
+ 't' => parseword(chars, pos, "true", Json::Bool(true)),
217
+ 'f' => parseword(chars, pos, "false", Json::Bool(false)),
218
+ 'n' => parseword(chars, pos, "null", Json::Null),
219
+ _ => parsenum(chars, pos),
220
+ }
221
+ }
222
+
223
+ fn parseword(chars: &[char], pos: &mut usize, word: &str, val: Json) -> Result<Json, String> {
224
+ for expect in word.chars() {
225
+ if *pos >= chars.len() || chars[*pos] != expect {
226
+ return Err(format!("omni: bad JSON literal at {}", pos));
227
+ }
228
+ *pos += 1;
229
+ }
230
+ Ok(val)
231
+ }
232
+
233
+ fn parsemap(chars: &[char], pos: &mut usize, depth: usize) -> Result<Json, String> {
234
+ let mut out = BTreeMap::new();
235
+ *pos += 1; // {
236
+
237
+ skipws(chars, pos);
238
+ if *pos < chars.len() && chars[*pos] == '}' {
239
+ *pos += 1;
240
+ return Ok(Json::Map(out));
241
+ }
242
+
243
+ loop {
244
+ skipws(chars, pos);
245
+ let key = parsestr(chars, pos)?;
246
+ skipws(chars, pos);
247
+
248
+ if *pos >= chars.len() || chars[*pos] != ':' {
249
+ return Err(format!("omni: expected ':' at {}", pos));
250
+ }
251
+ *pos += 1;
252
+
253
+ skipws(chars, pos);
254
+ let val = parseval(chars, pos, depth + 1)?;
255
+ out.insert(key, val);
256
+
257
+ skipws(chars, pos);
258
+ if *pos >= chars.len() {
259
+ return Err("omni: unterminated JSON object".to_string());
260
+ }
261
+ if chars[*pos] == ',' {
262
+ *pos += 1;
263
+ continue;
264
+ }
265
+ if chars[*pos] == '}' {
266
+ *pos += 1;
267
+ return Ok(Json::Map(out));
268
+ }
269
+ return Err(format!("omni: expected ',' or '}}' at {}", pos));
270
+ }
271
+ }
272
+
273
+ fn parselist(chars: &[char], pos: &mut usize, depth: usize) -> Result<Json, String> {
274
+ let mut out = Vec::new();
275
+ *pos += 1; // [
276
+
277
+ skipws(chars, pos);
278
+ if *pos < chars.len() && chars[*pos] == ']' {
279
+ *pos += 1;
280
+ return Ok(Json::List(out));
281
+ }
282
+
283
+ loop {
284
+ skipws(chars, pos);
285
+ out.push(parseval(chars, pos, depth + 1)?);
286
+
287
+ skipws(chars, pos);
288
+ if *pos >= chars.len() {
289
+ return Err("omni: unterminated JSON array".to_string());
290
+ }
291
+ if chars[*pos] == ',' {
292
+ *pos += 1;
293
+ continue;
294
+ }
295
+ if chars[*pos] == ']' {
296
+ *pos += 1;
297
+ return Ok(Json::List(out));
298
+ }
299
+ return Err(format!("omni: expected ',' or ']' at {}", pos));
300
+ }
301
+ }
302
+
303
+ fn parsestr(chars: &[char], pos: &mut usize) -> Result<String, String> {
304
+ if *pos >= chars.len() || chars[*pos] != '"' {
305
+ return Err(format!("omni: expected string at {}", pos));
306
+ }
307
+ *pos += 1;
308
+
309
+ let mut out = String::new();
310
+
311
+ while *pos < chars.len() {
312
+ let char = chars[*pos];
313
+ *pos += 1;
314
+
315
+ if char == '"' {
316
+ return Ok(out);
317
+ }
318
+
319
+ if char != '\\' {
320
+ out.push(char);
321
+ continue;
322
+ }
323
+
324
+ if *pos >= chars.len() {
325
+ break;
326
+ }
327
+
328
+ let escape = chars[*pos];
329
+ *pos += 1;
330
+
331
+ match escape {
332
+ '"' => out.push('"'),
333
+ '\\' => out.push('\\'),
334
+ '/' => out.push('/'),
335
+ 'b' => out.push('\u{8}'),
336
+ 'f' => out.push('\u{c}'),
337
+ 'n' => out.push('\n'),
338
+ 'r' => out.push('\r'),
339
+ 't' => out.push('\t'),
340
+ 'u' => {
341
+ let mut code = 0u32;
342
+ for _ in 0..4 {
343
+ if *pos >= chars.len() {
344
+ return Err("omni: bad JSON unicode escape".to_string());
345
+ }
346
+ let digit = chars[*pos]
347
+ .to_digit(16)
348
+ .ok_or_else(|| "omni: bad JSON unicode escape".to_string())?;
349
+ code = code * 16 + digit;
350
+ *pos += 1;
351
+ }
352
+ out.push(char::from_u32(code).unwrap_or('\u{fffd}'));
353
+ }
354
+ _ => return Err(format!("omni: bad JSON escape at {}", pos)),
355
+ }
356
+ }
357
+
358
+ Err("omni: unterminated JSON string".to_string())
359
+ }
360
+
361
+ fn parsenum(chars: &[char], pos: &mut usize) -> Result<Json, String> {
362
+ let start = *pos;
363
+
364
+ if *pos < chars.len() && (chars[*pos] == '-' || chars[*pos] == '+') {
365
+ *pos += 1;
366
+ }
367
+
368
+ while *pos < chars.len() {
369
+ let char = chars[*pos];
370
+ if char.is_ascii_digit()
371
+ || char == '.'
372
+ || char == 'e'
373
+ || char == 'E'
374
+ || char == '-'
375
+ || char == '+'
376
+ {
377
+ *pos += 1;
378
+ } else {
379
+ break;
380
+ }
381
+ }
382
+
383
+ let text: String = chars[start..*pos].iter().collect();
384
+ text.parse::<f64>()
385
+ .map(Json::Num)
386
+ .map_err(|_| format!("omni: bad JSON number [{}] at {}", text, start))
387
+ }
388
+
389
+ #[cfg(test)]
390
+ mod tests {
391
+ use super::*;
392
+
393
+ // Deeply nested input must produce a parse error, not overflow the
394
+ // stack and abort the process.
395
+ #[test]
396
+ fn parse_rejects_deep_nesting() {
397
+ let deep = "[".repeat(MAX_DEPTH * 4);
398
+ let err = parse(&deep).expect_err("deep nesting must be rejected");
399
+ assert!(err.contains("nested too deeply"), "unexpected error: {}", err);
400
+
401
+ let deepmap = "{\"a\":".repeat(MAX_DEPTH * 4);
402
+ let err = parse(&deepmap).expect_err("deep nesting must be rejected");
403
+ assert!(err.contains("nested too deeply"), "unexpected error: {}", err);
404
+ }
405
+
406
+ // Reasonable nesting still parses.
407
+ #[test]
408
+ fn parse_allows_reasonable_nesting() {
409
+ let text = format!("{}1{}", "[".repeat(64), "]".repeat(64));
410
+ assert!(parse(&text).is_ok());
411
+ }
412
+ }
@@ -0,0 +1,38 @@
1
+ // VENDORED: @voxgig/omni sdk-20260904-1610-0 (rust/src/lib.rs)
2
+ // Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ //! voxgig_omni - the shared multi-language test runner.
5
+ //!
6
+ //! A test spec is plain JSON. The same spec file drives the same tests in
7
+ //! every language that ships an omni port, so behaviour is defined once and
8
+ //! verified everywhere.
9
+ //!
10
+ //! ```no_run
11
+ //! use std::rc::Rc;
12
+ //! use voxgig_omni::{make_runner, Json, Provider, Subject};
13
+ //!
14
+ //! let runner = make_runner("../spec/fib.json", Provider::default()).unwrap();
15
+ //! let pack = runner.runner("fib", None).unwrap();
16
+ //! let double: Subject = Rc::new(|args: &[Json]| {
17
+ //! Ok(Json::Num(args[0].asnum().unwrap_or(0.0) * 2.0))
18
+ //! });
19
+ //! pack.runset(&pack.set("basic"), Some(&double)).unwrap();
20
+ //! ```
21
+
22
+ pub mod json;
23
+ pub mod regex;
24
+ pub mod runner;
25
+ pub mod util;
26
+
27
+ pub use json::{parse, Json};
28
+ pub use regex::Regex;
29
+ pub use runner::{
30
+ errify, fixjson, loadspec, make_runner, matchcheck, matchval, nullmodifier, numtext,
31
+ resolvespec, Flags, OmniError, Provider, RunPack, Runner, SpecRef, Subject, SubjectArgs,
32
+ CAPABILITIES,
33
+ SPECVERSION,
34
+ };
35
+ pub use util::{
36
+ clone, deepequal, getpath, jsonstr, numstr, pathify, stringify, walk, EXISTSMARK, NULLMARK,
37
+ UNDEFMARK,
38
+ };