@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
@@ -3,7 +3,7 @@
3
3
  "package": 1
4
4
  },
5
5
  "name": "@voxgig/sdkgen",
6
- "version": "4.8.2",
6
+ "version": "4.9.0",
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