@voxgig/sdkgen 4.10.0 → 4.11.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 (304) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/package.json +1 -1
  3. package/project/.sdk/model/feature/secrets.aon +330 -0
  4. package/project/.sdk/model/target/c.aon +15 -2
  5. package/project/.sdk/model/target/cpp.aon +18 -0
  6. package/project/.sdk/model/target/lua.aon +17 -0
  7. package/project/.sdk/model/target/ocaml.aon +48 -5
  8. package/project/.sdk/model/target/zig.aon +30 -4
  9. package/project/.sdk/src/cmp/c/Config_c.ts +338 -1
  10. package/project/.sdk/src/cmp/c/Main_c.ts +57 -2
  11. package/project/.sdk/src/cmp/c/Package_c.ts +12 -2
  12. package/project/.sdk/src/cmp/cpp/Config_cpp.ts +324 -2
  13. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +2 -0
  14. package/project/.sdk/src/cmp/cpp/Main_cpp.ts +62 -4
  15. package/project/.sdk/src/cmp/cpp/Package_cpp.ts +10 -0
  16. package/project/.sdk/src/cmp/lua/Config_lua.ts +88 -0
  17. package/project/.sdk/src/cmp/lua/Gitignore_lua.ts +4 -0
  18. package/project/.sdk/src/cmp/lua/Main_lua.ts +93 -3
  19. package/project/.sdk/src/cmp/lua/Package_lua.ts +60 -0
  20. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +10 -0
  21. package/project/.sdk/src/cmp/ocaml/Config_ocaml.ts +183 -5
  22. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +160 -3
  23. package/project/.sdk/src/cmp/ocaml/Package_ocaml.ts +25 -1
  24. package/project/.sdk/src/cmp/zig/Config_zig.ts +130 -9
  25. package/project/.sdk/src/cmp/zig/Main_zig.ts +208 -4
  26. package/project/.sdk/{tm/zig/build.zig → src/cmp/zig/fragment/Build.fragment.zig} +7 -0
  27. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +25 -0
  28. package/project/.sdk/{tm/zig/root.zig → src/cmp/zig/fragment/Root.fragment.zig} +9 -0
  29. package/project/.sdk/tm/c/Makefile +58 -9
  30. package/project/.sdk/tm/c/core/sdk.h +10 -0
  31. package/project/.sdk/tm/c/feature/secrets/plugin/capability.c +133 -0
  32. package/project/.sdk/tm/c/feature/secrets/plugin/capability.h +39 -0
  33. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.c +83 -0
  34. package/project/.sdk/tm/c/feature/secrets/plugin/catalog.h +48 -0
  35. package/project/.sdk/tm/c/feature/secrets/plugin/config.c +413 -0
  36. package/project/.sdk/tm/c/feature/secrets/plugin/config.h +24 -0
  37. package/project/.sdk/tm/c/feature/secrets/plugin/depend.c +264 -0
  38. package/project/.sdk/tm/c/feature/secrets/plugin/depend.h +29 -0
  39. package/project/.sdk/tm/c/feature/secrets/plugin/env.c +220 -0
  40. package/project/.sdk/tm/c/feature/secrets/plugin/env.h +19 -0
  41. package/project/.sdk/tm/c/feature/secrets/plugin/export.c +97 -0
  42. package/project/.sdk/tm/c/feature/secrets/plugin/export.h +19 -0
  43. package/project/.sdk/tm/c/feature/secrets/plugin/graph.c +237 -0
  44. package/project/.sdk/tm/c/feature/secrets/plugin/graph.h +17 -0
  45. package/project/.sdk/tm/c/feature/secrets/plugin/host.c +1494 -0
  46. package/project/.sdk/tm/c/feature/secrets/plugin/host.h +135 -0
  47. package/project/.sdk/tm/c/feature/secrets/plugin/order.c +288 -0
  48. package/project/.sdk/tm/c/feature/secrets/plugin/order.h +18 -0
  49. package/project/.sdk/tm/c/feature/secrets/plugin/point.c +141 -0
  50. package/project/.sdk/tm/c/feature/secrets/plugin/point.h +80 -0
  51. package/project/.sdk/tm/c/feature/secrets/plugin/ref.c +170 -0
  52. package/project/.sdk/tm/c/feature/secrets/plugin/ref.h +52 -0
  53. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.c +98 -0
  54. package/project/.sdk/tm/c/feature/secrets/plugin/resolve.h +18 -0
  55. package/project/.sdk/tm/c/feature/secrets/plugin/types.c +150 -0
  56. package/project/.sdk/tm/c/feature/secrets/plugin/types.h +104 -0
  57. package/project/.sdk/tm/c/feature/secrets/plugin/value.c +649 -0
  58. package/project/.sdk/tm/c/feature/secrets/plugin/value.h +135 -0
  59. package/project/.sdk/tm/c/feature/secrets/plugin/version.c +151 -0
  60. package/project/.sdk/tm/c/feature/secrets/plugin/version.h +34 -0
  61. package/project/.sdk/tm/c/feature/secrets/plugins/aws.c +281 -0
  62. package/project/.sdk/tm/c/feature/secrets/plugins/azuresecrets.c +207 -0
  63. package/project/.sdk/tm/c/feature/secrets/plugins/boru.c +164 -0
  64. package/project/.sdk/tm/c/feature/secrets/plugins/clock.c +75 -0
  65. package/project/.sdk/tm/c/feature/secrets/plugins/doppler.c +141 -0
  66. package/project/.sdk/tm/c/feature/secrets/plugins/encode.c +144 -0
  67. package/project/.sdk/tm/c/feature/secrets/plugins/gcpsecrets.c +177 -0
  68. package/project/.sdk/tm/c/feature/secrets/plugins/hashicorp.c +239 -0
  69. package/project/.sdk/tm/c/feature/secrets/plugins/httpjson.c +599 -0
  70. package/project/.sdk/tm/c/feature/secrets/plugins/infisical.c +165 -0
  71. package/project/.sdk/tm/c/feature/secrets/plugins/onepassword.c +194 -0
  72. package/project/.sdk/tm/c/feature/secrets/plugins/proc.c +233 -0
  73. package/project/.sdk/tm/c/feature/secrets/plugins/secretspec.c +125 -0
  74. package/project/.sdk/tm/c/feature/secrets/plugins/sekretoplugins.h +125 -0
  75. package/project/.sdk/tm/c/feature/secrets/plugins/sha256.c +270 -0
  76. package/project/.sdk/tm/c/feature/secrets/plugins/sigv4.c +382 -0
  77. package/project/.sdk/tm/c/feature/secrets/plugins/support.h +153 -0
  78. package/project/.sdk/tm/c/feature/secrets/plugins/tls.c +420 -0
  79. package/project/.sdk/tm/c/feature/secrets/sekreto/internal.h +86 -0
  80. package/project/.sdk/tm/c/feature/secrets/sekreto/json.c +721 -0
  81. package/project/.sdk/tm/c/feature/secrets/sekreto/providers.c +813 -0
  82. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.c +944 -0
  83. package/project/.sdk/tm/c/feature/secrets/sekreto/sekreto.h +490 -0
  84. package/project/.sdk/tm/c/feature/secrets/sekreto/util.c +442 -0
  85. package/project/.sdk/tm/c/feature/secrets.c +797 -0
  86. package/project/.sdk/tm/c/feature/secrets.h +46 -0
  87. package/project/.sdk/tm/c/src/feature/secrets/.gitkeep +0 -0
  88. package/project/.sdk/tm/c/tests/feature/secrets/secrets_test.c +802 -0
  89. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +38 -11
  90. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +40 -6
  91. package/project/.sdk/tm/cpp/Makefile +48 -4
  92. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.cpp +121 -0
  93. package/project/.sdk/tm/cpp/feature/secrets/plugin/capability.hpp +41 -0
  94. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.cpp +60 -0
  95. package/project/.sdk/tm/cpp/feature/secrets/plugin/catalog.hpp +66 -0
  96. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.cpp +376 -0
  97. package/project/.sdk/tm/cpp/feature/secrets/plugin/config.hpp +29 -0
  98. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.cpp +230 -0
  99. package/project/.sdk/tm/cpp/feature/secrets/plugin/depend.hpp +31 -0
  100. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.cpp +205 -0
  101. package/project/.sdk/tm/cpp/feature/secrets/plugin/env.hpp +25 -0
  102. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.cpp +84 -0
  103. package/project/.sdk/tm/cpp/feature/secrets/plugin/export.hpp +24 -0
  104. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.cpp +222 -0
  105. package/project/.sdk/tm/cpp/feature/secrets/plugin/graph.hpp +21 -0
  106. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.cpp +1200 -0
  107. package/project/.sdk/tm/cpp/feature/secrets/plugin/host.hpp +250 -0
  108. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.cpp +250 -0
  109. package/project/.sdk/tm/cpp/feature/secrets/plugin/order.hpp +22 -0
  110. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.cpp +110 -0
  111. package/project/.sdk/tm/cpp/feature/secrets/plugin/point.hpp +79 -0
  112. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.cpp +136 -0
  113. package/project/.sdk/tm/cpp/feature/secrets/plugin/ref.hpp +60 -0
  114. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.cpp +82 -0
  115. package/project/.sdk/tm/cpp/feature/secrets/plugin/resolve.hpp +25 -0
  116. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.cpp +90 -0
  117. package/project/.sdk/tm/cpp/feature/secrets/plugin/types.hpp +65 -0
  118. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.cpp +491 -0
  119. package/project/.sdk/tm/cpp/feature/secrets/plugin/value.hpp +120 -0
  120. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.cpp +143 -0
  121. package/project/.sdk/tm/cpp/feature/secrets/plugin/version.hpp +36 -0
  122. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.cpp +248 -0
  123. package/project/.sdk/tm/cpp/feature/secrets/plugins/Aws.hpp +30 -0
  124. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.cpp +149 -0
  125. package/project/.sdk/tm/cpp/feature/secrets/plugins/Azuresecrets.hpp +23 -0
  126. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.cpp +117 -0
  127. package/project/.sdk/tm/cpp/feature/secrets/plugins/Boru.hpp +27 -0
  128. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.cpp +180 -0
  129. package/project/.sdk/tm/cpp/feature/secrets/plugins/Crypto.hpp +52 -0
  130. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.cpp +87 -0
  131. package/project/.sdk/tm/cpp/feature/secrets/plugins/Doppler.hpp +23 -0
  132. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.cpp +121 -0
  133. package/project/.sdk/tm/cpp/feature/secrets/plugins/Gcpsecrets.hpp +23 -0
  134. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.cpp +153 -0
  135. package/project/.sdk/tm/cpp/feature/secrets/plugins/Hashicorp.hpp +23 -0
  136. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.cpp +666 -0
  137. package/project/.sdk/tm/cpp/feature/secrets/plugins/Httpjson.hpp +160 -0
  138. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.cpp +123 -0
  139. package/project/.sdk/tm/cpp/feature/secrets/plugins/Infisical.hpp +23 -0
  140. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.cpp +125 -0
  141. package/project/.sdk/tm/cpp/feature/secrets/plugins/Onepassword.hpp +23 -0
  142. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.cpp +223 -0
  143. package/project/.sdk/tm/cpp/feature/secrets/plugins/Proc.hpp +47 -0
  144. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.cpp +104 -0
  145. package/project/.sdk/tm/cpp/feature/secrets/plugins/Secretspec.hpp +27 -0
  146. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.cpp +242 -0
  147. package/project/.sdk/tm/cpp/feature/secrets/plugins/Sigv4.hpp +58 -0
  148. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.cpp +260 -0
  149. package/project/.sdk/tm/cpp/feature/secrets/plugins/Tls.hpp +47 -0
  150. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.cpp +476 -0
  151. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Json.hpp +89 -0
  152. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.cpp +312 -0
  153. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Provider.hpp +263 -0
  154. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.cpp +354 -0
  155. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Providers.hpp +111 -0
  156. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.cpp +613 -0
  157. package/project/.sdk/tm/cpp/feature/secrets/sekreto/Sekreto.hpp +227 -0
  158. package/project/.sdk/tm/cpp/feature/secrets.hpp +745 -0
  159. package/project/.sdk/tm/cpp/src/feature/secrets/.gitkeep +0 -0
  160. package/project/.sdk/tm/cpp/test/feature/secrets/secrets_test.cpp +808 -0
  161. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +34 -8
  162. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +85 -0
  163. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +17 -2
  164. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +41 -0
  165. package/project/.sdk/tm/go/feature/secrets_feature.go +32 -10
  166. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +116 -0
  167. package/project/.sdk/tm/java/feature/SecretsFeature.java +33 -8
  168. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +64 -0
  169. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +34 -11
  170. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +73 -0
  171. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +32 -7
  172. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +69 -0
  173. package/project/.sdk/tm/lua/Makefile +15 -4
  174. package/project/.sdk/tm/lua/feature/secrets/native/sekretonet.c +806 -0
  175. package/project/.sdk/tm/lua/feature/secrets/plugin/capability.lua +135 -0
  176. package/project/.sdk/tm/lua/feature/secrets/plugin/catalog.lua +63 -0
  177. package/project/.sdk/tm/lua/feature/secrets/plugin/config.lua +361 -0
  178. package/project/.sdk/tm/lua/feature/secrets/plugin/depend.lua +232 -0
  179. package/project/.sdk/tm/lua/feature/secrets/plugin/env.lua +168 -0
  180. package/project/.sdk/tm/lua/feature/secrets/plugin/export.lua +66 -0
  181. package/project/.sdk/tm/lua/feature/secrets/plugin/graph.lua +194 -0
  182. package/project/.sdk/tm/lua/feature/secrets/plugin/host.lua +1190 -0
  183. package/project/.sdk/tm/lua/feature/secrets/plugin/json.lua +169 -0
  184. package/project/.sdk/tm/lua/feature/secrets/plugin/order.lua +207 -0
  185. package/project/.sdk/tm/lua/feature/secrets/plugin/point.lua +106 -0
  186. package/project/.sdk/tm/lua/feature/secrets/plugin/ref.lua +115 -0
  187. package/project/.sdk/tm/lua/feature/secrets/plugin/resolve.lua +78 -0
  188. package/project/.sdk/tm/lua/feature/secrets/plugin/types.lua +275 -0
  189. package/project/.sdk/tm/lua/feature/secrets/plugin/version.lua +131 -0
  190. package/project/.sdk/tm/lua/feature/secrets/plugin.lua +76 -0
  191. package/project/.sdk/tm/lua/feature/secrets/sekreto/addr.lua +124 -0
  192. package/project/.sdk/tm/lua/feature/secrets/sekreto/err.lua +47 -0
  193. package/project/.sdk/tm/lua/feature/secrets/sekreto/name.lua +315 -0
  194. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/aws.lua +228 -0
  195. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/azuresecrets.lua +137 -0
  196. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/boru.lua +124 -0
  197. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/crypto.lua +212 -0
  198. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/doppler.lua +89 -0
  199. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/gcpsecrets.lua +129 -0
  200. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/hashicorp.lua +154 -0
  201. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/httpjson.lua +248 -0
  202. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/infisical.lua +113 -0
  203. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/json.lua +449 -0
  204. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/net.lua +198 -0
  205. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/onepassword.lua +126 -0
  206. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/secretspec.lua +93 -0
  207. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/sigv4.lua +269 -0
  208. package/project/.sdk/tm/lua/feature/secrets/sekreto/plugins/support.lua +146 -0
  209. package/project/.sdk/tm/lua/feature/secrets/sekreto/providers.lua +346 -0
  210. package/project/.sdk/tm/lua/feature/secrets/sekreto.lua +479 -0
  211. package/project/.sdk/tm/lua/feature/secrets_feature.lua +690 -0
  212. package/project/.sdk/tm/lua/src/feature/secrets/.gitkeep +0 -0
  213. package/project/.sdk/tm/lua/test/extend_test.lua +105 -0
  214. package/project/.sdk/tm/lua/test/feature/secrets/secrets_feature_test.lua +862 -0
  215. package/project/.sdk/tm/ocaml/Makefile +52 -8
  216. package/project/.sdk/tm/ocaml/feature/secrets/plugin/capability.ml +106 -0
  217. package/project/.sdk/tm/ocaml/feature/secrets/plugin/catalog.ml +43 -0
  218. package/project/.sdk/tm/ocaml/feature/secrets/plugin/config.ml +349 -0
  219. package/project/.sdk/tm/ocaml/feature/secrets/plugin/defs.ml +143 -0
  220. package/project/.sdk/tm/ocaml/feature/secrets/plugin/depend.ml +217 -0
  221. package/project/.sdk/tm/ocaml/feature/secrets/plugin/env.ml +197 -0
  222. package/project/.sdk/tm/ocaml/feature/secrets/plugin/export.ml +89 -0
  223. package/project/.sdk/tm/ocaml/feature/secrets/plugin/graph.ml +227 -0
  224. package/project/.sdk/tm/ocaml/feature/secrets/plugin/host.ml +1112 -0
  225. package/project/.sdk/tm/ocaml/feature/secrets/plugin/order.ml +202 -0
  226. package/project/.sdk/tm/ocaml/feature/secrets/plugin/point.ml +138 -0
  227. package/project/.sdk/tm/ocaml/feature/secrets/plugin/ref.ml +126 -0
  228. package/project/.sdk/tm/ocaml/feature/secrets/plugin/resolve.ml +62 -0
  229. package/project/.sdk/tm/ocaml/feature/secrets/plugin/types.ml +97 -0
  230. package/project/.sdk/tm/ocaml/feature/secrets/plugin/value.ml +387 -0
  231. package/project/.sdk/tm/ocaml/feature/secrets/plugin/version.ml +139 -0
  232. package/project/.sdk/tm/ocaml/feature/secrets/plugins/aws.ml +171 -0
  233. package/project/.sdk/tm/ocaml/feature/secrets/plugins/azuresecrets.ml +116 -0
  234. package/project/.sdk/tm/ocaml/feature/secrets/plugins/boru.ml +95 -0
  235. package/project/.sdk/tm/ocaml/feature/secrets/plugins/crypto.ml +149 -0
  236. package/project/.sdk/tm/ocaml/feature/secrets/plugins/doppler.ml +61 -0
  237. package/project/.sdk/tm/ocaml/feature/secrets/plugins/gcpsecrets.ml +93 -0
  238. package/project/.sdk/tm/ocaml/feature/secrets/plugins/hashicorp.ml +120 -0
  239. package/project/.sdk/tm/ocaml/feature/secrets/plugins/http.ml +421 -0
  240. package/project/.sdk/tm/ocaml/feature/secrets/plugins/httpjson.ml +66 -0
  241. package/project/.sdk/tm/ocaml/feature/secrets/plugins/infisical.ml +85 -0
  242. package/project/.sdk/tm/ocaml/feature/secrets/plugins/onepassword.ml +112 -0
  243. package/project/.sdk/tm/ocaml/feature/secrets/plugins/runcmd.ml +97 -0
  244. package/project/.sdk/tm/ocaml/feature/secrets/plugins/secretspec.ml +68 -0
  245. package/project/.sdk/tm/ocaml/feature/secrets/plugins/sigv4.ml +259 -0
  246. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls.ml +44 -0
  247. package/project/.sdk/tm/ocaml/feature/secrets/plugins/tls_stubs.c +358 -0
  248. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/json.ml +376 -0
  249. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/provider.ml +647 -0
  250. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/secret.ml +299 -0
  251. package/project/.sdk/tm/ocaml/feature/secrets/sekreto/sekreto.ml +347 -0
  252. package/project/.sdk/tm/ocaml/feature/secrets_feature.ml +453 -0
  253. package/project/.sdk/tm/ocaml/src/feature/secrets/.gitkeep +0 -0
  254. package/project/.sdk/tm/ocaml/test/feature/secrets/t_secrets.ml +670 -0
  255. package/project/.sdk/tm/perl/feature/secrets_feature.pm +33 -12
  256. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +47 -0
  257. package/project/.sdk/tm/php/feature/SecretsFeature.php +30 -6
  258. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +98 -0
  259. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +28 -6
  260. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +114 -0
  261. package/project/.sdk/tm/rb/feature/secrets_feature.rb +28 -6
  262. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +93 -0
  263. package/project/.sdk/tm/rust/feature/secrets.rs +33 -10
  264. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +96 -0
  265. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +29 -7
  266. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +71 -0
  267. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +35 -12
  268. package/project/.sdk/tm/ts/test/feature/secrets/Secrets.test.ts +73 -0
  269. package/project/.sdk/tm/zig/feature/secrets/plugin/capability.zig +137 -0
  270. package/project/.sdk/tm/zig/feature/secrets/plugin/catalog.zig +90 -0
  271. package/project/.sdk/tm/zig/feature/secrets/plugin/config.zig +346 -0
  272. package/project/.sdk/tm/zig/feature/secrets/plugin/depend.zig +244 -0
  273. package/project/.sdk/tm/zig/feature/secrets/plugin/env.zig +201 -0
  274. package/project/.sdk/tm/zig/feature/secrets/plugin/export.zig +83 -0
  275. package/project/.sdk/tm/zig/feature/secrets/plugin/graph.zig +212 -0
  276. package/project/.sdk/tm/zig/feature/secrets/plugin/host.zig +1224 -0
  277. package/project/.sdk/tm/zig/feature/secrets/plugin/inst.zig +126 -0
  278. package/project/.sdk/tm/zig/feature/secrets/plugin/order.zig +228 -0
  279. package/project/.sdk/tm/zig/feature/secrets/plugin/plugin.zig +34 -0
  280. package/project/.sdk/tm/zig/feature/secrets/plugin/point.zig +166 -0
  281. package/project/.sdk/tm/zig/feature/secrets/plugin/ref.zig +147 -0
  282. package/project/.sdk/tm/zig/feature/secrets/plugin/resolve.zig +74 -0
  283. package/project/.sdk/tm/zig/feature/secrets/plugin/types.zig +140 -0
  284. package/project/.sdk/tm/zig/feature/secrets/plugin/value.zig +662 -0
  285. package/project/.sdk/tm/zig/feature/secrets/plugin/version.zig +139 -0
  286. package/project/.sdk/tm/zig/feature/secrets/plugins/aws.zig +294 -0
  287. package/project/.sdk/tm/zig/feature/secrets/plugins/azuresecrets.zig +222 -0
  288. package/project/.sdk/tm/zig/feature/secrets/plugins/boru.zig +188 -0
  289. package/project/.sdk/tm/zig/feature/secrets/plugins/doppler.zig +135 -0
  290. package/project/.sdk/tm/zig/feature/secrets/plugins/gcpsecrets.zig +170 -0
  291. package/project/.sdk/tm/zig/feature/secrets/plugins/hashicorp.zig +242 -0
  292. package/project/.sdk/tm/zig/feature/secrets/plugins/httpjson.zig +535 -0
  293. package/project/.sdk/tm/zig/feature/secrets/plugins/infisical.zig +167 -0
  294. package/project/.sdk/tm/zig/feature/secrets/plugins/onepassword.zig +202 -0
  295. package/project/.sdk/tm/zig/feature/secrets/plugins/secretspec.zig +160 -0
  296. package/project/.sdk/tm/zig/feature/secrets/plugins/sigv4.zig +336 -0
  297. package/project/.sdk/tm/zig/feature/secrets/sekreto/addr.zig +148 -0
  298. package/project/.sdk/tm/zig/feature/secrets/sekreto/builtins.zig +259 -0
  299. package/project/.sdk/tm/zig/feature/secrets/sekreto/provider.zig +440 -0
  300. package/project/.sdk/tm/zig/feature/secrets/sekreto/sekreto.zig +944 -0
  301. package/project/.sdk/tm/zig/feature/secrets.zig +854 -0
  302. package/project/.sdk/tm/zig/src/feature/secrets/.gitkeep +0 -0
  303. package/project/.sdk/tm/zig/test/feature/secrets/secrets_test.zig +891 -0
  304. package/project/sdkgen-package.json +1 -1
@@ -0,0 +1,126 @@
1
+ // VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/inst.zig)
2
+ // Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ //! The instance and host records.
5
+ //!
6
+ //! THEY LIVE IN ONE FILE BECAUSE THE CYCLE IS REAL: a definition's
7
+ //! callbacks take an instance, an instance points at its host, and a
8
+ //! host holds a catalog of definitions. Zig resolves declarations
9
+ //! lazily, so it would in fact tolerate the cycle across files — but
10
+ //! `catalog.zig` importing `inst.zig` importing `catalog.zig` is a
11
+ //! readability trap, and gathering the declarations here is the same
12
+ //! shape `c` gets from a forward `typedef`, `ocaml` from `defs.ml` and
13
+ //! `haskell` from `Defs.hs`.
14
+
15
+ const std = @import("std");
16
+ const v = @import("value.zig");
17
+ const t = @import("types.zig");
18
+ const point = @import("point.zig");
19
+
20
+ /// A scope release. Zig has no closures, so a release is a function plus
21
+ /// its context — the same pairing `point.zig` uses for bindings.
22
+ pub const ReleaseFn = *const fn (?*anyopaque) void;
23
+
24
+ pub const ScopeEntry = struct {
25
+ fn_: ?ReleaseFn = null,
26
+ ctx: ?*anyopaque = null,
27
+ done: bool = false,
28
+ /// `acquire` and `release` both count toward `open`; a nested host's
29
+ /// teardown does NOT — a teardown is not an acquisition, and the
30
+ /// inner host keeps its own counter (`nest/open`).
31
+ counts: bool = true,
32
+ };
33
+
34
+ pub const Inst = struct {
35
+ ref: []const u8,
36
+ def: *@import("catalog.zig").Definition,
37
+ status: []const u8 = "declared",
38
+ pos: f64 = 0,
39
+ seq: f64 = 0,
40
+ options: *v.Value,
41
+ state: *v.Value,
42
+ order: ?*v.Value = null,
43
+ /// §11.4's ALWAYS-RELUCTANT rebinding, made concrete: the provider
44
+ /// ref this instance's activation actually selected, per requirement
45
+ /// name. Recomputing the best candidate on every question silently
46
+ /// re-points a live consumer at any better-ranked newcomer, and then
47
+ /// losing the provider it was really using does not restart it.
48
+ selected: *v.Value,
49
+ /// §9.6's `active: false`. THE BAR OUTLIVES THE APPLY THAT SET IT: a
50
+ /// flag consulted only while `apply` ran let a later direct `ready`
51
+ /// bring the instance live, which is the config switch it exists to
52
+ /// be silently ignored.
53
+ barred: bool = false,
54
+ unmet: *v.Value,
55
+ scope: v.List(*ScopeEntry),
56
+ /// Declared in `define`, inserted only when activation SUCCEEDS
57
+ /// (§8.1). Holding them until then is what makes a failed activate
58
+ /// leave nothing behind.
59
+ bindings: v.List(point.Bound),
60
+ inner: ?*Host = null,
61
+ /// Declared in `define`, and VISIBLE while merely `loaded` (§11):
62
+ /// they are data, and hiding them would make the loaded state
63
+ /// useless for introspection.
64
+ exports: *v.Value,
65
+ provides: *v.Value,
66
+ owner: *Host,
67
+ };
68
+
69
+ pub const HostOptions = struct {
70
+ catalog: ?*@import("catalog.zig").Catalog = null,
71
+ reserved: ?*v.Value = null,
72
+ keys: ?*v.Value = null,
73
+ defaults: ?*v.Value = null,
74
+ profile: ?*v.Value = null,
75
+ points: ?*v.Value = null,
76
+ bases: []const BaseFn = &[_]BaseFn{},
77
+ /// §11.3. `restart` (the default) treats provider replacement as an
78
+ /// ordinary runtime operation. `hold` is the strict reading —
79
+ /// deactivating a required instance is `plugin_dependency_held`. NOT
80
+ /// the default, because a station that cannot swap a provider
81
+ /// without a restart has lost the argument for having a plugin
82
+ /// system.
83
+ dependency: []const u8 = "",
84
+ };
85
+
86
+ pub const BaseFn = struct {
87
+ point: []const u8,
88
+ func: *const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value,
89
+ };
90
+
91
+ pub const Host = struct {
92
+ catalog: *@import("catalog.zig").Catalog,
93
+ reserved: ?*v.Value,
94
+ keys: ?*v.Value,
95
+ defaults: ?*v.Value,
96
+ profile: ?*v.Value,
97
+ points: *v.Value,
98
+ bases: []const BaseFn,
99
+ dependency: []const u8,
100
+ /// Set for the duration of a bulk teardown, so `held` knows this is
101
+ /// a coordinated operation rather than an ad-hoc deactivation.
102
+ coordinated: bool = false,
103
+ instances: v.List(*Inst),
104
+ log: *v.Value,
105
+ events: *v.Value,
106
+ seqn: f64 = 0,
107
+ open: f64 = 0,
108
+ intransition: bool = false,
109
+ /// WHICH callback is running, not merely that one is. §8.1 puts
110
+ /// resource capture in `activate` and §8.3 says `release` outside
111
+ /// `activate` is `plugin_release_scope` — and a boolean alone cannot
112
+ /// tell `activate` from `define`, so it admitted an acquire in
113
+ /// `define` whose scope `unload` would never unwind.
114
+ phase: []const u8 = "",
115
+ };
116
+
117
+ pub const DeclareSpec = struct {
118
+ definition: []const u8 = "",
119
+ options: ?*v.Value = null,
120
+ order: ?*v.Value = null,
121
+ pos: ?f64 = null,
122
+ tag: []const u8 = "",
123
+ /// §9.1: set ONLY by `hostdeclare` — "the host declares those
124
+ /// instances itself, after the user merge, and always wins".
125
+ hostowned: bool = false,
126
+ };
@@ -0,0 +1,228 @@
1
+ // VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/order.zig)
2
+ // Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ //! Ordering (§7) — one rule, one place.
5
+ //!
6
+ //! sdkgen grew two special cases in `makeOptions` (`test`, then
7
+ //! `station`) and the third was not far off. This sort is the whole
8
+ //! replacement, and the tiers are in this order for a reason:
9
+ //!
10
+ //! 1 constraints before/after edges, by ref or by name
11
+ //! 2 bands integer, lower first, default 0
12
+ //! 3 declaration ties break by `pos`
13
+ //!
14
+ //! CONSTRAINTS BEAT BANDS precisely so the correct tool wins when both
15
+ //! are present. A band expresses a genuine cross-cutting layer; a
16
+ //! constraint expresses a relationship between two specific things; and
17
+ //! a band chosen by trial and error to fix an ordering bug is a bug
18
+ //! wearing a number.
19
+
20
+ const std = @import("std");
21
+ const v = @import("value.zig");
22
+ const t = @import("types.zig");
23
+ const ref = @import("ref.zig");
24
+
25
+ /// A NUMBER, not a numeric string. `order.band` accepting "1" was a
26
+ /// surviving mutation in more than one port: the corpus pins the type
27
+ /// because two ports disagreeing about whether "1" is a band is exactly
28
+ /// the divergence a shared corpus exists to remove.
29
+ fn bandof(b: ?*v.Value) f64 {
30
+ const band = v.get(v.get(b, "order"), "band");
31
+ return if (v.isNum(band)) v.asNum(band) else 0;
32
+ }
33
+
34
+ fn posof(b: ?*v.Value) f64 {
35
+ const p = v.get(b, "pos");
36
+ return if (v.isNum(p)) v.asNum(p) else 0;
37
+ }
38
+
39
+ /// Band first (lower runs first), then `pos` — the position the DOCUMENT
40
+ /// visibly states, not the order instances happened to load and not the
41
+ /// incarnation `seq`.
42
+ fn lessRank(_: void, a: *v.Value, b: *v.Value) bool {
43
+ const ab = bandof(a);
44
+ const bb = bandof(b);
45
+ if (ab != bb) return ab < bb;
46
+ return posof(a) < posof(b);
47
+ }
48
+
49
+ /// Was a constraint actually declared? An ABSENT one and an EMPTY LIST
50
+ /// are both "no constraint"; only a non-empty spelling is an edge.
51
+ fn declared(spec: ?*v.Value) bool {
52
+ if (v.isList(spec)) return v.len(spec) > 0;
53
+ if (v.isStr(spec)) return v.asStr(spec).len > 0;
54
+ return false;
55
+ }
56
+
57
+ /// Matching is by REF, or by NAME across all of that definition's
58
+ /// instances (§7) — which is the whole reason the two spellings exist.
59
+ fn targets(spec: ?*v.Value, nodes: ?*v.Value) [][]const u8 {
60
+ var hit = v.List([]const u8).init(v.arena());
61
+ const specs: []*v.Value = if (v.isList(spec)) v.items(spec) else blk: {
62
+ const one = v.arena().alloc(*v.Value, 1) catch @panic("oom");
63
+ one[0] = spec orelse v.vnull();
64
+ break :blk one;
65
+ };
66
+ for (specs) |oneval| {
67
+ if (!v.isStr(oneval)) continue;
68
+ const one = v.asStr(oneval);
69
+ for (v.items(nodes)) |node| {
70
+ const r = v.asStr(v.get(node, "ref"));
71
+ var already = false;
72
+ for (hit.items) |x| {
73
+ if (std.mem.eql(u8, x, r)) {
74
+ already = true;
75
+ break;
76
+ }
77
+ }
78
+ if (already) continue;
79
+ if (std.mem.eql(u8, r, one) or std.mem.eql(u8, ref.refname(r), one)) {
80
+ hit.append(r) catch @panic("oom");
81
+ }
82
+ }
83
+ }
84
+ return hit.items;
85
+ }
86
+
87
+ /// A PIN IS NOT A CONSTRAINT (§7).
88
+ ///
89
+ /// Constraints and bands are negotiable by definition — they are what
90
+ /// plugins and documents say they want, and the sort's job is to satisfy
91
+ /// them all. A pin is the host stating a structural invariant of its own
92
+ /// architecture, which is a different kind of claim and must not lose a
93
+ /// tie to a document.
94
+ ///
95
+ /// So a pin PLACES the binding at the named end, and an ordering that
96
+ /// would move it away is `plugin_order_pinned` — rejected, not honoured
97
+ /// into a broken wrap.
98
+ fn applypin(order: *v.Value, edges: *v.Value, pin: ?*v.Value) t.Err!*v.Value {
99
+ if (!v.isMap(pin)) return order;
100
+
101
+ var out = v.List([]const u8).init(v.arena());
102
+ for (v.items(order)) |x| out.append(v.asStr(x)) catch @panic("oom");
103
+
104
+ // SORTED, not insertion order. A pin map is data — it can arrive
105
+ // from a host's own construction options in any order, and two names
106
+ // pinned to the same end are order-sensitive. Sorted is the one
107
+ // order every language agrees on, and `order/pin#two-names` pins it.
108
+ for (v.sortedKeys(pin)) |name| {
109
+ const want = v.asStr(v.get(pin, name));
110
+ var idx: ?usize = null;
111
+ for (out.items, 0..) |r, j| {
112
+ if (std.mem.eql(u8, ref.refname(r), name)) {
113
+ idx = j;
114
+ break;
115
+ }
116
+ }
117
+ const i = idx orelse continue;
118
+
119
+ // `first`/`outermost` is index 0; `last`/`innermost` is the end.
120
+ // §6.2 makes the first chain binding outermost, which is why the
121
+ // vocabulary is positional and why the two spellings pair this
122
+ // way.
123
+ const wantfirst = std.mem.eql(u8, want, "first") or std.mem.eql(u8, want, "outermost");
124
+ const r = out.orderedRemove(i);
125
+ if (wantfirst) out.insert(0, r) catch @panic("oom") else out.append(r) catch @panic("oom");
126
+ }
127
+
128
+ // Now check that the placement did not break a constraint. This is
129
+ // the half that makes a pin a rejection rather than an override: the
130
+ // host wins on position, but it does not get to silently discard a
131
+ // relationship a plugin declared.
132
+ const index = v.vmap();
133
+ for (out.items, 0..) |r, i| v.set(index, r, v.vnum(@floatFromInt(i)));
134
+ for (v.sortedKeys(edges)) |from| {
135
+ for (v.items(v.get(edges, from))) |tov| {
136
+ const to = v.asStr(tov);
137
+ if (v.asNum(v.get(index, from)) > v.asNum(v.get(index, to))) {
138
+ const d = v.vmap();
139
+ v.set(d, "before", v.vstr(from));
140
+ v.set(d, "after", v.vstr(to));
141
+ return t.fail("plugin_order_pinned", v.print("a pin would move a binding an ordering constrains: {s} must precede {s}", .{ from, to }), d);
142
+ }
143
+ }
144
+ }
145
+
146
+ const result = v.vlist();
147
+ for (out.items) |r| v.push(result, v.vstr(r));
148
+ return result;
149
+ }
150
+
151
+ pub fn resolveorder(bindings: ?*v.Value, pin: ?*v.Value) t.Err!*v.Value {
152
+ const n = v.len(bindings);
153
+
154
+ const byref = v.vmap();
155
+ for (v.items(bindings)) |b| v.set(byref, v.asStr(v.get(b, "ref")), b);
156
+
157
+ // Constraints are edges. A constraint naming an ABSENT binding is
158
+ // satisfied VACUOUSLY (§7) — a plugin ordered `after: 'test'` must
159
+ // load in a host with no test plugin. That is sdkgen's __after__
160
+ // behaviour, kept.
161
+ const edges = v.vmap();
162
+ for (v.items(bindings)) |b| v.set(edges, v.asStr(v.get(b, "ref")), v.vlist());
163
+
164
+ for (v.items(bindings)) |b| {
165
+ const bref = v.asStr(v.get(b, "ref"));
166
+ const o = v.get(b, "order");
167
+ if (declared(v.get(o, "after"))) {
168
+ for (targets(v.get(o, "after"), bindings)) |x| v.push(v.get(edges, x), v.vstr(bref));
169
+ }
170
+ if (declared(v.get(o, "before"))) {
171
+ for (targets(v.get(o, "before"), bindings)) |x| v.push(v.get(edges, bref), v.vstr(x));
172
+ }
173
+ }
174
+
175
+ // Stable topological sort.
176
+ const indeg = v.vmap();
177
+ for (v.items(bindings)) |b| v.set(indeg, v.asStr(v.get(b, "ref")), v.vnum(0));
178
+ for (v.keys(edges)) |from| {
179
+ for (v.items(v.get(edges, from))) |tov| {
180
+ const to = v.asStr(tov);
181
+ v.set(indeg, to, v.vnum(v.asNum(v.get(indeg, to)) + 1));
182
+ }
183
+ }
184
+
185
+ var ready = v.List(*v.Value).init(v.arena());
186
+ for (v.items(bindings)) |b| {
187
+ if (v.asNum(v.get(indeg, v.asStr(v.get(b, "ref")))) == 0) ready.append(b) catch @panic("oom");
188
+ }
189
+
190
+ var out = v.List([]const u8).init(v.arena());
191
+ while (ready.items.len > 0) {
192
+ std.mem.sort(*v.Value, ready.items, {}, lessRank);
193
+ const next = ready.orderedRemove(0);
194
+ const nref = v.asStr(v.get(next, "ref"));
195
+ out.append(nref) catch @panic("oom");
196
+ for (v.items(v.get(edges, nref))) |tov| {
197
+ const to = v.asStr(tov);
198
+ const d = v.asNum(v.get(indeg, to)) - 1;
199
+ v.set(indeg, to, v.vnum(d));
200
+ if (d == 0) ready.append(v.get(byref, to)) catch @panic("oom");
201
+ }
202
+ }
203
+
204
+ if (out.items.len != n) {
205
+ const stuck = v.vlist();
206
+ var text = v.List(u8).init(v.arena());
207
+ text.appendSlice("before/after constraints cycle: ") catch @panic("oom");
208
+ for (v.items(bindings)) |b| {
209
+ const r = v.asStr(v.get(b, "ref"));
210
+ var placed = false;
211
+ for (out.items) |x| {
212
+ if (std.mem.eql(u8, x, r)) {
213
+ placed = true;
214
+ break;
215
+ }
216
+ }
217
+ if (placed) continue;
218
+ if (v.len(stuck) > 0) text.appendSlice(" -> ") catch @panic("oom");
219
+ text.appendSlice(r) catch @panic("oom");
220
+ v.push(stuck, v.vstr(r));
221
+ }
222
+ return t.fail("plugin_order_cycle", text.items, t.details1("cycle", stuck));
223
+ }
224
+
225
+ const ordered = v.vlist();
226
+ for (out.items) |r| v.push(ordered, v.vstr(r));
227
+ return applypin(ordered, edges, pin);
228
+ }
@@ -0,0 +1,34 @@
1
+ // VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/plugin.zig)
2
+ // Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ //! THE ROOT A CONSUMER IMPORTS.
5
+ //!
6
+ //! Zig restricts a module's imports to the directory of its root source
7
+ //! file, so a host that takes this port as a named module
8
+ //! (`--dep plugin ... -Mplugin=<checkout>/zig/src/plugin.zig`) reaches
9
+ //! every file in `src/` through this one and through nothing else. The
10
+ //! test driver in `../test/` imports the files directly, because it
11
+ //! lives beside them; a consumer cannot, and this is what it gets
12
+ //! instead — the same role `index.ts` plays for the typescript port.
13
+ //!
14
+ //! EVERY MODULE, not the handful the first host happened to need: the
15
+ //! canonical surface is the whole of it (AGENTS.md, api parity), and a
16
+ //! root that exposed part of it would make the rest unreachable by
17
+ //! construction. A new file under `src/` is one line here.
18
+
19
+ pub const value = @import("value.zig");
20
+ pub const types = @import("types.zig");
21
+ pub const ref = @import("ref.zig");
22
+ pub const version = @import("version.zig");
23
+ pub const capability = @import("capability.zig");
24
+ pub const resolve = @import("resolve.zig");
25
+ pub const env = @import("env.zig");
26
+ pub const config = @import("config.zig");
27
+ pub const graph = @import("graph.zig");
28
+ pub const depend = @import("depend.zig");
29
+ pub const order = @import("order.zig");
30
+ pub const point = @import("point.zig");
31
+ pub const @"export" = @import("export.zig");
32
+ pub const catalog = @import("catalog.zig");
33
+ pub const inst = @import("inst.zig");
34
+ pub const host = @import("host.zig");
@@ -0,0 +1,166 @@
1
+ // VENDORED: @voxgig/plugin sdk-20260908-1556-0 (zig/src/point.zig)
2
+ // Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ //! Extension points (§6). Three kinds, chosen because they are what the
5
+ //! two existing systems actually needed, and no more.
6
+ //!
7
+ //! A PLUGIN NEVER MUTATES THE HOST. That inversion is what makes
8
+ //! deactivation possible: sdkgen's `utility.fetcher = wrapped` is not
9
+ //! undoable, but "this instance holds slot 3 of the request chain" is
10
+ //! undoable in O(1). OSGi named it the whiteboard pattern in 2004, in a
11
+ //! paper called *Listeners Considered Harmful*, and for exactly this
12
+ //! reason.
13
+ //!
14
+ //! A CLOSURE IN ZIG IS A FUNCTION POINTER PLUS A CONTEXT, exactly as in
15
+ //! `c`. Zig has no closures: a function literal that captures is not a
16
+ //! value you can store. So `chain` gets an explicit `Chain *` to call
17
+ //! back into, and a binding's `ctx` is its instance — the same shape the
18
+ //! `c` port has, for the same reason, in a language forty years newer.
19
+
20
+ const std = @import("std");
21
+ const v = @import("value.zig");
22
+ const t = @import("types.zig");
23
+
24
+ /// The remaining composition, as seen by one chain binding. A binding
25
+ /// may CALL it and must not store it — a plugin that stashes `next` and
26
+ /// calls it after deactivation is a bug the host cannot prevent, and
27
+ /// saying so is better than pretending otherwise (§6.2).
28
+ pub const Chain = struct {
29
+ bindings: []Bound,
30
+ i: usize,
31
+ base: ?*const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value,
32
+ basectx: ?*anyopaque,
33
+ };
34
+
35
+ /// A binding answers with an optional: null DECLINES, a value answers.
36
+ pub const HookFn = *const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value;
37
+ pub const ChainFn = *const fn (*Chain, ?*v.Value, ?*anyopaque) t.Err!?*v.Value;
38
+
39
+ pub const Bound = struct {
40
+ ref: []const u8,
41
+ point: []const u8,
42
+ /// `provider` ranks by HIGHEST band, unlike hook and chain which run
43
+ /// lowest first. Kept as declared so the two rules stay visibly
44
+ /// different rather than one being derived from the other by a
45
+ /// reader who then gets it backwards.
46
+ band: f64 = 0,
47
+ hook: ?HookFn = null,
48
+ chain: ?ChainFn = null,
49
+ ctx: ?*anyopaque = null,
50
+ };
51
+
52
+ /// Call the rest of the composition.
53
+ pub fn chainNext(c: *Chain, arg: ?*v.Value) t.Err!?*v.Value {
54
+ if (c.i >= c.bindings.len) {
55
+ if (c.base) |b| return b(arg, c.basectx);
56
+ return arg;
57
+ }
58
+ const b = c.bindings[c.i];
59
+ var rest = Chain{ .bindings = c.bindings, .i = c.i + 1, .base = c.base, .basectx = c.basectx };
60
+ return b.chain.?(&rest, arg, b.ctx);
61
+ }
62
+
63
+ /// Composition: b1(b2(b3(base))), FIRST BINDING OUTERMOST (§6.2).
64
+ pub fn pointcall(
65
+ bindings: []Bound,
66
+ base: ?*const fn (?*v.Value, ?*anyopaque) t.Err!?*v.Value,
67
+ basectx: ?*anyopaque,
68
+ arg: ?*v.Value,
69
+ ) t.Err!?*v.Value {
70
+ var c = Chain{ .bindings = bindings, .i = 0, .base = base, .basectx = basectx };
71
+ return chainNext(&c, arg);
72
+ }
73
+
74
+ pub const EmitResult = struct { value: ?*v.Value, errors: *v.Value };
75
+
76
+ /// Fan-out. Return values are ignored except in `bail`.
77
+ ///
78
+ /// §6.1: "fan-out" is not one answer but four. In a language with
79
+ /// asynchrony, "call every binding" hides a decision — start them all
80
+ /// and wait, await each in turn, or do not wait — and a design that
81
+ /// leaves it unsaid gets four different answers from four ports, in the
82
+ /// concurrency behaviour of production code no corpus entry happens to
83
+ /// cover. Zig has no asynchrony here, so all four modes are sequential
84
+ /// and only the ERROR and RETURN handling distinguishes them.
85
+ pub fn pointemit(bindings: []Bound, mode: []const u8, arg: ?*v.Value) t.Err!EmitResult {
86
+ const errors = v.vlist();
87
+
88
+ if (std.mem.eql(u8, mode, "bail")) {
89
+ // Stops at the first binding that RETURNS A VALUE — the
90
+ // "handled, stop" case. A null, AND A JSON NULL, BOTH DECLINE.
91
+ //
92
+ // JavaScript can tell null from undefined and almost nothing
93
+ // else in the target set can — Go, Python, Ruby, PHP, Lua, Java
94
+ // and C# each have exactly one way to say nothing, and zig has
95
+ // one too. Making the distinction load-bearing would cost every
96
+ // one of them a wrapper type carried through the whole dispatch
97
+ // path, to express a difference their plugin authors cannot
98
+ // write. §18's budget settles it (§6.1).
99
+ for (bindings) |b| {
100
+ const x = try b.hook.?(arg, b.ctx);
101
+ if (!v.isNull(x)) return .{ .value = x, .errors = errors };
102
+ }
103
+ return .{ .value = null, .errors = errors };
104
+ }
105
+
106
+ const raising = std.mem.eql(u8, mode, "emit");
107
+ for (bindings) |b| {
108
+ if (raising) {
109
+ // `emit` raises synchronously; the collecting modes gather.
110
+ _ = try b.hook.?(arg, b.ctx);
111
+ continue;
112
+ }
113
+ _ = b.hook.?(arg, b.ctx) catch {
114
+ const e = t.take();
115
+ const rec = v.vmap();
116
+ v.set(rec, "code", v.vstr(e.code));
117
+ v.set(rec, "message", v.vstr(e.message));
118
+ v.push(errors, rec);
119
+ };
120
+ }
121
+ return .{ .value = null, .errors = errors };
122
+ }
123
+
124
+ fn lessProv(_: void, a: Bound, b: Bound) bool {
125
+ // HIGHEST band wins, unlike hook and chain; ties break by ref sort,
126
+ // which is a TOTAL order.
127
+ if (a.band != b.band) return a.band > b.band;
128
+ return std.mem.order(u8, a.ref, b.ref) == .lt;
129
+ }
130
+
131
+ fn lessStr(_: void, a: []const u8, b: []const u8) bool {
132
+ return std.mem.order(u8, a, b) == .lt;
133
+ }
134
+
135
+ pub const ProviderResult = struct { winner: ?Bound, shadowed: *v.Value };
136
+
137
+ /// At most one live implementation (§6.3). The winner is the highest
138
+ /// band, ties broken by ref sort, and THE LOSERS ARE VISIBLE rather than
139
+ /// silently ignored.
140
+ pub fn pointprovider(bindings: []Bound, exclusive: bool) t.Err!ProviderResult {
141
+ const shadowed = v.vlist();
142
+ if (bindings.len == 0) return .{ .winner = null, .shadowed = shadowed };
143
+
144
+ if (exclusive and bindings.len > 1) {
145
+ const refs = v.arena().alloc([]const u8, bindings.len) catch @panic("oom");
146
+ for (bindings, 0..) |b, i| refs[i] = b.ref;
147
+ // Sorted, so the message names the same pair whatever order the
148
+ // bindings arrived in.
149
+ std.mem.sort([]const u8, refs, {}, lessStr);
150
+ const list = v.vlist();
151
+ var names = v.List(u8).init(v.arena());
152
+ for (refs, 0..) |r, i| {
153
+ if (i > 0) names.appendSlice(", ") catch @panic("oom");
154
+ names.appendSlice(r) catch @panic("oom");
155
+ v.push(list, v.vstr(r));
156
+ }
157
+ return t.fail("plugin_point_exclusive", v.print("point is exclusive and has {d} bindings: {s}", .{ bindings.len, names.items }), t.details1("refs", list));
158
+ }
159
+
160
+ const ranked = v.arena().alloc(Bound, bindings.len) catch @panic("oom");
161
+ @memcpy(ranked, bindings);
162
+ std.mem.sort(Bound, ranked, {}, lessProv);
163
+
164
+ for (ranked[1..]) |b| v.push(shadowed, v.vstr(b.ref));
165
+ return .{ .winner = ranked[0], .shadowed = shadowed };
166
+ }