@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,5 +1,5 @@
1
- // VENDORED: @voxgig/omni 0.1.2 (typescript/src/index.ts)
2
- // Source: https://github.com/voxgig/omni @ 5956cc4e5ecdaeebd11eab8bb4b9462dfc76e018
1
+ // VENDORED: @voxgig/omni 0.1.4 (typescript/src/index.ts)
2
+ // Source: https://github.com/voxgig/omni @ 8c3e1b573a8d35796f7fc45e3226b977023cabf7 [tag: sdk-20260904-1610-0]
3
3
  // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
4
  // @voxgig/omni - shared multi-language test runner.
5
5
 
@@ -356,7 +356,7 @@ test "primary new sdk smoke" {
356
356
  // ---------------------------------------------------------------------------
357
357
 
358
358
  const runner = @import("struct_runner.zig");
359
- const vs = @import("../utility/voxgigstruct/struct.zig");
359
+ const vs = @import("voxgig-struct");
360
360
 
361
361
  const StdJson = std.json.Value;
362
362
 
@@ -2,7 +2,6 @@
2
2
  // against subject functions, mirroring the TS/Go runner pattern.
3
3
 
4
4
  const std = @import("std");
5
- const regex = @import("../utility/voxgigstruct/regex.zig");
6
5
  const voxgig_struct = @import("voxgig-struct");
7
6
 
8
7
  const Allocator = std.mem.Allocator;
@@ -322,9 +321,11 @@ pub fn matchval(alloc: Allocator, check: StdJsonValue, base: StdJsonValue) bool
322
321
  // A /pattern/ is a regex over the stringified base.
323
322
  if (2 <= c.len and c[0] == '/' and c[c.len - 1] == '/') {
324
323
  const pat = c[1 .. c.len - 1];
325
- var re = regex.compile(alloc, pat) orelse return false;
326
- defer re.deinit();
327
- return re.isMatch(basestr);
324
+ // Through the MODULE, never `../utility/voxgigstruct/regex.zig`:
325
+ // a file may belong to exactly one module, and regex.zig already
326
+ // belongs to voxgig-struct. Importing it by path a second time is
327
+ // "file exists in multiple modules".
328
+ return voxgig_struct.re_test(pat, basestr);
328
329
  }
329
330
 
330
331
  // Otherwise a case-insensitive substring, as the reference does.
@@ -3,7 +3,7 @@
3
3
  "package": 1
4
4
  },
5
5
  "name": "@voxgig/sdkgen",
6
- "version": "4.8.2",
6
+ "version": "4.8.3",
7
7
  "provides": {
8
8
  "target": [
9
9
  "c",
@@ -128,6 +128,11 @@ type DoctorReport = {
128
128
  // Project-owned components the scaffold never shipped. NOT drift.
129
129
  additive: string[]
130
130
 
131
+ // Generated files the model declares RETIRED (`target.superseded`) that
132
+ // still sit in the target output directories — the old runner beside its
133
+ // replacement. `doctor prune` deletes exactly these.
134
+ superseded: string[]
135
+
131
136
  // Root-level components this sdkgen provides that the project's root
132
137
  // wiring never calls. Informational: opting out is legitimate.
133
138
  unwired: string[]
@@ -151,6 +156,7 @@ type DoctorReport = {
151
156
 
152
157
  const CMD_MAP: any = {
153
158
  check: cmd_doctor_check,
159
+ prune: cmd_doctor_prune,
154
160
  }
155
161
 
156
162
 
@@ -173,6 +179,57 @@ async function cmd_doctor_check(_args: string[], actx: ActionContext): Promise<A
173
179
  }
174
180
 
175
181
 
182
+ // `doctor prune` — the ONE write doctor performs, and only ever of files a
183
+ // target's model DECLARES superseded (retired templates jostraca cannot
184
+ // delete from a consumer: the old runner beside its replacement, a
185
+ // pre-reshape vendored file). Everything else doctor does stays read-only.
186
+ async function cmd_doctor_prune(_args: string[], actx: ActionContext): Promise<ActionResult> {
187
+ const log = actx.log
188
+ const fs = actx.fs()
189
+
190
+ const found = supersededFiles(actx)
191
+ const pruned: string[] = []
192
+
193
+ for (const abs of found) {
194
+ fs.unlinkSync(abs)
195
+ pruned.push(abs)
196
+ log.info({ point: 'doctor-prune', file: abs, note: 'pruned superseded: ' + abs })
197
+ }
198
+
199
+ log.info({
200
+ point: 'doctor-prune-end', pruned: pruned.length,
201
+ note: 0 === pruned.length ? 'nothing superseded to prune' :
202
+ ('pruned ' + pruned.length + ' superseded file(s)')
203
+ })
204
+
205
+ return { report: { pruned, ok: true } }
206
+ }
207
+
208
+
209
+ // Generated files the model says this toolchain NO LONGER writes, that
210
+ // still exist in the project's target output directories. Paths in the
211
+ // model are relative to each target's output dir (a sibling of `.sdk/`,
212
+ // named for the target).
213
+ function supersededFiles(actx: ActionContext): string[] {
214
+ const fs = actx.fs()
215
+ const model = actx.model
216
+ const root = actx.folder
217
+
218
+ const targets = (model as any)?.main?.[KIT]?.target ?? {}
219
+
220
+ const found: string[] = []
221
+ for (const tname of Object.keys(targets).sort()) {
222
+ for (const rel of (targets[tname].superseded || [])) {
223
+ const abs = Path.join(root, '..', tname, String(rel))
224
+ if (fs.existsSync(abs)) {
225
+ found.push(abs)
226
+ }
227
+ }
228
+ }
229
+ return found
230
+ }
231
+
232
+
176
233
  // Narrows the check to particular items — `package update` runs doctor as
177
234
  // its pre-check and needs the verdict for ONE package's items, not the
178
235
  // project's. Reusing the real comparison rather than writing a second one is
@@ -193,9 +250,14 @@ async function doctor(
193
250
 
194
251
  const report: DoctorReport = {
195
252
  forked: [], edited: [], stale: [], missing: [], additive: [],
196
- unwired: [], resyncPending: [], aliasedDiff: [], ok: true,
253
+ superseded: [], unwired: [], resyncPending: [], aliasedDiff: [], ok: true,
197
254
  }
198
255
 
256
+ // Retired-output leftovers first: purely model-driven, and a finding —
257
+ // two copies of the same machinery, one stale, is exactly the state the
258
+ // migration guide had to clean up by hand three times.
259
+ report.superseded = supersededFiles(actx)
260
+
199
261
  // EVERY KIND, not just targets.
200
262
  //
201
263
  // `add` writes a copied model file for each kind — `model/target/<t>.aon`
@@ -283,7 +345,7 @@ async function doctor(
283
345
  }
284
346
 
285
347
  report.ok = 0 === report.forked.length + report.edited.length +
286
- report.stale.length + report.missing.length
348
+ report.stale.length + report.missing.length + report.superseded.length
287
349
 
288
350
  for (const [kind, note] of [
289
351
  ['forked', 'FORKED (will be reverted by `target add`)'],
@@ -291,6 +353,7 @@ async function doctor(
291
353
  ['stale', 'STALE (no longer written by `target add`)'],
292
354
  ['missing', 'MISSING (would be written by `target add`)'],
293
355
  ['additive', 'additive (project-owned, not drift)'],
356
+ ['superseded', 'SUPERSEDED generated output (run `doctor prune` to delete)'],
294
357
  ['unwired', 'NOT WIRED IN (root capability this project is missing)'],
295
358
  ['resyncPending', 'RESYNC PENDING (predates provenance; `target add` updates it)'],
296
359
  ['aliasedDiff', 'aliased model differs from its origin (project-owned, not drift)'],
@@ -308,6 +371,7 @@ async function doctor(
308
371
  stale: report.stale.length,
309
372
  missing: report.missing.length,
310
373
  additive: report.additive.length,
374
+ superseded: report.superseded.length,
311
375
  unwired: report.unwired.length,
312
376
  resyncPending: report.resyncPending.length,
313
377
  aliasedDiff: report.aliasedDiff.length,
@@ -148,6 +148,8 @@ const RB_SDK_CONSTANTS = new Set<string>([
148
148
  // vendored struct library and its test scaffolding
149
149
  'StructRunner', 'StructTestClient', 'StructUtilityTest', 'VoxgigStruct',
150
150
  'STRUCT_TEST_JSON_FILE',
151
+ // vendored omni runner and its smoke test (vendor-tag rollout)
152
+ 'VoxgigOmni', 'OmniSmokeTest',
151
153
  // the generated/templated test classes
152
154
  'ExistsTest', 'FeatureCorpusTest', 'FeatureTest', 'NetsimTest',
153
155
  'PipelineTest', 'PrimaryUtilityTest', 'ReadmeExamplesTest',
@@ -330,8 +332,8 @@ function isPhpReservedType(Name: string): boolean {
330
332
  const PHP_SDK_CLASSES = new Set<string>([
331
333
  // the generated/templated test classes
332
334
  'existstest', 'featurecorpustest', 'featuretest', 'netsimtest',
333
- 'pipelinetest', 'primaryutilitytest', 'readmeexamplestest',
334
- 'structutilitytest',
335
+ 'omnismoketest', 'pipelinetest', 'primaryutilitytest',
336
+ 'readmeexamplestest', 'structutilitytest',
335
337
  // helper classes those suites declare beside them
336
338
  'ftclient', 'ftclock', 'ftctrl', 'ftentity', 'ftharness', 'ftrecorder',
337
339
  'plclient', 'plentity', 'plentityitem',
@@ -1,274 +0,0 @@
1
- /* Voxgig Struct corpus runner — C port.
2
- * Mirrors cpp/tests/runner.hpp.
3
- */
4
-
5
- #ifndef VOXGIG_STRUCT_RUNNER_H
6
- #define VOXGIG_STRUCT_RUNNER_H
7
-
8
- #include "voxgig_struct.h"
9
-
10
- #include <ctype.h>
11
- #include <math.h>
12
- #include <stdio.h>
13
- #include <stdlib.h>
14
- #include <string.h>
15
-
16
- /* Subject: function from input value to output value.
17
- * On error, the subject may set *err to an error message (caller-owned char*).
18
- */
19
- typedef voxgig_value* (*runner_subject_fn)(voxgig_value* in, char** err, void* ud);
20
-
21
- typedef struct runner_result {
22
- char* name;
23
- int passed;
24
- int total;
25
- /* Failure messages (owned). */
26
- size_t fail_len;
27
- size_t fail_cap;
28
- char** failures;
29
- } runner_result;
30
-
31
- static inline void runner_result_init(runner_result* r, const char* name) {
32
- r->name = strdup(name);
33
- r->passed = 0;
34
- r->total = 0;
35
- r->fail_len = 0;
36
- r->fail_cap = 0;
37
- r->failures = NULL;
38
- }
39
-
40
- static inline void runner_result_free(runner_result* r) {
41
- free(r->name);
42
- for (size_t i = 0; i < r->fail_len; i++)
43
- free(r->failures[i]);
44
- free(r->failures);
45
- }
46
-
47
- static inline void runner_push_failure(runner_result* r, const char* msg) {
48
- if (r->fail_len + 1 > r->fail_cap) {
49
- size_t nc = r->fail_cap == 0 ? 8 : r->fail_cap * 2;
50
- r->failures = (char**)realloc(r->failures, nc * sizeof(char*));
51
- r->fail_cap = nc;
52
- }
53
- r->failures[r->fail_len++] = strdup(msg);
54
- }
55
-
56
- /* Normalize: turn integer-valued doubles into ints; sort map keys; sentinels and
57
- * undef → null for stable comparison. */
58
- static voxgig_value* normalize(const voxgig_value* v) {
59
- if (!v || voxgig_is_undef(v) || voxgig_is_null(v))
60
- return voxgig_new_null();
61
- if (voxgig_is_double(v)) {
62
- double d = voxgig_as_double(v);
63
- if (isfinite(d) && floor(d) == d)
64
- return voxgig_new_int((int64_t)d);
65
- return voxgig_new_double(d);
66
- }
67
- if (voxgig_is_list(v)) {
68
- voxgig_value* out = voxgig_new_list();
69
- voxgig_list* l = voxgig_as_list(v);
70
- for (size_t i = 0; i < l->len; i++) {
71
- voxgig_list_push(voxgig_as_list(out), normalize(l->items[i]));
72
- }
73
- return out;
74
- }
75
- if (voxgig_is_map(v)) {
76
- /* Sort by key (alphabetical). */
77
- voxgig_map* m = voxgig_as_map(v);
78
- size_t n = m->len;
79
- size_t* idx = (size_t*)malloc(n * sizeof(size_t) + 1);
80
- for (size_t i = 0; i < n; i++)
81
- idx[i] = i;
82
- for (size_t i = 1; i < n; i++) {
83
- size_t j = i;
84
- while (j > 0 && strcmp(m->entries[idx[j - 1]].key, m->entries[idx[j]].key) > 0) {
85
- size_t t = idx[j - 1];
86
- idx[j - 1] = idx[j];
87
- idx[j] = t;
88
- j--;
89
- }
90
- }
91
- voxgig_value* out = voxgig_new_map();
92
- for (size_t i = 0; i < n; i++) {
93
- voxgig_map_set(voxgig_as_map(out), m->entries[idx[i]].key,
94
- normalize(m->entries[idx[i]].value));
95
- }
96
- free(idx);
97
- return out;
98
- }
99
- return voxgig_clone((voxgig_value*)v);
100
- }
101
-
102
- static bool deep_equal(const voxgig_value* a, const voxgig_value* b) {
103
- voxgig_value* na = normalize(a);
104
- voxgig_value* nb = normalize(b);
105
- bool eq = voxgig_equals(na, nb);
106
- voxgig_release(na);
107
- voxgig_release(nb);
108
- return eq;
109
- }
110
-
111
- static char* brief(const voxgig_value* v) {
112
- if (!v || voxgig_is_undef(v))
113
- return strdup("__UNDEF__");
114
- char* s = voxgig_jsonify((voxgig_value*)v, NULL);
115
- if (!s)
116
- return strdup("?");
117
- size_t n = strlen(s);
118
- if (n > 200) {
119
- s[197] = '\0';
120
- char* tmp = (char*)malloc(202);
121
- snprintf(tmp, 202, "%s...", s);
122
- free(s);
123
- return tmp;
124
- }
125
- return s;
126
- }
127
-
128
- __attribute__((unused)) static void str_lower(char* s) {
129
- for (; *s; s++)
130
- *s = (char)tolower((unsigned char)*s);
131
- }
132
-
133
- /* Deep-copy `v`, replacing every JSON null with the marker string "__NULL__".
134
- * Mirrors what the TS / JS / Py / Go / Lua runners do under their null flag —
135
- * the corpus uses null in source to mean "JSON null" but every runner
136
- * substitutes a string marker so comparisons can be done in JSON-poor
137
- * languages. */
138
- __attribute__((unused)) static voxgig_value* null_substitute(voxgig_value* v) {
139
- if (!v || voxgig_is_undef(v))
140
- return voxgig_new_undef();
141
- if (voxgig_is_null(v))
142
- return voxgig_new_string("__NULL__");
143
- if (voxgig_is_list(v)) {
144
- voxgig_value* out = voxgig_new_list();
145
- voxgig_list* l = voxgig_as_list(v);
146
- for (size_t i = 0; i < l->len; i++)
147
- voxgig_list_push(voxgig_as_list(out), null_substitute(l->items[i]));
148
- return out;
149
- }
150
- if (voxgig_is_map(v)) {
151
- voxgig_value* out = voxgig_new_map();
152
- voxgig_map* m = voxgig_as_map(v);
153
- for (size_t i = 0; i < m->len; i++)
154
- voxgig_map_set(voxgig_as_map(out), m->entries[i].key, null_substitute(m->entries[i].value));
155
- return out;
156
- }
157
- return voxgig_clone(v);
158
- }
159
-
160
- static void run_subject(runner_result* res, voxgig_value* testspec, bool null_flag,
161
- runner_subject_fn subj, void* ud) {
162
- voxgig_value* setk = voxgig_new_string("set");
163
- voxgig_value* set = voxgig_getprop(testspec, setk, NULL);
164
- voxgig_release(setk);
165
- if (!voxgig_is_list(set)) {
166
- voxgig_release(set);
167
- return;
168
- }
169
- voxgig_list* sl = voxgig_as_list(set);
170
- for (size_t i = 0; i < sl->len; i++) {
171
- voxgig_value* eo = sl->items[i];
172
- if (!voxgig_is_map(eo))
173
- continue;
174
- /* Use voxgig_map_get directly: voxgig_haskey treats null at a key as "no value"
175
- (Group A rule), but the runner needs literal presence to preserve
176
- test inputs like { in: null } where null IS the value to pass. */
177
- voxgig_value* in_raw_ptr = voxgig_map_get(voxgig_as_map(eo), "in");
178
- bool has_in = (in_raw_ptr != NULL);
179
- voxgig_value* in_raw = in_raw_ptr ? voxgig_retain(in_raw_ptr) : voxgig_new_undef();
180
- voxgig_value* in = has_in ? voxgig_clone(in_raw) : voxgig_new_undef();
181
- voxgig_value* out_raw_ptr = voxgig_map_get(voxgig_as_map(eo), "out");
182
- bool has_out = (out_raw_ptr != NULL);
183
- voxgig_value* expected = NULL;
184
- if (has_out)
185
- expected = voxgig_retain(out_raw_ptr);
186
- else if (null_flag)
187
- expected = voxgig_new_null();
188
- else
189
- expected = voxgig_new_undef();
190
- voxgig_value* err_ptr = voxgig_map_get(voxgig_as_map(eo), "err");
191
- voxgig_value* err_v = err_ptr ? voxgig_retain(err_ptr) : voxgig_new_undef();
192
-
193
- res->total++;
194
- char* err_msg = NULL;
195
- voxgig_value* got = subj(in, &err_msg, ud);
196
-
197
- if (!voxgig_is_undef(err_v)) {
198
- /* Test expects an error. Check if err_msg was set. */
199
- bool match = false;
200
- if (err_msg) {
201
- if (voxgig_is_bool(err_v) && voxgig_as_bool(err_v)) {
202
- match = true;
203
- } else if (voxgig_is_string(err_v)) {
204
- const char* es = voxgig_as_string(err_v);
205
- if (!es || !*es)
206
- match = true;
207
- else if (strstr(err_msg, es))
208
- match = true;
209
- else {
210
- /* Case-insensitive substring. */
211
- char* lm = strdup(err_msg);
212
- char* le = strdup(es);
213
- str_lower(lm);
214
- str_lower(le);
215
- if (strstr(lm, le))
216
- match = true;
217
- free(lm);
218
- free(le);
219
- }
220
- }
221
- }
222
- if (match) {
223
- res->passed++;
224
- } else {
225
- char* gs = brief(got);
226
- char* es = brief(err_v);
227
- char buf[2048];
228
- snprintf(buf, sizeof(buf), "[%zu] err mode (expected '%s' got err='%s' val=%s)", i, es,
229
- err_msg ? err_msg : "(no err)", gs);
230
- runner_push_failure(res, buf);
231
- free(gs);
232
- free(es);
233
- }
234
- free(err_msg);
235
- voxgig_release(got);
236
- voxgig_release(err_v);
237
- voxgig_release(in);
238
- voxgig_release(in_raw);
239
- voxgig_release(expected);
240
- continue;
241
- }
242
-
243
- if (err_msg) {
244
- char* gs = brief(got);
245
- char* ins = brief(in_raw);
246
- char buf[2048];
247
- snprintf(buf, sizeof(buf), "[%zu] in=%s threw='%s' got=%s", i, ins, err_msg, gs);
248
- runner_push_failure(res, buf);
249
- free(gs);
250
- free(ins);
251
- } else if (deep_equal(got, expected)) {
252
- res->passed++;
253
- } else {
254
- char* gs = brief(got);
255
- char* es = brief(expected);
256
- char* ins = brief(in_raw);
257
- char buf[2048];
258
- snprintf(buf, sizeof(buf), "[%zu] in=%s expected=%s got=%s", i, ins, es, gs);
259
- runner_push_failure(res, buf);
260
- free(gs);
261
- free(es);
262
- free(ins);
263
- }
264
- free(err_msg);
265
- voxgig_release(got);
266
- voxgig_release(err_v);
267
- voxgig_release(in);
268
- voxgig_release(in_raw);
269
- voxgig_release(expected);
270
- }
271
- voxgig_release(set);
272
- }
273
-
274
- #endif