@voxgig/sdkgen 4.8.2 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +1 -1
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/model/target/zig.aon +9 -0
  33. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  34. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  35. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  36. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  37. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  38. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  39. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  40. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  41. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  45. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  46. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  47. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  48. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  49. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  50. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  51. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  52. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  53. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  54. package/project/.sdk/src/cmp/zig/Package_zig.ts +15 -11
  55. package/project/.sdk/src/cmp/zig/fragment/Entity.fragment.zig +3 -3
  56. package/project/.sdk/src/cmp/zig/fragment/EntityListOp.fragment.zig +3 -3
  57. package/project/.sdk/src/cmp/zig/fragment/Main.fragment.zig +3 -3
  58. package/project/.sdk/src/cmp/zig/utility_zig.ts +50 -1
  59. package/project/.sdk/tm/c/Makefile +38 -3
  60. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  61. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  62. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  63. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  64. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  65. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  66. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  67. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  68. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  69. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  70. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  71. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  72. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  73. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  74. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  75. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  76. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  77. package/project/.sdk/tm/cpp/Makefile +5 -1
  78. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  79. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  80. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  81. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  82. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  83. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  84. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  85. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  86. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  87. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  88. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  89. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  90. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  91. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  92. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  93. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  94. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  95. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  96. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  97. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  98. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  99. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  100. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  101. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  102. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  103. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  104. package/project/.sdk/tm/elixir/Makefile +11 -3
  105. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  106. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  107. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  108. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  109. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  110. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  111. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  112. package/project/.sdk/tm/go/core/context.go +32 -16
  113. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  133. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  134. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +208 -0
  135. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  136. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +150 -0
  137. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  138. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  139. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  140. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +442 -0
  141. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +714 -0
  142. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  143. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  144. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  145. package/project/.sdk/tm/go/test/omni/omni.go +902 -0
  146. package/project/.sdk/tm/go/test/omni/util.go +381 -0
  147. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  148. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  149. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  150. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  151. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  152. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  153. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  154. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  155. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  156. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  157. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  158. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  159. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  160. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  161. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  162. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  163. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  164. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  165. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  166. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  167. package/project/.sdk/tm/js/test/omni.js +251 -0
  168. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  169. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  170. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  171. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  172. package/project/.sdk/tm/js/test/vendor/omni/runner.js +628 -0
  173. package/project/.sdk/tm/js/test/vendor/omni/util.js +229 -0
  174. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  175. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  176. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  177. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  178. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  179. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  180. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  181. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  182. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  183. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  184. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  185. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  186. package/project/.sdk/tm/lean/Makefile +12 -5
  187. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  188. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  189. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  190. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  191. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  192. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  193. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  194. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  195. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  196. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  197. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  198. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  199. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  200. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  201. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  202. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  203. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  204. package/project/.sdk/tm/ocaml/Makefile +37 -12
  205. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  206. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  207. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  208. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  209. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  210. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  211. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  212. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  213. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  214. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  215. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  216. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  217. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  218. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  219. package/project/.sdk/tm/php/test/Omni.php +691 -0
  220. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  221. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  222. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  223. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  224. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  225. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  226. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  227. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +76 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +151 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +90 -0
  253. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  254. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  255. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  256. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  257. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +475 -0
  258. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  259. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  260. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  261. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  262. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  263. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  264. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  265. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  266. package/project/.sdk/tm/py/test/omni.py +415 -0
  267. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  268. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  269. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  270. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  271. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +580 -0
  272. package/project/.sdk/tm/py/test/voxgig_omni/util.py +252 -0
  273. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  274. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  275. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  276. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  277. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  278. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  279. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  280. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  281. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  282. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  283. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  284. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  285. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  286. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  287. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  288. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  289. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  290. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  291. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  292. package/project/.sdk/tm/scala/Makefile +16 -6
  293. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  294. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  295. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  296. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  297. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  298. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  299. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  300. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  301. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  302. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  303. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  304. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  305. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  306. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  307. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  308. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  309. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  310. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  311. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  312. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  313. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  326. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  327. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  328. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  329. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  330. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  345. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  346. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  347. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  348. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  349. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  350. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  351. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  352. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  353. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  354. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  355. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  356. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  357. package/project/.sdk/tm/zig/Makefile +15 -1
  358. package/project/.sdk/tm/zig/build.zig +23 -5
  359. package/project/.sdk/tm/zig/core/helpers.zig +52 -11
  360. package/project/.sdk/tm/zig/core/mem.zig +17 -1
  361. package/project/.sdk/tm/zig/core/utility.zig +23 -19
  362. package/project/.sdk/tm/zig/feature/audit.zig +2 -2
  363. package/project/.sdk/tm/zig/feature/cache.zig +2 -2
  364. package/project/.sdk/tm/zig/feature/debug.zig +5 -5
  365. package/project/.sdk/tm/zig/feature/netsim.zig +2 -2
  366. package/project/.sdk/tm/zig/feature/paging.zig +2 -2
  367. package/project/.sdk/tm/zig/feature/proxy.zig +15 -8
  368. package/project/.sdk/tm/zig/feature/streaming.zig +5 -5
  369. package/project/.sdk/tm/zig/feature/support.zig +3 -3
  370. package/project/.sdk/tm/zig/feature/telemetry.zig +5 -5
  371. package/project/.sdk/tm/zig/feature/test.zig +10 -5
  372. package/project/.sdk/tm/zig/test/fh.zig +10 -10
  373. package/project/.sdk/tm/zig/test/gotcha_test.zig +5 -5
  374. package/project/.sdk/tm/zig/test/omniresolver.zig +515 -0
  375. package/project/.sdk/tm/zig/test/omnismoke_test.zig +284 -0
  376. package/project/.sdk/tm/zig/test/pipeline_test.zig +8 -8
  377. package/project/.sdk/tm/zig/test/primary_utility_test.zig +145 -155
  378. package/project/.sdk/tm/zig/test/struct_corpus.zig +264 -187
  379. package/project/.sdk/tm/zig/test/vendor/omni/omni.zig +1314 -0
  380. package/project/.sdk/tm/zig/test/vendor/omni/regex.zig +446 -0
  381. package/project/.sdk/tm/zig/utility/voxgigstruct/regex.zig +7 -4
  382. package/project/.sdk/tm/zig/utility/voxgigstruct/struct.zig +356 -157
  383. package/project/sdkgen-package.json +1 -1
  384. package/src/action/doctor.ts +66 -2
  385. package/src/helpers/naming.ts +4 -2
  386. package/project/.sdk/tm/c/tests/runner.h +0 -274
  387. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  388. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  389. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  390. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  391. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  392. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  393. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  394. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  395. package/project/.sdk/tm/js/test/runner.js +0 -387
  396. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  397. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  398. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  399. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  400. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  401. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  402. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  403. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  404. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  405. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  406. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
  407. package/project/.sdk/tm/zig/test/struct_runner.zig +0 -464
@@ -0,0 +1,187 @@
1
+ # VENDORED: @voxgig/omni sdk-20260907-0029-0 (elixir/lib/util.ex)
2
+ # Source: https://github.com/voxgig/omni @ 274708cc2d12b21707d975543953f845f8444be0 [tag: sdk-20260907-0029-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ # Omni internal JSON utilities.
5
+ #
6
+ # Self-contained by design: the omni runner must be able to test *any*
7
+ # library, including libraries that provide these same operations.
8
+
9
+ defmodule Voxgig.Omni.Util do
10
+ @moduledoc "JSON value helpers for the omni test runner."
11
+
12
+ # Value is JSON null.
13
+ def nullmark, do: "__NULL__"
14
+ # Value is not present.
15
+ def undefmark, do: "__UNDEF__"
16
+ # Value exists (not undefined).
17
+ def existsmark, do: "__EXISTS__"
18
+
19
+ # Elixir has nil for null, so absence needs its own marker.
20
+ def absent, do: :"$omni_absent"
21
+
22
+ def isabsent(val), do: val == absent()
23
+
24
+ def ismap(val), do: is_map(val) and not is_struct(val)
25
+
26
+ def islist(val), do: is_list(val)
27
+
28
+ def isnode(val), do: ismap(val) or islist(val)
29
+
30
+ # A JSON number? Booleans are not numbers.
31
+ def isnum(val), do: is_number(val) and not is_boolean(val)
32
+
33
+ def isstr(val), do: is_binary(val)
34
+
35
+ def isnone(val), do: is_nil(val) or isabsent(val)
36
+
37
+ @doc "Deep copy a JSON value (Elixir values are immutable)."
38
+ def clone(val), do: val
39
+
40
+ @doc "Read a map entry. Returns the absence marker when missing."
41
+ def get(val, key) do
42
+ if ismap(val) do
43
+ Map.get(val, key, absent())
44
+ else
45
+ absent()
46
+ end
47
+ end
48
+
49
+ def has(val, key), do: ismap(val) and Map.has_key?(val, key)
50
+
51
+ @doc "Read a value by path. Returns the absence marker when a step is missing."
52
+ def getpath(val, path) do
53
+ Enum.reduce_while(path, val, fn part, current ->
54
+ cond do
55
+ islist(current) ->
56
+ case Integer.parse(to_string(part)) do
57
+ {index, ""} when index >= 0 ->
58
+ if index < length(current) do
59
+ {:cont, Enum.at(current, index)}
60
+ else
61
+ {:halt, absent()}
62
+ end
63
+
64
+ _ ->
65
+ {:halt, absent()}
66
+ end
67
+
68
+ ismap(current) ->
69
+ if Map.has_key?(current, to_string(part)) do
70
+ {:cont, Map.get(current, to_string(part))}
71
+ else
72
+ {:halt, absent()}
73
+ end
74
+
75
+ true ->
76
+ {:halt, absent()}
77
+ end
78
+ end)
79
+ end
80
+
81
+ @doc "Depth-first walk: children first, then the containing node."
82
+ def walk(val, apply, path \\ []) do
83
+ next =
84
+ cond do
85
+ islist(val) ->
86
+ val
87
+ |> Enum.with_index()
88
+ |> Enum.map(fn {entry, index} -> walk(entry, apply, path ++ [to_string(index)]) end)
89
+
90
+ ismap(val) ->
91
+ Map.new(val, fn {key, entry} -> {key, walk(entry, apply, path ++ [key])} end)
92
+
93
+ true ->
94
+ val
95
+ end
96
+
97
+ apply.(next, path)
98
+ end
99
+
100
+ @doc "Deep structural equality: numbers by value, bools never numbers."
101
+ def deepequal(a, b) do
102
+ cond do
103
+ is_boolean(a) or is_boolean(b) -> a === b
104
+ isnum(a) or isnum(b) -> isnum(a) and isnum(b) and a == b
105
+ isabsent(a) or isabsent(b) -> isabsent(a) and isabsent(b)
106
+ is_nil(a) or is_nil(b) -> is_nil(a) and is_nil(b)
107
+ islist(a) or islist(b) -> equal_lists(a, b)
108
+ ismap(a) or ismap(b) -> equal_maps(a, b)
109
+ true -> a === b
110
+ end
111
+ end
112
+
113
+ defp equal_lists(a, b) do
114
+ islist(a) and islist(b) and length(a) == length(b) and
115
+ Enum.all?(Enum.zip(a, b), fn {x, y} -> deepequal(x, y) end)
116
+ end
117
+
118
+ defp equal_maps(a, b) do
119
+ ismap(a) and ismap(b) and map_size(a) == map_size(b) and
120
+ Enum.all?(a, fn {key, entry} ->
121
+ Map.has_key?(b, key) and deepequal(entry, Map.get(b, key))
122
+ end)
123
+ end
124
+
125
+ @doc "Render a number the same way in every port: 5.0 prints as 5."
126
+ def numstr(val) do
127
+ asfloat = val / 1
128
+
129
+ cond do
130
+ asfloat == Float.round(asfloat) and abs(asfloat) < 9_007_199_254_740_992.0 ->
131
+ Integer.to_string(trunc(asfloat))
132
+
133
+ true ->
134
+ Float.to_string(asfloat)
135
+ end
136
+ end
137
+
138
+ @doc "Render a string as a JSON string literal."
139
+ def quote_str(val) do
140
+ escaped =
141
+ val
142
+ |> String.to_charlist()
143
+ |> Enum.map(fn ch ->
144
+ case ch do
145
+ ?" -> "\\\""
146
+ ?\\ -> "\\\\"
147
+ ?\n -> "\\n"
148
+ ?\r -> "\\r"
149
+ ?\t -> "\\t"
150
+ other when other < 0x20 -> "\\u" <> String.pad_leading(Integer.to_string(other, 16), 4, "0")
151
+ other -> <<other::utf8>>
152
+ end
153
+ end)
154
+ |> Enum.join()
155
+
156
+ "\"" <> escaped <> "\""
157
+ end
158
+
159
+ @doc "Compact JSON text with map keys sorted, identical in every port."
160
+ def jsonstr(val) do
161
+ cond do
162
+ isabsent(val) -> "undefined"
163
+ is_nil(val) -> "null"
164
+ is_boolean(val) -> if val, do: "true", else: "false"
165
+ isstr(val) -> quote_str(val)
166
+ isnum(val) -> numstr(val)
167
+ islist(val) -> "[" <> Enum.map_join(val, ",", &jsonstr/1) <> "]"
168
+ ismap(val) -> "{" <> map_body(val) <> "}"
169
+ true -> quote_str(inspect(val))
170
+ end
171
+ end
172
+
173
+ defp map_body(val) do
174
+ val
175
+ |> Map.keys()
176
+ |> Enum.sort()
177
+ |> Enum.map_join(",", fn key -> quote_str(to_string(key)) <> ":" <> jsonstr(Map.get(val, key)) end)
178
+ end
179
+
180
+ @doc "Strings verbatim, everything else as compact JSON."
181
+ def stringify(val) do
182
+ if isstr(val), do: val, else: jsonstr(val)
183
+ end
184
+
185
+ @doc "Render a path as a dotted string."
186
+ def pathify(path), do: Enum.join(path, ".")
187
+ end
@@ -3,23 +3,30 @@ package core
3
3
  import (
4
4
  "math/rand"
5
5
  "strconv"
6
+ "sync"
6
7
 
7
8
  vs "github.com/voxgig/struct"
8
9
  )
9
10
 
10
11
  type Context struct {
11
- Id string
12
- Out map[string]any
13
- Ctrl *Control
14
- Meta map[string]any
15
- Client *ProjectNameSDK
16
- Utility *Utility
17
- Op *Operation
18
- Point map[string]any
19
- Config map[string]any
20
- Entopts map[string]any
21
- Options map[string]any
22
- Opmap map[string]*Operation
12
+ Id string
13
+ Out map[string]any
14
+ Ctrl *Control
15
+ Meta map[string]any
16
+ Client *ProjectNameSDK
17
+ Utility *Utility
18
+ Op *Operation
19
+ Point map[string]any
20
+ Config map[string]any
21
+ Entopts map[string]any
22
+ Options map[string]any
23
+ Opmap map[string]*Operation
24
+ // Opmu guards Opmap. The map is a CACHE shared by inheritance across
25
+ // every context derived from the same root (see the Opmap block in
26
+ // NewContext), so two entity operations running on separate
27
+ // goroutines otherwise race resolveOp's read-then-write - the mutex
28
+ // travels WITH the map, inherited from the same base context.
29
+ Opmu *sync.Mutex
23
30
  Response *Response
24
31
  Result *Result
25
32
  Spec *Spec
@@ -156,10 +163,14 @@ func NewContext(ctxmap map[string]any, basectx *Context) *Context {
156
163
  }
157
164
  if ctx.Opmap == nil && basectx != nil {
158
165
  ctx.Opmap = basectx.Opmap
166
+ ctx.Opmu = basectx.Opmu
159
167
  }
160
168
  if ctx.Opmap == nil {
161
169
  ctx.Opmap = map[string]*Operation{}
162
170
  }
171
+ if ctx.Opmu == nil {
172
+ ctx.Opmu = &sync.Mutex{}
173
+ }
163
174
 
164
175
  // Data
165
176
  ctx.Data = ToMapAny(getCtxProp(ctxmap, "data"))
@@ -237,7 +248,10 @@ func (ctx *Context) resolveOp(opname string) *Operation {
237
248
  }
238
249
  cacheKey := entname + ":" + opname
239
250
 
240
- if op, ok := ctx.Opmap[cacheKey]; ok && op != nil {
251
+ ctx.Opmu.Lock()
252
+ cached, cachedok := ctx.Opmap[cacheKey]
253
+ ctx.Opmu.Unlock()
254
+ if op, ok := cached, cachedok; ok && op != nil {
241
255
  return op
242
256
  }
243
257
 
@@ -267,13 +281,15 @@ func (ctx *Context) resolveOp(opname string) *Operation {
267
281
  }
268
282
 
269
283
  op := NewOperation(map[string]any{
270
- "entity": entname,
271
- "name": opname,
272
- "input": input,
284
+ "entity": entname,
285
+ "name": opname,
286
+ "input": input,
273
287
  "points": targets,
274
288
  })
275
289
 
290
+ ctx.Opmu.Lock()
276
291
  ctx.Opmap[cacheKey] = op
292
+ ctx.Opmu.Unlock()
277
293
  return op
278
294
  }
279
295
 
@@ -0,0 +1,261 @@
1
+ // VENDORED: @voxgig/plugin 0.1.6 (go/plugin/capability.go)
2
+ // Source: https://github.com/voxgig/plugin @ b48ae643eb0eb56c5ebe3198da98cecdf6a7f7fc [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ /* Capabilities (§11.1).
5
+ *
6
+ * A DEPENDENCY IS ON A CAPABILITY, NOT ON A REF — because it is a
7
+ * dependency on something that can do the job, and which instance is
8
+ * doing it is exactly the configuration detail a plugin must not care
9
+ * about.
10
+ *
11
+ * But A BINDING IS TO AN INSTANCE, not to a capability, which is what
12
+ * decides behaviour when the bound provider leaves while another match
13
+ * remains. */
14
+
15
+ package plugin
16
+
17
+ import (
18
+ "sort"
19
+ "strconv"
20
+ "strings"
21
+ )
22
+
23
+ type Provided struct {
24
+ Name string `json:"name"`
25
+ Version string `json:"version,omitempty"`
26
+ Priority *int `json:"priority,omitempty"`
27
+ Attrs map[string]any `json:"attrs,omitempty"`
28
+ }
29
+
30
+ type Required struct {
31
+ Name string `json:"name"`
32
+ Range string `json:"range,omitempty"`
33
+ Match map[string]any `json:"match,omitempty"`
34
+ Optional bool `json:"optional,omitempty"`
35
+ // Policy is §11.3: `static` restarts the consumer when its SELECTED
36
+ // provider leaves, even though another still matches; `dynamic` says
37
+ // in writing that it can survive the swap. Static is the default
38
+ // because most plugins cannot, and the cost of wrongly assuming they
39
+ // can is a live instance holding a dead reference.
40
+ Policy string `json:"policy,omitempty"`
41
+ }
42
+
43
+ type Candidate struct {
44
+ Ref string `json:"ref"`
45
+ Pos int `json:"pos"`
46
+ Provides Provided `json:"provides"`
47
+ }
48
+
49
+ // ResolveCapability ranks the matching live providers and returns them
50
+ // best-first: highest `version`, then LOWEST `priority` (default 0),
51
+ // then declaration position `pos` ascending.
52
+ //
53
+ // `priority` is a field on the capability rather than §7's `order` band,
54
+ // because bands live on POINT BINDINGS: a provider may have several
55
+ // bindings with different bands, or none at all, so a rank reaching for
56
+ // one would be undefined in the common case.
57
+ //
58
+ // Without a total rank, "any provider satisfies" is true of the GRAPH
59
+ // and useless to the PLUGIN — two ports could bind different `store`
60
+ // instances, both resolve green, and behave differently, which is
61
+ // precisely the divergence a shared corpus exists to catch.
62
+ func ResolveCapability(req Required, candidates []Candidate) []Candidate {
63
+ hits := []Candidate{}
64
+ for _, c := range candidates {
65
+ if Matches(req, c.Provides) {
66
+ hits = append(hits, c)
67
+ }
68
+ }
69
+ // SortStable, because the canonical's comparator falls through to
70
+ // `pos` and JavaScript's sort is stable — a Go quicksort would
71
+ // reorder equal-`pos` candidates and diverge on nothing the corpus
72
+ // could name.
73
+ sort.SliceStable(hits, func(i, j int) bool {
74
+ a, b := hits[i], hits[j]
75
+ av, bv := a.Provides.Version, b.Provides.Version
76
+ if av != bv {
77
+ // An ABSENT version sorts last, whatever the other is: the
78
+ // canonical returns 1 for an absent `a` before it ever
79
+ // compares, so "no version" loses to every version rather
80
+ // than being read as 0.0.0.
81
+ if "" == av {
82
+ return false
83
+ }
84
+ if "" == bv {
85
+ return true
86
+ }
87
+ if c := compareversion(bv, av); 0 != c { // highest version FIRST
88
+ return 0 > c
89
+ }
90
+ }
91
+ ap, bp := priorityof(a.Provides), priorityof(b.Provides)
92
+ if ap != bp {
93
+ return ap < bp // lowest priority first
94
+ }
95
+ return a.Pos < b.Pos
96
+ })
97
+ return hits
98
+ }
99
+
100
+ func priorityof(p Provided) int {
101
+ if nil == p.Priority {
102
+ return 0
103
+ }
104
+ return *p.Priority
105
+ }
106
+
107
+ func Matches(req Required, prov Provided) bool {
108
+ if req.Name != prov.Name {
109
+ return false
110
+ }
111
+
112
+ if "" != req.Range {
113
+ if "" == prov.Version {
114
+ return false
115
+ }
116
+ if !satisfiesq(prov.Version, req.Range) {
117
+ return false
118
+ }
119
+ }
120
+
121
+ // `match` is checked against the provider's `attrs`, key by key. A
122
+ // key the provider does not carry is a miss, not a pass: a
123
+ // requirement asking for `transactional: true` must not be satisfied
124
+ // by a provider that never said.
125
+ if nil != req.Match {
126
+ attrs := prov.Attrs
127
+ if nil == attrs {
128
+ attrs = map[string]any{}
129
+ }
130
+ for k, want := range req.Match {
131
+ got, ok := attrs[k]
132
+ if !ok || !matchvalue(want, got) {
133
+ return false
134
+ }
135
+ }
136
+ }
137
+
138
+ return true
139
+ }
140
+
141
+ func compareversion(a string, b string) int {
142
+ pa, pb := parts(a), parts(b)
143
+ for i := 0; i < 3; i++ {
144
+ x, y := at(pa, i), at(pb, i)
145
+ if x != y {
146
+ if x < y {
147
+ return -1
148
+ }
149
+ return 1
150
+ }
151
+ }
152
+ return 0
153
+ }
154
+
155
+ func parts(v string) []int {
156
+ out := []int{}
157
+ for _, s := range strings.Split(v, ".") {
158
+ n, err := strconv.Atoi(s)
159
+ if nil != err {
160
+ n = 0
161
+ }
162
+ out = append(out, n)
163
+ }
164
+ return out
165
+ }
166
+
167
+ /* PARTIAL MATCH, RECURSING INTO MAPS (§11.1).
168
+ *
169
+ * §11.1 says `match` is "a partial match against `attrs`, with exactly
170
+ * the semantics voxgig/struct and the omni corpus already define for
171
+ * `match` — every leaf in the requirement must be present and equal in
172
+ * the capability, keys not mentioned are not checked."
173
+ *
174
+ * THE CANONICAL DID NOT IMPLEMENT THAT. It compared `attrs[k] !==
175
+ * req.match[k]`, which for any compound value is JavaScript reference
176
+ * identity: a requirement and a capability are declared in different
177
+ * places and are never the same object, so `match: {limits: {max: 5}}`
178
+ * could not be satisfied by ANY provider, including one declaring
179
+ * exactly that. The flat reading is invisible while every corpus entry
180
+ * is scalar, which is why P4 found it and P2 did not.
181
+ *
182
+ * Fixed in the canonical (AGENTS.md: change canonical first), pinned by
183
+ * `capability/nested`, and ported here. */
184
+ func matchvalue(want any, got any) bool {
185
+ switch w := want.(type) {
186
+
187
+ case map[string]any:
188
+ g, ok := got.(map[string]any)
189
+ if !ok {
190
+ return false
191
+ }
192
+ for k, wv := range w {
193
+ gv, present := g[k]
194
+ if !present || !matchvalue(wv, gv) {
195
+ return false
196
+ }
197
+ }
198
+ return true
199
+
200
+ case []any:
201
+ g, ok := got.([]any)
202
+ if !ok || len(g) != len(w) {
203
+ return false
204
+ }
205
+ for i := range w {
206
+ if !matchvalue(w[i], g[i]) {
207
+ return false
208
+ }
209
+ }
210
+ return true
211
+
212
+ default:
213
+ // GO HAS MANY NUMBER TYPES AND THE MODEL HAS ONE. Corpus JSON
214
+ // decodes every number as float64, but a Go host declaring
215
+ // `Attrs: map[string]any{"max": 5}` writes an int, and `any(5)
216
+ // == any(5.0)` is false — so an attribute that matched in every
217
+ // other port silently missed here. Canonical is type-strict
218
+ // between KINDS (`true` never matches `1`), not between Go's
219
+ // spellings of one kind.
220
+ if wn, wok := numval(want); wok {
221
+ if gn, gok := numval(got); gok {
222
+ return wn == gn
223
+ }
224
+ return false
225
+ }
226
+ return want == got
227
+ }
228
+ }
229
+
230
+ // numval reports a value's numeric value, and whether it had one. `bool`
231
+ // is deliberately absent: Go does not make it numeric and neither does
232
+ // the model.
233
+ func numval(v any) (float64, bool) {
234
+ switch n := v.(type) {
235
+ case int:
236
+ return float64(n), true
237
+ case int8:
238
+ return float64(n), true
239
+ case int16:
240
+ return float64(n), true
241
+ case int32:
242
+ return float64(n), true
243
+ case int64:
244
+ return float64(n), true
245
+ case uint:
246
+ return float64(n), true
247
+ case uint8:
248
+ return float64(n), true
249
+ case uint16:
250
+ return float64(n), true
251
+ case uint32:
252
+ return float64(n), true
253
+ case uint64:
254
+ return float64(n), true
255
+ case float32:
256
+ return float64(n), true
257
+ case float64:
258
+ return n, true
259
+ }
260
+ return 0, false
261
+ }
@@ -0,0 +1,78 @@
1
+ // VENDORED: @voxgig/plugin 0.1.6 (go/plugin/catalog.go)
2
+ // Source: https://github.com/voxgig/plugin @ b48ae643eb0eb56c5ebe3198da98cecdf6a7f7fc [tag: sdk-20260907-0029-0]
3
+ // License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ /* The definition catalog (§10.1).
5
+ *
6
+ * A definition is registered once and may back many instances. Option
7
+ * shapes are validated AT REGISTRATION, not when a document happens to
8
+ * exercise a key — so a malformed shape fails once, and in the same
9
+ * place everywhere (§9.4). */
10
+
11
+ package plugin
12
+
13
+ // Definition is what a plugin author writes.
14
+ //
15
+ // GO RETURNS ERRORS FROM LIFECYCLE CALLBACKS (§18, P4). The canonical
16
+ // throws; a Go callback returns `error`, and the host treats a non-nil
17
+ // return exactly as the canonical treats a throw — including
18
+ // `plugin_activate_failed`'s unwind and the `failed` status.
19
+ type Definition struct {
20
+ Name string
21
+ Shape any
22
+ Define func(inst *Inst) error
23
+ Activate func(inst *Inst) error
24
+ Deactivate func(inst *Inst) error
25
+ Close func(inst *Inst) error
26
+ Reconfigure func(inst *Inst, options map[string]any, previous map[string]any) error
27
+ }
28
+
29
+ type Catalog struct {
30
+ defs map[string]Definition
31
+ }
32
+
33
+ // MakeCatalog builds a catalog, adding each definition in turn.
34
+ //
35
+ // GO IS TIER S (§10.3): "package `init()` registration ... or an
36
+ // explicit list handed to makeHost", and both spellings land here. A Go
37
+ // developer's experience is "add the import, add one line to the config"
38
+ // rather than "write a factory".
39
+ func MakeCatalog(defs ...Definition) (*Catalog, error) {
40
+ c := &Catalog{defs: map[string]Definition{}}
41
+ for _, d := range defs {
42
+ if err := c.Add(d); nil != err {
43
+ return nil, err
44
+ }
45
+ }
46
+ return c, nil
47
+ }
48
+
49
+ func (c *Catalog) Add(def Definition) error {
50
+ if !CheckName(def.Name) {
51
+ return Fail("plugin_definition_name", "invalid definition name: "+def.Name, nil)
52
+ }
53
+ // Validate the shape HERE. Deferring it to resolution time means a
54
+ // malformed shape surfaces at a different moment in every host that
55
+ // loads it, which is the divergence the stated domain exists to
56
+ // prevent.
57
+ if nil != def.Shape {
58
+ if err := CheckShape(def.Shape); nil != err {
59
+ return err
60
+ }
61
+ }
62
+ c.defs[def.Name] = def
63
+ return nil
64
+ }
65
+
66
+ func (c *Catalog) Get(name string) (Definition, bool) {
67
+ d, ok := c.defs[name]
68
+ return d, ok
69
+ }
70
+
71
+ func (c *Catalog) Has(name string) bool {
72
+ _, ok := c.defs[name]
73
+ return ok
74
+ }
75
+
76
+ func (c *Catalog) Names() []string {
77
+ return sortedkeys(c.defs)
78
+ }