@voxgig/sdkgen 4.8.3 → 4.10.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 (917) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/helpers/manifest.d.ts +2 -1
  3. package/dist/helpers/manifest.js +75 -1
  4. package/dist/helpers/manifest.js.map +1 -1
  5. package/dist/helpers/modelNames.d.ts +7 -0
  6. package/dist/helpers/modelNames.js +232 -0
  7. package/dist/helpers/modelNames.js.map +1 -0
  8. package/dist/helpers/naming.d.ts +2 -1
  9. package/dist/helpers/naming.js +45 -1
  10. package/dist/helpers/naming.js.map +1 -1
  11. package/dist/sdkgen.d.ts +3 -2
  12. package/dist/sdkgen.js +12 -3
  13. package/dist/sdkgen.js.map +1 -1
  14. package/dist/testkit.d.ts +2 -0
  15. package/dist/testkit.js +80 -24
  16. package/dist/testkit.js.map +1 -1
  17. package/dist/tsconfig.tsbuildinfo +1 -1
  18. package/dist/utility.js +17 -7
  19. package/dist/utility.js.map +1 -1
  20. package/package.json +1 -1
  21. package/project/.sdk/model/feature/secrets.aon +671 -0
  22. package/project/.sdk/model/target/clojure.aon +10 -0
  23. package/project/.sdk/model/target/csharp.aon +5 -0
  24. package/project/.sdk/model/target/elixir.aon +6 -0
  25. package/project/.sdk/model/target/java.aon +5 -0
  26. package/project/.sdk/model/target/js.aon +5 -0
  27. package/project/.sdk/model/target/kotlin.aon +7 -0
  28. package/project/.sdk/model/target/perl.aon +5 -0
  29. package/project/.sdk/model/target/php.aon +5 -0
  30. package/project/.sdk/model/target/rb.aon +5 -0
  31. package/project/.sdk/model/target/rust.aon +5 -0
  32. package/project/.sdk/model/target/scala.aon +38 -2
  33. package/project/.sdk/model/target/swift.aon +10 -0
  34. package/project/.sdk/model/target/zig.aon +9 -0
  35. package/project/.sdk/src/cmp/clojure/Config_clojure.ts +51 -4
  36. package/project/.sdk/src/cmp/clojure/Main_clojure.ts +43 -1
  37. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +17 -1
  38. package/project/.sdk/src/cmp/clojure/featureextra_clojure.ts +130 -0
  39. package/project/.sdk/src/cmp/csharp/Config_csharp.ts +70 -0
  40. package/project/.sdk/src/cmp/csharp/Main_csharp.ts +9 -1
  41. package/project/.sdk/src/cmp/csharp/Package_csharp.ts +25 -1
  42. package/project/.sdk/src/cmp/elixir/Config_elixir.ts +68 -2
  43. package/project/.sdk/src/cmp/elixir/Main_elixir.ts +16 -0
  44. package/project/.sdk/src/cmp/go-cli/Main_go-cli.ts +14 -1
  45. package/project/.sdk/src/cmp/java/Config_java.ts +84 -2
  46. package/project/.sdk/src/cmp/java/Main_java.ts +10 -1
  47. package/project/.sdk/src/cmp/js/Config_js.ts +75 -8
  48. package/project/.sdk/src/cmp/js/Main_js.ts +66 -2
  49. package/project/.sdk/src/cmp/js/fragment/Config.data.fragment.js +18 -1
  50. package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +18 -1
  51. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +7 -0
  52. package/project/.sdk/src/cmp/kotlin/Config_kotlin.ts +63 -1
  53. package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +32 -2
  54. package/project/.sdk/src/cmp/perl/Config_perl.ts +129 -3
  55. package/project/.sdk/src/cmp/perl/Main_perl.ts +41 -1
  56. package/project/.sdk/src/cmp/perl/Package_perl.ts +13 -1
  57. package/project/.sdk/src/cmp/perl/fragment/Main.fragment.pm +1 -0
  58. package/project/.sdk/src/cmp/php/Config_php.ts +105 -1
  59. package/project/.sdk/src/cmp/php/Gitignore_php.ts +4 -2
  60. package/project/.sdk/src/cmp/php/Main_php.ts +16 -1
  61. package/project/.sdk/src/cmp/rb/Config_rb.ts +92 -2
  62. package/project/.sdk/src/cmp/rb/EntityTypes_rb.ts +11 -1
  63. package/project/.sdk/src/cmp/rb/Main_rb.ts +7 -1
  64. package/project/.sdk/src/cmp/rust/Main_rust.ts +99 -1
  65. package/project/.sdk/src/cmp/rust/Package_rust.ts +72 -6
  66. package/project/.sdk/src/cmp/scala/Config_scala.ts +44 -0
  67. package/project/.sdk/src/cmp/scala/Main_scala.ts +68 -1
  68. package/project/.sdk/src/cmp/swift/Config_swift.ts +62 -1
  69. package/project/.sdk/src/cmp/swift/Main_swift.ts +35 -1
  70. package/project/.sdk/src/cmp/swift/Package_swift.ts +81 -11
  71. package/project/.sdk/src/cmp/swift/fragment/Main.fragment.swift +58 -44
  72. package/project/.sdk/src/cmp/swift/utility_swift.ts +22 -0
  73. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  74. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  75. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  76. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  77. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  78. package/project/.sdk/tm/c/tests/vendor/omni/json.c +2 -2
  79. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +2 -2
  80. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +2 -2
  81. package/project/.sdk/tm/c/tests/vendor/omni/util.c +2 -2
  82. package/project/.sdk/tm/clojure/Makefile +3 -0
  83. package/project/.sdk/tm/clojure/feature/secrets/sdk/feature/secrets.clj +503 -0
  84. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/capability.clj +84 -0
  85. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/catalog.clj +44 -0
  86. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/config.clj +240 -0
  87. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/depend.clj +199 -0
  88. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/env.clj +111 -0
  89. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/export.clj +46 -0
  90. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/graph.clj +122 -0
  91. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/host.clj +1018 -0
  92. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/json.clj +106 -0
  93. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/order.clj +157 -0
  94. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/point.clj +77 -0
  95. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/ref.clj +92 -0
  96. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/resolve.clj +46 -0
  97. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/types.clj +177 -0
  98. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin/version.clj +90 -0
  99. package/project/.sdk/tm/clojure/feature/secrets/voxgig/plugin.clj +40 -0
  100. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/addr.clj +111 -0
  101. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/chain.clj +297 -0
  102. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/core.clj +192 -0
  103. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/json.clj +261 -0
  104. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/aws.clj +165 -0
  105. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/azuresecrets.clj +111 -0
  106. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/boru.clj +107 -0
  107. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/doppler.clj +61 -0
  108. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/gcpsecrets.clj +88 -0
  109. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/hashicorp.clj +115 -0
  110. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/httpjson.clj +214 -0
  111. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/infisical.clj +80 -0
  112. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/onepassword.clj +93 -0
  113. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/proc.clj +63 -0
  114. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/secretspec.clj +99 -0
  115. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/plugins/sigv4.clj +142 -0
  116. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/provider.clj +25 -0
  117. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto/providers.clj +196 -0
  118. package/project/.sdk/tm/clojure/feature/secrets/voxgig/sekreto.clj +113 -0
  119. package/project/.sdk/tm/clojure/src/sdk/core.clj +9 -0
  120. package/project/.sdk/tm/clojure/src/sdk/features.clj +13 -1
  121. package/project/.sdk/tm/clojure/test/sdk/test/feature/secrets.clj +547 -0
  122. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +103 -14
  123. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +2 -2
  124. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +2 -2
  125. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +2 -2
  126. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +2 -2
  127. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +2 -2
  128. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +2 -2
  129. package/project/.sdk/tm/csharp/feature/SecretsFeature.cs +889 -0
  130. package/project/.sdk/tm/csharp/feature/secrets/plugin/Capability.cs +196 -0
  131. package/project/.sdk/tm/csharp/feature/secrets/plugin/Catalog.cs +70 -0
  132. package/project/.sdk/tm/csharp/feature/secrets/plugin/Config.cs +505 -0
  133. package/project/.sdk/tm/csharp/feature/secrets/plugin/Definition.cs +52 -0
  134. package/project/.sdk/tm/csharp/feature/secrets/plugin/Depend.cs +285 -0
  135. package/project/.sdk/tm/csharp/feature/secrets/plugin/Entry.cs +55 -0
  136. package/project/.sdk/tm/csharp/feature/secrets/plugin/Env.cs +228 -0
  137. package/project/.sdk/tm/csharp/feature/secrets/plugin/Export.cs +102 -0
  138. package/project/.sdk/tm/csharp/feature/secrets/plugin/Graph.cs +256 -0
  139. package/project/.sdk/tm/csharp/feature/secrets/plugin/Host.cs +1379 -0
  140. package/project/.sdk/tm/csharp/feature/secrets/plugin/Inst.cs +177 -0
  141. package/project/.sdk/tm/csharp/feature/secrets/plugin/Json.cs +326 -0
  142. package/project/.sdk/tm/csharp/feature/secrets/plugin/Order.cs +295 -0
  143. package/project/.sdk/tm/csharp/feature/secrets/plugin/Plugin.cs +113 -0
  144. package/project/.sdk/tm/csharp/feature/secrets/plugin/Point.cs +177 -0
  145. package/project/.sdk/tm/csharp/feature/secrets/plugin/Refs.cs +198 -0
  146. package/project/.sdk/tm/csharp/feature/secrets/plugin/Resolve.cs +95 -0
  147. package/project/.sdk/tm/csharp/feature/secrets/plugin/Types.cs +351 -0
  148. package/project/.sdk/tm/csharp/feature/secrets/plugin/Version.cs +196 -0
  149. package/project/.sdk/tm/csharp/feature/secrets/plugins/Aws.cs +325 -0
  150. package/project/.sdk/tm/csharp/feature/secrets/plugins/AzureSecrets.cs +195 -0
  151. package/project/.sdk/tm/csharp/feature/secrets/plugins/Boru.cs +192 -0
  152. package/project/.sdk/tm/csharp/feature/secrets/plugins/Child.cs +75 -0
  153. package/project/.sdk/tm/csharp/feature/secrets/plugins/Doppler.cs +112 -0
  154. package/project/.sdk/tm/csharp/feature/secrets/plugins/GcpSecrets.cs +167 -0
  155. package/project/.sdk/tm/csharp/feature/secrets/plugins/Hashicorp.cs +221 -0
  156. package/project/.sdk/tm/csharp/feature/secrets/plugins/HttpJson.cs +213 -0
  157. package/project/.sdk/tm/csharp/feature/secrets/plugins/Infisical.cs +155 -0
  158. package/project/.sdk/tm/csharp/feature/secrets/plugins/OnePassword.cs +169 -0
  159. package/project/.sdk/tm/csharp/feature/secrets/plugins/SecretSpec.cs +172 -0
  160. package/project/.sdk/tm/csharp/feature/secrets/plugins/Sigv4.cs +240 -0
  161. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Json.cs +192 -0
  162. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Providers.cs +503 -0
  163. package/project/.sdk/tm/csharp/feature/secrets/sekreto/Sekreto.cs +775 -0
  164. package/project/.sdk/tm/csharp/test/feature/secrets/SecretsFeatureTest.cs +1702 -0
  165. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +2 -2
  166. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +2 -2
  167. package/project/.sdk/tm/csharp/utility/MakeOptions.cs +10 -0
  168. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +1 -1
  169. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/capability.ex +118 -0
  170. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/catalog.ex +56 -0
  171. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/config.ex +320 -0
  172. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/depend.ex +205 -0
  173. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/env.ex +166 -0
  174. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/error.ex +13 -0
  175. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/export.ex +73 -0
  176. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/graph.ex +185 -0
  177. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/host.ex +1182 -0
  178. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/inst.ex +139 -0
  179. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/json.ex +132 -0
  180. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/order.ex +179 -0
  181. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/point.ex +99 -0
  182. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/ref.ex +129 -0
  183. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/resolve.ex +59 -0
  184. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/types.ex +190 -0
  185. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/version.ex +136 -0
  186. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/plugin/voxgig_plugin.ex +42 -0
  187. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/json.ex +368 -0
  188. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/aws.ex +257 -0
  189. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/azuresecrets.ex +160 -0
  190. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/boru.ex +127 -0
  191. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/doppler.ex +96 -0
  192. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/gcpsecrets.ex +124 -0
  193. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/hashicorp.ex +162 -0
  194. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/http.ex +627 -0
  195. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/httpjson.ex +134 -0
  196. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/infisical.ex +125 -0
  197. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/onepassword.ex +152 -0
  198. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/proc.ex +80 -0
  199. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/secretspec.ex +101 -0
  200. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/plugins/sigv4.ex +176 -0
  201. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/provider.ex +67 -0
  202. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/providers.ex +536 -0
  203. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets/sekreto/sekreto.ex +662 -0
  204. package/project/.sdk/tm/elixir/lib/projectname/feature/secrets.ex +824 -0
  205. package/project/.sdk/tm/elixir/test/feature/secrets/secrets_test.exs +1072 -0
  206. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +2 -2
  207. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +2 -2
  208. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +2 -2
  209. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +1 -1
  210. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +1 -1
  211. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +1 -1
  212. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +1 -1
  213. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +1 -1
  214. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +1 -1
  215. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +1 -1
  216. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1 -1
  217. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +1 -1
  218. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +1 -1
  219. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +1 -1
  220. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +1 -1
  221. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +1 -1
  222. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +1 -1
  223. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +1 -1
  224. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +4 -4
  225. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +2 -2
  226. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +2 -2
  227. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +2 -2
  228. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +2 -2
  229. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +2 -2
  230. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +4 -5
  231. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +3 -3
  232. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +3 -4
  233. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +2 -2
  234. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +2 -2
  235. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +2 -2
  236. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +5 -2
  237. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +31 -2
  238. package/project/.sdk/tm/go/feature/secrets_feature.go +16 -0
  239. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +123 -0
  240. package/project/.sdk/tm/go/test/omni/omni.go +8 -3
  241. package/project/.sdk/tm/go/test/omni/util.go +25 -4
  242. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +1 -1
  243. package/project/.sdk/tm/java/feature/SecretsFeature.java +766 -0
  244. package/project/.sdk/tm/java/feature/secrets/plugin/Capability.java +181 -0
  245. package/project/.sdk/tm/java/feature/secrets/plugin/Catalog.java +64 -0
  246. package/project/.sdk/tm/java/feature/secrets/plugin/Config.java +433 -0
  247. package/project/.sdk/tm/java/feature/secrets/plugin/Definition.java +54 -0
  248. package/project/.sdk/tm/java/feature/secrets/plugin/Depend.java +292 -0
  249. package/project/.sdk/tm/java/feature/secrets/plugin/Entry.java +49 -0
  250. package/project/.sdk/tm/java/feature/secrets/plugin/Env.java +204 -0
  251. package/project/.sdk/tm/java/feature/secrets/plugin/Export.java +93 -0
  252. package/project/.sdk/tm/java/feature/secrets/plugin/Graph.java +244 -0
  253. package/project/.sdk/tm/java/feature/secrets/plugin/Host.java +1196 -0
  254. package/project/.sdk/tm/java/feature/secrets/plugin/Inst.java +173 -0
  255. package/project/.sdk/tm/java/feature/secrets/plugin/Json.java +339 -0
  256. package/project/.sdk/tm/java/feature/secrets/plugin/Order.java +274 -0
  257. package/project/.sdk/tm/java/feature/secrets/plugin/Plugin.java +94 -0
  258. package/project/.sdk/tm/java/feature/secrets/plugin/PluginException.java +37 -0
  259. package/project/.sdk/tm/java/feature/secrets/plugin/Point.java +172 -0
  260. package/project/.sdk/tm/java/feature/secrets/plugin/Refs.java +171 -0
  261. package/project/.sdk/tm/java/feature/secrets/plugin/Resolve.java +89 -0
  262. package/project/.sdk/tm/java/feature/secrets/plugin/Types.java +232 -0
  263. package/project/.sdk/tm/java/feature/secrets/plugin/Version.java +198 -0
  264. package/project/.sdk/tm/java/feature/secrets/sekreto/Addr.java +142 -0
  265. package/project/.sdk/tm/java/feature/secrets/sekreto/Builtins.java +229 -0
  266. package/project/.sdk/tm/java/feature/secrets/sekreto/Json.java +302 -0
  267. package/project/.sdk/tm/java/feature/secrets/sekreto/Provider.java +21 -0
  268. package/project/.sdk/tm/java/feature/secrets/sekreto/Sekreto.java +698 -0
  269. package/project/.sdk/tm/java/feature/secrets/sekreto/Support.java +100 -0
  270. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Aws.java +294 -0
  271. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Azuresecrets.java +164 -0
  272. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Boru.java +161 -0
  273. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Doppler.java +103 -0
  274. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Gcpsecrets.java +143 -0
  275. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Hashicorp.java +186 -0
  276. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Httpjson.java +192 -0
  277. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Infisical.java +139 -0
  278. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Onepassword.java +143 -0
  279. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Proc.java +80 -0
  280. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Secretspec.java +138 -0
  281. package/project/.sdk/tm/java/feature/secrets/sekreto/plugins/Sigv4.java +243 -0
  282. package/project/.sdk/tm/java/test/feature/secrets/SecretsFeatureTest.java +986 -0
  283. package/project/.sdk/tm/java/test/vendor/omni/Json.java +2 -2
  284. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +2 -2
  285. package/project/.sdk/tm/java/test/vendor/omni/Util.java +2 -2
  286. package/project/.sdk/tm/java/utility/MakeOptions.java +7 -0
  287. package/project/.sdk/tm/java/utility/struct/Struct.java +1 -1
  288. package/project/.sdk/tm/js/src/feature/secrets/SecretsFeature.js +431 -0
  289. package/project/.sdk/tm/js/src/feature/secrets/plugin/capability.js +119 -0
  290. package/project/.sdk/tm/js/src/feature/secrets/plugin/catalog.js +42 -0
  291. package/project/.sdk/tm/js/src/feature/secrets/plugin/config.js +323 -0
  292. package/project/.sdk/tm/js/src/feature/secrets/plugin/depend.js +196 -0
  293. package/project/.sdk/tm/js/src/feature/secrets/plugin/env.js +120 -0
  294. package/project/.sdk/tm/js/src/feature/secrets/plugin/export.js +48 -0
  295. package/project/.sdk/tm/js/src/feature/secrets/plugin/graph.js +150 -0
  296. package/project/.sdk/tm/js/src/feature/secrets/plugin/host.js +949 -0
  297. package/project/.sdk/tm/js/src/feature/secrets/plugin/index.js +35 -0
  298. package/project/.sdk/tm/js/src/feature/secrets/plugin/order.js +165 -0
  299. package/project/.sdk/tm/js/src/feature/secrets/plugin/point.js +94 -0
  300. package/project/.sdk/tm/js/src/feature/secrets/plugin/ref.js +106 -0
  301. package/project/.sdk/tm/js/src/feature/secrets/plugin/resolve.js +59 -0
  302. package/project/.sdk/tm/js/src/feature/secrets/plugin/types.js +79 -0
  303. package/project/.sdk/tm/js/src/feature/secrets/plugin/version.js +100 -0
  304. package/project/.sdk/tm/js/src/feature/secrets/sekreto/Sekreto.js +574 -0
  305. package/project/.sdk/tm/js/src/feature/secrets/sekreto/index.js +56 -0
  306. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/aws.js +188 -0
  307. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/azuresecrets.js +135 -0
  308. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/boru.js +128 -0
  309. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/doppler.js +67 -0
  310. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/gcpsecrets.js +115 -0
  311. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/hashicorp.js +139 -0
  312. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/httpjson.js +93 -0
  313. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/infisical.js +99 -0
  314. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/onepassword.js +111 -0
  315. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/secretspec.js +105 -0
  316. package/project/.sdk/tm/js/src/feature/secrets/sekreto/plugins/sigv4.js +157 -0
  317. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/addr.js +119 -0
  318. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/builtin.js +39 -0
  319. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/dotenv.js +40 -0
  320. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/env.js +21 -0
  321. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/file.js +42 -0
  322. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/memory.js +18 -0
  323. package/project/.sdk/tm/js/src/feature/secrets/sekreto/provider/support.js +151 -0
  324. package/project/.sdk/tm/js/src/utility/StructUtility.js +2 -2
  325. package/project/.sdk/tm/js/test/feature/secrets/Secrets.test.js +946 -0
  326. package/project/.sdk/tm/js/test/vendor/omni/index.js +1 -1
  327. package/project/.sdk/tm/js/test/vendor/omni/runner.js +18 -3
  328. package/project/.sdk/tm/js/test/vendor/omni/util.js +25 -8
  329. package/project/.sdk/tm/kotlin/feature/SecretsFeature.kt +659 -0
  330. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Capability.kt +117 -0
  331. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Catalog.kt +40 -0
  332. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Config.kt +322 -0
  333. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Depend.kt +227 -0
  334. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Env.kt +163 -0
  335. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Export.kt +57 -0
  336. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Graph.kt +179 -0
  337. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Host.kt +1131 -0
  338. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Json.kt +241 -0
  339. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Order.kt +180 -0
  340. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Plugin.kt +64 -0
  341. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Point.kt +124 -0
  342. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Refs.kt +125 -0
  343. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Resolve.kt +66 -0
  344. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Types.kt +171 -0
  345. package/project/.sdk/tm/kotlin/feature/secrets/plugin/Version.kt +132 -0
  346. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Json.kt +359 -0
  347. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Provider.kt +21 -0
  348. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Providers.kt +308 -0
  349. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Sekreto.kt +525 -0
  350. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Spec.kt +126 -0
  351. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/Support.kt +205 -0
  352. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Aws.kt +251 -0
  353. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Azuresecrets.kt +145 -0
  354. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Boru.kt +130 -0
  355. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Doppler.kt +77 -0
  356. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Gcpsecrets.kt +119 -0
  357. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Hashicorp.kt +156 -0
  358. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Httpjson.kt +219 -0
  359. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Infisical.kt +114 -0
  360. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Onepassword.kt +114 -0
  361. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Secretspec.kt +118 -0
  362. package/project/.sdk/tm/kotlin/feature/secrets/sekreto/plugins/Sigv4.kt +220 -0
  363. package/project/.sdk/tm/kotlin/test/feature/secrets/SecretsTest.kt +1148 -0
  364. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +2 -2
  365. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +2 -2
  366. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +2 -2
  367. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +1 -1
  368. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +2 -2
  369. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +2 -2
  370. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +2 -2
  371. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +2 -2
  372. package/project/.sdk/tm/lua/utility/struct/regex.lua +1 -1
  373. package/project/.sdk/tm/lua/utility/struct/struct.lua +1 -1
  374. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +2 -2
  375. package/project/.sdk/tm/perl/Makefile +6 -1
  376. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Capability.pm +141 -0
  377. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Catalog.pm +65 -0
  378. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Config.pm +346 -0
  379. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Depend.pm +216 -0
  380. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Env.pm +176 -0
  381. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Export.pm +59 -0
  382. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Graph.pm +157 -0
  383. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Host.pm +1139 -0
  384. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Order.pm +187 -0
  385. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Point.pm +100 -0
  386. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Ref.pm +119 -0
  387. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Resolve.pm +71 -0
  388. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Types.pm +251 -0
  389. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin/Version.pm +122 -0
  390. package/project/.sdk/tm/perl/feature/secrets/plugin/Voxgig/Plugin.pm +70 -0
  391. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Aws.pm +263 -0
  392. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Azuresecrets.pm +159 -0
  393. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Boru.pm +180 -0
  394. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Doppler.pm +92 -0
  395. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Gcpsecrets.pm +138 -0
  396. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Hashicorp.pm +213 -0
  397. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Httpjson.pm +173 -0
  398. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Infisical.pm +132 -0
  399. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Onepassword.pm +132 -0
  400. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Proc.pm +102 -0
  401. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Secretspec.pm +132 -0
  402. package/project/.sdk/tm/perl/feature/secrets/plugins/Voxgig/Sekreto/Plugins/Sigv4.pm +190 -0
  403. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Addr.pm +124 -0
  404. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto/Providers.pm +301 -0
  405. package/project/.sdk/tm/perl/feature/secrets/sekreto/Voxgig/Sekreto.pm +605 -0
  406. package/project/.sdk/tm/perl/feature/secrets_feature.pm +675 -0
  407. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +1 -1
  408. package/project/.sdk/tm/perl/t/feature/secrets/secrets.t +957 -0
  409. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +1 -1
  410. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +1 -1
  411. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +1 -1
  412. package/project/.sdk/tm/php/feature/SecretsFeature.php +670 -0
  413. package/project/.sdk/tm/php/feature/secrets/plugin/Capability.php +226 -0
  414. package/project/.sdk/tm/php/feature/secrets/plugin/Catalog.php +75 -0
  415. package/project/.sdk/tm/php/feature/secrets/plugin/Config.php +444 -0
  416. package/project/.sdk/tm/php/feature/secrets/plugin/Depend.php +262 -0
  417. package/project/.sdk/tm/php/feature/secrets/plugin/Env.php +202 -0
  418. package/project/.sdk/tm/php/feature/secrets/plugin/Export.php +74 -0
  419. package/project/.sdk/tm/php/feature/secrets/plugin/Graph.php +195 -0
  420. package/project/.sdk/tm/php/feature/secrets/plugin/Host.php +1514 -0
  421. package/project/.sdk/tm/php/feature/secrets/plugin/Order.php +260 -0
  422. package/project/.sdk/tm/php/feature/secrets/plugin/Point.php +129 -0
  423. package/project/.sdk/tm/php/feature/secrets/plugin/Ref.php +169 -0
  424. package/project/.sdk/tm/php/feature/secrets/plugin/Resolve.php +79 -0
  425. package/project/.sdk/tm/php/feature/secrets/plugin/Types.php +348 -0
  426. package/project/.sdk/tm/php/feature/secrets/plugin/Version.php +163 -0
  427. package/project/.sdk/tm/php/feature/secrets/plugin/plugin.php +40 -0
  428. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/aws.php +274 -0
  429. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/azuresecrets.php +170 -0
  430. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/boru.php +163 -0
  431. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/doppler.php +106 -0
  432. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/gcpsecrets.php +144 -0
  433. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/hashicorp.php +194 -0
  434. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/httpjson.php +113 -0
  435. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/infisical.php +131 -0
  436. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/onepassword.php +150 -0
  437. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/runcmd.php +101 -0
  438. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/secretspec.php +146 -0
  439. package/project/.sdk/tm/php/feature/secrets/sekreto/plugins/sigv4.php +161 -0
  440. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Addr.php +129 -0
  441. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Providers.php +322 -0
  442. package/project/.sdk/tm/php/feature/secrets/sekreto/src/Sekreto.php +724 -0
  443. package/project/.sdk/tm/php/test/feature/secrets/SecretsTest.php +1067 -0
  444. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +2 -2
  445. package/project/.sdk/tm/php/test/vendor/omni/Util.php +2 -2
  446. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +1 -1
  447. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +1 -1
  448. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +1 -1
  449. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +1 -1
  450. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +1 -1
  451. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +1 -1
  452. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +1 -1
  453. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +1 -1
  454. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1 -1
  455. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +1 -1
  456. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +1 -1
  457. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +1 -1
  458. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +1 -1
  459. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +1 -1
  460. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +1 -1
  461. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +4 -2
  462. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +1 -1
  463. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +3 -3
  464. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +1 -1
  465. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +1 -1
  466. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +1 -1
  467. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +1 -1
  468. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +3 -4
  469. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +1 -1
  470. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +4 -6
  471. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +1 -1
  472. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +1 -1
  473. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +1 -1
  474. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +1 -1
  475. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +21 -1
  476. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +1 -1
  477. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +1 -1
  478. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +16 -2
  479. package/project/.sdk/tm/py/test/voxgig_omni/util.py +27 -12
  480. package/project/.sdk/tm/rb/Makefile +7 -1
  481. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/capability.rb +118 -0
  482. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/catalog.rb +55 -0
  483. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/config.rb +315 -0
  484. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/depend.rb +197 -0
  485. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/env.rb +143 -0
  486. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/export.rb +52 -0
  487. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/graph.rb +147 -0
  488. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/host.rb +1079 -0
  489. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/order.rb +169 -0
  490. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/point.rb +93 -0
  491. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/ref.rb +112 -0
  492. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/resolve.rb +56 -0
  493. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/types.rb +99 -0
  494. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin/version.rb +106 -0
  495. package/project/.sdk/tm/rb/feature/secrets/voxgig_plugin.rb +24 -0
  496. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/addr.rb +111 -0
  497. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/aws.rb +200 -0
  498. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/azuresecrets.rb +130 -0
  499. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/boru.rb +121 -0
  500. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/doppler.rb +66 -0
  501. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.rb +107 -0
  502. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/hashicorp.rb +137 -0
  503. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/httpjson.rb +136 -0
  504. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/infisical.rb +97 -0
  505. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/onepassword.rb +104 -0
  506. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/secretspec.rb +113 -0
  507. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/plugins/sigv4.rb +127 -0
  508. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/providers.rb +210 -0
  509. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto/sekreto.rb +465 -0
  510. package/project/.sdk/tm/rb/feature/secrets/voxgig_sekreto.rb +30 -0
  511. package/project/.sdk/tm/rb/feature/secrets_feature.rb +561 -0
  512. package/project/.sdk/tm/rb/test/feature/secrets/secrets_feature_test.rb +842 -0
  513. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +2 -2
  514. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +2 -2
  515. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +2 -2
  516. package/project/.sdk/tm/rust/feature/secrets/plugin/capability.rs +130 -0
  517. package/project/.sdk/tm/rust/feature/secrets/plugin/catalog.rs +114 -0
  518. package/project/.sdk/tm/rust/feature/secrets/plugin/config.rs +416 -0
  519. package/project/.sdk/tm/rust/feature/secrets/plugin/depend.rs +245 -0
  520. package/project/.sdk/tm/rust/feature/secrets/plugin/env.rs +200 -0
  521. package/project/.sdk/tm/rust/feature/secrets/plugin/export.rs +90 -0
  522. package/project/.sdk/tm/rust/feature/secrets/plugin/graph.rs +231 -0
  523. package/project/.sdk/tm/rust/feature/secrets/plugin/host.rs +1565 -0
  524. package/project/.sdk/tm/rust/feature/secrets/plugin/mod.rs +18 -0
  525. package/project/.sdk/tm/rust/feature/secrets/plugin/order.rs +226 -0
  526. package/project/.sdk/tm/rust/feature/secrets/plugin/point.rs +137 -0
  527. package/project/.sdk/tm/rust/feature/secrets/plugin/refs.rs +148 -0
  528. package/project/.sdk/tm/rust/feature/secrets/plugin/resolve.rs +83 -0
  529. package/project/.sdk/tm/rust/feature/secrets/plugin/types.rs +132 -0
  530. package/project/.sdk/tm/rust/feature/secrets/plugin/value.rs +433 -0
  531. package/project/.sdk/tm/rust/feature/secrets/plugin/version.rs +174 -0
  532. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/crypto.rs +146 -0
  533. package/project/.sdk/tm/rust/feature/secrets/plugins/aws/sigv4.rs +230 -0
  534. package/project/.sdk/tm/rust/feature/secrets/plugins/aws.rs +328 -0
  535. package/project/.sdk/tm/rust/feature/secrets/plugins/azuresecrets.rs +184 -0
  536. package/project/.sdk/tm/rust/feature/secrets/plugins/boru.rs +172 -0
  537. package/project/.sdk/tm/rust/feature/secrets/plugins/doppler.rs +102 -0
  538. package/project/.sdk/tm/rust/feature/secrets/plugins/gcpsecrets.rs +153 -0
  539. package/project/.sdk/tm/rust/feature/secrets/plugins/hashicorp.rs +228 -0
  540. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/http.rs +537 -0
  541. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson/json.rs +300 -0
  542. package/project/.sdk/tm/rust/feature/secrets/plugins/httpjson.rs +137 -0
  543. package/project/.sdk/tm/rust/feature/secrets/plugins/infisical.rs +148 -0
  544. package/project/.sdk/tm/rust/feature/secrets/plugins/onepassword.rs +165 -0
  545. package/project/.sdk/tm/rust/feature/secrets/plugins/secretspec.rs +150 -0
  546. package/project/.sdk/tm/rust/feature/secrets/sekreto/addr.rs +144 -0
  547. package/project/.sdk/tm/rust/feature/secrets/sekreto/mod.rs +51 -0
  548. package/project/.sdk/tm/rust/feature/secrets/sekreto/providers.rs +637 -0
  549. package/project/.sdk/tm/rust/feature/secrets/sekreto/sekreto.rs +677 -0
  550. package/project/.sdk/tm/rust/feature/secrets.rs +961 -0
  551. package/project/.sdk/tm/rust/tests/feature/secrets/main.rs +1509 -0
  552. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +2 -2
  553. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +2 -2
  554. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +2 -2
  555. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +2 -2
  556. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +2 -2
  557. package/project/.sdk/tm/scala/Makefile +8 -3
  558. package/project/.sdk/tm/scala/feature/SecretsFeature.scala +556 -0
  559. package/project/.sdk/tm/scala/feature/secrets/plugin/Capability.scala +96 -0
  560. package/project/.sdk/tm/scala/feature/secrets/plugin/Config.scala +270 -0
  561. package/project/.sdk/tm/scala/feature/secrets/plugin/Depend.scala +216 -0
  562. package/project/.sdk/tm/scala/feature/secrets/plugin/Env.scala +144 -0
  563. package/project/.sdk/tm/scala/feature/secrets/plugin/Export.scala +59 -0
  564. package/project/.sdk/tm/scala/feature/secrets/plugin/Graph.scala +149 -0
  565. package/project/.sdk/tm/scala/feature/secrets/plugin/Host.scala +1089 -0
  566. package/project/.sdk/tm/scala/feature/secrets/plugin/Json.scala +156 -0
  567. package/project/.sdk/tm/scala/feature/secrets/plugin/Order.scala +169 -0
  568. package/project/.sdk/tm/scala/feature/secrets/plugin/Plugin.scala +47 -0
  569. package/project/.sdk/tm/scala/feature/secrets/plugin/Point.scala +107 -0
  570. package/project/.sdk/tm/scala/feature/secrets/plugin/Refs.scala +131 -0
  571. package/project/.sdk/tm/scala/feature/secrets/plugin/Resolve.scala +53 -0
  572. package/project/.sdk/tm/scala/feature/secrets/plugin/Types.scala +110 -0
  573. package/project/.sdk/tm/scala/feature/secrets/plugin/Value.scala +157 -0
  574. package/project/.sdk/tm/scala/feature/secrets/plugin/Version.scala +136 -0
  575. package/project/.sdk/tm/scala/feature/secrets/sekreto/Json.scala +302 -0
  576. package/project/.sdk/tm/scala/feature/secrets/sekreto/Provider.scala +20 -0
  577. package/project/.sdk/tm/scala/feature/secrets/sekreto/Providers.scala +281 -0
  578. package/project/.sdk/tm/scala/feature/secrets/sekreto/Sekreto.scala +473 -0
  579. package/project/.sdk/tm/scala/feature/secrets/sekreto/Spec.scala +123 -0
  580. package/project/.sdk/tm/scala/feature/secrets/sekreto/Support.scala +216 -0
  581. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Aws.scala +225 -0
  582. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Azuresecrets.scala +124 -0
  583. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Boru.scala +104 -0
  584. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Doppler.scala +68 -0
  585. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Gcpsecrets.scala +97 -0
  586. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Hashicorp.scala +131 -0
  587. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Httpjson.scala +209 -0
  588. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Infisical.scala +98 -0
  589. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Onepassword.scala +90 -0
  590. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Secretspec.scala +95 -0
  591. package/project/.sdk/tm/scala/feature/secrets/sekreto/plugins/Sigv4.scala +214 -0
  592. package/project/.sdk/tm/scala/sdktest/feature/secrets/SecretsTestMain.scala +971 -0
  593. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +2 -2
  594. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +2 -2
  595. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +2 -2
  596. package/project/.sdk/tm/scala/utility/Make.scala +7 -0
  597. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/SecretsFeature.swift +669 -0
  598. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Capability.swift +98 -0
  599. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Catalog.swift +87 -0
  600. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Config.swift +298 -0
  601. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Depend.swift +209 -0
  602. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Env.swift +191 -0
  603. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Export.swift +63 -0
  604. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Graph.swift +158 -0
  605. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Host.swift +1141 -0
  606. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Json.swift +192 -0
  607. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Order.swift +183 -0
  608. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Point.swift +130 -0
  609. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Refs.swift +141 -0
  610. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Resolve.swift +59 -0
  611. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Types.swift +125 -0
  612. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Value.swift +198 -0
  613. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugin/Version.swift +139 -0
  614. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Aws.swift +271 -0
  615. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Azuresecrets.swift +173 -0
  616. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Boru.swift +139 -0
  617. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Crypto.swift +198 -0
  618. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Doppler.swift +86 -0
  619. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Gcpsecrets.swift +129 -0
  620. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Hashicorp.swift +175 -0
  621. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Httpjson.swift +310 -0
  622. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Infisical.swift +140 -0
  623. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Onepassword.swift +118 -0
  624. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Proc.swift +105 -0
  625. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Secretspec.swift +111 -0
  626. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/plugins/Sigv4.swift +297 -0
  627. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Addr.swift +120 -0
  628. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Json.swift +452 -0
  629. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Provider.swift +25 -0
  630. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Providers.swift +689 -0
  631. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/feature/secrets/sekreto/Sekreto.swift +755 -0
  632. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/MakeOptions.swift +9 -0
  633. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +30 -0
  634. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/feature/secrets/SecretsFeatureTest.swift +1030 -0
  635. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +2 -2
  636. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +2 -2
  637. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +2 -2
  638. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +1 -1
  639. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +1 -1
  640. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +1 -1
  641. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +1 -1
  642. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +1 -1
  643. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +1 -1
  644. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +1 -1
  645. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +1 -1
  646. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1 -1
  647. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +1 -1
  648. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +1 -1
  649. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +1 -1
  650. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +1 -1
  651. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +1 -1
  652. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +1 -1
  653. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +1 -1
  654. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +1 -1
  655. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +1 -1
  656. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/aws.ts +1 -1
  657. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/azuresecrets.ts +1 -1
  658. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/boru.ts +1 -1
  659. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/doppler.ts +1 -1
  660. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/gcpsecrets.ts +1 -1
  661. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/hashicorp.ts +1 -1
  662. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +1 -1
  663. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/infisical.ts +1 -1
  664. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/onepassword.ts +1 -1
  665. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +1 -1
  666. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/sigv4.ts +1 -1
  667. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +1 -1
  668. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +1 -1
  669. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +1 -1
  670. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +1 -1
  671. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +1 -1
  672. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +1 -1
  673. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +1 -1
  674. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +2 -2
  675. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +1 -1
  676. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +1 -1
  677. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
  678. package/project/.sdk/tm/zig/Makefile +15 -1
  679. package/project/.sdk/tm/zig/build.zig +23 -5
  680. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  681. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  682. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  683. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  684. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  685. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  686. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  687. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  688. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  689. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  690. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  691. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  692. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  693. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  694. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  695. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  696. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  697. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  698. package/project/.sdk/tm/zig/test/primary_utility_test.zig +144 -154
  699. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  700. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  701. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  702. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  703. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  704. package/project/sdkgen-package.json +1 -4
  705. package/src/helpers/manifest.ts +81 -1
  706. package/src/helpers/modelNames.ts +284 -0
  707. package/src/helpers/naming.ts +45 -1
  708. package/src/sdkgen.ts +11 -1
  709. package/src/testkit.ts +115 -26
  710. package/src/utility.ts +17 -7
  711. package/project/.sdk/model/target/dart.aon +0 -58
  712. package/project/.sdk/model/target/lean.aon +0 -91
  713. package/project/.sdk/model/target/seneca-provider.aon +0 -120
  714. package/project/.sdk/src/cmp/dart/Config_dart.ts +0 -176
  715. package/project/.sdk/src/cmp/dart/EntityBase_dart.ts +0 -34
  716. package/project/.sdk/src/cmp/dart/EntityOperation_dart.ts +0 -43
  717. package/project/.sdk/src/cmp/dart/EntityTypes_dart.ts +0 -207
  718. package/project/.sdk/src/cmp/dart/Entity_dart.ts +0 -87
  719. package/project/.sdk/src/cmp/dart/Gitignore_dart.ts +0 -34
  720. package/project/.sdk/src/cmp/dart/MainEntity_dart.ts +0 -33
  721. package/project/.sdk/src/cmp/dart/Main_dart.ts +0 -106
  722. package/project/.sdk/src/cmp/dart/Package_dart.ts +0 -82
  723. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +0 -177
  724. package/project/.sdk/src/cmp/dart/ReadmeExamplesTest_dart.ts +0 -238
  725. package/project/.sdk/src/cmp/dart/ReadmeExplanation_dart.ts +0 -53
  726. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +0 -152
  727. package/project/.sdk/src/cmp/dart/ReadmeInstall_dart.ts +0 -59
  728. package/project/.sdk/src/cmp/dart/ReadmeIntro_dart.ts +0 -65
  729. package/project/.sdk/src/cmp/dart/ReadmeModel_dart.ts +0 -151
  730. package/project/.sdk/src/cmp/dart/ReadmeOptions_dart.ts +0 -63
  731. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +0 -225
  732. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +0 -397
  733. package/project/.sdk/src/cmp/dart/ReadmeTopHowto_dart.ts +0 -24
  734. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +0 -106
  735. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +0 -78
  736. package/project/.sdk/src/cmp/dart/SdkError_dart.ts +0 -42
  737. package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +0 -516
  738. package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +0 -628
  739. package/project/.sdk/src/cmp/dart/Test_dart.ts +0 -116
  740. package/project/.sdk/src/cmp/dart/fragment/Config.data.fragment.dart +0 -79
  741. package/project/.sdk/src/cmp/dart/fragment/Config.fragment.dart +0 -51
  742. package/project/.sdk/src/cmp/dart/fragment/Direct.test.fragment.dart +0 -25
  743. package/project/.sdk/src/cmp/dart/fragment/Entity.fragment.dart +0 -29
  744. package/project/.sdk/src/cmp/dart/fragment/Entity.test.fragment.dart +0 -28
  745. package/project/.sdk/src/cmp/dart/fragment/EntityBase.fragment.dart +0 -302
  746. package/project/.sdk/src/cmp/dart/fragment/EntityCreateOp.fragment.dart +0 -98
  747. package/project/.sdk/src/cmp/dart/fragment/EntityListOp.fragment.dart +0 -90
  748. package/project/.sdk/src/cmp/dart/fragment/EntityLoadOp.fragment.dart +0 -102
  749. package/project/.sdk/src/cmp/dart/fragment/EntityRemoveOp.fragment.dart +0 -108
  750. package/project/.sdk/src/cmp/dart/fragment/EntityUpdateOp.fragment.dart +0 -102
  751. package/project/.sdk/src/cmp/dart/fragment/Main.fragment.dart +0 -338
  752. package/project/.sdk/src/cmp/dart/fragment/SdkError.fragment.dart +0 -26
  753. package/project/.sdk/src/cmp/dart/tsconfig.json +0 -15
  754. package/project/.sdk/src/cmp/dart/utility_dart.ts +0 -155
  755. package/project/.sdk/src/cmp/lean/Config_lean.ts +0 -93
  756. package/project/.sdk/src/cmp/lean/Entity_lean.ts +0 -9
  757. package/project/.sdk/src/cmp/lean/Gitignore_lean.ts +0 -18
  758. package/project/.sdk/src/cmp/lean/Main_lean.ts +0 -120
  759. package/project/.sdk/src/cmp/lean/Package_lean.ts +0 -93
  760. package/project/.sdk/src/cmp/lean/ReadmeEntity_lean.ts +0 -29
  761. package/project/.sdk/src/cmp/lean/ReadmeExplanation_lean.ts +0 -19
  762. package/project/.sdk/src/cmp/lean/ReadmeHowto_lean.ts +0 -25
  763. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +0 -39
  764. package/project/.sdk/src/cmp/lean/ReadmeIntro_lean.ts +0 -25
  765. package/project/.sdk/src/cmp/lean/ReadmeModel_lean.ts +0 -24
  766. package/project/.sdk/src/cmp/lean/ReadmeOptions_lean.ts +0 -22
  767. package/project/.sdk/src/cmp/lean/ReadmeQuick_lean.ts +0 -50
  768. package/project/.sdk/src/cmp/lean/ReadmeRef_lean.ts +0 -40
  769. package/project/.sdk/src/cmp/lean/ReadmeTopHowto_lean.ts +0 -16
  770. package/project/.sdk/src/cmp/lean/ReadmeTopQuick_lean.ts +0 -23
  771. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +0 -19
  772. package/project/.sdk/src/cmp/lean/Test_lean.ts +0 -261
  773. package/project/.sdk/src/cmp/lean/utility_lean.ts +0 -129
  774. package/project/.sdk/src/cmp/seneca-provider/Extras_seneca-provider.ts +0 -4080
  775. package/project/.sdk/src/cmp/seneca-provider/Gitignore_seneca-provider.ts +0 -161
  776. package/project/.sdk/src/cmp/seneca-provider/Main_seneca-provider.ts +0 -1011
  777. package/project/.sdk/tm/dart/LICENSE +0 -22
  778. package/project/.sdk/tm/dart/Makefile +0 -50
  779. package/project/.sdk/tm/dart/lib/Context.dart +0 -150
  780. package/project/.sdk/tm/dart/lib/Control.dart +0 -15
  781. package/project/.sdk/tm/dart/lib/Operation.dart +0 -31
  782. package/project/.sdk/tm/dart/lib/Point.dart +0 -51
  783. package/project/.sdk/tm/dart/lib/Response.dart +0 -32
  784. package/project/.sdk/tm/dart/lib/Result.dart +0 -39
  785. package/project/.sdk/tm/dart/lib/Spec.dart +0 -49
  786. package/project/.sdk/tm/dart/lib/feature/audit/AuditFeature.dart +0 -103
  787. package/project/.sdk/tm/dart/lib/feature/base/BaseFeature.dart +0 -76
  788. package/project/.sdk/tm/dart/lib/feature/cache/CacheFeature.dart +0 -152
  789. package/project/.sdk/tm/dart/lib/feature/clienttrack/ClienttrackFeature.dart +0 -104
  790. package/project/.sdk/tm/dart/lib/feature/cost/CostFeature.dart +0 -446
  791. package/project/.sdk/tm/dart/lib/feature/debug/DebugFeature.dart +0 -153
  792. package/project/.sdk/tm/dart/lib/feature/idempotency/IdempotencyFeature.dart +0 -92
  793. package/project/.sdk/tm/dart/lib/feature/log/LogFeature.dart +0 -85
  794. package/project/.sdk/tm/dart/lib/feature/metrics/MetricsFeature.dart +0 -103
  795. package/project/.sdk/tm/dart/lib/feature/netsim/NetsimFeature.dart +0 -186
  796. package/project/.sdk/tm/dart/lib/feature/paging/PagingFeature.dart +0 -240
  797. package/project/.sdk/tm/dart/lib/feature/proxy/ProxyFeature.dart +0 -118
  798. package/project/.sdk/tm/dart/lib/feature/ratelimit/RatelimitFeature.dart +0 -103
  799. package/project/.sdk/tm/dart/lib/feature/rbac/RbacFeature.dart +0 -121
  800. package/project/.sdk/tm/dart/lib/feature/retry/RetryFeature.dart +0 -155
  801. package/project/.sdk/tm/dart/lib/feature/streaming/StreamingFeature.dart +0 -97
  802. package/project/.sdk/tm/dart/lib/feature/telemetry/TelemetryFeature.dart +0 -136
  803. package/project/.sdk/tm/dart/lib/feature/test/TestFeature.dart +0 -328
  804. package/project/.sdk/tm/dart/lib/feature/timeout/TimeoutFeature.dart +0 -104
  805. package/project/.sdk/tm/dart/lib/utility/CleanUtility.dart +0 -12
  806. package/project/.sdk/tm/dart/lib/utility/DoneUtility.dart +0 -18
  807. package/project/.sdk/tm/dart/lib/utility/ErrUtility.dart +0 -46
  808. package/project/.sdk/tm/dart/lib/utility/FeatureAddUtility.dart +0 -35
  809. package/project/.sdk/tm/dart/lib/utility/FeatureHookUtility.dart +0 -20
  810. package/project/.sdk/tm/dart/lib/utility/FeatureInitUtility.dart +0 -9
  811. package/project/.sdk/tm/dart/lib/utility/FetcherUtility.dart +0 -104
  812. package/project/.sdk/tm/dart/lib/utility/GraphqlUtility.dart +0 -162
  813. package/project/.sdk/tm/dart/lib/utility/MakeContextUtility.dart +0 -6
  814. package/project/.sdk/tm/dart/lib/utility/MakeErrorUtility.dart +0 -71
  815. package/project/.sdk/tm/dart/lib/utility/MakeFetchDefUtility.dart +0 -42
  816. package/project/.sdk/tm/dart/lib/utility/MakeOptionsUtility.dart +0 -233
  817. package/project/.sdk/tm/dart/lib/utility/MakePointUtility.dart +0 -130
  818. package/project/.sdk/tm/dart/lib/utility/MakeRequestUtility.dart +0 -66
  819. package/project/.sdk/tm/dart/lib/utility/MakeResponseUtility.dart +0 -59
  820. package/project/.sdk/tm/dart/lib/utility/MakeResultUtility.dart +0 -49
  821. package/project/.sdk/tm/dart/lib/utility/MakeSpecUtility.dart +0 -77
  822. package/project/.sdk/tm/dart/lib/utility/MakeUrlUtility.dart +0 -51
  823. package/project/.sdk/tm/dart/lib/utility/ParamUtility.dart +0 -56
  824. package/project/.sdk/tm/dart/lib/utility/PrepareAuthUtility.dart +0 -46
  825. package/project/.sdk/tm/dart/lib/utility/PrepareBodyUtility.dart +0 -19
  826. package/project/.sdk/tm/dart/lib/utility/PrepareHeadersUtility.dart +0 -11
  827. package/project/.sdk/tm/dart/lib/utility/PrepareMethodUtility.dart +0 -30
  828. package/project/.sdk/tm/dart/lib/utility/PrepareParamsUtility.dart +0 -23
  829. package/project/.sdk/tm/dart/lib/utility/PreparePathUtility.dart +0 -9
  830. package/project/.sdk/tm/dart/lib/utility/PrepareQueryUtility.dart +0 -18
  831. package/project/.sdk/tm/dart/lib/utility/ResultBasicUtility.dart +0 -29
  832. package/project/.sdk/tm/dart/lib/utility/ResultBodyUtility.dart +0 -15
  833. package/project/.sdk/tm/dart/lib/utility/ResultHeadersUtility.dart +0 -18
  834. package/project/.sdk/tm/dart/lib/utility/StructUtility.dart +0 -127
  835. package/project/.sdk/tm/dart/lib/utility/TransformRequestUtility.dart +0 -28
  836. package/project/.sdk/tm/dart/lib/utility/TransformResponseUtility.dart +0 -44
  837. package/project/.sdk/tm/dart/lib/utility/Utility.dart +0 -239
  838. package/project/.sdk/tm/dart/lib/utility/voxgig_struct.dart +0 -2462
  839. package/project/.sdk/tm/dart/src/feature/README.md +0 -3
  840. package/project/.sdk/tm/dart/src/feature/proxy/.gitkeep +0 -0
  841. package/project/.sdk/tm/dart/src/feature/ratelimit/.gitkeep +0 -0
  842. package/project/.sdk/tm/dart/src/feature/rbac/.gitkeep +0 -0
  843. package/project/.sdk/tm/dart/src/feature/retry/.gitkeep +0 -0
  844. package/project/.sdk/tm/dart/src/feature/streaming/.gitkeep +0 -0
  845. package/project/.sdk/tm/dart/src/feature/telemetry/.gitkeep +0 -0
  846. package/project/.sdk/tm/dart/src/feature/test/.gitkeep +0 -0
  847. package/project/.sdk/tm/dart/src/feature/timeout/.gitkeep +0 -0
  848. package/project/.sdk/tm/dart/test/custom_test.dart +0 -65
  849. package/project/.sdk/tm/dart/test/exists_test.dart +0 -12
  850. package/project/.sdk/tm/dart/test/feature/harness.dart +0 -329
  851. package/project/.sdk/tm/dart/test/feature_test.dart +0 -1193
  852. package/project/.sdk/tm/dart/test/harness.dart +0 -153
  853. package/project/.sdk/tm/dart/test/netsim_test.dart +0 -48
  854. package/project/.sdk/tm/dart/test/omni.dart +0 -520
  855. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +0 -143
  856. package/project/.sdk/tm/dart/test/pipeline_test.dart +0 -608
  857. package/project/.sdk/tm/dart/test/primary_test.dart +0 -476
  858. package/project/.sdk/tm/dart/test/sdk-test-control.json +0 -19
  859. package/project/.sdk/tm/dart/test/struct_test.dart +0 -468
  860. package/project/.sdk/tm/dart/test/utility.dart +0 -198
  861. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +0 -7
  862. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +0 -653
  863. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +0 -232
  864. package/project/.sdk/tm/lean/LICENSE +0 -21
  865. package/project/.sdk/tm/lean/Makefile +0 -32
  866. package/project/.sdk/tm/lean/VERSION +0 -1
  867. package/project/.sdk/tm/lean/src/SdkFeature.lean +0 -171
  868. package/project/.sdk/tm/lean/src/SdkFeatures.lean +0 -787
  869. package/project/.sdk/tm/lean/src/SdkJson.lean +0 -134
  870. package/project/.sdk/tm/lean/src/SdkRuntime.lean +0 -374
  871. package/project/.sdk/tm/lean/src/SdkUtility.lean +0 -809
  872. package/project/.sdk/tm/lean/src/VoxgigStruct.lean +0 -2880
  873. package/project/.sdk/tm/lean/src/Vregex.lean +0 -412
  874. package/project/.sdk/tm/lean/src/feature/README.md +0 -5
  875. package/project/.sdk/tm/lean/src/feature/audit/.gitkeep +0 -0
  876. package/project/.sdk/tm/lean/src/feature/base/.gitkeep +0 -0
  877. package/project/.sdk/tm/lean/src/feature/cache/.gitkeep +0 -0
  878. package/project/.sdk/tm/lean/src/feature/clienttrack/.gitkeep +0 -0
  879. package/project/.sdk/tm/lean/src/feature/cost/.gitkeep +0 -0
  880. package/project/.sdk/tm/lean/src/feature/debug/.gitkeep +0 -0
  881. package/project/.sdk/tm/lean/src/feature/idempotency/.gitkeep +0 -0
  882. package/project/.sdk/tm/lean/src/feature/log/.gitkeep +0 -0
  883. package/project/.sdk/tm/lean/src/feature/metrics/.gitkeep +0 -0
  884. package/project/.sdk/tm/lean/src/feature/netsim/.gitkeep +0 -0
  885. package/project/.sdk/tm/lean/src/feature/paging/.gitkeep +0 -0
  886. package/project/.sdk/tm/lean/src/feature/proxy/.gitkeep +0 -0
  887. package/project/.sdk/tm/lean/src/feature/ratelimit/.gitkeep +0 -0
  888. package/project/.sdk/tm/lean/src/feature/rbac/.gitkeep +0 -0
  889. package/project/.sdk/tm/lean/src/feature/retry/.gitkeep +0 -0
  890. package/project/.sdk/tm/lean/src/feature/streaming/.gitkeep +0 -0
  891. package/project/.sdk/tm/lean/src/feature/telemetry/.gitkeep +0 -0
  892. package/project/.sdk/tm/lean/src/feature/test/.gitkeep +0 -0
  893. package/project/.sdk/tm/lean/src/feature/timeout/.gitkeep +0 -0
  894. package/project/.sdk/tm/lean/test/OmniResolver.lean +0 -358
  895. package/project/.sdk/tm/lean/test/OmniSmoke.lean +0 -174
  896. package/project/.sdk/tm/lean/test/StructCorpus.lean +0 -368
  897. package/project/.sdk/tm/lean/test/TFeature.lean +0 -281
  898. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +0 -227
  899. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +0 -997
  900. package/project/.sdk/tm/seneca-provider/CODE_OF_CONDUCT.md +0 -132
  901. package/project/.sdk/tm/seneca-provider/LICENSE +0 -21
  902. package/project/.sdk/tm/seneca-provider/Makefile +0 -15
  903. package/project/.sdk/tm/seneca-provider/src/tsconfig.json +0 -18
  904. package/project/.sdk/tm/seneca-provider/test/tsconfig.json +0 -16
  905. package/project/.sdk/tm/seneca-provider/tsfmt.json +0 -3
  906. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -465
  907. /package/project/.sdk/tm/{dart/src/feature/audit → clojure/src/feature/secrets}/.gitkeep +0 -0
  908. /package/project/.sdk/tm/{dart/src/feature/base → csharp/src/feature/secrets}/.gitkeep +0 -0
  909. /package/project/.sdk/tm/{dart/src/feature/cache → elixir/src/feature/secrets}/.gitkeep +0 -0
  910. /package/project/.sdk/tm/{dart/src/feature/clienttrack → java/src/feature/secrets}/.gitkeep +0 -0
  911. /package/project/.sdk/tm/{dart/src/feature/cost → kotlin/src/feature/secrets}/.gitkeep +0 -0
  912. /package/project/.sdk/tm/{dart/src/feature/debug → perl/src/feature/secrets}/.gitkeep +0 -0
  913. /package/project/.sdk/tm/{dart/src/feature/idempotency → php/src/feature/secrets}/.gitkeep +0 -0
  914. /package/project/.sdk/tm/{dart/src/feature/log → rb/src/feature/secrets}/.gitkeep +0 -0
  915. /package/project/.sdk/tm/{dart/src/feature/metrics → rust/src/feature/secrets}/.gitkeep +0 -0
  916. /package/project/.sdk/tm/{dart/src/feature/netsim → scala/src/feature/secrets}/.gitkeep +0 -0
  917. /package/project/.sdk/tm/{dart/src/feature/paging → swift/src/feature/secrets}/.gitkeep +0 -0
@@ -0,0 +1,1514 @@
1
+ <?php
2
+ // VENDORED: @voxgig/plugin sdk-20260908-1556-0 (php/src/Host.php)
3
+ // Source: https://github.com/voxgig/plugin @ 48392f5e2b6d1434ee9b1a4a9a11f4480aaeb46a [tag: sdk-20260908-1556-0]
4
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
5
+
6
+ /**
7
+ * The host: the lifecycle state machine (§5), extension points (§6), and
8
+ * resource capture (§8).
9
+ *
10
+ * TWO RULES SHAPE EVERY METHOD BELOW.
11
+ *
12
+ * Transitions are SEQUENTIAL (§5.2). One at a time, in call order, never
13
+ * interleaved; a transition triggered from inside a lifecycle callback is
14
+ * `plugin_reentrant`. A hard rule, because it is the only way the
15
+ * semantics can be identical in Go, in PHP and in single-threaded
16
+ * JavaScript.
17
+ *
18
+ * Reconciliation is EAGER (§18's portability budget). A transition settles
19
+ * by running the state machine to a fixed point, not by suspending on a
20
+ * promise.
21
+ *
22
+ * AND ONE RULE SHAPES THE SHAPE. A PHP array is a VALUE: reading an
23
+ * instance record out of the registry copies it, and writing to the copy
24
+ * changes nothing. Every record the host mutates is therefore an `Entry`
25
+ * OBJECT, and `Inst` holds that object rather than an array.
26
+ */
27
+
28
+ declare(strict_types=1);
29
+
30
+ namespace Voxgig\Plugin;
31
+
32
+ /**
33
+ * One instance's record. An object, not an array, so that the registry,
34
+ * the `Inst` handed to callbacks and any closure that captured it all see
35
+ * one set of values (see the file header).
36
+ */
37
+ class Entry
38
+ {
39
+ public string $ref;
40
+
41
+ /** @var array<string,mixed> */
42
+ public array $def;
43
+
44
+ public string $status = 'declared';
45
+
46
+ public int $pos = 0;
47
+
48
+ public int $seq = 0;
49
+
50
+ /** @var array<string,mixed> */
51
+ public array $options = [];
52
+
53
+ /** The mutable per-instance state a definition owns (§5.4). */
54
+ public Bag $state;
55
+
56
+ /** @var mixed */
57
+ public $order = null;
58
+
59
+ /** @var string[] */
60
+ public array $unmet = [];
61
+
62
+ /** @var array<int,callable> */
63
+ public array $scope = [];
64
+
65
+ /**
66
+ * §11.4's ALWAYS-RELUCTANT rebinding made concrete: the provider ref
67
+ * this instance's activation actually chose, per requirement name.
68
+ * Re-ranking on every question silently re-points a live consumer at
69
+ * any better newcomer, and then losing the provider it was really
70
+ * using does not restart it.
71
+ *
72
+ * @var array<string,string>
73
+ */
74
+ public array $selected = [];
75
+
76
+ /** @var array<int,array<string,mixed>> */
77
+ public array $bindings = [];
78
+
79
+ /** @var array<string,mixed> */
80
+ public array $exports = [];
81
+
82
+ /** @var array<int,array<string,mixed>> */
83
+ public array $provides = [];
84
+
85
+ public ?Host $inner = null;
86
+
87
+ public bool $barred = false;
88
+
89
+ public function __construct(string $ref, array $def)
90
+ {
91
+ $this->ref = $ref;
92
+ $this->def = $def;
93
+ $this->state = new Bag();
94
+ }
95
+ }
96
+
97
+ /**
98
+ * What a definition's callbacks see. Deliberately not the internal record:
99
+ * a plugin that could reach `status` could also write it.
100
+ */
101
+ class Inst
102
+ {
103
+ public string $ref;
104
+
105
+ public string $name;
106
+
107
+ public string $tag;
108
+
109
+ /**
110
+ * The instance's own mutable state. A `Bag` rather than an array so
111
+ * that `$i->state['count'] = 1` and `$i->state['unwound'][] = 2` reach
112
+ * the instance instead of a copy - PHP's arrays are values, and this
113
+ * is the one place a plugin author would never expect that.
114
+ */
115
+ public Bag $state;
116
+
117
+ private Host $hostref;
118
+
119
+ private Entry $entry;
120
+
121
+ public function __construct(Host $host, Entry $entry)
122
+ {
123
+ $this->hostref = $host;
124
+ $this->entry = $entry;
125
+ $this->ref = $entry->ref;
126
+ $parsed = parse_ref($entry->ref);
127
+ $this->name = $parsed['name'];
128
+ $this->tag = $parsed['tag'];
129
+ $this->state = $entry->state;
130
+ }
131
+
132
+ /**
133
+ * The resolved options, READ FRESH. `apply` and `options` replace the
134
+ * map wholesale, so a callback that cached this at `define` would hold
135
+ * the values a later document already changed.
136
+ *
137
+ * @return array<string,mixed>
138
+ */
139
+ public function options(): array
140
+ {
141
+ return $this->entry->options;
142
+ }
143
+
144
+ public function host(): Host
145
+ {
146
+ return $this->hostref;
147
+ }
148
+
149
+ /**
150
+ * Foreign resources the host did not hand out are registered
151
+ * explicitly (§8.3); host calls are recorded automatically.
152
+ *
153
+ * SYMMETRIC WITH `acquire`, and it has to be: `open` counts the
154
+ * resources CURRENTLY HELD, so an entry that is registered and then
155
+ * unwound must leave the count where it found it.
156
+ */
157
+ public function release(callable $fn): void
158
+ {
159
+ // §8.3: "`inst.release` outside `activate` is
160
+ // `plugin_release_scope`". `intransition` is true in `define` too,
161
+ // and a scope entry registered there is never unwound.
162
+ if ('activate' !== $this->hostref->phase()) {
163
+ fail_with('plugin_release_scope', 'release called outside activate');
164
+ }
165
+ $host = $this->hostref;
166
+ $done = new \stdClass();
167
+ $done->at = false;
168
+ $this->entry->scope[] = static function () use ($done, $host, $fn) {
169
+ if (!$done->at) {
170
+ $done->at = true;
171
+ $host->open_dec();
172
+ $fn();
173
+ }
174
+ };
175
+ $host->open_inc();
176
+ }
177
+
178
+ /**
179
+ * The synthetic counter the driver owns, so "what is open" is data
180
+ * rather than an assertion each port words differently.
181
+ *
182
+ * Returns its own release, so a plugin can hand one back early. The
183
+ * scope still holds the entry and unwinding it twice is a no-op -
184
+ * releasing early must not make teardown wrong.
185
+ */
186
+ public function acquire(): callable
187
+ {
188
+ // §8.1: resources are "acquired during `activate` - the scope's
189
+ // actual job". Same reason as `release` above.
190
+ if ('activate' !== $this->hostref->phase()) {
191
+ fail_with('plugin_release_scope', 'acquire called outside activate');
192
+ }
193
+ $host = $this->hostref;
194
+ $done = new \stdClass();
195
+ $done->at = false;
196
+ $rel = static function () use ($done, $host) {
197
+ if (!$done->at) {
198
+ $done->at = true;
199
+ $host->open_dec();
200
+ }
201
+ };
202
+ $this->entry->scope[] = $rel;
203
+ $host->open_inc();
204
+ return $rel;
205
+ }
206
+
207
+ /**
208
+ * Bind into a host point. Declared in `define`; the host inserts it
209
+ * only after `activate` returns successfully (§8.1), which is why a
210
+ * failing activate leaves no live binding behind.
211
+ */
212
+ public function bind(string $point, callable $fn, $band = null): void
213
+ {
214
+ // §12 has carried `plugin_bind_scope` - "binding declared outside
215
+ // `define`" - since before anything raised it. §8.1 puts binding
216
+ // DECLARATION in `define` and INSERTION at a successful activate,
217
+ // and the guard was the half nobody wrote: a binding added from
218
+ // `activate` went live without being part of the loaded
219
+ // definition, and a deactivate/activate cycle appended it again.
220
+ if ('define' !== $this->hostref->phase()) {
221
+ fail_with('plugin_bind_scope', 'bind called outside define: ' . $point,
222
+ ['ref' => $this->ref, 'point' => $point]);
223
+ }
224
+ if (!$this->hostref->haspoint($point)) {
225
+ fail_with('plugin_point_unknown', 'no such point: ' . $point,
226
+ ['point' => $point]);
227
+ }
228
+ $this->entry->bindings[] = ['ref' => $this->ref, 'point' => $point,
229
+ 'fn' => $fn, 'band' => $band ?? 0];
230
+ }
231
+
232
+ /** Published for other plugins and for the application (§11). */
233
+ public function export(string $key, $value): void
234
+ {
235
+ $this->entry->exports[$key] = $value;
236
+ }
237
+
238
+ /** What this instance can do for others (§11.1). */
239
+ public function provides(array $prov): void
240
+ {
241
+ $this->entry->provides[] = $prov;
242
+ }
243
+
244
+ /**
245
+ * Where this binding landed (§6.6) - the plugin-side counterpart to a
246
+ * host pin. THE HOST DOES NOT POLICE THIS; it just makes the fact
247
+ * available. Verification tells a plugin it was misplaced; a pin (§7)
248
+ * stops the misplacement from being expressible at all. The two are
249
+ * not substitutes.
250
+ *
251
+ * @return array<string,mixed>
252
+ */
253
+ public function position(?string $point): array
254
+ {
255
+ return $this->hostref->positionof($this->ref, $point);
256
+ }
257
+
258
+ /**
259
+ * AN INSTANCE MAY ITSELF BE A HOST (§6.5), and THE OUTER ONE OWNS THE
260
+ * INNER ONE'S LIFETIME. Registering the teardown in the instance scope
261
+ * is what makes that true rather than aspirational.
262
+ */
263
+ public function nest(?array $nestopts = null): Host
264
+ {
265
+ if (!$this->hostref->intransition()) {
266
+ fail_with('plugin_release_scope',
267
+ 'nest called outside a lifecycle callback');
268
+ }
269
+ $inner = new Host($nestopts);
270
+ $this->entry->scope[] = static function () use ($inner) {
271
+ $inner->close();
272
+ };
273
+ $this->entry->inner = $inner;
274
+ return $inner;
275
+ }
276
+ }
277
+
278
+ class Host
279
+ {
280
+ public Catalog $catalog;
281
+
282
+ /** @var array<string,mixed> */
283
+ private array $opts;
284
+
285
+ private string $dependency;
286
+
287
+ /** Set for the duration of a bulk teardown, so `held` knows this is a
288
+ * coordinated operation rather than an ad-hoc deactivation. */
289
+ private bool $coordinated = false;
290
+
291
+ /** @var string[] */
292
+ private array $reserved;
293
+
294
+ /** @var array<string,mixed> */
295
+ private array $points;
296
+
297
+ /** @var array<string,Entry> */
298
+ private array $inst = [];
299
+
300
+ /** @var string[] */
301
+ private array $log = [];
302
+
303
+ /**
304
+ * §14: the lifecycle event record. `seq` distinguishes ONE INCARNATION
305
+ * of stripe$test from the next, which is the whole reason it is not
306
+ * `pos` (§4 rule 4).
307
+ *
308
+ * @var array<int,array<string,mixed>>
309
+ */
310
+ private array $events = [];
311
+
312
+ private int $seqn = 0;
313
+
314
+ private int $open = 0;
315
+
316
+ private bool $transitioning = false;
317
+
318
+ /**
319
+ * WHICH callback is running, not merely that one is. §8.1 puts
320
+ * resource capture in `activate` and 8.3 says `release` outside
321
+ * `activate` is `plugin_release_scope` - and a flag alone cannot tell
322
+ * `activate` from `define`, so it admitted an acquire in `define`
323
+ * whose scope `unload` would never unwind.
324
+ */
325
+ private ?string $phase = null;
326
+
327
+ public function __construct(?array $options = null)
328
+ {
329
+ $this->opts = $options ?? [];
330
+ // `??` covers both an absent key and an explicit null, which is
331
+ // what a driver passing an unset command field hands over.
332
+ $this->dependency = $this->opts['dependency'] ?? 'restart';
333
+ $this->catalog = $this->opts['catalog'] ?? make_catalog();
334
+ $this->reserved = $this->opts['reserved'] ?? [];
335
+ $this->points = $this->opts['points'] ?? [];
336
+ }
337
+
338
+ public function intransition(): bool
339
+ {
340
+ return $this->transitioning;
341
+ }
342
+
343
+ public function phase(): ?string
344
+ {
345
+ return $this->phase;
346
+ }
347
+
348
+ public function haspoint(string $name): bool
349
+ {
350
+ return array_key_exists($name, $this->points);
351
+ }
352
+
353
+ public function open_inc(): void
354
+ {
355
+ $this->open++;
356
+ }
357
+
358
+ public function open_dec(): void
359
+ {
360
+ $this->open--;
361
+ }
362
+
363
+ // --- observation ------------------------------------------------
364
+
365
+ /**
366
+ * Introspection NEVER advances the state (§5.2). A status page must
367
+ * not be a way to accidentally import twenty packages.
368
+ *
369
+ * @return array<string,string>
370
+ */
371
+ public function list(): array
372
+ {
373
+ $out = [];
374
+ foreach (Util::sortedkeys($this->inst) as $r) {
375
+ $out[$r] = $this->inst[$r]->status;
376
+ }
377
+ return $out;
378
+ }
379
+
380
+ public function instance($ref): ?Entry
381
+ {
382
+ return $this->inst[canon_ref($ref)] ?? null;
383
+ }
384
+
385
+ /** @return array<int,array<string,mixed>> */
386
+ public function trace(): array
387
+ {
388
+ return $this->events;
389
+ }
390
+
391
+ /**
392
+ * @param mixed $result
393
+ * @return array<string,mixed>
394
+ */
395
+ public function observable($result = null): array
396
+ {
397
+ return ['status' => $this->list(), 'open' => $this->open,
398
+ 'log' => $this->log, 'result' => $result];
399
+ }
400
+
401
+ // --- the state machine ------------------------------------------
402
+
403
+ public function guard(): void
404
+ {
405
+ if (!$this->transitioning) {
406
+ return;
407
+ }
408
+ fail_with('plugin_reentrant',
409
+ 'transition attempted from inside a lifecycle callback');
410
+ }
411
+
412
+ private function need($ref): Entry
413
+ {
414
+ $r = canon_ref($ref);
415
+ $entry = $this->inst[$r] ?? null;
416
+ if (null === $entry) {
417
+ fail_with('plugin_not_loaded', 'no such instance: ' . $r, ['ref' => $r]);
418
+ }
419
+ return $entry;
420
+ }
421
+
422
+ private function checkreserved(string $ref): void
423
+ {
424
+ if (empty($this->reserved)) {
425
+ return;
426
+ }
427
+ if (!in_array(refname($ref), $this->reserved, true)) {
428
+ return;
429
+ }
430
+ fail_with('plugin_ref_reserved', 'ref is reserved by the host: ' . $ref,
431
+ ['ref' => $ref]);
432
+ }
433
+
434
+ private function run(Entry $entry, string $callback, string $at): void
435
+ {
436
+ $fn = $entry->def[$callback] ?? null;
437
+ $this->log[] = $entry->ref . ':' . $at;
438
+ $this->events[] = ['ref' => $entry->ref, 'event' => $at,
439
+ 'seq' => $entry->seq, 'status' => $entry->status];
440
+ if (!is_callable($fn)) {
441
+ return;
442
+ }
443
+
444
+ $this->transitioning = true;
445
+ $this->phase = $at;
446
+ try {
447
+ $fn(new Inst($this, $entry));
448
+ } catch (\Throwable $e) {
449
+ // §12: `plugin_define_failed` and its three siblings are "a
450
+ // callback raised; wraps the cause". AN ERROR THAT ALREADY
451
+ // CARRIES A CODE KEEPS IT - the code is the error's identity,
452
+ // and a plugin raising `store_unreachable` must not have it
453
+ // rewritten. Only a code-less error is wrapped.
454
+ if ('' !== codeof($e)) {
455
+ throw $e;
456
+ }
457
+ fail_with('plugin_' . $at . '_failed',
458
+ $entry->ref . ' raised in ' . $at . ': ' . $e->getMessage(),
459
+ ['ref' => $entry->ref, 'cause' => $e->getMessage()]);
460
+ } finally {
461
+ $this->transitioning = false;
462
+ $this->phase = null;
463
+ }
464
+ }
465
+
466
+ /**
467
+ * AUTO-TAGGING IS EXPLICIT (§4 rule 3). `declare('stripe', ['tag' =>
468
+ * '?'])` assigns the LOWEST UNUSED POSITIVE INTEGER tag and returns
469
+ * the assigned pair. Without `'?'`, a collision is an error.
470
+ */
471
+ private function autotag(string $name): string
472
+ {
473
+ $n = 1;
474
+ while (true) {
475
+ $cand = format_ref($name, (string)$n);
476
+ if (!array_key_exists($cand, $this->inst)) {
477
+ return $cand;
478
+ }
479
+ $n++;
480
+ }
481
+ }
482
+
483
+ /**
484
+ * @param array<string,mixed>|null $spec
485
+ */
486
+ public function declare($ref, ?array $spec = null): Entry
487
+ {
488
+ $spec = $spec ?? [];
489
+ if ('?' === ($spec['tag'] ?? null)) {
490
+ $ref = $this->autotag(refname(canon_ref($ref)));
491
+ }
492
+ $r = canon_ref($ref);
493
+ if (!Util::truthy($spec['hostowned'] ?? null)) {
494
+ $this->checkreserved($r);
495
+ }
496
+ $defname = $spec['definition'] ?? refname($r);
497
+ $definition = $this->catalog->get($defname);
498
+ if (null === $definition) {
499
+ fail_with('plugin_unknown_definition', 'not in catalog: ' . $defname,
500
+ ['name' => $defname]);
501
+ }
502
+
503
+ $existing = $this->inst[$r] ?? null;
504
+ if (null !== $existing) {
505
+ // §4 rule 1: a pair addresses at most one instance.
506
+ // Re-declaring the SAME definition is the idempotent case; a
507
+ // different one is a duplicate, not a silent overwrite
508
+ // (seneca) and not an impossibility (sdkgen).
509
+ if ($existing->def['name'] !== $definition['name']) {
510
+ fail_with('plugin_ref_duplicate', 'instance already declared: ' . $r,
511
+ ['ref' => $r]);
512
+ }
513
+ return $existing;
514
+ }
515
+
516
+ $entry = new Entry($r, $definition);
517
+ $entry->pos = null === ($spec['pos'] ?? null)
518
+ ? count($this->inst) : $spec['pos'];
519
+ $entry->seq = $this->seqn;
520
+ $entry->options = $spec['options'] ?? [];
521
+ $entry->order = $spec['order'] ?? null;
522
+ $this->seqn++;
523
+ $this->inst[$r] = $entry;
524
+ return $entry;
525
+ }
526
+
527
+ /**
528
+ * §9.1: a host that reserves a name MUST still be able to declare the
529
+ * instance it reserved - "The host declares those instances itself,
530
+ * after the user merge, and always wins."
531
+ *
532
+ * THE BOUNDARY IS BY METHOD, NOT BY CALLER, and that is a real limit:
533
+ * no language here can tell the embedding host from a plugin holding
534
+ * the same host object. What reservation protects is CONFIGURATION -
535
+ * documents, overlays, `VOXGIG_PLUGIN_*`, construction options and
536
+ * ordinary declare/load/options - and all of that still checks.
537
+ */
538
+ public function hostdeclare($ref, ?array $spec = null): Entry
539
+ {
540
+ $this->guard();
541
+ $spec = $spec ?? [];
542
+ $spec['hostowned'] = true;
543
+ return $this->declare($ref, $spec);
544
+ }
545
+
546
+ public function load($ref, ?array $spec = null): Entry
547
+ {
548
+ $this->guard();
549
+ $spec = $spec ?? [];
550
+ $entry = $this->declare($ref, $spec);
551
+ if ('declared' !== $entry->status) {
552
+ return $entry; // idempotent trivially
553
+ }
554
+
555
+ // PRESENCE, NOT TRUTH. An empty options map must CLEAR what the
556
+ // instance was declared with, and `if ($spec['options'])` is false
557
+ // for `[]` in PHP - which would keep options a document just
558
+ // removed.
559
+ if (null !== ($spec['options'] ?? null)) {
560
+ $entry->options = $spec['options'];
561
+ }
562
+ try {
563
+ $this->run($entry, 'define', 'define');
564
+ } catch (\Throwable $e) {
565
+ $entry->status = 'failed';
566
+ throw $e;
567
+ }
568
+ $entry->status = 'loaded';
569
+
570
+ // AT LOAD, and before anything runs: a cycle through
571
+ // restart-causing requirements does not settle, and the only safe
572
+ // time to report a non-terminating reconcile is before it starts
573
+ // (§11.3). `provides` is populated by `define`, which has just
574
+ // run, so this is the first moment the graph is complete.
575
+ try {
576
+ checkcycle($this->graphnodes());
577
+ } catch (\Throwable $e) {
578
+ $entry->status = 'failed';
579
+ throw $e;
580
+ }
581
+ return $entry;
582
+ }
583
+
584
+ /**
585
+ * The requirement graph as plain data, for the pure detector.
586
+ *
587
+ * @return array<int,array<string,mixed>>
588
+ */
589
+ private function graphnodes(): array
590
+ {
591
+ $out = [];
592
+ foreach (Util::sortedkeys($this->inst) as $r) {
593
+ $entry = $this->inst[$r];
594
+ $provides = [];
595
+ foreach ($entry->provides as $p) {
596
+ $provides[] = $p['name'];
597
+ }
598
+ $out[] = ['ref' => $r, 'provides' => $provides,
599
+ 'requires' => requirements($entry->options)];
600
+ }
601
+ return $out;
602
+ }
603
+
604
+ public function activate($ref): Entry
605
+ {
606
+ $this->guard();
607
+ $entry = $this->need($ref);
608
+ if ('live' === $entry->status) {
609
+ return $entry; // no-op returning success
610
+ }
611
+
612
+ if ('failed' === $entry->status) {
613
+ fail_with('plugin_bad_state', 'instance has failed: ' . $entry->ref,
614
+ ['ref' => $entry->ref]);
615
+ }
616
+ // §9.6: `active: false` bars the instance from running, and the
617
+ // bar is on the INSTANCE rather than on the apply that set it.
618
+ // `ready` reaches this through `activate`, so one guard covers
619
+ // both verbs the design names.
620
+ if ($entry->barred) {
621
+ fail_with('plugin_inactive',
622
+ 'instance is barred by active: false: ' . $entry->ref,
623
+ ['ref' => $entry->ref]);
624
+ }
625
+ if ('declared' === $entry->status) {
626
+ $this->load($entry->ref);
627
+ }
628
+
629
+ // A declared requirement that is not live means `pending`:
630
+ // activation is a STANDING REQUEST, not a one-shot event.
631
+ $unmet = $this->unmetof($entry);
632
+ if (!empty($unmet)) {
633
+ $entry->unmet = $unmet;
634
+ $entry->status = 'pending';
635
+ return $entry;
636
+ }
637
+
638
+ try {
639
+ $this->run($entry, 'activate', 'activate');
640
+ } catch (\Throwable $e) {
641
+ // Unwind whatever the partial activation captured, in reverse.
642
+ $this->unwind($entry);
643
+ $entry->status = 'failed';
644
+ throw $e;
645
+ }
646
+ // §11.4: THE SELECTION IS MADE HERE, once, and remembered. Every
647
+ // later question - the cascade, `hold`, `unmet` - reads it back
648
+ // rather than re-ranking, which is what "always-reluctant" means.
649
+ foreach (requirements($entry->options) as $req) {
650
+ $this->chosen($entry, $req, true);
651
+ }
652
+ $entry->status = 'live';
653
+ $this->reconcile();
654
+ return $entry;
655
+ }
656
+
657
+ public function deactivate($ref): Entry
658
+ {
659
+ $this->guard();
660
+ $entry = $this->need($ref);
661
+ if (in_array($entry->status, ['loaded', 'declared'], true)) {
662
+ return $entry;
663
+ }
664
+
665
+ // §5.2: `unload` is THE ONLY TRANSITION OUT OF `failed`.
666
+ if ('failed' === $entry->status) {
667
+ fail_with('plugin_bad_state', 'instance has failed: ' . $entry->ref,
668
+ ['ref' => $entry->ref]);
669
+ }
670
+
671
+ if ('pending' === $entry->status) {
672
+ // DEACTIVATING A PENDING INSTANCE RUNS NO CALLBACK (§5.2). It
673
+ // never reached activate, so it holds no scope and no live
674
+ // bindings; running the definition's deactivate there would be
675
+ // teardown without matching setup, which plugins are not
676
+ // written to survive and which could fail an instance that had
677
+ // done nothing wrong. It cannot fail.
678
+ $entry->status = 'loaded';
679
+ $entry->unmet = [];
680
+ return $entry;
681
+ }
682
+
683
+ $this->held($entry);
684
+ $this->cascade($entry, new Bag());
685
+
686
+ try {
687
+ $this->run($entry, 'deactivate', 'deactivate');
688
+ } catch (\Throwable $e) {
689
+ $this->unwind($entry);
690
+ $entry->status = 'failed';
691
+ throw $e;
692
+ }
693
+ $this->releasecheck($entry, $this->unwind($entry));
694
+ $entry->status = 'loaded';
695
+ $this->reconcile();
696
+ return $entry;
697
+ }
698
+
699
+ public function unload($ref): void
700
+ {
701
+ $this->guard();
702
+ $entry = $this->need($ref);
703
+ if (in_array($entry->status, ['live', 'pending'], true)) {
704
+ if ('live' === $entry->status) {
705
+ $this->held($entry);
706
+ $this->cascade($entry, new Bag());
707
+ try {
708
+ $this->run($entry, 'deactivate', 'deactivate');
709
+ } catch (\Throwable $e) {
710
+ // §5.2: ANY failure during a transition lands the
711
+ // instance in `failed`, with the scope STILL FULLY
712
+ // UNWOUND - and the instance STAYS REGISTERED, because
713
+ // `failed` is a state an operator has to be able to
714
+ // see.
715
+ $this->unwind($entry);
716
+ $entry->status = 'failed';
717
+ throw $e;
718
+ }
719
+ $this->releasecheck($entry, $this->unwind($entry));
720
+ }
721
+ $entry->status = 'loaded';
722
+ }
723
+ if (in_array($entry->status, ['loaded', 'failed'], true)) {
724
+ try {
725
+ $this->run($entry, 'close', 'close');
726
+ } finally {
727
+ unset($this->inst[$entry->ref]);
728
+ }
729
+ return;
730
+ }
731
+ unset($this->inst[$entry->ref]);
732
+ }
733
+
734
+ /** Runs the whole forward path in one call (§5.1). */
735
+ public function ready($ref): Entry
736
+ {
737
+ $this->guard();
738
+ $r = canon_ref($ref);
739
+ if (!array_key_exists($r, $this->inst)) {
740
+ $this->declare($r);
741
+ }
742
+ if ('declared' === $this->inst[$r]->status) {
743
+ $this->load($r);
744
+ }
745
+ return $this->activate($r);
746
+ }
747
+
748
+ /**
749
+ * Bindings go live only when activation succeeds (§8.1), so the
750
+ * teardown is the exact inverse: reverse order, always. Returns the
751
+ * errors the scope raised. §8.3: "A failing release does not stop the
752
+ * rest. Every entry runs, in reverse order, whatever any of them does;
753
+ * the errors are collected and raised as one `plugin_release_failed`."
754
+ *
755
+ * A selection belongs to ONE activation (§11.4). Leaving `live` by any
756
+ * door drops it, so the next activation ranks afresh - keeping it
757
+ * would make a consumer prefer a provider it never actually ran
758
+ * against.
759
+ *
760
+ * @return array<int,\Throwable>
761
+ */
762
+ private function unwind(Entry $entry): array
763
+ {
764
+ $entry->selected = [];
765
+ $errors = [];
766
+ foreach (array_reverse($entry->scope) as $fn) {
767
+ try {
768
+ $fn();
769
+ } catch (\Throwable $e) {
770
+ $errors[] = $e;
771
+ }
772
+ }
773
+ $entry->scope = [];
774
+ return $errors;
775
+ }
776
+
777
+ /**
778
+ * §8.3: "A failed release ends the instance in `failed`, exactly as a
779
+ * failed callback does (5.2) - a release that raised may have leaked,
780
+ * and an instance that may be holding resources it cannot account for
781
+ * must not be reactivated."
782
+ *
783
+ * @param array<int,\Throwable> $errors
784
+ */
785
+ private function releasecheck(Entry $entry, array $errors): void
786
+ {
787
+ if (empty($errors)) {
788
+ return;
789
+ }
790
+
791
+ $entry->status = 'failed';
792
+ $causes = [];
793
+ foreach ($errors as $e) {
794
+ $causes[] = $e->getMessage();
795
+ }
796
+ fail_with('plugin_release_failed',
797
+ 'release failed for ' . $entry->ref . ': '
798
+ . implode('; ', $causes),
799
+ ['ref' => $entry->ref, 'cause' => $causes]);
800
+ }
801
+
802
+ /**
803
+ * A REQUIREMENT IS ON A CAPABILITY, not on a ref (§11.1). A bare
804
+ * string is shorthand for `{name}`. A ref satisfies too, because a
805
+ * host that genuinely needs a specific instance should not have to
806
+ * invent a capability for it.
807
+ *
808
+ * @return string[]
809
+ */
810
+ private function unmetof(Entry $entry): array
811
+ {
812
+ $out = [];
813
+ foreach (requirements($entry->options) as $req) {
814
+ if (!gatesactivation($req)) {
815
+ continue;
816
+ }
817
+ if (!empty($this->providersof($req))) {
818
+ continue;
819
+ }
820
+ $out[] = $req['name'];
821
+ }
822
+ return $out;
823
+ }
824
+
825
+ /**
826
+ * §11.4's always-reluctant selection, and the ONE place a provider is
827
+ * picked for a live instance. If this instance already selected a
828
+ * provider for `req` and that provider is STILL a candidate, it keeps
829
+ * it - a better-ranked newcomer does not take it.
830
+ *
831
+ * `remember` is false for the questions asked ABOUT an instance rather
832
+ * than BY it: introspection must not create a binding.
833
+ *
834
+ * @param array<string,mixed> $req
835
+ */
836
+ private function chosen(Entry $entry, array $req, bool $remember): ?string
837
+ {
838
+ $cands = $this->providersof($req);
839
+ if (empty($cands)) {
840
+ return null;
841
+ }
842
+
843
+ $held = $entry->selected[$req['name']] ?? null;
844
+ if (null !== $held) {
845
+ foreach ($cands as $c) {
846
+ if ($c['ref'] === $held) {
847
+ return $held;
848
+ }
849
+ }
850
+ }
851
+
852
+ if ($remember) {
853
+ $entry->selected[$req['name']] = $cands[0]['ref'];
854
+ }
855
+ return $cands[0]['ref'];
856
+ }
857
+
858
+ /** @return string[] */
859
+ private function boundproviders(Entry $entry): array
860
+ {
861
+ $out = [];
862
+ foreach (requirements($entry->options) as $req) {
863
+ if (!restartsonloss($req)) {
864
+ continue;
865
+ }
866
+ $ref = $this->chosen($entry, $req, false);
867
+ if (null !== $ref && !in_array($ref, $out, true)) {
868
+ $out[] = $ref;
869
+ }
870
+ }
871
+ return $out;
872
+ }
873
+
874
+ /**
875
+ * Live instances whose selected provider is `ref` and which would be
876
+ * restarted by losing it.
877
+ *
878
+ * @return string[]
879
+ */
880
+ private function consumersof(string $ref): array
881
+ {
882
+ $out = [];
883
+ foreach (Util::sortedkeys($this->inst) as $r) {
884
+ $c = $this->inst[$r];
885
+ if ($r !== $ref && 'live' === $c->status
886
+ && in_array($ref, $this->boundproviders($c), true)) {
887
+ $out[] = $r;
888
+ }
889
+ }
890
+ return $out;
891
+ }
892
+
893
+ /**
894
+ * §11.3's `hold` asks a DIFFERENT question from the cascade, and
895
+ * reading it off `consumersof` answered the cascade's.
896
+ *
897
+ * The cascade wants the edges that RESTART - mandatory-static and
898
+ * optional-static - because a restart is what it performs. `hold` says
899
+ * "deactivating a REQUIRED instance is `plugin_dependency_held`", and
900
+ * required is cardinality: `gatesactivation`, not `restartsonloss`.
901
+ * The two sets differ in both directions and each difference was a
902
+ * real bug.
903
+ *
904
+ * A MANDATORY-DYNAMIC consumer was excluded, so the strictest policy
905
+ * let a provider go that a live consumer could not do without -
906
+ * `dynamic` promises survival of a SWAP, and under `hold` there is no
907
+ * swap, so the consumer falls back to `pending`.
908
+ *
909
+ * An OPTIONAL-STATIC consumer was included, so `hold` refused a
910
+ * deactivation on behalf of an instance that had said in writing it
911
+ * does not need the thing.
912
+ *
913
+ * @return string[]
914
+ */
915
+ private function holdersof(string $ref): array
916
+ {
917
+ $out = [];
918
+ foreach (Util::sortedkeys($this->inst) as $r) {
919
+ $c = $this->inst[$r];
920
+ if ($r === $ref || 'live' !== $c->status) {
921
+ continue;
922
+ }
923
+ foreach (requirements($c->options) as $req) {
924
+ if (!gatesactivation($req)) {
925
+ continue;
926
+ }
927
+ if ($this->chosen($c, $req, false) === $ref) {
928
+ $out[] = $r;
929
+ break;
930
+ }
931
+ }
932
+ }
933
+ return $out;
934
+ }
935
+
936
+ /**
937
+ * @param array<string,mixed> $req
938
+ * @return array<int,array<string,mixed>>
939
+ */
940
+ private function providersof(array $req): array
941
+ {
942
+ $cands = [];
943
+ $want = canon($req['name']);
944
+ foreach (Util::sortedkeys($this->inst) as $ref) {
945
+ $target = $this->inst[$ref];
946
+ if ('live' !== $target->status) {
947
+ continue;
948
+ }
949
+
950
+ // A ref satisfies directly.
951
+ if ($ref === $want) {
952
+ $cands[] = ['ref' => $ref, 'pos' => $target->pos,
953
+ 'provides' => ['name' => $req['name']]];
954
+ continue;
955
+ }
956
+ foreach ($target->provides as $prov) {
957
+ if (($prov['name'] ?? null) === $req['name']) {
958
+ $cands[] = ['ref' => $ref, 'pos' => $target->pos,
959
+ 'provides' => $prov];
960
+ }
961
+ }
962
+ }
963
+ return resolve_capability($req, $cands);
964
+ }
965
+
966
+ /**
967
+ * CONSUMERS GO DOWN FIRST, NOT AFTERWARDS (§11.3).
968
+ *
969
+ * The cascade is part of the provider's own deactivation and runs
970
+ * BEFORE the provider's `deactivate` callback and scope unwind, so a
971
+ * consumer's teardown can still call the thing it depends on -
972
+ * flushing a buffer to the store it is about to lose is exactly what a
973
+ * `deactivate` callback is for, and a cascade that fired after the
974
+ * provider was already gone would make that impossible.
975
+ *
976
+ * `$seen` is a `Bag` and not an array because the recursion has to
977
+ * share ONE set of visited refs, and a PHP array passed down would be
978
+ * a copy per frame.
979
+ */
980
+ private function cascade(Entry $provider, Bag $seen): void
981
+ {
982
+ if ($seen[$provider->ref] ?? false) {
983
+ return;
984
+ }
985
+
986
+ $seen[$provider->ref] = true;
987
+
988
+ foreach ($this->consumersof($provider->ref) as $r) {
989
+ $consumer = $this->inst[$r];
990
+ if ('live' !== $consumer->status) {
991
+ continue;
992
+ }
993
+
994
+ $this->cascade($consumer, $seen); // deepest-first
995
+ $bad = false;
996
+ try {
997
+ $this->run($consumer, 'deactivate', 'deactivate');
998
+ } catch (\Throwable $e) {
999
+ $bad = true;
1000
+ }
1001
+ $errors = $this->unwind($consumer);
1002
+ if ($bad || !empty($errors)) {
1003
+ // §5.2: ANY failure during a transition lands the instance
1004
+ // in `failed`. Marking it `pending` handed it straight
1005
+ // back to `reconcile`, which would activate it again the
1006
+ // moment the provider returned.
1007
+ $consumer->status = 'failed';
1008
+ continue;
1009
+ }
1010
+ $consumer->status = 'pending';
1011
+ $consumer->unmet = $this->unmetof($consumer);
1012
+ }
1013
+ }
1014
+
1015
+ /**
1016
+ * The hold check is A GUARD ON AD-HOC DEACTIVATION, NOT ON COORDINATED
1017
+ * TEARDOWN. In a bulk operation that is removing the holders too -
1018
+ * `close`, or an `apply` plan whose own steps deactivate them - it is
1019
+ * suspended for exactly those holders, and the teardown still runs
1020
+ * consumers before providers.
1021
+ */
1022
+ private function held(Entry $entry): void
1023
+ {
1024
+ if ('hold' !== $this->dependency) {
1025
+ return;
1026
+ }
1027
+ if ($this->coordinated) {
1028
+ return;
1029
+ }
1030
+
1031
+ $holders = $this->holdersof($entry->ref);
1032
+ if (empty($holders)) {
1033
+ return;
1034
+ }
1035
+
1036
+ fail_with('plugin_dependency_held',
1037
+ 'instance is required by live consumers: ' . $entry->ref,
1038
+ ['ref' => $entry->ref, 'holders' => $holders]);
1039
+ }
1040
+
1041
+ /**
1042
+ * EAGER reconciliation: run to a fixed point rather than scheduling.
1043
+ *
1044
+ * Two directions, and both are the reason `pending` exists. Activation
1045
+ * is a STANDING REQUEST, not a one-shot event.
1046
+ */
1047
+ private function reconcile(): void
1048
+ {
1049
+ $moved = true;
1050
+ $rounds = 0;
1051
+ while ($moved) {
1052
+ $moved = false;
1053
+ $rounds++;
1054
+ if ($rounds > 1000) {
1055
+ break;
1056
+ }
1057
+
1058
+ // Losses first, so a cascade settles in one pass rather than
1059
+ // alternating with re-activations.
1060
+ foreach (Util::sortedkeys($this->inst) as $r) {
1061
+ $entry = $this->inst[$r];
1062
+ if ('live' !== $entry->status) {
1063
+ continue;
1064
+ }
1065
+
1066
+ $lost = [];
1067
+ foreach (requirements($entry->options) as $q) {
1068
+ if (!gatesactivation($q)) {
1069
+ continue;
1070
+ }
1071
+ if (empty($this->providersof($q))) {
1072
+ $lost[] = $q;
1073
+ }
1074
+ }
1075
+ if (empty($lost)) {
1076
+ continue;
1077
+ }
1078
+ // POLICY IS PER REQUIREMENT, not per instance (§11.3). A
1079
+ // `dynamic` requirement whose provider is gone leaves the
1080
+ // consumer LIVE and notified.
1081
+ $restarts = false;
1082
+ foreach ($lost as $q) {
1083
+ if (restartsonloss($q)) {
1084
+ $restarts = true;
1085
+ break;
1086
+ }
1087
+ }
1088
+ if (!$restarts) {
1089
+ continue;
1090
+ }
1091
+
1092
+ $bad = false;
1093
+ try {
1094
+ $this->run($entry, 'deactivate', 'deactivate');
1095
+ } catch (\Throwable $e) {
1096
+ $bad = true;
1097
+ }
1098
+ $errors = $this->unwind($entry);
1099
+ if ($bad || !empty($errors)) {
1100
+ $entry->status = 'failed';
1101
+ $moved = true;
1102
+ continue;
1103
+ }
1104
+ $entry->status = 'pending';
1105
+ $entry->unmet = $this->unmetof($entry);
1106
+ $moved = true;
1107
+ }
1108
+
1109
+ foreach (Util::sortedkeys($this->inst) as $r) {
1110
+ $entry = $this->inst[$r];
1111
+ if ('pending' !== $entry->status) {
1112
+ continue;
1113
+ }
1114
+ if (!empty($this->unmetof($entry))) {
1115
+ continue;
1116
+ }
1117
+
1118
+ try {
1119
+ $this->run($entry, 'activate', 'activate');
1120
+ $entry->status = 'live';
1121
+ $entry->unmet = [];
1122
+ $moved = true;
1123
+ } catch (\Throwable $e) {
1124
+ $this->unwind($entry);
1125
+ $entry->status = 'failed';
1126
+ $moved = true;
1127
+ }
1128
+ }
1129
+ }
1130
+ }
1131
+
1132
+ // --- ordering ---------------------------------------------------
1133
+
1134
+ /** @return string[] */
1135
+ public function order(?string $point = null): array
1136
+ {
1137
+ // Sorted by declaration SEQUENCE, which is what makes the §7
1138
+ // sort's fall-through deterministic in a language whose maps have
1139
+ // no insertion order. §7 breaks ties by `pos`; two instances CAN
1140
+ // share one - `declare` defaults `pos` to the registry size, so an
1141
+ // unload followed by a fresh declare reuses a surviving instance's
1142
+ // - and past that this was falling through to hash order. `seq` is
1143
+ // that order, made explicit.
1144
+ $live = [];
1145
+ foreach ($this->inst as $r => $entry) {
1146
+ if ('live' === $entry->status) {
1147
+ $live[] = $entry;
1148
+ }
1149
+ }
1150
+ $live = Util::stable_sort_by($live, static function (Entry $e) {
1151
+ return [$e->seq];
1152
+ });
1153
+ $bindings = [];
1154
+ foreach ($live as $entry) {
1155
+ $bindings[] = ['ref' => $entry->ref, 'pos' => $entry->pos,
1156
+ 'order' => $entry->order];
1157
+ }
1158
+ $spec = null === $point ? null : ($this->points[$point] ?? null);
1159
+ $pin = is_array($spec) ? ($spec['pin'] ?? null) : null;
1160
+ return resolve_order($bindings, $pin);
1161
+ }
1162
+
1163
+ // --- points -----------------------------------------------------
1164
+
1165
+ /**
1166
+ * Live bindings on a point, in resolved order. Recomputed on any
1167
+ * change to the live set (§7) rather than cached at startup - the bug
1168
+ * a host discovers only when something deactivates in production.
1169
+ *
1170
+ * @return array<int,array<string,mixed>>
1171
+ */
1172
+ private function bound(string $point): array
1173
+ {
1174
+ $out = [];
1175
+ foreach ($this->order($point) as $ref) {
1176
+ $entry = $this->inst[$ref];
1177
+ // The band is the INSTANCE's ordering block (§7), stamped by
1178
+ // the host. A plugin passing its own would be ranking itself
1179
+ // above the order its document declared.
1180
+ $block = is_array($entry->order) ? $entry->order : [];
1181
+ $band = is_int($block['band'] ?? null) ? $block['band'] : 0;
1182
+ foreach ($entry->bindings as $b) {
1183
+ if ($b['point'] === $point) {
1184
+ $b['band'] = $band;
1185
+ $out[] = $b;
1186
+ }
1187
+ }
1188
+ }
1189
+ return $out;
1190
+ }
1191
+
1192
+ /**
1193
+ * @return array<string,mixed>
1194
+ */
1195
+ private function pointspec(string $point, string $want): array
1196
+ {
1197
+ $spec = $this->points[$point] ?? null;
1198
+ if (null === $spec) {
1199
+ fail_with('plugin_point_unknown', 'no such point: ' . $point,
1200
+ ['point' => $point]);
1201
+ }
1202
+ $kind = $spec['kind'] ?? null;
1203
+ if ('hook' === $want) {
1204
+ // A point with no declared kind is a hook, which is what makes
1205
+ // `{}` the minimal point declaration.
1206
+ if (null !== $kind && 'hook' !== $kind) {
1207
+ fail_with('plugin_point_kind', 'point is not a hook: ' . $point,
1208
+ ['point' => $point, 'kind' => $kind]);
1209
+ }
1210
+ return $spec;
1211
+ }
1212
+ if ($kind !== $want) {
1213
+ fail_with('plugin_point_kind', 'point is not a ' . $want . ': ' . $point,
1214
+ ['point' => $point, 'kind' => $kind]);
1215
+ }
1216
+ return $spec;
1217
+ }
1218
+
1219
+ /**
1220
+ * @param mixed $arg
1221
+ * @return mixed
1222
+ */
1223
+ public function emit(string $point, $arg = null)
1224
+ {
1225
+ $spec = $this->pointspec($point, 'hook');
1226
+ return point_emit($this->bound($point), $spec['mode'] ?? 'emit', $arg);
1227
+ }
1228
+
1229
+ /** @return mixed */
1230
+ public function call(string $point, ...$args)
1231
+ {
1232
+ $spec = $this->pointspec($point, 'chain');
1233
+ $base = $spec['base'] ?? static function (...$a) {
1234
+ return $a[0] ?? null;
1235
+ };
1236
+ $fn = compose($this->bound($point), $base);
1237
+ return $fn(...$args);
1238
+ }
1239
+
1240
+ /** @return mixed */
1241
+ public function provider(string $point, ...$args)
1242
+ {
1243
+ $spec = $this->pointspec($point, 'provider');
1244
+ $pick = point_provider($this->bound($point), $spec);
1245
+ if (null === $pick['winner']) {
1246
+ return $spec['default'] ?? null;
1247
+ }
1248
+ return ($pick['winner']['fn'])(...$args);
1249
+ }
1250
+
1251
+ /**
1252
+ * The losers are VISIBLE rather than silently ignored (§6.3).
1253
+ *
1254
+ * @return string[]
1255
+ */
1256
+ public function shadowed(string $point): array
1257
+ {
1258
+ $spec = $this->points[$point] ?? null;
1259
+ if (null === $spec) {
1260
+ return [];
1261
+ }
1262
+ return point_provider($this->bound($point), $spec)['shadowed'];
1263
+ }
1264
+
1265
+ /** @return mixed */
1266
+ public function exports(string $spec)
1267
+ {
1268
+ $all = [];
1269
+ foreach (Util::sortedkeys($this->inst) as $ref) {
1270
+ $entry = $this->inst[$ref];
1271
+ // Exports of a `loaded` (not live) instance are VISIBLE (§11).
1272
+ if (in_array($entry->status, ['declared', 'failed'], true)) {
1273
+ continue;
1274
+ }
1275
+ foreach (Util::sortedkeys($entry->exports) as $k) {
1276
+ $all[] = ['ref' => $ref, 'key' => $k,
1277
+ 'value' => $entry->exports[$k]];
1278
+ }
1279
+ }
1280
+ return resolve_export($spec, $all);
1281
+ }
1282
+
1283
+ /**
1284
+ * The live providers of a capability, best-first (§11.1).
1285
+ *
1286
+ * @return string[]
1287
+ */
1288
+ public function capability(string $name): array
1289
+ {
1290
+ $cands = [];
1291
+ foreach (Util::sortedkeys($this->inst) as $ref) {
1292
+ $entry = $this->inst[$ref];
1293
+ if ('live' !== $entry->status) {
1294
+ continue;
1295
+ }
1296
+ foreach ($entry->provides as $prov) {
1297
+ if (($prov['name'] ?? null) === $name) {
1298
+ $cands[] = ['ref' => $ref, 'pos' => $entry->pos,
1299
+ 'provides' => $prov];
1300
+ }
1301
+ }
1302
+ }
1303
+ $out = [];
1304
+ foreach (resolve_capability(['name' => $name], $cands) as $c) {
1305
+ $out[] = $c['ref'];
1306
+ }
1307
+ return $out;
1308
+ }
1309
+
1310
+ // --- documents --------------------------------------------------
1311
+
1312
+ /**
1313
+ * §9.6: "load what is missing, UNLOAD WHAT IS GONE, patch what
1314
+ * changed, and move activation state to match", with the stated
1315
+ * ordering - "deactivations and unloads first (reverse load order),
1316
+ * then loads, then activations in load order".
1317
+ *
1318
+ * FOUR PHASES, NOT ONE INTERLEAVED LOOP. An earlier draft walked the
1319
+ * document once, which never looked at instances the new document had
1320
+ * DROPPED - so an integration removed from a config reload stayed live
1321
+ * with its bindings and resources.
1322
+ *
1323
+ * @param array<string,mixed>|null $doc
1324
+ */
1325
+ public function apply(?array $doc, ?string $profile = null): void
1326
+ {
1327
+ $this->guard();
1328
+ $profile = $profile ?? ($this->opts['profile'] ?? null);
1329
+ $norm = normalize_config(['doc' => $doc, 'profile' => $profile,
1330
+ 'keys' => $this->opts['keys'] ?? null,
1331
+ 'reserved' => $this->reserved]);
1332
+
1333
+ $want = $norm['order'];
1334
+ $defaults = $this->opts['defaults'] ?? [];
1335
+ $optionsof = [];
1336
+ foreach ($want as $ref) {
1337
+ $optionsof[$ref] = resolve_options(
1338
+ ['ref' => $ref, 'doc' => $doc, 'profile' => $profile,
1339
+ 'shape' => $this->shapeof($ref),
1340
+ 'hostdefaults' => $defaults[refname($ref)] ?? null]
1341
+ );
1342
+ }
1343
+
1344
+ // Should this ref be LIVE after the apply? False for a ref the
1345
+ // document declares lazy or inactive AND for one it does not name
1346
+ // at all - which is what makes "unload what is gone" and "unload
1347
+ // what was toggled off" one rule rather than two.
1348
+ $wantlive = static function (string $ref) use ($norm): bool {
1349
+ $ent = $norm['instance'][$ref] ?? null;
1350
+ return null !== $ent && Util::truthy($ent['active'])
1351
+ && 'eager' === $ent['start'];
1352
+ };
1353
+
1354
+ // --- phase 1: deactivations and unloads, REVERSE load order ----
1355
+ $drop = [];
1356
+ foreach (array_keys($this->inst) as $r) {
1357
+ if ('declared' === $this->inst[$r]->status || $wantlive($r)) {
1358
+ continue;
1359
+ }
1360
+ $drop[] = $r;
1361
+ }
1362
+ // Highest `pos` first, ref-descending for a tie, so a consumer
1363
+ // declared after its provider goes down first. (Ruby spells the
1364
+ // tie as a sort-then-reverse-each-run; this is the comparator that
1365
+ // spelling adds up to.)
1366
+ $inst = $this->inst;
1367
+ usort($drop, static function ($a, $b) use ($inst) {
1368
+ if ($inst[$a]->pos !== $inst[$b]->pos) {
1369
+ return $inst[$b]->pos <=> $inst[$a]->pos;
1370
+ }
1371
+ return strcmp($b, $a);
1372
+ });
1373
+ foreach ($drop as $ref) {
1374
+ $this->unload($ref);
1375
+ }
1376
+
1377
+ // --- phase 2: declare and patch EVERYTHING, in load order ------
1378
+ foreach ($want as $ref) {
1379
+ $ent = $norm['instance'][$ref];
1380
+ $this->declare($ref, ['options' => $optionsof[$ref],
1381
+ 'order' => $ent['order'] ?? null,
1382
+ 'pos' => $ent['pos']]);
1383
+ // The bar is REASSERTED ON EVERY APPLY, in both directions - a
1384
+ // document that turns the instance back on clears it, which is
1385
+ // the whole point of a config switch.
1386
+ $this->inst[$ref]->barred = !Util::truthy($ent['active']);
1387
+ // REPLACE rather than refill. Ruby empties the options hash in
1388
+ // place because a definition's callbacks close over the map
1389
+ // they were handed at `define`; PHP's arrays are values, so no
1390
+ // callback can be holding this one - `Inst::options()` reads it
1391
+ // back through the entry every time, which is the same
1392
+ // observable behaviour by a shorter road.
1393
+ $this->refill($this->inst[$ref], $optionsof[$ref]);
1394
+ $this->inst[$ref]->order = $ent['order'] ?? null;
1395
+ $this->inst[$ref]->pos = $ent['pos'];
1396
+ }
1397
+
1398
+ // --- phase 3: loads, in load order -----------------------------
1399
+ // ONLY THE EAGER, ACTIVE ONES: "a document of twenty lazy
1400
+ // instances is twenty map entries and no executed code" (§9.6).
1401
+ foreach ($want as $ref) {
1402
+ if ($wantlive($ref)) {
1403
+ $this->load($ref);
1404
+ }
1405
+ }
1406
+
1407
+ // --- phase 4: activations, in load order -----------------------
1408
+ foreach ($want as $ref) {
1409
+ if ($wantlive($ref)) {
1410
+ $this->activate($ref);
1411
+ }
1412
+ }
1413
+ }
1414
+
1415
+ /** @return array<string,mixed>|null */
1416
+ private function shapeof(string $ref): ?array
1417
+ {
1418
+ $definition = $this->catalog->get(refname($ref));
1419
+ return null === $definition ? null : ($definition['shape'] ?? null);
1420
+ }
1421
+
1422
+ /**
1423
+ * @param array<string,mixed>|null $patch
1424
+ */
1425
+ public function options($ref, ?array $patch): void
1426
+ {
1427
+ $this->guard();
1428
+ $entry = $this->need($ref);
1429
+ $previous = $entry->options;
1430
+ $merged = $previous;
1431
+ foreach ($patch ?? [] as $k => $v) {
1432
+ $merged[$k] = $v;
1433
+ }
1434
+ $this->refill($entry, resolve_options(
1435
+ ['ref' => $entry->ref, 'shape' => $this->shapeof($entry->ref),
1436
+ 'doc' => [], 'patch' => $merged]
1437
+ ));
1438
+ if ('live' !== $entry->status) {
1439
+ return;
1440
+ }
1441
+
1442
+ $reconfigure = $entry->def['reconfigure'] ?? null;
1443
+ if (is_callable($reconfigure)) {
1444
+ $this->transitioning = true;
1445
+ try {
1446
+ $reconfigure(new Inst($this, $entry), $entry->options, $previous);
1447
+ } finally {
1448
+ $this->transitioning = false;
1449
+ }
1450
+ } else {
1451
+ // Always correct and sometimes expensive; `reconfigure` exists
1452
+ // to make the common case cheap (§9.4).
1453
+ $this->deactivate($entry->ref);
1454
+ $this->activate($entry->ref);
1455
+ }
1456
+ }
1457
+
1458
+ /**
1459
+ * @param array<string,mixed>|null $source
1460
+ */
1461
+ private function refill(Entry $entry, ?array $source): void
1462
+ {
1463
+ $entry->options = $source ?? [];
1464
+ }
1465
+
1466
+ public function close(): void
1467
+ {
1468
+ // A bulk teardown removing the holders too, so `hold` is suspended
1469
+ // for exactly those holders (§11.3) - while the consumers-first
1470
+ // cascade still runs, which is the half that matters.
1471
+ $this->coordinated = true;
1472
+ try {
1473
+ foreach (array_reverse(Util::sortedkeys($this->inst)) as $r) {
1474
+ $this->unload($r);
1475
+ }
1476
+ } finally {
1477
+ $this->coordinated = false;
1478
+ }
1479
+ }
1480
+
1481
+ /**
1482
+ * The same record §6.6 gives a plugin about itself, reachable from
1483
+ * outside for the corpus.
1484
+ *
1485
+ * @return array<string,mixed>
1486
+ */
1487
+ public function positionof($ref, ?string $point): array
1488
+ {
1489
+ $entry = $this->inst[canon($ref)] ?? null;
1490
+ if (null === $entry) {
1491
+ fail_with('plugin_not_loaded', 'no such instance: ' . $ref,
1492
+ ['ref' => $ref]);
1493
+ }
1494
+ $ranked = $this->order($point);
1495
+ $index = array_search($entry->ref, $ranked, true);
1496
+ $index = false === $index ? -1 : (int)$index;
1497
+ return ['index' => $index, 'count' => count($ranked),
1498
+ // §6.2 composes b1(b2(b3(base))) with the FIRST binding
1499
+ // OUTERMOST, so these are not index 0 and index count-1
1500
+ // the other way round.
1501
+ 'outermost' => 0 === $index,
1502
+ 'innermost' => $index === count($ranked) - 1];
1503
+ }
1504
+
1505
+ public function define(array $definition): void
1506
+ {
1507
+ $this->catalog->add($definition);
1508
+ }
1509
+ }
1510
+
1511
+ function make_host(?array $options = null): Host
1512
+ {
1513
+ return new Host($options);
1514
+ }