every-plugin 2.10.1 → 3.0.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/bin/every-plugin-serve.mjs +12 -0
  2. package/bin/every-plugin.mjs +59 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -2
  4. package/dist/build/artifact-names.cjs +119 -0
  5. package/dist/build/artifact-names.cjs.map +1 -0
  6. package/dist/build/artifact-names.d.cts +68 -0
  7. package/dist/build/artifact-names.d.cts.map +1 -0
  8. package/dist/build/artifact-names.d.mts +68 -0
  9. package/dist/build/artifact-names.d.mts.map +1 -0
  10. package/dist/build/artifact-names.mjs +102 -0
  11. package/dist/build/artifact-names.mjs.map +1 -0
  12. package/dist/build/contract-types.cjs +89 -0
  13. package/dist/build/contract-types.cjs.map +1 -0
  14. package/dist/build/contract-types.mjs +81 -0
  15. package/dist/build/contract-types.mjs.map +1 -0
  16. package/dist/build/rspack/build-report-plugin.cjs +37 -0
  17. package/dist/build/rspack/build-report-plugin.cjs.map +1 -0
  18. package/dist/build/rspack/build-report-plugin.d.cts +18 -0
  19. package/dist/build/rspack/build-report-plugin.d.cts.map +1 -0
  20. package/dist/build/rspack/build-report-plugin.d.mts +18 -0
  21. package/dist/build/rspack/build-report-plugin.d.mts.map +1 -0
  22. package/dist/build/rspack/build-report-plugin.mjs +37 -0
  23. package/dist/build/rspack/build-report-plugin.mjs.map +1 -0
  24. package/dist/build/rspack/chunk-completeness-plugin.cjs +47 -0
  25. package/dist/build/rspack/chunk-completeness-plugin.cjs.map +1 -0
  26. package/dist/build/rspack/chunk-completeness-plugin.mjs +47 -0
  27. package/dist/build/rspack/chunk-completeness-plugin.mjs.map +1 -0
  28. package/dist/build/rspack/compose.cjs +69 -0
  29. package/dist/build/rspack/compose.cjs.map +1 -0
  30. package/dist/build/rspack/compose.d.cts +20 -0
  31. package/dist/build/rspack/compose.d.cts.map +1 -0
  32. package/dist/build/rspack/compose.d.mts +20 -0
  33. package/dist/build/rspack/compose.d.mts.map +1 -0
  34. package/dist/build/rspack/compose.mjs +65 -0
  35. package/dist/build/rspack/compose.mjs.map +1 -0
  36. package/dist/build/rspack/fix-mf-data-uri-plugin.cjs +11 -11
  37. package/dist/build/rspack/fix-mf-data-uri-plugin.cjs.map +1 -1
  38. package/dist/build/rspack/fix-mf-data-uri-plugin.d.cts +2 -0
  39. package/dist/build/rspack/fix-mf-data-uri-plugin.d.cts.map +1 -1
  40. package/dist/build/rspack/fix-mf-data-uri-plugin.d.mts +2 -0
  41. package/dist/build/rspack/fix-mf-data-uri-plugin.d.mts.map +1 -1
  42. package/dist/build/rspack/fix-mf-data-uri-plugin.mjs +11 -10
  43. package/dist/build/rspack/fix-mf-data-uri-plugin.mjs.map +1 -1
  44. package/dist/build/rspack/generated-config.cjs +35 -0
  45. package/dist/build/rspack/generated-config.cjs.map +1 -0
  46. package/dist/build/rspack/generated-config.mjs +32 -0
  47. package/dist/build/rspack/generated-config.mjs.map +1 -0
  48. package/dist/build/rspack/index.cjs +8 -5
  49. package/dist/build/rspack/index.d.cts +5 -3
  50. package/dist/build/rspack/index.d.mts +5 -3
  51. package/dist/build/rspack/index.mjs +5 -3
  52. package/dist/build/rspack/module-federation.cjs +2 -2
  53. package/dist/build/rspack/module-federation.cjs.map +1 -1
  54. package/dist/build/rspack/module-federation.mjs +1 -1
  55. package/dist/build/rspack/module-federation.mjs.map +1 -1
  56. package/dist/build/rspack/plugin.cjs +44 -69
  57. package/dist/build/rspack/plugin.cjs.map +1 -1
  58. package/dist/build/rspack/plugin.d.cts +4 -13
  59. package/dist/build/rspack/plugin.d.cts.map +1 -1
  60. package/dist/build/rspack/plugin.d.mts +4 -13
  61. package/dist/build/rspack/plugin.d.mts.map +1 -1
  62. package/dist/build/rspack/plugin.mjs +44 -69
  63. package/dist/build/rspack/plugin.mjs.map +1 -1
  64. package/dist/build/rspack/utils.cjs +7 -5
  65. package/dist/build/rspack/utils.cjs.map +1 -1
  66. package/dist/build/rspack/utils.mjs +7 -6
  67. package/dist/build/rspack/utils.mjs.map +1 -1
  68. package/dist/build/ui/factory.cjs +88 -0
  69. package/dist/build/ui/factory.cjs.map +1 -0
  70. package/dist/build/ui/factory.d.cts +11 -0
  71. package/dist/build/ui/factory.d.cts.map +1 -0
  72. package/dist/build/ui/factory.d.mts +11 -0
  73. package/dist/build/ui/factory.d.mts.map +1 -0
  74. package/dist/build/ui/factory.mjs +80 -0
  75. package/dist/build/ui/factory.mjs.map +1 -0
  76. package/dist/build/ui/generated-config.cjs +118 -0
  77. package/dist/build/ui/generated-config.cjs.map +1 -0
  78. package/dist/build/ui/generated-config.d.cts +33 -0
  79. package/dist/build/ui/generated-config.d.cts.map +1 -0
  80. package/dist/build/ui/generated-config.d.mts +33 -0
  81. package/dist/build/ui/generated-config.d.mts.map +1 -0
  82. package/dist/build/ui/generated-config.mjs +111 -0
  83. package/dist/build/ui/generated-config.mjs.map +1 -0
  84. package/dist/build/ui/hash-artifacts-plugin.cjs +61 -0
  85. package/dist/build/ui/hash-artifacts-plugin.cjs.map +1 -0
  86. package/dist/build/ui/hash-artifacts-plugin.d.cts +20 -0
  87. package/dist/build/ui/hash-artifacts-plugin.d.cts.map +1 -0
  88. package/dist/build/ui/hash-artifacts-plugin.d.mts +20 -0
  89. package/dist/build/ui/hash-artifacts-plugin.d.mts.map +1 -0
  90. package/dist/build/ui/hash-artifacts-plugin.mjs +58 -0
  91. package/dist/build/ui/hash-artifacts-plugin.mjs.map +1 -0
  92. package/dist/build/ui/index.cjs +90 -0
  93. package/dist/build/ui/index.cjs.map +1 -0
  94. package/dist/build/ui/index.d.cts +29 -0
  95. package/dist/build/ui/index.d.cts.map +1 -0
  96. package/dist/build/ui/index.d.mts +29 -0
  97. package/dist/build/ui/index.d.mts.map +1 -0
  98. package/dist/build/ui/index.mjs +68 -0
  99. package/dist/build/ui/index.mjs.map +1 -0
  100. package/dist/build/ui/manifest-plugin.cjs +37 -0
  101. package/dist/build/ui/manifest-plugin.cjs.map +1 -0
  102. package/dist/build/ui/manifest-plugin.d.cts +19 -0
  103. package/dist/build/ui/manifest-plugin.d.cts.map +1 -0
  104. package/dist/build/ui/manifest-plugin.d.mts +19 -0
  105. package/dist/build/ui/manifest-plugin.d.mts.map +1 -0
  106. package/dist/build/ui/manifest-plugin.mjs +37 -0
  107. package/dist/build/ui/manifest-plugin.mjs.map +1 -0
  108. package/dist/build/ui/rsbuild-config.cjs +203 -0
  109. package/dist/build/ui/rsbuild-config.cjs.map +1 -0
  110. package/dist/build/ui/rsbuild-config.d.cts +45 -0
  111. package/dist/build/ui/rsbuild-config.d.cts.map +1 -0
  112. package/dist/build/ui/rsbuild-config.d.mts +45 -0
  113. package/dist/build/ui/rsbuild-config.d.mts.map +1 -0
  114. package/dist/build/ui/rsbuild-config.mjs +200 -0
  115. package/dist/build/ui/rsbuild-config.mjs.map +1 -0
  116. package/dist/build/ui/stubs.cjs +107 -0
  117. package/dist/build/ui/stubs.cjs.map +1 -0
  118. package/dist/build/ui/stubs.d.cts +25 -0
  119. package/dist/build/ui/stubs.d.cts.map +1 -0
  120. package/dist/build/ui/stubs.d.mts +25 -0
  121. package/dist/build/ui/stubs.d.mts.map +1 -0
  122. package/dist/build/ui/stubs.mjs +106 -0
  123. package/dist/build/ui/stubs.mjs.map +1 -0
  124. package/dist/cli.cjs +83 -0
  125. package/dist/cli.cjs.map +1 -0
  126. package/dist/cli.d.cts +6 -0
  127. package/dist/cli.d.cts.map +1 -0
  128. package/dist/cli.d.mts +6 -0
  129. package/dist/cli.d.mts.map +1 -0
  130. package/dist/cli.mjs +82 -0
  131. package/dist/cli.mjs.map +1 -0
  132. package/dist/dev/serve.cjs +390 -0
  133. package/dist/dev/serve.cjs.map +1 -0
  134. package/dist/dev/serve.d.cts +23 -0
  135. package/dist/dev/serve.d.cts.map +1 -0
  136. package/dist/dev/serve.d.mts +23 -0
  137. package/dist/dev/serve.d.mts.map +1 -0
  138. package/dist/dev/serve.mjs +384 -0
  139. package/dist/dev/serve.mjs.map +1 -0
  140. package/dist/dev/watch-kill.cjs +39 -0
  141. package/dist/dev/watch-kill.cjs.map +1 -0
  142. package/dist/dev/watch-kill.mjs +38 -0
  143. package/dist/dev/watch-kill.mjs.map +1 -0
  144. package/dist/effect-helpers.cjs +23 -0
  145. package/dist/effect-helpers.cjs.map +1 -0
  146. package/dist/effect-helpers.d.cts +20 -0
  147. package/dist/effect-helpers.d.cts.map +1 -0
  148. package/dist/effect-helpers.d.mts +20 -0
  149. package/dist/effect-helpers.d.mts.map +1 -0
  150. package/dist/effect-helpers.mjs +22 -0
  151. package/dist/effect-helpers.mjs.map +1 -0
  152. package/dist/errors.cjs +50 -69
  153. package/dist/errors.cjs.map +1 -1
  154. package/dist/errors.d.cts +13 -96
  155. package/dist/errors.d.cts.map +1 -1
  156. package/dist/errors.d.mts +13 -96
  157. package/dist/errors.d.mts.map +1 -1
  158. package/dist/errors.mjs +16 -34
  159. package/dist/errors.mjs.map +1 -1
  160. package/dist/identity.cjs +19 -0
  161. package/dist/identity.cjs.map +1 -0
  162. package/dist/identity.d.cts +33 -0
  163. package/dist/identity.d.cts.map +1 -0
  164. package/dist/identity.d.mts +33 -0
  165. package/dist/identity.d.mts.map +1 -0
  166. package/dist/identity.mjs +16 -0
  167. package/dist/identity.mjs.map +1 -0
  168. package/dist/index.cjs +9 -5
  169. package/dist/index.d.cts +8 -6
  170. package/dist/index.d.mts +8 -6
  171. package/dist/index.mjs +6 -4
  172. package/dist/plugin.cjs +13 -26
  173. package/dist/plugin.cjs.map +1 -1
  174. package/dist/plugin.d.cts +57 -24
  175. package/dist/plugin.d.cts.map +1 -1
  176. package/dist/plugin.d.mts +58 -25
  177. package/dist/plugin.d.mts.map +1 -1
  178. package/dist/plugin.mjs +16 -29
  179. package/dist/plugin.mjs.map +1 -1
  180. package/dist/remote-entry.cjs +103 -0
  181. package/dist/remote-entry.cjs.map +1 -0
  182. package/dist/remote-entry.d.cts +53 -0
  183. package/dist/remote-entry.d.cts.map +1 -0
  184. package/dist/remote-entry.d.mts +53 -0
  185. package/dist/remote-entry.d.mts.map +1 -0
  186. package/dist/remote-entry.mjs +98 -0
  187. package/dist/remote-entry.mjs.map +1 -0
  188. package/dist/runtime/errors.cjs +159 -33
  189. package/dist/runtime/errors.cjs.map +1 -1
  190. package/dist/runtime/errors.d.cts +64 -7
  191. package/dist/runtime/errors.d.cts.map +1 -1
  192. package/dist/runtime/errors.d.mts +64 -7
  193. package/dist/runtime/errors.d.mts.map +1 -1
  194. package/dist/runtime/errors.mjs +154 -30
  195. package/dist/runtime/errors.mjs.map +1 -1
  196. package/dist/runtime/index.cjs +95 -23
  197. package/dist/runtime/index.cjs.map +1 -1
  198. package/dist/runtime/index.d.cts +16 -0
  199. package/dist/runtime/index.d.cts.map +1 -1
  200. package/dist/runtime/index.d.mts +16 -0
  201. package/dist/runtime/index.d.mts.map +1 -1
  202. package/dist/runtime/index.mjs +98 -26
  203. package/dist/runtime/index.mjs.map +1 -1
  204. package/dist/runtime/mf-config.cjs +3 -78
  205. package/dist/runtime/mf-config.cjs.map +1 -1
  206. package/dist/runtime/mf-config.d.cts +3 -49
  207. package/dist/runtime/mf-config.d.cts.map +1 -1
  208. package/dist/runtime/mf-config.d.mts +3 -49
  209. package/dist/runtime/mf-config.d.mts.map +1 -1
  210. package/dist/runtime/mf-config.mjs +5 -78
  211. package/dist/runtime/mf-config.mjs.map +1 -1
  212. package/dist/runtime/services/module-federation.service.cjs +57 -12
  213. package/dist/runtime/services/module-federation.service.cjs.map +1 -1
  214. package/dist/runtime/services/module-federation.service.d.cts +4 -13
  215. package/dist/runtime/services/module-federation.service.d.mts +4 -13
  216. package/dist/runtime/services/module-federation.service.mjs +57 -14
  217. package/dist/runtime/services/module-federation.service.mjs.map +1 -1
  218. package/dist/runtime/services/normalize.cjs +2 -22
  219. package/dist/runtime/services/normalize.d.cts +2 -21
  220. package/dist/runtime/services/normalize.d.mts +2 -21
  221. package/dist/runtime/services/normalize.mjs +2 -21
  222. package/dist/runtime/services/plugin-lifecycle.service.cjs +9 -11
  223. package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -1
  224. package/dist/runtime/services/plugin-lifecycle.service.d.cts +3 -16
  225. package/dist/runtime/services/plugin-lifecycle.service.d.mts +3 -16
  226. package/dist/runtime/services/plugin-lifecycle.service.mjs +10 -13
  227. package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -1
  228. package/dist/runtime/services/plugin-loader.service.cjs +56 -30
  229. package/dist/runtime/services/plugin-loader.service.cjs.map +1 -1
  230. package/dist/runtime/services/plugin-loader.service.d.cts +6 -53
  231. package/dist/runtime/services/plugin-loader.service.d.mts +6 -53
  232. package/dist/runtime/services/plugin-loader.service.mjs +55 -31
  233. package/dist/runtime/services/plugin-loader.service.mjs.map +1 -1
  234. package/dist/runtime/services/plugin.service.cjs +10 -12
  235. package/dist/runtime/services/plugin.service.cjs.map +1 -1
  236. package/dist/runtime/services/plugin.service.d.cts +14 -36
  237. package/dist/runtime/services/plugin.service.d.cts.map +1 -1
  238. package/dist/runtime/services/plugin.service.d.mts +14 -36
  239. package/dist/runtime/services/plugin.service.d.mts.map +1 -1
  240. package/dist/runtime/services/plugin.service.mjs +14 -18
  241. package/dist/runtime/services/plugin.service.mjs.map +1 -1
  242. package/dist/runtime/services/secrets.service.cjs +12 -12
  243. package/dist/runtime/services/secrets.service.cjs.map +1 -1
  244. package/dist/runtime/services/secrets.service.d.cts +3 -15
  245. package/dist/runtime/services/secrets.service.d.mts +3 -15
  246. package/dist/runtime/services/secrets.service.mjs +12 -13
  247. package/dist/runtime/services/secrets.service.mjs.map +1 -1
  248. package/dist/runtime/services/shared-identity.cjs +40 -0
  249. package/dist/runtime/services/shared-identity.cjs.map +1 -0
  250. package/dist/runtime/services/shared-identity.mjs +38 -0
  251. package/dist/runtime/services/shared-identity.mjs.map +1 -0
  252. package/dist/runtime/validation.cjs +2 -2
  253. package/dist/runtime/validation.cjs.map +1 -1
  254. package/dist/runtime/validation.mjs +2 -2
  255. package/dist/runtime/validation.mjs.map +1 -1
  256. package/dist/shared-deps-spec.cjs +384 -0
  257. package/dist/shared-deps-spec.cjs.map +1 -0
  258. package/dist/shared-deps-spec.d.cts +182 -0
  259. package/dist/shared-deps-spec.d.cts.map +1 -0
  260. package/dist/shared-deps-spec.d.mts +182 -0
  261. package/dist/shared-deps-spec.d.mts.map +1 -0
  262. package/dist/shared-deps-spec.mjs +368 -0
  263. package/dist/shared-deps-spec.mjs.map +1 -0
  264. package/dist/types.d.cts +25 -41
  265. package/dist/types.d.cts.map +1 -1
  266. package/dist/types.d.mts +25 -41
  267. package/dist/types.d.mts.map +1 -1
  268. package/dist/ui/manifest/construct.cjs +268 -0
  269. package/dist/ui/manifest/construct.cjs.map +1 -0
  270. package/dist/ui/manifest/construct.d.cts +48 -0
  271. package/dist/ui/manifest/construct.d.cts.map +1 -0
  272. package/dist/ui/manifest/construct.d.mts +48 -0
  273. package/dist/ui/manifest/construct.d.mts.map +1 -0
  274. package/dist/ui/manifest/construct.mjs +268 -0
  275. package/dist/ui/manifest/construct.mjs.map +1 -0
  276. package/dist/ui/manifest/contract.cjs +34 -0
  277. package/dist/ui/manifest/contract.cjs.map +1 -0
  278. package/dist/ui/manifest/contract.d.cts +26 -0
  279. package/dist/ui/manifest/contract.d.cts.map +1 -0
  280. package/dist/ui/manifest/contract.d.mts +26 -0
  281. package/dist/ui/manifest/contract.d.mts.map +1 -0
  282. package/dist/ui/manifest/contract.mjs +26 -0
  283. package/dist/ui/manifest/contract.mjs.map +1 -0
  284. package/dist/ui/manifest/descriptor.cjs +64 -0
  285. package/dist/ui/manifest/descriptor.cjs.map +1 -0
  286. package/dist/ui/manifest/descriptor.d.cts +60 -0
  287. package/dist/ui/manifest/descriptor.d.cts.map +1 -0
  288. package/dist/ui/manifest/descriptor.d.mts +60 -0
  289. package/dist/ui/manifest/descriptor.d.mts.map +1 -0
  290. package/dist/ui/manifest/descriptor.mjs +61 -0
  291. package/dist/ui/manifest/descriptor.mjs.map +1 -0
  292. package/dist/ui/manifest/generator.cjs +128 -0
  293. package/dist/ui/manifest/generator.cjs.map +1 -0
  294. package/dist/ui/manifest/generator.d.cts +41 -0
  295. package/dist/ui/manifest/generator.d.cts.map +1 -0
  296. package/dist/ui/manifest/generator.d.mts +41 -0
  297. package/dist/ui/manifest/generator.d.mts.map +1 -0
  298. package/dist/ui/manifest/generator.mjs +125 -0
  299. package/dist/ui/manifest/generator.mjs.map +1 -0
  300. package/dist/ui/manifest/index.cjs +35 -0
  301. package/dist/ui/manifest/index.d.cts +9 -0
  302. package/dist/ui/manifest/index.d.mts +9 -0
  303. package/dist/ui/manifest/index.mjs +9 -0
  304. package/dist/ui/manifest/manifest-schema.cjs +97 -0
  305. package/dist/ui/manifest/manifest-schema.cjs.map +1 -0
  306. package/dist/ui/manifest/manifest-schema.d.cts +132 -0
  307. package/dist/ui/manifest/manifest-schema.d.cts.map +1 -0
  308. package/dist/ui/manifest/manifest-schema.d.mts +132 -0
  309. package/dist/ui/manifest/manifest-schema.d.mts.map +1 -0
  310. package/dist/ui/manifest/manifest-schema.mjs +90 -0
  311. package/dist/ui/manifest/manifest-schema.mjs.map +1 -0
  312. package/dist/ui/manifest/mount-registry.cjs +52 -0
  313. package/dist/ui/manifest/mount-registry.cjs.map +1 -0
  314. package/dist/ui/manifest/mount-registry.d.cts +61 -0
  315. package/dist/ui/manifest/mount-registry.d.cts.map +1 -0
  316. package/dist/ui/manifest/mount-registry.d.mts +61 -0
  317. package/dist/ui/manifest/mount-registry.d.mts.map +1 -0
  318. package/dist/ui/manifest/mount-registry.mjs +48 -0
  319. package/dist/ui/manifest/mount-registry.mjs.map +1 -0
  320. package/dist/ui/manifest/nav.cjs +13 -0
  321. package/dist/ui/manifest/nav.cjs.map +1 -0
  322. package/dist/ui/manifest/nav.d.cts +34 -0
  323. package/dist/ui/manifest/nav.d.cts.map +1 -0
  324. package/dist/ui/manifest/nav.d.mts +34 -0
  325. package/dist/ui/manifest/nav.d.mts.map +1 -0
  326. package/dist/ui/manifest/nav.mjs +13 -0
  327. package/dist/ui/manifest/nav.mjs.map +1 -0
  328. package/dist/ui/manifest/route-config.cjs +33 -0
  329. package/dist/ui/manifest/route-config.cjs.map +1 -0
  330. package/dist/ui/manifest/route-config.d.cts +40 -0
  331. package/dist/ui/manifest/route-config.d.cts.map +1 -0
  332. package/dist/ui/manifest/route-config.d.mts +40 -0
  333. package/dist/ui/manifest/route-config.d.mts.map +1 -0
  334. package/dist/ui/manifest/route-config.mjs +33 -0
  335. package/dist/ui/manifest/route-config.mjs.map +1 -0
  336. package/dist/version-manifest.cjs +65 -0
  337. package/dist/version-manifest.cjs.map +1 -0
  338. package/dist/version-manifest.d.cts +52 -0
  339. package/dist/version-manifest.d.cts.map +1 -0
  340. package/dist/version-manifest.d.mts +52 -0
  341. package/dist/version-manifest.d.mts.map +1 -0
  342. package/dist/version-manifest.mjs +63 -0
  343. package/dist/version-manifest.mjs.map +1 -0
  344. package/package.json +165 -68
  345. package/skills/plugin-client/SKILL.md +24 -5
  346. package/skills/plugin-development/SKILL.md +79 -47
  347. package/skills/plugin-testing/SKILL.md +41 -12
  348. package/src/build/artifact-names.ts +117 -0
  349. package/src/build/contract-types.ts +101 -0
  350. package/src/build/rspack/build-report-plugin.ts +34 -0
  351. package/src/build/rspack/chunk-completeness-plugin.ts +57 -0
  352. package/src/build/rspack/compose.ts +87 -0
  353. package/src/build/rspack/fix-mf-data-uri-plugin.ts +23 -12
  354. package/src/build/rspack/generated-config.ts +35 -0
  355. package/src/build/rspack/index.ts +10 -5
  356. package/src/build/rspack/module-federation.ts +1 -1
  357. package/src/build/rspack/plugin.ts +103 -105
  358. package/src/build/rspack/utils.ts +8 -2
  359. package/src/build/ui/factory.ts +96 -0
  360. package/src/build/ui/generated-config.ts +133 -0
  361. package/src/build/ui/hash-artifacts-plugin.ts +79 -0
  362. package/src/build/ui/index.ts +98 -0
  363. package/src/build/ui/manifest-plugin.ts +54 -0
  364. package/src/build/ui/rsbuild-config.ts +256 -0
  365. package/src/build/ui/stubs.ts +103 -0
  366. package/src/cli.ts +100 -0
  367. package/src/dev/serve.ts +477 -0
  368. package/src/dev/watch-kill.ts +58 -0
  369. package/src/effect-helpers.ts +25 -0
  370. package/src/errors.ts +17 -18
  371. package/src/identity.ts +36 -0
  372. package/src/index.ts +4 -0
  373. package/src/plugin.ts +88 -91
  374. package/src/remote-entry.ts +171 -0
  375. package/src/runtime/errors.ts +229 -26
  376. package/src/runtime/index.ts +132 -43
  377. package/src/runtime/mf-config.ts +12 -107
  378. package/src/runtime/services/module-federation.service.ts +218 -117
  379. package/src/runtime/services/normalize.ts +1 -18
  380. package/src/runtime/services/plugin-lifecycle.service.ts +66 -75
  381. package/src/runtime/services/plugin-loader.service.ts +271 -212
  382. package/src/runtime/services/plugin.service.ts +61 -43
  383. package/src/runtime/services/secrets.service.ts +20 -15
  384. package/src/runtime/services/shared-identity.ts +68 -0
  385. package/src/runtime/validation.ts +5 -7
  386. package/src/shared-deps-spec.ts +478 -0
  387. package/src/types.ts +25 -48
  388. package/src/ui/manifest/construct.ts +403 -0
  389. package/src/ui/manifest/contract.ts +33 -0
  390. package/src/ui/manifest/descriptor.ts +96 -0
  391. package/src/ui/manifest/generator.ts +238 -0
  392. package/src/ui/manifest/index.ts +55 -0
  393. package/src/ui/manifest/manifest-schema.ts +107 -0
  394. package/src/ui/manifest/mount-registry.ts +50 -0
  395. package/src/ui/manifest/nav.ts +43 -0
  396. package/src/ui/manifest/route-config.ts +82 -0
  397. package/src/version-manifest.ts +88 -0
  398. package/dist/build/rspack/dev-server-middleware.cjs +0 -248
  399. package/dist/build/rspack/dev-server-middleware.cjs.map +0 -1
  400. package/dist/build/rspack/dev-server-middleware.mjs +0 -247
  401. package/dist/build/rspack/dev-server-middleware.mjs.map +0 -1
  402. package/dist/build/shared-deps.cjs +0 -83
  403. package/dist/build/shared-deps.cjs.map +0 -1
  404. package/dist/build/shared-deps.d.cts +0 -67
  405. package/dist/build/shared-deps.d.cts.map +0 -1
  406. package/dist/build/shared-deps.d.mts +0 -67
  407. package/dist/build/shared-deps.d.mts.map +0 -1
  408. package/dist/build/shared-deps.mjs +0 -79
  409. package/dist/build/shared-deps.mjs.map +0 -1
  410. package/dist/effect.cjs +0 -9
  411. package/dist/effect.d.cts +0 -1
  412. package/dist/effect.d.mts +0 -1
  413. package/dist/effect.mjs +0 -3
  414. package/dist/orpc-openapi.cjs +0 -17
  415. package/dist/orpc-openapi.d.cts +0 -2
  416. package/dist/orpc-openapi.d.mts +0 -2
  417. package/dist/orpc-openapi.mjs +0 -5
  418. package/dist/orpc.cjs +0 -46
  419. package/dist/orpc.d.cts +0 -7
  420. package/dist/orpc.d.mts +0 -7
  421. package/dist/orpc.mjs +0 -11
  422. package/dist/package.cjs +0 -23
  423. package/dist/package.cjs.map +0 -1
  424. package/dist/package.mjs +0 -17
  425. package/dist/package.mjs.map +0 -1
  426. package/dist/runtime/services/module-federation.service.d.cts.map +0 -1
  427. package/dist/runtime/services/module-federation.service.d.mts.map +0 -1
  428. package/dist/runtime/services/normalize.cjs.map +0 -1
  429. package/dist/runtime/services/normalize.d.cts.map +0 -1
  430. package/dist/runtime/services/normalize.d.mts.map +0 -1
  431. package/dist/runtime/services/normalize.mjs.map +0 -1
  432. package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +0 -1
  433. package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +0 -1
  434. package/dist/runtime/services/plugin-loader.service.d.cts.map +0 -1
  435. package/dist/runtime/services/plugin-loader.service.d.mts.map +0 -1
  436. package/dist/runtime/services/secrets.service.d.cts.map +0 -1
  437. package/dist/runtime/services/secrets.service.d.mts.map +0 -1
  438. package/dist/testing/index.cjs +0 -57
  439. package/dist/testing/index.cjs.map +0 -1
  440. package/dist/testing/index.d.cts +0 -54
  441. package/dist/testing/index.d.cts.map +0 -1
  442. package/dist/testing/index.d.mts +0 -54
  443. package/dist/testing/index.d.mts.map +0 -1
  444. package/dist/testing/index.mjs +0 -55
  445. package/dist/testing/index.mjs.map +0 -1
  446. package/dist/zod-core.cjs +0 -9
  447. package/dist/zod-core.d.cts +0 -1
  448. package/dist/zod-core.d.mts +0 -1
  449. package/dist/zod-core.mjs +0 -3
  450. package/dist/zod.cjs +0 -11
  451. package/dist/zod.d.cts +0 -2
  452. package/dist/zod.d.mts +0 -2
  453. package/dist/zod.mjs +0 -3
  454. package/src/build/rspack/dev-server-middleware.ts +0 -324
  455. package/src/build/shared-deps.ts +0 -102
  456. package/src/effect.ts +0 -1
  457. package/src/orpc-openapi.ts +0 -2
  458. package/src/orpc.ts +0 -9
  459. package/src/testing/index.ts +0 -87
  460. package/src/testing/mocks/module-federation.service.ts +0 -41
  461. package/src/zod-core.ts +0 -1
  462. package/src/zod.ts +0 -3
@@ -1,14 +1,30 @@
1
1
  import { AnyPlugin, InferRegistryFromEntries, InitializedPlugin, LoadedPlugin, PluginConfigInput, PluginInstance, PluginRegistry, PluginRegistryEntry, PluginRuntimeConfig, RegisteredPlugin, RegisteredPlugins, UsePluginResult } from "../types.cjs";
2
2
  import { PluginService } from "./services/plugin.service.cjs";
3
3
  import { ManagedRuntime } from "effect";
4
+ import "@orpc/openapi/extensions/route";
5
+ import "@orpc/experimental-effect/extensions/effect";
4
6
  //#region src/runtime/index.d.ts
5
7
  declare class PluginRuntime<R = RegisteredPlugins> {
6
8
  private runtime;
7
9
  private registry;
8
10
  readonly __registryType?: R;
9
11
  private pluginCache;
12
+ private routerCache;
13
+ private cacheLeafIds;
14
+ private nextCacheLeafId;
10
15
  constructor(runtime: ManagedRuntime.ManagedRuntime<PluginService, never>, registry: PluginRegistry);
16
+ /**
17
+ * Cache key for plugin instances: JSON-equal configs share one plugin
18
+ * instance (variables and secrets originate from bos.config.json, so they
19
+ * are JSON values). Values outside the JSON domain follow Effect's Hash
20
+ * semantics — symbols key by description, functions and class instances by
21
+ * reference identity — and the host creates its pluginsClient map once per
22
+ * boot, making identity the correct equivalence for function-bearing
23
+ * configs.
24
+ */
11
25
  private generateCacheKey;
26
+ private canonicalizeConfig;
27
+ private getCacheLeafId;
12
28
  private validatePluginId;
13
29
  private runPromise;
14
30
  usePlugin<K extends keyof R & string>(pluginId: K, config: PluginConfigInput<R[K]>, plugins?: Record<string, unknown>): Promise<UsePluginResult<K, R>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/runtime/index.ts"],"mappings":";;;;cAqBa,cAAc,IAAI;UASnB;UACA;WATD,iBAAiB;UAElB;EAME,YAAA,SAAS,eAAe,eAAe,uBACvC,UAAU;UAGZ;UAKA;UAcM;EAcR,UAAU,gBAAgB,YAC9B,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT,QAAQ,gBAAgB,GAAG;EA8CxB,WAAW,gBAAgB,YAC/B,UAAU,IACT,QAAQ,aAAa,iBAAiB,GAAG;EAQtC,kBAAkB,gBAAgB,YACtC,UAAU,GACV,cAAc,aAAa,iBAAiB,GAAG,MAC9C,QAAQ,eAAe,iBAAiB,GAAG;EAQxC,iBAAiB,UAAU,WAC/B,UAAU,eAAe,IACzB,aACA,UAAU,0BACT,QAAQ,kBAAkB;EAUvB,YAAY;EASZ,YAAY,gBAAgB,YAChC,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT;;;;;;;;;;;;;;;;;;;;iBAoGW,oBAAoB,kBAAkB,eAAe,sBACnE,QAAQ,oBAAoB,aAC3B,cAAc,yBAAyB"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../src/runtime/index.ts"],"mappings":";;;;;;cA2Ba,cAAc,IAAI;UASnB;UACA;WATD,iBAAiB;UAElB;UACA;UACA;UACA;EAER,YACU,SAAS,eAAe,eAAe,uBACvC,UAAU;;;;;;;;;;UAYZ;UAIA;UAmDA;UAQA;UAaM;EAcR,UAAU,gBAAgB,YAC9B,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT,QAAQ,gBAAgB,GAAG;EAgExB,WAAW,gBAAgB,YAC/B,UAAU,IACT,QAAQ,aAAa,iBAAiB,GAAG;EAQtC,kBAAkB,gBAAgB,YACtC,UAAU,GACV,cAAc,aAAa,iBAAiB,GAAG,MAC9C,QAAQ,eAAe,iBAAiB,GAAG;EAQxC,iBAAiB,UAAU,WAC/B,UAAU,eAAe,IACzB,aACA,UAAU,0BACT,QAAQ,kBAAkB;EAUvB,YAAY;EAcZ,YAAY,gBAAgB,YAChC,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT;;;;;;;;;;;;;;;;;;;;iBA8FW,oBAAoB,kBAAkB,eAAe,sBACnE,QAAQ,oBAAoB,aAC3B,cAAc,yBAAyB"}
@@ -1,14 +1,30 @@
1
1
  import { AnyPlugin, InferRegistryFromEntries, InitializedPlugin, LoadedPlugin, PluginConfigInput, PluginInstance, PluginRegistry, PluginRegistryEntry, PluginRuntimeConfig, RegisteredPlugin, RegisteredPlugins, UsePluginResult } from "../types.mjs";
2
2
  import { PluginService } from "./services/plugin.service.mjs";
3
+ import "@orpc/openapi/extensions/route";
3
4
  import { ManagedRuntime } from "effect";
5
+ import "@orpc/experimental-effect/extensions/effect";
4
6
  //#region src/runtime/index.d.ts
5
7
  declare class PluginRuntime<R = RegisteredPlugins> {
6
8
  private runtime;
7
9
  private registry;
8
10
  readonly __registryType?: R;
9
11
  private pluginCache;
12
+ private routerCache;
13
+ private cacheLeafIds;
14
+ private nextCacheLeafId;
10
15
  constructor(runtime: ManagedRuntime.ManagedRuntime<PluginService, never>, registry: PluginRegistry);
16
+ /**
17
+ * Cache key for plugin instances: JSON-equal configs share one plugin
18
+ * instance (variables and secrets originate from bos.config.json, so they
19
+ * are JSON values). Values outside the JSON domain follow Effect's Hash
20
+ * semantics — symbols key by description, functions and class instances by
21
+ * reference identity — and the host creates its pluginsClient map once per
22
+ * boot, making identity the correct equivalence for function-bearing
23
+ * configs.
24
+ */
11
25
  private generateCacheKey;
26
+ private canonicalizeConfig;
27
+ private getCacheLeafId;
12
28
  private validatePluginId;
13
29
  private runPromise;
14
30
  usePlugin<K extends keyof R & string>(pluginId: K, config: PluginConfigInput<R[K]>, plugins?: Record<string, unknown>): Promise<UsePluginResult<K, R>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/runtime/index.ts"],"mappings":";;;;cAqBa,cAAc,IAAI;UASnB;UACA;WATD,iBAAiB;UAElB;EAME,YAAA,SAAS,eAAe,eAAe,uBACvC,UAAU;UAGZ;UAKA;UAcM;EAcR,UAAU,gBAAgB,YAC9B,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT,QAAQ,gBAAgB,GAAG;EA8CxB,WAAW,gBAAgB,YAC/B,UAAU,IACT,QAAQ,aAAa,iBAAiB,GAAG;EAQtC,kBAAkB,gBAAgB,YACtC,UAAU,GACV,cAAc,aAAa,iBAAiB,GAAG,MAC9C,QAAQ,eAAe,iBAAiB,GAAG;EAQxC,iBAAiB,UAAU,WAC/B,UAAU,eAAe,IACzB,aACA,UAAU,0BACT,QAAQ,kBAAkB;EAUvB,YAAY;EASZ,YAAY,gBAAgB,YAChC,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT;;;;;;;;;;;;;;;;;;;;iBAoGW,oBAAoB,kBAAkB,eAAe,sBACnE,QAAQ,oBAAoB,aAC3B,cAAc,yBAAyB"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/runtime/index.ts"],"mappings":";;;;;;cA2Ba,cAAc,IAAI;UASnB;UACA;WATD,iBAAiB;UAElB;UACA;UACA;UACA;EAER,YACU,SAAS,eAAe,eAAe,uBACvC,UAAU;;;;;;;;;;UAYZ;UAIA;UAmDA;UAQA;UAaM;EAcR,UAAU,gBAAgB,YAC9B,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT,QAAQ,gBAAgB,GAAG;EAgExB,WAAW,gBAAgB,YAC/B,UAAU,IACT,QAAQ,aAAa,iBAAiB,GAAG;EAQtC,kBAAkB,gBAAgB,YACtC,UAAU,GACV,cAAc,aAAa,iBAAiB,GAAG,MAC9C,QAAQ,eAAe,iBAAiB,GAAG;EAQxC,iBAAiB,UAAU,WAC/B,UAAU,eAAe,IACzB,aACA,UAAU,0BACT,QAAQ,kBAAkB;EAUvB,YAAY;EAcZ,YAAY,gBAAgB,YAChC,UAAU,GACV,QAAQ,kBAAkB,EAAE,KAC5B,UAAU,0BACT;;;;;;;;;;;;;;;;;;;;iBA8FW,oBAAoB,kBAAkB,eAAe,sBACnE,QAAQ,oBAAoB,aAC3B,cAAc,yBAAyB"}
@@ -1,34 +1,84 @@
1
- import { PluginRuntimeError } from "./errors.mjs";
2
- import { PluginService } from "./services/plugin.service.mjs";
3
- import { Cause, Effect, Exit, Hash, ManagedRuntime, Option } from "effect";
1
+ import { PluginRuntimeError, toPluginRuntimeError } from "./errors.mjs";
2
+ import { DEV_ENTRY_FILENAME } from "../build/artifact-names.mjs";
3
+ import { PluginService, PluginServiceLive } from "./services/plugin.service.mjs";
4
+ import "@orpc/openapi/extensions/route";
5
+ import { Cause, Effect, Exit, ManagedRuntime, Option } from "effect";
4
6
  import { createRouterClient } from "@orpc/server";
7
+ import "@orpc/experimental-effect/extensions/effect";
5
8
 
6
9
  //#region src/runtime/index.ts
10
+ const MAX_CACHE_KEY_DEPTH = 32;
7
11
  var PluginRuntime = class {
8
12
  runtime;
9
13
  registry;
10
14
  __registryType;
11
15
  pluginCache = /* @__PURE__ */ new Map();
16
+ routerCache = /* @__PURE__ */ new Map();
17
+ cacheLeafIds = /* @__PURE__ */ new WeakMap();
18
+ nextCacheLeafId = 0;
12
19
  constructor(runtime, registry) {
13
20
  this.runtime = runtime;
14
21
  this.registry = registry;
15
22
  }
23
+ /**
24
+ * Cache key for plugin instances: JSON-equal configs share one plugin
25
+ * instance (variables and secrets originate from bos.config.json, so they
26
+ * are JSON values). Values outside the JSON domain follow Effect's Hash
27
+ * semantics — symbols key by description, functions and class instances by
28
+ * reference identity — and the host creates its pluginsClient map once per
29
+ * boot, making identity the correct equivalence for function-bearing
30
+ * configs.
31
+ */
16
32
  generateCacheKey(pluginId, config) {
17
- return `${pluginId}:${Hash.structure(config).toString()}`;
33
+ return `${pluginId}:${this.canonicalizeConfig(config, 0, /* @__PURE__ */ new Set())}`;
34
+ }
35
+ canonicalizeConfig(value, depth, ancestors) {
36
+ switch (typeof value) {
37
+ case "undefined": return "undefined";
38
+ case "string": return `string:${JSON.stringify(value)}`;
39
+ case "number": return `number:${Object.is(value, -0) ? "-0" : String(value)}`;
40
+ case "bigint": return `bigint:${value.toString()}`;
41
+ case "boolean": return `boolean:${value}`;
42
+ case "symbol": return `symbol:${String(value)}`;
43
+ case "function": return `ref:${this.getCacheLeafId(value)}`;
44
+ case "object": {
45
+ if (value === null) return "null";
46
+ if (ancestors.has(value) || depth >= MAX_CACHE_KEY_DEPTH) return `ref:${this.getCacheLeafId(value)}`;
47
+ if (Array.isArray(value)) {
48
+ ancestors.add(value);
49
+ const serialized = `[${value.map((item) => this.canonicalizeConfig(item, depth + 1, ancestors)).join(",")}]`;
50
+ ancestors.delete(value);
51
+ return serialized;
52
+ }
53
+ const prototype = Object.getPrototypeOf(value);
54
+ if (prototype !== Object.prototype && prototype !== null) return `ref:${this.getCacheLeafId(value)}`;
55
+ const record = value;
56
+ ancestors.add(value);
57
+ const serialized = `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${this.canonicalizeConfig(record[key], depth + 1, ancestors)}`).join(",")}}`;
58
+ ancestors.delete(value);
59
+ return serialized;
60
+ }
61
+ }
62
+ }
63
+ getCacheLeafId(value) {
64
+ const existing = this.cacheLeafIds.get(value);
65
+ if (existing !== void 0) return existing;
66
+ const id = this.nextCacheLeafId++;
67
+ this.cacheLeafIds.set(value, id);
68
+ return id;
18
69
  }
19
70
  validatePluginId(pluginId) {
20
71
  if (!(pluginId in this.registry)) return Effect.fail(new PluginRuntimeError({
21
72
  pluginId: String(pluginId),
22
73
  operation: "validate-plugin-id",
23
- cause: /* @__PURE__ */ new Error(`Plugin ID '${String(pluginId)}' not found in registry.`),
24
- retryable: false
74
+ cause: /* @__PURE__ */ new Error(`Plugin ID '${String(pluginId)}' not found in registry.`)
25
75
  }));
26
76
  return Effect.succeed(String(pluginId));
27
77
  }
28
78
  async runPromise(effect) {
29
79
  const exit = await this.runtime.runPromiseExit(effect);
30
80
  if (Exit.isFailure(exit)) {
31
- const error = Cause.failureOption(exit.cause);
81
+ const error = Cause.findErrorOption(exit.cause);
32
82
  if (Option.isSome(error)) throw error.value;
33
83
  throw Cause.squash(exit.cause);
34
84
  }
@@ -41,7 +91,7 @@ var PluginRuntime = class {
41
91
  });
42
92
  let cachedPlugin = this.pluginCache.get(cacheKey);
43
93
  if (!cachedPlugin) {
44
- const operation = Effect.gen(this, function* () {
94
+ const operation = Effect.gen({ self: this }, function* () {
45
95
  const pluginService = yield* PluginService;
46
96
  const validatedId = yield* this.validatePluginId(pluginId);
47
97
  const ctor = yield* pluginService.loadPlugin(validatedId);
@@ -49,19 +99,32 @@ var PluginRuntime = class {
49
99
  const initialized = yield* pluginService.initializePlugin(instance, config, plugins);
50
100
  yield* pluginService.registerPlugin(initialized);
51
101
  return initialized;
52
- }).pipe(Effect.annotateLogs({ plugin: pluginId }), Effect.provide(this.runtime));
53
- cachedPlugin = Effect.cached(operation).pipe(Effect.flatten);
102
+ });
103
+ cachedPlugin = this.runPromise(operation);
54
104
  this.pluginCache.set(cacheKey, cachedPlugin);
55
105
  }
56
106
  let initialized;
57
107
  try {
58
- initialized = await this.runPromise(cachedPlugin);
108
+ initialized = await cachedPlugin;
59
109
  } catch (error) {
60
- this.pluginCache.delete(cacheKey);
110
+ if (this.pluginCache.get(cacheKey) === cachedPlugin) {
111
+ this.pluginCache.delete(cacheKey);
112
+ this.routerCache.delete(cacheKey);
113
+ }
61
114
  throw error;
62
115
  }
63
- const router = initialized.plugin.createRouter(initialized.context);
64
- const createClient = (context) => createRouterClient(router, { context: context ?? {} });
116
+ let router = this.routerCache.get(cacheKey);
117
+ if (!router) try {
118
+ router = initialized.plugin.createRouter(plugins ?? {});
119
+ this.routerCache.set(cacheKey, router);
120
+ } catch (error) {
121
+ await this.evictPlugin(pluginId, config, plugins);
122
+ throw error;
123
+ }
124
+ const createClient = (context) => createRouterClient(router, { context: {
125
+ ...context,
126
+ "effect/context": initialized.effectContext
127
+ } });
65
128
  return {
66
129
  createClient,
67
130
  router,
@@ -72,13 +135,13 @@ var PluginRuntime = class {
72
135
  async loadPlugin(pluginId) {
73
136
  const effect = Effect.gen(function* () {
74
137
  return yield* (yield* PluginService).loadPlugin(pluginId);
75
- }).pipe(Effect.annotateLogs({ plugin: pluginId }));
138
+ });
76
139
  return this.runPromise(effect);
77
140
  }
78
141
  async instantiatePlugin(pluginId, loadedPlugin) {
79
142
  const effect = Effect.gen(function* () {
80
143
  return yield* (yield* PluginService).instantiatePlugin(pluginId, loadedPlugin);
81
- }).pipe(Effect.annotateLogs({ plugin: pluginId }));
144
+ });
82
145
  return this.runPromise(effect);
83
146
  }
84
147
  async initializePlugin(instance, config, plugins) {
@@ -87,30 +150,39 @@ var PluginRuntime = class {
87
150
  const initialized = yield* pluginService.initializePlugin(instance, config, plugins);
88
151
  yield* pluginService.registerPlugin(initialized);
89
152
  return initialized;
90
- }).pipe(Effect.annotateLogs({ plugin: instance.plugin.id }));
153
+ });
91
154
  return this.runPromise(effect);
92
155
  }
93
156
  async shutdown() {
94
157
  const effect = Effect.gen(function* () {
95
- yield* (yield* PluginService).cleanup();
158
+ yield* (yield* PluginService).cleanup;
96
159
  });
97
- await this.runPromise(effect);
98
- await this.runtime.dispose();
160
+ try {
161
+ await this.runPromise(effect);
162
+ } finally {
163
+ this.pluginCache.clear();
164
+ this.routerCache.clear();
165
+ await this.runtime.dispose();
166
+ }
99
167
  }
100
168
  async evictPlugin(pluginId, config, plugins) {
101
169
  const cacheKey = this.generateCacheKey(pluginId, {
102
170
  ...config,
103
171
  __plugins: plugins ?? {}
104
172
  });
105
- const effect = Effect.gen(this, function* () {
173
+ const effect = Effect.gen({ self: this }, function* () {
106
174
  const pluginService = yield* PluginService;
107
175
  const cachedPlugin = this.pluginCache.get(cacheKey);
108
176
  if (cachedPlugin) {
109
177
  this.pluginCache.delete(cacheKey);
110
- const pluginResult = yield* cachedPlugin.pipe(Effect.catchAll(() => Effect.succeed(null)));
111
- if (pluginResult) yield* pluginService.shutdownPlugin(pluginResult).pipe(Effect.catchAll((error) => Effect.logWarning(`Failed to shutdown evicted plugin ${pluginId}`, error)));
178
+ this.routerCache.delete(cacheKey);
179
+ const pluginResult = yield* Effect.tryPromise({
180
+ try: () => cachedPlugin,
181
+ catch: (error) => toPluginRuntimeError(error, pluginId, void 0, "evict-plugin")
182
+ }).pipe(Effect.orElseSucceed(() => null));
183
+ if (pluginResult) yield* pluginService.shutdownPlugin(pluginResult);
112
184
  }
113
- }).pipe(Effect.catchAll((error) => Effect.logWarning(`Plugin eviction failed for ${pluginId}`, error)));
185
+ });
114
186
  return this.runPromise(effect);
115
187
  }
116
188
  };
@@ -121,7 +193,7 @@ var PluginRuntime = class {
121
193
  function normalizeRemoteUrl(url) {
122
194
  if (!url) return url;
123
195
  if (url.endsWith(".js") || url.endsWith(".json")) return url;
124
- return `${url.endsWith("/") ? url.slice(0, -1) : url}/remoteEntry.js`;
196
+ return `${url.endsWith("/") ? url.slice(0, -1) : url}/${DEV_ENTRY_FILENAME}`;
125
197
  }
126
198
  /**
127
199
  * Extract plugin map (module constructors) from registry entries
@@ -168,7 +240,7 @@ function createPluginRuntime(config) {
168
240
  const secrets = config.secrets || {};
169
241
  const normalizedRegistry = normalizeRegistry(config.registry);
170
242
  const pluginMap = extractPluginMap(config.registry);
171
- const layer = PluginService.Live(normalizedRegistry, secrets, pluginMap);
243
+ const layer = PluginServiceLive(normalizedRegistry, secrets, pluginMap);
172
244
  const runtime = ManagedRuntime.make(layer);
173
245
  return new PluginRuntime(runtime, normalizedRegistry);
174
246
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/runtime/index.ts"],"sourcesContent":["import { createRouterClient } from \"@orpc/server\";\nimport { Cause, Effect, Exit, Hash, ManagedRuntime, Option } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InferRegistryFromEntries,\n InitializedPlugin,\n LoadedPlugin,\n PluginConfigInput,\n PluginInstance,\n PluginRegistry,\n PluginRegistryEntry,\n PluginRouterType,\n PluginRuntimeConfig,\n RegisteredPlugin,\n RegisteredPlugins,\n UsePluginResult,\n} from \"../types\";\nimport { PluginRuntimeError } from \"./errors\";\nimport { PluginService } from \"./services/plugin.service\";\n\nexport class PluginRuntime<R = RegisteredPlugins> {\n readonly __registryType?: R;\n\n private pluginCache = new Map<\n string,\n Effect.Effect<InitializedPlugin<AnyPlugin>, PluginRuntimeError>\n >();\n\n constructor(\n private runtime: ManagedRuntime.ManagedRuntime<PluginService, never>,\n private registry: PluginRegistry,\n ) {}\n\n private generateCacheKey(pluginId: string, config: unknown): string {\n const configHash = Hash.structure(config as object).toString();\n return `${pluginId}:${configHash}`;\n }\n\n private validatePluginId(pluginId: string): Effect.Effect<string, PluginRuntimeError> {\n if (!(pluginId in this.registry)) {\n return Effect.fail(\n new PluginRuntimeError({\n pluginId: String(pluginId),\n operation: \"validate-plugin-id\",\n cause: new Error(`Plugin ID '${String(pluginId)}' not found in registry.`),\n retryable: false,\n }),\n );\n }\n return Effect.succeed(String(pluginId));\n }\n\n private async runPromise<A, E>(effect: Effect.Effect<A, E, PluginService>): Promise<A> {\n const exit = await this.runtime.runPromiseExit(effect);\n\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n if (Option.isSome(error)) {\n throw error.value;\n }\n throw Cause.squash(exit.cause);\n }\n\n return exit.value;\n }\n\n async usePlugin<K extends keyof R & string>(\n pluginId: K,\n config: PluginConfigInput<R[K]>,\n plugins?: Record<string, unknown>,\n ): Promise<UsePluginResult<K, R>> {\n const cacheKey = this.generateCacheKey(pluginId, { ...config, __plugins: plugins ?? {} });\n\n let cachedPlugin = this.pluginCache.get(cacheKey);\n if (!cachedPlugin) {\n const operation = Effect.gen(this, function* () {\n const pluginService = yield* PluginService;\n const validatedId = yield* this.validatePluginId(pluginId);\n\n // Load → Instantiate → Initialize → Register\n const ctor = yield* pluginService.loadPlugin(validatedId);\n const instance = yield* pluginService.instantiatePlugin(pluginId, ctor);\n const initialized = yield* pluginService.initializePlugin(instance, config, plugins);\n yield* pluginService.registerPlugin(initialized);\n\n return initialized;\n }).pipe(Effect.annotateLogs({ plugin: pluginId }), Effect.provide(this.runtime));\n\n cachedPlugin = Effect.cached(operation).pipe(Effect.flatten);\n this.pluginCache.set(cacheKey, cachedPlugin);\n }\n\n let initialized: InitializedPlugin<AnyPlugin>;\n try {\n initialized = await this.runPromise(cachedPlugin);\n } catch (error) {\n // Evict failed initializations so the next call retries instead\n // of returning the permanently-cached failure from Effect.cached.\n this.pluginCache.delete(cacheKey);\n throw error;\n }\n\n // Construct the router once per plugin instance, not per client/request.\n const router = initialized.plugin.createRouter(initialized.context) as PluginRouterType<R[K]>;\n\n // Create client factory that accepts request context\n const createClient = (context?: any) => createRouterClient(router, { context: context ?? {} });\n\n return {\n createClient: createClient as any,\n router,\n metadata: initialized.metadata,\n initialized: initialized as InitializedPlugin<RegisteredPlugin<K, R>>,\n } as UsePluginResult<K, R>;\n }\n\n async loadPlugin<K extends keyof R & string>(\n pluginId: K,\n ): Promise<LoadedPlugin<RegisteredPlugin<K, R>>> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n return yield* pluginService.loadPlugin(pluginId);\n }).pipe(Effect.annotateLogs({ plugin: pluginId }));\n return this.runPromise(effect) as Promise<LoadedPlugin<RegisteredPlugin<K, R>>>;\n }\n\n async instantiatePlugin<K extends keyof R & string>(\n pluginId: K,\n loadedPlugin: LoadedPlugin<RegisteredPlugin<K, R>>,\n ): Promise<PluginInstance<RegisteredPlugin<K, R>>> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n return yield* pluginService.instantiatePlugin(pluginId, loadedPlugin);\n }).pipe(Effect.annotateLogs({ plugin: pluginId }));\n return this.runPromise(effect) as Promise<PluginInstance<RegisteredPlugin<K, R>>>;\n }\n\n async initializePlugin<T extends AnyPlugin>(\n instance: PluginInstance<T>,\n config: any,\n plugins?: Record<string, unknown>,\n ): Promise<InitializedPlugin<T>> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n const initialized = yield* pluginService.initializePlugin(instance, config, plugins);\n yield* pluginService.registerPlugin(initialized);\n return initialized;\n }).pipe(Effect.annotateLogs({ plugin: instance.plugin.id }));\n return this.runPromise(effect);\n }\n\n async shutdown(): Promise<void> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n yield* pluginService.cleanup();\n });\n await this.runPromise(effect);\n await this.runtime.dispose();\n }\n\n async evictPlugin<K extends keyof R & string>(\n pluginId: K,\n config: PluginConfigInput<R[K]>,\n plugins?: Record<string, unknown>,\n ): Promise<void> {\n const cacheKey = this.generateCacheKey(pluginId, { ...config, __plugins: plugins ?? {} });\n\n const effect = Effect.gen(this, function* () {\n const pluginService = yield* PluginService;\n const cachedPlugin = this.pluginCache.get(cacheKey);\n\n if (cachedPlugin) {\n this.pluginCache.delete(cacheKey);\n\n const pluginResult = yield* cachedPlugin.pipe(Effect.catchAll(() => Effect.succeed(null)));\n\n if (pluginResult) {\n yield* pluginService\n .shutdownPlugin(pluginResult)\n .pipe(\n Effect.catchAll((error) =>\n Effect.logWarning(`Failed to shutdown evicted plugin ${pluginId}`, error),\n ),\n );\n }\n }\n }).pipe(\n Effect.catchAll((error) =>\n Effect.logWarning(`Plugin eviction failed for ${pluginId}`, error),\n ),\n );\n\n return this.runPromise(effect);\n }\n}\n\n/**\n * Normalizes a remote URL to ensure it points to remoteEntry.js\n * If the URL doesn't end with a file extension, appends /remoteEntry.js\n */\nfunction normalizeRemoteUrl(url: string): string {\n if (!url) return url;\n if (url.endsWith(\".js\") || url.endsWith(\".json\")) return url;\n return `${url.endsWith(\"/\") ? url.slice(0, -1) : url}/remoteEntry.js`;\n}\n\n/**\n * Extract plugin map (module constructors) from registry entries\n */\nfunction extractPluginMap(\n registry: Record<string, PluginRegistryEntry>,\n): Record<string, AnyPluginConstructor> {\n const pluginMap: Record<string, AnyPluginConstructor> = {};\n\n for (const [pluginId, entry] of Object.entries(registry)) {\n if (\"module\" in entry && entry.module) {\n pluginMap[pluginId] = entry.module;\n }\n }\n\n return pluginMap;\n}\n\n/**\n * Normalize registry entries - ensure remote URLs are properly formatted\n */\nfunction normalizeRegistry(registry: Record<string, PluginRegistryEntry>): PluginRegistry {\n const normalized: Record<string, PluginRegistryEntry> = {};\n\n for (const [pluginId, entry] of Object.entries(registry)) {\n if (\"module\" in entry) {\n normalized[pluginId] = {\n ...entry,\n remote: entry.remote ? normalizeRemoteUrl(entry.remote) : undefined,\n };\n } else {\n normalized[pluginId] = {\n ...entry,\n remote: normalizeRemoteUrl(entry.remote),\n };\n }\n }\n\n return normalized as PluginRegistry;\n}\n\n/**\n * Creates a plugin runtime with support for both module and remote plugin entries.\n *\n * @example\n * ```typescript\n * // With module entries (types inferred automatically)\n * const runtime = createPluginRuntime({\n * registry: {\n * telegram: { module: TelegramPlugin },\n * gopher: { remote: \"https://cdn.example.com/gopher/remoteEntry.js\" }\n * },\n * secrets: { API_KEY: \"...\" }\n * });\n *\n * // Types are automatically inferred from module entries!\n * const { router } = await runtime.usePlugin(\"telegram\", config);\n * ```\n */\nexport function createPluginRuntime<TRegistry extends Record<string, PluginRegistryEntry>>(\n config: PluginRuntimeConfig<TRegistry>,\n): PluginRuntime<InferRegistryFromEntries<TRegistry>> {\n const secrets = config.secrets || {};\n const normalizedRegistry = normalizeRegistry(config.registry);\n const pluginMap = extractPluginMap(config.registry);\n\n const layer = PluginService.Live(normalizedRegistry, secrets, pluginMap);\n const runtime = ManagedRuntime.make(layer);\n\n return new PluginRuntime(runtime, normalizedRegistry) as PluginRuntime<\n InferRegistryFromEntries<TRegistry>\n >;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/runtime/index.ts"],"sourcesContent":["import \"@orpc/experimental-effect/extensions/effect\";\nimport \"@orpc/openapi/extensions/route\";\n\nimport { createRouterClient } from \"@orpc/server\";\nimport { Cause, Effect, Exit, ManagedRuntime, Option } from \"effect\";\nimport { DEV_ENTRY_FILENAME } from \"../build/artifact-names\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InferRegistryFromEntries,\n InitializedPlugin,\n LoadedPlugin,\n PluginConfigInput,\n PluginInstance,\n PluginRegistry,\n PluginRegistryEntry,\n PluginRouterType,\n PluginRuntimeConfig,\n RegisteredPlugin,\n RegisteredPlugins,\n UsePluginResult,\n} from \"../types\";\nimport { PluginRuntimeError, toPluginRuntimeError } from \"./errors\";\nimport { PluginService, PluginServiceLive } from \"./services/plugin.service\";\n\nconst MAX_CACHE_KEY_DEPTH = 32;\n\nexport class PluginRuntime<R = RegisteredPlugins> {\n readonly __registryType?: R;\n\n private pluginCache = new Map<string, Promise<InitializedPlugin<AnyPlugin>>>();\n private routerCache = new Map<string, PluginRouterType<any>>();\n private cacheLeafIds = new WeakMap<object, number>();\n private nextCacheLeafId = 0;\n\n constructor(\n private runtime: ManagedRuntime.ManagedRuntime<PluginService, never>,\n private registry: PluginRegistry,\n ) {}\n\n /**\n * Cache key for plugin instances: JSON-equal configs share one plugin\n * instance (variables and secrets originate from bos.config.json, so they\n * are JSON values). Values outside the JSON domain follow Effect's Hash\n * semantics — symbols key by description, functions and class instances by\n * reference identity — and the host creates its pluginsClient map once per\n * boot, making identity the correct equivalence for function-bearing\n * configs.\n */\n private generateCacheKey(pluginId: string, config: unknown): string {\n return `${pluginId}:${this.canonicalizeConfig(config, 0, new Set())}`;\n }\n\n private canonicalizeConfig(value: unknown, depth: number, ancestors: Set<object>): string {\n switch (typeof value) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return `string:${JSON.stringify(value)}`;\n case \"number\":\n return `number:${Object.is(value, -0) ? \"-0\" : String(value)}`;\n case \"bigint\":\n return `bigint:${value.toString()}`;\n case \"boolean\":\n return `boolean:${value}`;\n case \"symbol\":\n return `symbol:${String(value)}`;\n case \"function\":\n return `ref:${this.getCacheLeafId(value)}`;\n case \"object\": {\n if (value === null) return \"null\";\n if (ancestors.has(value) || depth >= MAX_CACHE_KEY_DEPTH) {\n return `ref:${this.getCacheLeafId(value)}`;\n }\n\n if (Array.isArray(value)) {\n ancestors.add(value);\n const serialized = `[${value\n .map((item) => this.canonicalizeConfig(item, depth + 1, ancestors))\n .join(\",\")}]`;\n ancestors.delete(value);\n return serialized;\n }\n\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n return `ref:${this.getCacheLeafId(value)}`;\n }\n\n const record = value as Record<string, unknown>;\n ancestors.add(value);\n const serialized = `{${Object.keys(record)\n .sort()\n .map(\n (key) =>\n `${JSON.stringify(key)}:${this.canonicalizeConfig(record[key], depth + 1, ancestors)}`,\n )\n .join(\",\")}}`;\n ancestors.delete(value);\n return serialized;\n }\n }\n }\n\n private getCacheLeafId(value: object): number {\n const existing = this.cacheLeafIds.get(value);\n if (existing !== undefined) return existing;\n const id = this.nextCacheLeafId++;\n this.cacheLeafIds.set(value, id);\n return id;\n }\n\n private validatePluginId(pluginId: string): Effect.Effect<string, PluginRuntimeError> {\n if (!(pluginId in this.registry)) {\n return Effect.fail(\n new PluginRuntimeError({\n pluginId: String(pluginId),\n operation: \"validate-plugin-id\",\n cause: new Error(`Plugin ID '${String(pluginId)}' not found in registry.`),\n }),\n );\n }\n return Effect.succeed(String(pluginId));\n }\n\n private async runPromise<A, E>(effect: Effect.Effect<A, E, PluginService>): Promise<A> {\n const exit = await this.runtime.runPromiseExit(effect);\n\n if (Exit.isFailure(exit)) {\n const error = Cause.findErrorOption(exit.cause);\n if (Option.isSome(error)) {\n throw error.value;\n }\n throw Cause.squash(exit.cause);\n }\n\n return exit.value;\n }\n\n async usePlugin<K extends keyof R & string>(\n pluginId: K,\n config: PluginConfigInput<R[K]>,\n plugins?: Record<string, unknown>,\n ): Promise<UsePluginResult<K, R>> {\n const cacheKey = this.generateCacheKey(pluginId, { ...config, __plugins: plugins ?? {} });\n\n let cachedPlugin = this.pluginCache.get(cacheKey);\n if (!cachedPlugin) {\n const operation = Effect.gen({ self: this }, function* () {\n const pluginService = yield* PluginService;\n const validatedId = yield* this.validatePluginId(pluginId);\n\n // Load → Instantiate → Initialize → Register\n const ctor = yield* pluginService.loadPlugin(validatedId);\n const instance = yield* pluginService.instantiatePlugin(pluginId, ctor);\n const initialized = yield* pluginService.initializePlugin(instance, config, plugins);\n yield* pluginService.registerPlugin(initialized);\n\n return initialized;\n });\n\n cachedPlugin = this.runPromise(operation);\n this.pluginCache.set(cacheKey, cachedPlugin);\n }\n\n let initialized: InitializedPlugin<AnyPlugin>;\n try {\n initialized = await cachedPlugin;\n } catch (error) {\n if (this.pluginCache.get(cacheKey) === cachedPlugin) {\n this.pluginCache.delete(cacheKey);\n this.routerCache.delete(cacheKey);\n }\n throw error;\n }\n\n // Construct the router once per plugin instance, not per client/request.\n let router = this.routerCache.get(cacheKey);\n if (!router) {\n try {\n router = initialized.plugin.createRouter(plugins ?? {}) as PluginRouterType<R[K]>;\n this.routerCache.set(cacheKey, router);\n } catch (error) {\n await this.evictPlugin(pluginId, config, plugins);\n throw error;\n }\n }\n\n // Create client factory that accepts request context. The plugin's\n // Effect context is injected so `.effect()` handlers resolve services\n // on in-process (server-side / SSR) calls.\n const createClient = (context?: any) =>\n createRouterClient(router, {\n context: {\n ...context,\n \"effect/context\": initialized.effectContext,\n },\n });\n\n return {\n createClient: createClient as any,\n router,\n metadata: initialized.metadata,\n initialized: initialized as InitializedPlugin<RegisteredPlugin<K, R>>,\n } as UsePluginResult<K, R>;\n }\n\n async loadPlugin<K extends keyof R & string>(\n pluginId: K,\n ): Promise<LoadedPlugin<RegisteredPlugin<K, R>>> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n return yield* pluginService.loadPlugin(pluginId);\n });\n return this.runPromise(effect) as Promise<LoadedPlugin<RegisteredPlugin<K, R>>>;\n }\n\n async instantiatePlugin<K extends keyof R & string>(\n pluginId: K,\n loadedPlugin: LoadedPlugin<RegisteredPlugin<K, R>>,\n ): Promise<PluginInstance<RegisteredPlugin<K, R>>> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n return yield* pluginService.instantiatePlugin(pluginId, loadedPlugin);\n });\n return this.runPromise(effect) as Promise<PluginInstance<RegisteredPlugin<K, R>>>;\n }\n\n async initializePlugin<T extends AnyPlugin>(\n instance: PluginInstance<T>,\n config: any,\n plugins?: Record<string, unknown>,\n ): Promise<InitializedPlugin<T>> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n const initialized = yield* pluginService.initializePlugin(instance, config, plugins);\n yield* pluginService.registerPlugin(initialized);\n return initialized;\n });\n return this.runPromise(effect);\n }\n\n async shutdown(): Promise<void> {\n const effect = Effect.gen(function* () {\n const pluginService = yield* PluginService;\n yield* pluginService.cleanup;\n });\n try {\n await this.runPromise(effect);\n } finally {\n this.pluginCache.clear();\n this.routerCache.clear();\n await this.runtime.dispose();\n }\n }\n\n async evictPlugin<K extends keyof R & string>(\n pluginId: K,\n config: PluginConfigInput<R[K]>,\n plugins?: Record<string, unknown>,\n ): Promise<void> {\n const cacheKey = this.generateCacheKey(pluginId, { ...config, __plugins: plugins ?? {} });\n\n const effect = Effect.gen({ self: this }, function* () {\n const pluginService = yield* PluginService;\n const cachedPlugin = this.pluginCache.get(cacheKey);\n\n if (cachedPlugin) {\n this.pluginCache.delete(cacheKey);\n this.routerCache.delete(cacheKey);\n\n const pluginResult = yield* Effect.tryPromise({\n try: () => cachedPlugin,\n catch: (error) => toPluginRuntimeError(error, pluginId, undefined, \"evict-plugin\"),\n }).pipe(Effect.orElseSucceed(() => null));\n\n if (pluginResult) {\n yield* pluginService.shutdownPlugin(pluginResult);\n }\n }\n });\n\n return this.runPromise(effect);\n }\n}\n\n/**\n * Normalizes a remote URL to ensure it points to remoteEntry.js\n * If the URL doesn't end with a file extension, appends /remoteEntry.js\n */\nfunction normalizeRemoteUrl(url: string): string {\n if (!url) return url;\n if (url.endsWith(\".js\") || url.endsWith(\".json\")) return url;\n return `${url.endsWith(\"/\") ? url.slice(0, -1) : url}/${DEV_ENTRY_FILENAME}`;\n}\n\n/**\n * Extract plugin map (module constructors) from registry entries\n */\nfunction extractPluginMap(\n registry: Record<string, PluginRegistryEntry>,\n): Record<string, AnyPluginConstructor> {\n const pluginMap: Record<string, AnyPluginConstructor> = {};\n\n for (const [pluginId, entry] of Object.entries(registry)) {\n if (\"module\" in entry && entry.module) {\n pluginMap[pluginId] = entry.module;\n }\n }\n\n return pluginMap;\n}\n\n/**\n * Normalize registry entries - ensure remote URLs are properly formatted\n */\nfunction normalizeRegistry(registry: Record<string, PluginRegistryEntry>): PluginRegistry {\n const normalized: Record<string, PluginRegistryEntry> = {};\n\n for (const [pluginId, entry] of Object.entries(registry)) {\n if (\"module\" in entry) {\n normalized[pluginId] = {\n ...entry,\n remote: entry.remote ? normalizeRemoteUrl(entry.remote) : undefined,\n };\n } else {\n normalized[pluginId] = {\n ...entry,\n remote: normalizeRemoteUrl(entry.remote),\n };\n }\n }\n\n return normalized as PluginRegistry;\n}\n\n/**\n * Creates a plugin runtime with support for both module and remote plugin entries.\n *\n * @example\n * ```typescript\n * // With module entries (types inferred automatically)\n * const runtime = createPluginRuntime({\n * registry: {\n * telegram: { module: TelegramPlugin },\n * gopher: { remote: \"https://cdn.example.com/gopher/remoteEntry.js\" }\n * },\n * secrets: { API_KEY: \"...\" }\n * });\n *\n * // Types are automatically inferred from module entries!\n * const { router } = await runtime.usePlugin(\"telegram\", config);\n * ```\n */\nexport function createPluginRuntime<TRegistry extends Record<string, PluginRegistryEntry>>(\n config: PluginRuntimeConfig<TRegistry>,\n): PluginRuntime<InferRegistryFromEntries<TRegistry>> {\n const secrets = config.secrets || {};\n const normalizedRegistry = normalizeRegistry(config.registry);\n const pluginMap = extractPluginMap(config.registry);\n\n const layer = PluginServiceLive(normalizedRegistry, secrets, pluginMap);\n const runtime = ManagedRuntime.make(layer);\n\n return new PluginRuntime(runtime, normalizedRegistry) as PluginRuntime<\n InferRegistryFromEntries<TRegistry>\n >;\n}\n"],"mappings":"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"}
@@ -1,87 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_package = require('../package.cjs');
2
+ const require_shared_deps_spec = require('../shared-deps-spec.cjs');
3
3
  let node_fs = require("node:fs");
4
- let node_module = require("node:module");
5
- let node_path = require("node:path");
6
4
 
7
5
  //#region src/runtime/mf-config.ts
8
- const require$1 = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href);
9
- function getInstalledPackageVersion(packageName, fallbackRange) {
10
- try {
11
- let currentDir = (0, node_path.dirname)(require$1.resolve(packageName));
12
- for (let i = 0; i < 5; i += 1) {
13
- const packageJsonPath = (0, node_path.join)(currentDir, "package.json");
14
- if ((0, node_fs.existsSync)(packageJsonPath)) return JSON.parse((0, node_fs.readFileSync)(packageJsonPath, "utf-8")).version;
15
- currentDir = (0, node_path.dirname)(currentDir);
16
- }
17
- throw new Error(`Could not resolve installed version for ${packageName}`);
18
- } catch {
19
- const match = fallbackRange.match(/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/);
20
- return match ? match[0] : fallbackRange.replace(/^[\^~>=<\s]+/, "");
21
- }
22
- }
23
- const PLUGIN_VERSION = "2.10.1";
24
- const SHARE_CONFIG = {
25
- singleton: true,
26
- requiredVersion: false,
27
- strictVersion: false,
28
- eager: false
29
- };
30
- const MF_CORE_SHARED_DEPS = {
31
- "every-plugin": {
32
- version: PLUGIN_VERSION,
33
- shareScope: "default",
34
- shareConfig: SHARE_CONFIG
35
- },
36
- effect: {
37
- version: getInstalledPackageVersion("effect", require_package.peerDependencies.effect),
38
- shareScope: "default",
39
- shareConfig: SHARE_CONFIG
40
- },
41
- zod: {
42
- version: getInstalledPackageVersion("zod", require_package.peerDependencies.zod),
43
- shareScope: "default",
44
- shareConfig: SHARE_CONFIG
45
- },
46
- "@orpc/contract": {
47
- version: getInstalledPackageVersion("@orpc/contract", require_package.peerDependencies["@orpc/contract"]),
48
- shareScope: "default",
49
- shareConfig: SHARE_CONFIG
50
- },
51
- "@orpc/client": {
52
- version: getInstalledPackageVersion("@orpc/client", require_package.peerDependencies["@orpc/client"]),
53
- shareScope: "default",
54
- shareConfig: SHARE_CONFIG
55
- },
56
- "@orpc/server": {
57
- version: getInstalledPackageVersion("@orpc/server", require_package.peerDependencies["@orpc/server"]),
58
- shareScope: "default",
59
- shareConfig: SHARE_CONFIG
60
- }
61
- };
62
- function buildMergedSharedDeps(appShared) {
63
- const merged = {};
64
- for (const [name, config] of Object.entries(MF_CORE_SHARED_DEPS)) merged[name] = {
65
- version: config.version,
66
- shareScope: config.shareScope,
67
- shareConfig: config.shareConfig
68
- };
69
- if (appShared) for (const [name, config] of Object.entries(appShared)) merged[name] = {
70
- version: config.version,
71
- shareScope: config.shareScope ?? "default",
72
- shareConfig: {
73
- singleton: config.singleton ?? false,
74
- requiredVersion: config.requiredVersion ?? false,
75
- strictVersion: config.strictVersion ?? false,
76
- eager: config.eager ?? false
77
- }
78
- };
79
- return merged;
80
- }
6
+ const PLUGIN_VERSION = "3.0.0-rc.3";
7
+ const MF_CORE_SHARED_DEPS = require_shared_deps_spec.buildMfCoreSharedDependencies({ ownVersion: PLUGIN_VERSION });
81
8
 
82
9
  //#endregion
83
10
  exports.MF_CORE_SHARED_DEPS = MF_CORE_SHARED_DEPS;
84
11
  exports.PLUGIN_VERSION = PLUGIN_VERSION;
85
- exports.SHARE_CONFIG = SHARE_CONFIG;
86
- exports.buildMergedSharedDeps = buildMergedSharedDeps;
87
12
  //# sourceMappingURL=mf-config.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mf-config.cjs","names":["require"],"sources":["../../src/runtime/mf-config.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport pkg from \"../../package.json\";\n\nconst require = createRequire(import.meta.url);\ndeclare const __EVERY_PLUGIN_VERSION__: string | undefined;\n\nfunction readPackageVersion(): string {\n try {\n return (require(\"../../package.json\") as { version: string }).version;\n } catch {\n return \"0.0.0\";\n }\n}\n\nfunction getInstalledPackageVersion(packageName: string, fallbackRange: string): string {\n try {\n let currentDir = dirname(require.resolve(packageName));\n for (let i = 0; i < 5; i += 1) {\n const packageJsonPath = join(currentDir, \"package.json\");\n if (existsSync(packageJsonPath)) {\n return (JSON.parse(readFileSync(packageJsonPath, \"utf-8\")) as { version: string }).version;\n }\n currentDir = dirname(currentDir);\n }\n\n throw new Error(`Could not resolve installed version for ${packageName}`);\n } catch {\n const match = fallbackRange.match(/\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?/);\n return match ? match[0] : fallbackRange.replace(/^[\\^~>=<\\s]+/, \"\");\n }\n}\n\nexport const PLUGIN_VERSION =\n typeof __EVERY_PLUGIN_VERSION__ === \"string\" ? __EVERY_PLUGIN_VERSION__ : readPackageVersion();\n\nexport interface SharedConfig {\n singleton: boolean;\n requiredVersion: string | false;\n strictVersion: boolean;\n eager: boolean;\n}\n\nexport const SHARE_CONFIG: SharedConfig = {\n singleton: true,\n requiredVersion: false,\n strictVersion: false,\n eager: false,\n};\n\nexport const MF_CORE_SHARED_DEPS = {\n \"every-plugin\": {\n version: PLUGIN_VERSION,\n shareScope: \"default\",\n shareConfig: SHARE_CONFIG,\n },\n effect: {\n version: getInstalledPackageVersion(\"effect\", pkg.peerDependencies.effect),\n shareScope: \"default\",\n shareConfig: SHARE_CONFIG,\n },\n zod: {\n version: getInstalledPackageVersion(\"zod\", pkg.peerDependencies.zod),\n shareScope: \"default\",\n shareConfig: SHARE_CONFIG,\n },\n \"@orpc/contract\": {\n version: getInstalledPackageVersion(\"@orpc/contract\", pkg.peerDependencies[\"@orpc/contract\"]),\n shareScope: \"default\",\n shareConfig: SHARE_CONFIG,\n },\n \"@orpc/client\": {\n version: getInstalledPackageVersion(\"@orpc/client\", pkg.peerDependencies[\"@orpc/client\"]),\n shareScope: \"default\",\n shareConfig: SHARE_CONFIG,\n },\n \"@orpc/server\": {\n version: getInstalledPackageVersion(\"@orpc/server\", pkg.peerDependencies[\"@orpc/server\"]),\n shareScope: \"default\",\n shareConfig: SHARE_CONFIG,\n },\n} as const;\n\nexport type CoreSharedDepName = keyof typeof MF_CORE_SHARED_DEPS;\n\nexport interface AppSharedDepConfig {\n version: string;\n requiredVersion?: string | false;\n singleton?: boolean;\n strictVersion?: boolean;\n eager?: boolean;\n shareScope?: string;\n}\n\nexport type AppSharedDeps = Record<string, AppSharedDepConfig>;\n\nexport function buildMergedSharedDeps(\n appShared?: AppSharedDeps,\n): Record<string, { version: string; shareScope: string; shareConfig: SharedConfig }> {\n const merged: Record<string, { version: string; shareScope: string; shareConfig: SharedConfig }> =\n {};\n\n for (const [name, config] of Object.entries(MF_CORE_SHARED_DEPS)) {\n merged[name] = {\n version: config.version,\n shareScope: config.shareScope,\n shareConfig: config.shareConfig,\n };\n }\n\n if (appShared) {\n for (const [name, config] of Object.entries(appShared)) {\n merged[name] = {\n version: config.version,\n shareScope: config.shareScope ?? \"default\",\n shareConfig: {\n singleton: config.singleton ?? false,\n requiredVersion: config.requiredVersion ?? false,\n strictVersion: config.strictVersion ?? false,\n eager: config.eager ?? false,\n },\n };\n }\n }\n\n return merged;\n}\n"],"mappings":";;;;;;;AAKA,MAAMA,wFAAuC;AAW7C,SAAS,2BAA2B,aAAqB,eAA+B;CACtF,IAAI;EACF,IAAI,oCAAqBA,UAAQ,QAAQ,WAAW,CAAC;EACrD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;GAC7B,MAAM,sCAAuB,YAAY,cAAc;GACvD,4BAAe,eAAe,GAC5B,OAAQ,KAAK,gCAAmB,iBAAiB,OAAO,CAAC,CAAC,CAAyB;GAErF,oCAAqB,UAAU;EACjC;EAEA,MAAM,IAAI,MAAM,2CAA2C,aAAa;CAC1E,QAAQ;EACN,MAAM,QAAQ,cAAc,MAAM,mCAAmC;EACrE,OAAO,QAAQ,MAAM,KAAK,cAAc,QAAQ,gBAAgB,EAAE;CACpE;AACF;AAEA,MAAa;AAUb,MAAa,eAA6B;CACxC,WAAW;CACX,iBAAiB;CACjB,eAAe;CACf,OAAO;AACT;AAEA,MAAa,sBAAsB;CACjC,gBAAgB;EACd,SAAS;EACT,YAAY;EACZ,aAAa;CACf;CACA,QAAQ;EACN,SAAS,2BAA2B,2CAA+B,MAAM;EACzE,YAAY;EACZ,aAAa;CACf;CACA,KAAK;EACH,SAAS,2BAA2B,wCAA4B,GAAG;EACnE,YAAY;EACZ,aAAa;CACf;CACA,kBAAkB;EAChB,SAAS,2BAA2B,mDAAuC,iBAAiB;EAC5F,YAAY;EACZ,aAAa;CACf;CACA,gBAAgB;EACd,SAAS,2BAA2B,iDAAqC,eAAe;EACxF,YAAY;EACZ,aAAa;CACf;CACA,gBAAgB;EACd,SAAS,2BAA2B,iDAAqC,eAAe;EACxF,YAAY;EACZ,aAAa;CACf;AACF;AAeA,SAAgB,sBACd,WACoF;CACpF,MAAM,SACJ,CAAC;CAEH,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,mBAAmB,GAC7D,OAAO,QAAQ;EACb,SAAS,OAAO;EAChB,YAAY,OAAO;EACnB,aAAa,OAAO;CACtB;CAGF,IAAI,WACF,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,SAAS,GACnD,OAAO,QAAQ;EACb,SAAS,OAAO;EAChB,YAAY,OAAO,cAAc;EACjC,aAAa;GACX,WAAW,OAAO,aAAa;GAC/B,iBAAiB,OAAO,mBAAmB;GAC3C,eAAe,OAAO,iBAAiB;GACvC,OAAO,OAAO,SAAS;EACzB;CACF;CAIJ,OAAO;AACT"}
1
+ {"version":3,"file":"mf-config.cjs","names":["buildMfCoreSharedDependencies"],"sources":["../../src/runtime/mf-config.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { buildMfCoreSharedDependencies, type CoreSharedDepName } from \"../shared-deps-spec\";\n\ndeclare const __EVERY_PLUGIN_VERSION__: string | undefined;\n\nfunction readPackageVersion(): string {\n try {\n // Not createRequire(import.meta.url): under tsx the require's resolution\n // base can come up empty in spawned child processes (\"Cannot find module\n // from ''\"), reading 0.0.0 and tripping the shared-identity check.\n return (\n JSON.parse(readFileSync(new URL(\"../../package.json\", import.meta.url), \"utf-8\")) as {\n version: string;\n }\n ).version;\n } catch {\n return \"0.0.0\";\n }\n}\n\nexport const PLUGIN_VERSION =\n typeof __EVERY_PLUGIN_VERSION__ === \"string\" ? __EVERY_PLUGIN_VERSION__ : readPackageVersion();\n\nexport interface SharedConfig {\n singleton: boolean;\n requiredVersion: string | false;\n strictVersion: boolean;\n eager: boolean;\n}\n\nexport const MF_CORE_SHARED_DEPS = buildMfCoreSharedDependencies({ ownVersion: PLUGIN_VERSION });\n\nexport type { CoreSharedDepName };\n"],"mappings":";;;;;AAoBA,MAAa;AAUb,MAAa,sBAAsBA,uDAA8B,EAAE,YAAY,eAAe,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { CoreSharedDepName, HostSharedEntry } from "../shared-deps-spec.cjs";
1
2
  //#region src/runtime/mf-config.d.ts
2
3
  declare const PLUGIN_VERSION: string;
3
4
  interface SharedConfig {
@@ -6,54 +7,7 @@ interface SharedConfig {
6
7
  strictVersion: boolean;
7
8
  eager: boolean;
8
9
  }
9
- declare const SHARE_CONFIG: SharedConfig;
10
- declare const MF_CORE_SHARED_DEPS: {
11
- readonly "every-plugin": {
12
- readonly version: string;
13
- readonly shareScope: "default";
14
- readonly shareConfig: SharedConfig;
15
- };
16
- readonly effect: {
17
- readonly version: string;
18
- readonly shareScope: "default";
19
- readonly shareConfig: SharedConfig;
20
- };
21
- readonly zod: {
22
- readonly version: string;
23
- readonly shareScope: "default";
24
- readonly shareConfig: SharedConfig;
25
- };
26
- readonly "@orpc/contract": {
27
- readonly version: string;
28
- readonly shareScope: "default";
29
- readonly shareConfig: SharedConfig;
30
- };
31
- readonly "@orpc/client": {
32
- readonly version: string;
33
- readonly shareScope: "default";
34
- readonly shareConfig: SharedConfig;
35
- };
36
- readonly "@orpc/server": {
37
- readonly version: string;
38
- readonly shareScope: "default";
39
- readonly shareConfig: SharedConfig;
40
- };
41
- };
42
- type CoreSharedDepName = keyof typeof MF_CORE_SHARED_DEPS;
43
- interface AppSharedDepConfig {
44
- version: string;
45
- requiredVersion?: string | false;
46
- singleton?: boolean;
47
- strictVersion?: boolean;
48
- eager?: boolean;
49
- shareScope?: string;
50
- }
51
- type AppSharedDeps = Record<string, AppSharedDepConfig>;
52
- declare function buildMergedSharedDeps(appShared?: AppSharedDeps): Record<string, {
53
- version: string;
54
- shareScope: string;
55
- shareConfig: SharedConfig;
56
- }>;
10
+ declare const MF_CORE_SHARED_DEPS: Record<string, HostSharedEntry>;
57
11
  //#endregion
58
- export { AppSharedDepConfig, AppSharedDeps, CoreSharedDepName, MF_CORE_SHARED_DEPS, PLUGIN_VERSION, SHARE_CONFIG, SharedConfig, buildMergedSharedDeps };
12
+ export { type CoreSharedDepName, MF_CORE_SHARED_DEPS, PLUGIN_VERSION, SharedConfig };
59
13
  //# sourceMappingURL=mf-config.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mf-config.d.cts","names":[],"sources":["../../src/runtime/mf-config.ts"],"mappings":";cAkCa;UAGI;EACf;EACA;EACA;EACA;;cAGW,cAAc;cAOd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCD,iCAAiC;UAE5B;EACf;EACA;EACA;EACA;EACA;EACA;;KAGU,gBAAgB,eAAe;iBAE3B,sBACd,YAAY,gBACX;EAAiB;EAAiB;EAAoB,aAAa"}
1
+ {"version":3,"file":"mf-config.d.cts","names":["_$___shared_deps_spec0.HostSharedEntry"],"sources":["../../src/runtime/mf-config.ts"],"mappings":";;cAoBa;UAGI;EACf;EACA;EACA;EACA;;cAGW,qBAAmB,eAAnBA"}
@@ -1,3 +1,4 @@
1
+ import { CoreSharedDepName, HostSharedEntry } from "../shared-deps-spec.mjs";
1
2
  //#region src/runtime/mf-config.d.ts
2
3
  declare const PLUGIN_VERSION: string;
3
4
  interface SharedConfig {
@@ -6,54 +7,7 @@ interface SharedConfig {
6
7
  strictVersion: boolean;
7
8
  eager: boolean;
8
9
  }
9
- declare const SHARE_CONFIG: SharedConfig;
10
- declare const MF_CORE_SHARED_DEPS: {
11
- readonly "every-plugin": {
12
- readonly version: string;
13
- readonly shareScope: "default";
14
- readonly shareConfig: SharedConfig;
15
- };
16
- readonly effect: {
17
- readonly version: string;
18
- readonly shareScope: "default";
19
- readonly shareConfig: SharedConfig;
20
- };
21
- readonly zod: {
22
- readonly version: string;
23
- readonly shareScope: "default";
24
- readonly shareConfig: SharedConfig;
25
- };
26
- readonly "@orpc/contract": {
27
- readonly version: string;
28
- readonly shareScope: "default";
29
- readonly shareConfig: SharedConfig;
30
- };
31
- readonly "@orpc/client": {
32
- readonly version: string;
33
- readonly shareScope: "default";
34
- readonly shareConfig: SharedConfig;
35
- };
36
- readonly "@orpc/server": {
37
- readonly version: string;
38
- readonly shareScope: "default";
39
- readonly shareConfig: SharedConfig;
40
- };
41
- };
42
- type CoreSharedDepName = keyof typeof MF_CORE_SHARED_DEPS;
43
- interface AppSharedDepConfig {
44
- version: string;
45
- requiredVersion?: string | false;
46
- singleton?: boolean;
47
- strictVersion?: boolean;
48
- eager?: boolean;
49
- shareScope?: string;
50
- }
51
- type AppSharedDeps = Record<string, AppSharedDepConfig>;
52
- declare function buildMergedSharedDeps(appShared?: AppSharedDeps): Record<string, {
53
- version: string;
54
- shareScope: string;
55
- shareConfig: SharedConfig;
56
- }>;
10
+ declare const MF_CORE_SHARED_DEPS: Record<string, HostSharedEntry>;
57
11
  //#endregion
58
- export { AppSharedDepConfig, AppSharedDeps, CoreSharedDepName, MF_CORE_SHARED_DEPS, PLUGIN_VERSION, SHARE_CONFIG, SharedConfig, buildMergedSharedDeps };
12
+ export { type CoreSharedDepName, MF_CORE_SHARED_DEPS, PLUGIN_VERSION, SharedConfig };
59
13
  //# sourceMappingURL=mf-config.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mf-config.d.mts","names":[],"sources":["../../src/runtime/mf-config.ts"],"mappings":";cAkCa;UAGI;EACf;EACA;EACA;EACA;;cAGW,cAAc;cAOd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCD,iCAAiC;UAE5B;EACf;EACA;EACA;EACA;EACA;EACA;;KAGU,gBAAgB,eAAe;iBAE3B,sBACd,YAAY,gBACX;EAAiB;EAAiB;EAAoB,aAAa"}
1
+ {"version":3,"file":"mf-config.d.mts","names":["_$___shared_deps_spec0.HostSharedEntry"],"sources":["../../src/runtime/mf-config.ts"],"mappings":";;cAoBa;UAGI;EACf;EACA;EACA;EACA;;cAGW,qBAAmB,eAAnBA"}