@voxgig/sdkgen 4.8.1 → 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 +2 -2
  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,64 +1,143 @@
1
- /* Voxgig Struct corpus driver — C port. Mirrors cpp/tests/struct_corpus_test.cpp. */
2
-
3
- #include "runner.h"
1
+ /* Voxgig Struct corpus driver — C port, on the VENDORED @voxgig/omni
2
+ * runner (tests/vendor/omni, driven through tests/omni_resolver.h).
3
+ *
4
+ * Every `struct.<category>.<name>` section of the shared corpus
5
+ * (.sdk/test/test.json) is run by omni itself: omni resolves the section,
6
+ * normalises its values, calls the subject once per entry and compares
7
+ * `out` / `match` / `err`. The hand-written engine this file used to call
8
+ * (tests/runner.h run_subject) is retired; the subjects below crossed over
9
+ * verbatim, because the resolver keeps their signature.
10
+ *
11
+ * Two behaviours changed with the engine, both deliberately:
12
+ *
13
+ * * A MISSING OR EMPTY SECTION IS NOW A FAILURE. Six `sentinels.*`
14
+ * sections had been renamed to `struct.nullsem` in the corpus; the old
15
+ * runner scored them a silent 0/0 and nullsem itself went unrun. The
16
+ * five real nullsem sections (33 entries) are driven below, and any
17
+ * section that resolves to nothing is reported OUT LOUD.
18
+ *
19
+ * * `match` IS CHECKED. The old engine ignored it, so
20
+ * struct.minor.setpath's "the subject mutated its argument" assertions
21
+ * and struct.merge.integrity's "the subject did NOT" assertions were
22
+ * dead. omni checks both (see decision 3 in omni_resolver.h).
23
+ *
24
+ * SCOREBOARD. omni reports pass/fail per SET, stopping at the first
25
+ * failing entry, so per-entry credit is no longer knowable. Each row
26
+ * therefore carries the number of cases the section HOLDS — the count that
27
+ * proves the corpus still runs — plus its pass/fail.
28
+ */
29
+
30
+ #include "omni_resolver.h"
4
31
  #include "voxgig_struct.h"
5
32
 
6
33
  #include <stdio.h>
7
34
  #include <stdlib.h>
8
35
  #include <string.h>
9
36
 
10
- static voxgig_value* CORPUS = NULL;
37
+ /* The shared corpus, compiled by the project build. Relative to the target
38
+ * root, which is where the Makefile runs each test binary from. */
39
+ #define TEST_JSON_FILE "../.sdk/test/test.json"
11
40
 
12
- static voxgig_value* get_spec(const char* category, const char* name) {
13
- if (!CORPUS) {
14
- CORPUS = voxgig_parse_json_file("../.sdk/test/test.json");
15
- }
16
- voxgig_value* sk = voxgig_new_string("struct");
17
- voxgig_value* sv = voxgig_getprop(CORPUS, sk, NULL);
18
- voxgig_release(sk);
19
- voxgig_value* ck = voxgig_new_string(category);
20
- voxgig_value* cat = voxgig_getprop(sv, ck, NULL);
21
- voxgig_release(ck);
22
- voxgig_release(sv);
23
- voxgig_value* nk = voxgig_new_string(name);
24
- voxgig_value* spec = voxgig_getprop(cat, nk, NULL);
25
- voxgig_release(nk);
26
- voxgig_release(cat);
27
- return spec;
28
- }
41
+ static omni_pool* POOL = NULL;
42
+ static omni_runpack* PACK = NULL;
29
43
 
30
- /* Scoreboard. */
44
+ /* Scoreboard: one row per corpus section. */
31
45
  typedef struct slot {
32
- char* key;
33
- runner_result r;
46
+ char* name;
47
+ size_t cases;
48
+ int failed;
49
+ char* err;
34
50
  } slot;
35
51
 
36
52
  static slot* SB = NULL;
37
53
  static size_t SB_LEN = 0;
38
54
  static size_t SB_CAP = 0;
39
55
 
40
- static void sb_add(const char* key, runner_result r) {
56
+ static void sb_add(const char* name, size_t cases, int failed, const char* err) {
41
57
  if (SB_LEN + 1 > SB_CAP) {
42
58
  size_t nc = SB_CAP == 0 ? 64 : SB_CAP * 2;
43
59
  SB = (slot*)realloc(SB, nc * sizeof(slot));
44
60
  SB_CAP = nc;
45
61
  }
46
- SB[SB_LEN].key = strdup(key);
47
- SB[SB_LEN].r = r;
62
+ SB[SB_LEN].name = strdup(name);
63
+ SB[SB_LEN].cases = cases;
64
+ SB[SB_LEN].failed = failed;
65
+ SB[SB_LEN].err = err ? strdup(err) : NULL;
48
66
  SB_LEN++;
49
67
  }
50
68
 
51
- static void run(const char* cat, const char* name, bool null_flag, runner_subject_fn s, void* ud) {
69
+ /* Resolve `struct.<cat>.<name>`. NULL (with the reason recorded) when the
70
+ * corpus does not carry it. */
71
+ static omni_json* section(const char* cat, const char* name, const char* full) {
72
+ omni_json* cats = omni_set(PACK, cat);
73
+ omni_json* spec;
74
+ if (!omni_ismap(cats)) {
75
+ sb_add(full, 0, 1, "corpus category missing - check .sdk/test/struct/");
76
+ return NULL;
77
+ }
78
+ spec = omni_map_get(cats, name);
79
+ if (!omni_ismap(spec)) {
80
+ sb_add(full, 0, 1, "corpus section missing - check .sdk/test/struct/");
81
+ return NULL;
82
+ }
83
+ return spec;
84
+ }
85
+
86
+ /* Run one corpus section through omni. */
87
+ static void run(const char* cat, const char* name, int nullflag, omnivx_subject_fn fn, void* ud) {
52
88
  char full[256];
89
+ omni_json* spec;
90
+ size_t cases;
91
+ char* err = NULL;
92
+ int failed;
93
+
53
94
  snprintf(full, sizeof(full), "%s.%s", cat, name);
54
- voxgig_value* spec = get_spec(cat, name);
55
- runner_result r;
56
- runner_result_init(&r, full);
57
- run_subject(&r, spec, null_flag, s, ud);
58
- voxgig_release(spec);
59
- sb_add(full, r);
95
+
96
+ spec = section(cat, name, full);
97
+ if (NULL == spec) {
98
+ return;
99
+ }
100
+
101
+ cases = omnivx_setsize(spec);
102
+ if (0 == cases) {
103
+ sb_add(full, 0, 1, "corpus section is EMPTY - zero cases would run");
104
+ return;
105
+ }
106
+
107
+ failed =
108
+ omni_runsetflags(PACK, spec, omnivx_flags(nullflag, full), omnivx_subject(POOL, fn, ud), &err);
109
+ sb_add(full, cases, failed, err);
110
+ }
111
+
112
+ /* `struct.merge.basic` and `struct.inject.basic` are authored as a bare
113
+ * {in, out} node with no `set`, so the old runner scored them 0/0 and
114
+ * asserted nothing. Wrap each as a one-entry set. */
115
+ static void run_one(const char* cat, const char* name, int nullflag, omnivx_subject_fn fn,
116
+ void* ud) {
117
+ char full[256];
118
+ omni_json* entry;
119
+ omni_json* spec;
120
+ char* err = NULL;
121
+ int failed;
122
+
123
+ snprintf(full, sizeof(full), "%s.%s", cat, name);
124
+
125
+ entry = section(cat, name, full);
126
+ if (NULL == entry) {
127
+ return;
128
+ }
129
+ if (omni_isabsent(omni_map_get(entry, "in")) && omni_isabsent(omni_map_get(entry, "out"))) {
130
+ sb_add(full, 0, 1, "corpus section is neither a set nor an {in,out} entry");
131
+ return;
132
+ }
133
+
134
+ spec = omnivx_oneset(POOL, entry);
135
+ failed =
136
+ omni_runsetflags(PACK, spec, omnivx_flags(nullflag, full), omnivx_subject(POOL, fn, ud), &err);
137
+ sb_add(full, 1, failed, err);
60
138
  }
61
139
 
140
+
62
141
  /* Helpers. */
63
142
  /* Raw map lookup for runner field extraction. Unlike voxgig_getprop (Group A,
64
143
  * which treats null at a key as "no value"), this returns the literal stored
@@ -143,13 +222,18 @@ static voxgig_value* subj_haskey(voxgig_value* in, char** err, void* ud) {
143
222
  voxgig_release(key);
144
223
  return voxgig_new_bool(r);
145
224
  }
225
+ /* `alt` is taken by LITERAL presence (voxgig_map_get), not by voxgig_haskey:
226
+ * haskey is Group A and reads a stored null as "no value", which would
227
+ * collapse `{alt: null}` (pass null as the alternative) into "no alt given"
228
+ * — a distinction minor.getprop and struct.nullsem both assert on. */
146
229
  static voxgig_value* subj_getprop(voxgig_value* in, char** err, void* ud) {
147
230
  (void)ud;
148
231
  voxgig_value* val = getp(in, "val");
149
232
  voxgig_value* key = getp(in, "key");
150
- voxgig_value* altk = voxgig_new_string("alt");
151
- voxgig_value* alt = voxgig_haskey(in, altk) ? voxgig_getprop(in, altk, NULL) : NULL;
152
- voxgig_release(altk);
233
+ /* getp, not voxgig_getprop: fetching the alternative must not itself
234
+ * apply Group A, or `{alt: null}` would arrive as UNDEF. */
235
+ voxgig_value* alt =
236
+ (voxgig_is_map(in) && voxgig_map_get(voxgig_as_map(in), "alt")) ? getp(in, "alt") : NULL;
153
237
  voxgig_value* r = voxgig_getprop(val, key, alt);
154
238
  voxgig_release(val);
155
239
  voxgig_release(key);
@@ -160,9 +244,10 @@ static voxgig_value* subj_getelem(voxgig_value* in, char** err, void* ud) {
160
244
  (void)ud;
161
245
  voxgig_value* val = getp(in, "val");
162
246
  voxgig_value* key = getp(in, "key");
163
- voxgig_value* altk = voxgig_new_string("alt");
164
- voxgig_value* alt = voxgig_haskey(in, altk) ? voxgig_getprop(in, altk, NULL) : NULL;
165
- voxgig_release(altk);
247
+ /* getp, not voxgig_getprop: fetching the alternative must not itself
248
+ * apply Group A, or `{alt: null}` would arrive as UNDEF. */
249
+ voxgig_value* alt =
250
+ (voxgig_is_map(in) && voxgig_map_get(voxgig_as_map(in), "alt")) ? getp(in, "alt") : NULL;
166
251
  voxgig_value* r = voxgig_getelem(val, key, alt);
167
252
  voxgig_release(val);
168
253
  voxgig_release(key);
@@ -538,71 +623,33 @@ static voxgig_value* subj_getpath_handler(voxgig_value* in, char** err, void* ud
538
623
  return r;
539
624
  }
540
625
 
541
- /* Sentinels: getprop/getelem with val/key/alt. */
542
- static voxgig_value* subj_sent_getprop(voxgig_value* in, char** err, void* ud) {
543
- (void)err;
544
- (void)ud;
545
- voxgig_value* val = getp(in, "val");
546
- voxgig_value* key = getp(in, "key");
547
- voxgig_value* altk = voxgig_new_string("alt");
548
- voxgig_value* alt =
549
- (voxgig_map_get(voxgig_as_map(in), "alt")) ? voxgig_getprop(in, altk, NULL) : NULL;
550
- voxgig_release(altk);
551
- voxgig_value* r = voxgig_getprop(val, key, alt);
552
- voxgig_release(val);
553
- voxgig_release(key);
554
- voxgig_release(alt);
555
- return r;
556
- }
557
- static voxgig_value* subj_sent_getelem(voxgig_value* in, char** err, void* ud) {
558
- (void)err;
559
- (void)ud;
560
- voxgig_value* val = getp(in, "val");
561
- voxgig_value* key = getp(in, "key");
562
- voxgig_value* altk = voxgig_new_string("alt");
563
- voxgig_value* alt =
564
- (voxgig_map_get(voxgig_as_map(in), "alt")) ? voxgig_getprop(in, altk, NULL) : NULL;
565
- voxgig_release(altk);
566
- voxgig_value* r = voxgig_getelem(val, key, alt);
567
- voxgig_release(val);
568
- voxgig_release(key);
569
- voxgig_release(alt);
570
- return r;
571
- }
572
- static voxgig_value* subj_sent_haskey(voxgig_value* in, char** err, void* ud) {
573
- (void)err;
574
- (void)ud;
575
- voxgig_value* val = getp(in, "val");
576
- voxgig_value* key = getp(in, "key");
577
- bool r = voxgig_haskey(val, key);
578
- voxgig_release(val);
579
- voxgig_release(key);
580
- return voxgig_new_bool(r);
581
- }
582
- static voxgig_value* subj_sent_isempty(voxgig_value* in, char** err, void* ud) {
583
- (void)err;
584
- (void)ud;
585
- return voxgig_new_bool(voxgig_isempty(in));
586
- }
587
- static voxgig_value* subj_sent_isnode(voxgig_value* in, char** err, void* ud) {
588
- (void)err;
589
- (void)ud;
590
- return voxgig_new_bool(voxgig_isnode(in));
591
- }
592
- static voxgig_value* subj_sent_stringify(voxgig_value* in, char** err, void* ud) {
593
- (void)err;
594
- (void)ud;
595
- char* s = voxgig_stringify(in, -1);
596
- voxgig_value* r = voxgig_new_string(s);
597
- free(s);
598
- return r;
599
- }
600
-
601
- /* Inject basic. */
602
- static voxgig_value* subj_inject_basic(voxgig_value* in, char** err, void* ud) {
603
- (void)err;
626
+ /* The struct-corpus null modifier (was runner.h's unused null_substitute):
627
+ * under the default null flag omni rewrites every JSON null in the section
628
+ * to the "__NULL__" marker, so a resolved null arrives as that text. A bare
629
+ * marker becomes a real null again; a marker EMBEDDED in a longer string
630
+ * becomes the literal word "null", which is what `inject.string` asserts
631
+ * ("`an`x" over {an: null} renders "nullx"). */
632
+ static void null_modifier(voxgig_value* val, voxgig_value* key, voxgig_value* parent,
633
+ voxgig_injection* inj, voxgig_value* store, void* ud) {
634
+ (void)inj;
635
+ (void)store;
604
636
  (void)ud;
605
- return voxgig_inject(in, in, NULL);
637
+ if (!voxgig_is_string(val) || !parent || !key)
638
+ return;
639
+ {
640
+ const char* s = voxgig_as_string(val);
641
+ if (0 == strcmp(s, "__NULL__")) {
642
+ voxgig_setprop(parent, key, voxgig_new_null());
643
+ return;
644
+ }
645
+ if (NULL != strstr(s, "__NULL__")) {
646
+ char* rep = voxgig_replace_str(s, "__NULL__", "null");
647
+ voxgig_value* rv = voxgig_new_string(rep);
648
+ free(rep);
649
+ voxgig_setprop(parent, key, rv);
650
+ voxgig_release(rv);
651
+ }
652
+ }
606
653
  }
607
654
 
608
655
  /* Walk subjects. */
@@ -690,6 +737,20 @@ static voxgig_value* subj_inject(voxgig_value* in, char** err, void* ud) {
690
737
  voxgig_release(store);
691
738
  return r;
692
739
  }
740
+ static voxgig_value* subj_inject_nullmod(voxgig_value* in, char** err, void* ud) {
741
+ (void)ud;
742
+ voxgig_value* val = getp(in, "val");
743
+ voxgig_value* store = getp(in, "store");
744
+ voxgig_injection* inj = voxgig_inj_new(NULL, NULL);
745
+ inj->mode = 0;
746
+ voxgig_release(inj->modify_val);
747
+ inj->modify_val = voxgig_new_modify(null_modifier, NULL);
748
+ voxgig_value* r = voxgig_inject(val, store, inj);
749
+ voxgig_inj_free(inj);
750
+ voxgig_release(val);
751
+ voxgig_release(store);
752
+ return r;
753
+ }
693
754
 
694
755
  /* transform subjects. */
695
756
  static voxgig_value* subj_transform(voxgig_value* in, char** err, void* ud) {
@@ -782,137 +843,154 @@ static const char* category_to_file(const char* cat) {
782
843
  return "validate.jsonic";
783
844
  if (strcmp(cat, "select") == 0)
784
845
  return "select.jsonic";
785
- if (strcmp(cat, "sentinels") == 0)
786
- return "sentinels.jsonic";
846
+ if (strcmp(cat, "nullsem") == 0)
847
+ return "nullsem.jsonic";
787
848
  return cat;
788
849
  }
789
850
 
790
851
  int main(void) {
852
+ char* err = NULL;
853
+ omni_runner* runner;
854
+ int failed = 0;
855
+ size_t cases = 0;
856
+ size_t i;
857
+ FILE* f;
858
+
859
+ POOL = omni_pool_new();
860
+
861
+ runner = omni_make_runner(POOL, TEST_JSON_FILE, NULL, NULL, &err);
862
+ if (NULL == runner) {
863
+ fprintf(stderr, "struct corpus: %s\n", NULL == err ? "cannot make runner" : err);
864
+ return 1;
865
+ }
866
+
867
+ PACK = omni_runner_run(runner, "struct", NULL, &err);
868
+ if (NULL == PACK || !omni_ismap(omni_spec(PACK))) {
869
+ fprintf(stderr, "struct corpus: struct section not found in %s\n", TEST_JSON_FILE);
870
+ return 1;
871
+ }
872
+
873
+ /* The `null` flag of each section is the shared one: with it, omni
874
+ * rewrites every JSON null in the section to the "__NULL__" marker
875
+ * before the subject sees it; without it, nulls stay null. It is a
876
+ * property of the CASES, so it matches the reference harness section for
877
+ * section. */
878
+
791
879
  /* minor */
792
- run("minor", "isnode", true, subj_isnode, NULL);
793
- run("minor", "ismap", true, subj_ismap, NULL);
794
- run("minor", "islist", true, subj_islist, NULL);
795
- run("minor", "iskey", false, subj_iskey, NULL);
796
- run("minor", "strkey", false, subj_strkey, NULL);
797
- run("minor", "isempty", false, subj_isempty, NULL);
798
- run("minor", "isfunc", true, subj_isfunc, NULL);
799
- run("minor", "typify", true, subj_typify, NULL);
800
- run("minor", "typename", true, subj_typename, NULL);
801
- run("minor", "clone", false, subj_clone, NULL);
802
- run("minor", "size", true, subj_size, NULL);
803
- run("minor", "keysof", true, subj_keysof, NULL);
804
- run("minor", "items", true, subj_items, NULL);
805
- run("minor", "haskey", true, subj_haskey, NULL);
806
- run("minor", "getprop", true, subj_getprop, NULL);
807
- run("minor", "getelem", true, subj_getelem, NULL);
808
- run("minor", "setprop", true, subj_setprop, NULL);
809
- run("minor", "delprop", true, subj_delprop, NULL);
810
- run("minor", "stringify", true, subj_stringify, NULL);
811
- run("minor", "jsonify", true, subj_jsonify, NULL);
812
- run("minor", "pathify", true, subj_pathify, NULL);
813
- run("minor", "escre", true, subj_escre, NULL);
814
- run("minor", "escurl", true, subj_escurl, NULL);
815
- run("minor", "join", true, subj_join, NULL);
816
- run("minor", "flatten", true, subj_flatten, NULL);
817
- run("minor", "filter", true, subj_filter, NULL);
818
- run("minor", "slice", true, subj_slice, NULL);
819
- run("minor", "pad", true, subj_pad, NULL);
820
- run("minor", "setpath", false, subj_setpath, NULL);
880
+ run("minor", "isnode", 1, subj_isnode, NULL);
881
+ run("minor", "ismap", 1, subj_ismap, NULL);
882
+ run("minor", "islist", 1, subj_islist, NULL);
883
+ run("minor", "iskey", 0, subj_iskey, NULL);
884
+ run("minor", "strkey", 0, subj_strkey, NULL);
885
+ run("minor", "isempty", 0, subj_isempty, NULL);
886
+ run("minor", "isfunc", 1, subj_isfunc, NULL);
887
+ run("minor", "typify", 0, subj_typify, NULL);
888
+ run("minor", "typename", 1, subj_typename, NULL);
889
+ run("minor", "clone", 0, subj_clone, NULL);
890
+ run("minor", "size", 0, subj_size, NULL);
891
+ run("minor", "keysof", 1, subj_keysof, NULL);
892
+ run("minor", "items", 1, subj_items, NULL);
893
+ run("minor", "haskey", 0, subj_haskey, NULL);
894
+ run("minor", "getprop", 0, subj_getprop, NULL);
895
+ run("minor", "getelem", 0, subj_getelem, NULL);
896
+ run("minor", "setprop", 1, subj_setprop, NULL);
897
+ run("minor", "delprop", 1, subj_delprop, NULL);
898
+ run("minor", "stringify", 0, subj_stringify, NULL);
899
+ run("minor", "jsonify", 0, subj_jsonify, NULL);
900
+ run("minor", "pathify", 0, subj_pathify, NULL);
901
+ run("minor", "escre", 1, subj_escre, NULL);
902
+ run("minor", "escurl", 1, subj_escurl, NULL);
903
+ run("minor", "join", 0, subj_join, NULL);
904
+ run("minor", "flatten", 1, subj_flatten, NULL);
905
+ run("minor", "filter", 1, subj_filter, NULL);
906
+ run("minor", "slice", 0, subj_slice, NULL);
907
+ run("minor", "pad", 0, subj_pad, NULL);
908
+ run("minor", "setpath", 0, subj_setpath, NULL);
821
909
 
822
910
  /* walk */
823
- run("walk", "basic", true, subj_walk_basic, NULL);
824
- run("walk", "depth", false, subj_walk_depth, NULL);
911
+ run("walk", "basic", 1, subj_walk_basic, NULL);
912
+ run("walk", "depth", 0, subj_walk_depth, NULL);
825
913
 
826
914
  /* merge */
827
- run("merge", "basic", true, subj_merge, NULL);
828
- run("merge", "cases", true, subj_merge, NULL);
829
- run("merge", "array", true, subj_merge, NULL);
830
- run("merge", "integrity", true, subj_merge, NULL);
831
- run("merge", "depth", true, subj_merge_depth, NULL);
915
+ run_one("merge", "basic", 1, subj_merge, NULL);
916
+ run("merge", "cases", 1, subj_merge, NULL);
917
+ run("merge", "array", 1, subj_merge, NULL);
918
+ run("merge", "integrity", 1, subj_merge, NULL);
919
+ run("merge", "depth", 1, subj_merge_depth, NULL);
832
920
 
833
921
  /* getpath */
834
- run("getpath", "basic", true, subj_getpath_basic, NULL);
835
- run("getpath", "relative", true, subj_getpath_relative, NULL);
836
- run("getpath", "special", true, subj_getpath_special, NULL);
837
- run("getpath", "handler", true, subj_getpath_handler, NULL);
838
-
839
- /* sentinels */
840
- run("sentinels", "getprop_unify", true, subj_sent_getprop, NULL);
841
- run("sentinels", "getelem_absent", true, subj_sent_getelem, NULL);
842
- run("sentinels", "haskey_unify", true, subj_sent_haskey, NULL);
843
- run("sentinels", "isempty_unify", true, subj_sent_isempty, NULL);
844
- run("sentinels", "isnode_unify", true, subj_sent_isnode, NULL);
845
- run("sentinels", "stringify_null", true, subj_sent_stringify, NULL);
922
+ run("getpath", "basic", 1, subj_getpath_basic, NULL);
923
+ run("getpath", "relative", 1, subj_getpath_relative, NULL);
924
+ run("getpath", "special", 1, subj_getpath_special, NULL);
925
+ run("getpath", "handler", 1, subj_getpath_handler, NULL);
926
+
927
+ /* nullsem — does a PRESENT key holding a JSON null read as "no value"?
928
+ * Every lane runs {null: 0}: with the flag on, the runner rewrites each
929
+ * null to "__NULL__" and the section would assert nothing about null at
930
+ * all. This is the section the six vacuous `sentinels.*` rows hid. */
931
+ run("nullsem", "getprop", 0, subj_getprop, NULL);
932
+ run("nullsem", "getelem", 0, subj_getelem, NULL);
933
+ run("nullsem", "getpath", 0, subj_getpath_basic, NULL);
934
+ run("nullsem", "haskey", 0, subj_haskey, NULL);
935
+ run("nullsem", "keysof", 0, subj_keysof, NULL);
846
936
 
847
937
  /* inject */
848
- run("inject", "basic", true, subj_inject_basic, NULL);
849
- run("inject", "string", true, subj_inject, NULL);
850
- run("inject", "deep", true, subj_inject, NULL);
938
+ run_one("inject", "basic", 1, subj_inject, NULL);
939
+ run("inject", "string", 1, subj_inject_nullmod, NULL);
940
+ run("inject", "deep", 1, subj_inject, NULL);
851
941
 
852
942
  /* transform */
853
- run("transform", "paths", true, subj_transform, NULL);
854
- run("transform", "cmds", true, subj_transform, NULL);
855
- run("transform", "each", true, subj_transform, NULL);
856
- run("transform", "pack", true, subj_transform, NULL);
857
- run("transform", "ref", true, subj_transform, NULL);
943
+ run("transform", "paths", 1, subj_transform, NULL);
944
+ run("transform", "cmds", 1, subj_transform, NULL);
945
+ run("transform", "each", 1, subj_transform, NULL);
946
+ run("transform", "pack", 1, subj_transform, NULL);
947
+ run("transform", "ref", 1, subj_transform, NULL);
858
948
 
859
949
  /* validate */
860
- run("validate", "basic", true, subj_validate, NULL);
861
- run("validate", "invalid", true, subj_validate, NULL);
862
- run("validate", "child", true, subj_validate, NULL);
863
- run("validate", "one", true, subj_validate, NULL);
864
- run("validate", "exact", true, subj_validate, NULL);
950
+ run("validate", "basic", 0, subj_validate, NULL);
951
+ run("validate", "invalid", 0, subj_validate, NULL);
952
+ run("validate", "child", 1, subj_validate, NULL);
953
+ run("validate", "one", 1, subj_validate, NULL);
954
+ run("validate", "exact", 1, subj_validate, NULL);
865
955
 
866
956
  /* select */
867
- run("select", "basic", true, subj_select, NULL);
868
- run("select", "operators", true, subj_select, NULL);
869
- run("select", "edge", true, subj_select, NULL);
870
- run("select", "alts", true, subj_select, NULL);
957
+ run("select", "basic", 1, subj_select, NULL);
958
+ run("select", "operators", 1, subj_select, NULL);
959
+ run("select", "edge", 1, subj_select, NULL);
960
+ run("select", "alts", 1, subj_select, NULL);
871
961
 
872
962
  /* Aggregate scoreboard. */
873
- int totalP = 0, totalT = 0;
874
- /* Group by file. */
875
963
  printf("\n========= STRUCT CORPUS SCOREBOARD =========\n");
876
- /* Per-test print, sorted-ish (insertion order is fine). */
877
- for (size_t i = 0; i < SB_LEN; i++) {
878
- printf(" %-30s %d / %d\n", SB[i].r.name, SB[i].r.passed, SB[i].r.total);
879
- totalP += SB[i].r.passed;
880
- totalT += SB[i].r.total;
964
+ for (i = 0; i < SB_LEN; i++) {
965
+ printf(" %-30s %-4s %4zu cases\n", SB[i].name, SB[i].failed ? "FAIL" : "ok", SB[i].cases);
966
+ cases += SB[i].cases;
967
+ failed += SB[i].failed ? 1 : 0;
881
968
  }
882
- printf(" %-30s %d / %d\n", "TOTAL", totalP, totalT);
969
+ printf(" %-30s %-4s %4zu cases in %zu sections\n", "TOTAL", failed ? "FAIL" : "ok", cases,
970
+ SB_LEN);
883
971
  printf("============================================\n");
884
972
 
885
- /* If CORPUS_VERBOSE, dump failures. */
886
- const char* vrb = getenv("CORPUS_VERBOSE");
887
- if (vrb && strcmp(vrb, "0") != 0) {
888
- for (size_t i = 0; i < SB_LEN; i++) {
889
- if (SB[i].r.fail_len == 0)
890
- continue;
891
- fprintf(stderr, "\n--- %s (%d/%d) ---\n", SB[i].r.name, SB[i].r.passed, SB[i].r.total);
892
- int shown = 0;
893
- for (size_t j = 0; j < SB[i].r.fail_len; j++) {
894
- fprintf(stderr, " %s\n", SB[i].r.failures[j]);
895
- if (++shown >= 5) {
896
- fprintf(stderr, " ... %zu more\n", SB[i].r.fail_len - shown);
897
- break;
898
- }
899
- }
973
+ for (i = 0; i < SB_LEN; i++) {
974
+ if (SB[i].failed) {
975
+ fprintf(stderr, "\n--- %s ---\n%s\n", SB[i].name,
976
+ NULL == SB[i].err ? "(no message)" : SB[i].err);
900
977
  }
901
978
  }
902
979
 
903
- /* Write target/corpus-scoreboard.json */
904
- FILE* f = fopen("corpus-scoreboard.json", "w");
980
+ /* Write target/corpus-scoreboard.json. Same schema as before; `passed`
981
+ * is the section's case count when the section passed, because omni
982
+ * stops a set at its first failure and partial credit is unknowable. */
983
+ f = fopen("corpus-scoreboard.json", "w");
905
984
  if (f) {
985
+ size_t passedcases = 0;
986
+ int first = 1;
906
987
  fprintf(f, "{\n \"files\": {\n");
907
- /* Group. */
908
- /* For simplicity, just dump per-test. */
909
- bool first = true;
910
- for (size_t i = 0; i < SB_LEN; i++) {
911
- const char* dot = strchr(SB[i].r.name, '.');
912
- const char* cat = SB[i].r.name;
988
+ for (i = 0; i < SB_LEN; i++) {
989
+ const char* dot = strchr(SB[i].name, '.');
990
+ const char* cat = SB[i].name;
913
991
  char catbuf[64];
914
992
  if (dot) {
915
- size_t cl = dot - cat;
993
+ size_t cl = (size_t)(dot - cat);
916
994
  if (cl >= sizeof(catbuf))
917
995
  cl = sizeof(catbuf) - 1;
918
996
  memcpy(catbuf, cat, cl);
@@ -921,19 +999,21 @@ int main(void) {
921
999
  }
922
1000
  if (!first)
923
1001
  fprintf(f, ",\n");
924
- first = false;
925
- fprintf(f, " \"%s\": {\"passed\": %d, \"total\": %d}", category_to_file(cat),
926
- SB[i].r.passed, SB[i].r.total);
1002
+ first = 0;
1003
+ fprintf(f, " \"%s\": {\"passed\": %zu, \"total\": %zu}", category_to_file(cat),
1004
+ SB[i].failed ? (size_t)0 : SB[i].cases, SB[i].cases);
1005
+ passedcases += SB[i].failed ? 0 : SB[i].cases;
927
1006
  }
928
- fprintf(f, "\n },\n \"total\": {\"passed\": %d, \"total\": %d}\n}\n", totalP, totalT);
1007
+ fprintf(f, "\n },\n \"total\": {\"passed\": %zu, \"total\": %zu}\n}\n", passedcases, cases);
929
1008
  fclose(f);
930
1009
  }
931
1010
 
932
- for (size_t i = 0; i < SB_LEN; i++) {
933
- runner_result_free(&SB[i].r);
934
- free(SB[i].key);
1011
+ for (i = 0; i < SB_LEN; i++) {
1012
+ free(SB[i].name);
1013
+ free(SB[i].err);
935
1014
  }
936
1015
  free(SB);
937
- voxgig_release(CORPUS);
938
- return (totalP == totalT) ? 0 : 1;
1016
+ omni_pool_free(POOL);
1017
+
1018
+ return 0 == failed ? 0 : 1;
939
1019
  }