every-plugin 2.10.0 → 3.0.0-rc.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 (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 +49 -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 +8 -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 +12 -26
  173. package/dist/plugin.cjs.map +1 -1
  174. package/dist/plugin.d.cts +44 -25
  175. package/dist/plugin.d.cts.map +1 -1
  176. package/dist/plugin.d.mts +45 -26
  177. package/dist/plugin.d.mts.map +1 -1
  178. package/dist/plugin.mjs +15 -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 +140 -34
  189. package/dist/runtime/errors.cjs.map +1 -1
  190. package/dist/runtime/errors.d.cts +42 -7
  191. package/dist/runtime/errors.d.cts.map +1 -1
  192. package/dist/runtime/errors.d.mts +42 -7
  193. package/dist/runtime/errors.d.mts.map +1 -1
  194. package/dist/runtime/errors.mjs +136 -31
  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 +63 -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 +63 -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 +30 -29
  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 +29 -30
  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 +22 -41
  265. package/dist/types.d.cts.map +1 -1
  266. package/dist/types.d.mts +22 -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 +16 -18
  371. package/src/identity.ts +36 -0
  372. package/src/index.ts +4 -0
  373. package/src/plugin.ts +70 -92
  374. package/src/remote-entry.ts +171 -0
  375. package/src/runtime/errors.ts +186 -27
  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 +221 -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 +239 -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 +22 -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 -194
  399. package/dist/build/rspack/dev-server-middleware.cjs.map +0 -1
  400. package/dist/build/rspack/dev-server-middleware.mjs +0 -193
  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 -250
  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
@@ -0,0 +1,478 @@
1
+ /**
2
+ * SharedDependencySpec: the one module owning shared-dependency names,
3
+ * criticality, version resolution, and fallback policy across the Module
4
+ * Federation graph. Four consumers derive from it — the rspack config
5
+ * factory (plugin builds), the rsbuild config factory (ui remotes), the
6
+ * runtime mf-config (the every-plugin MF instance), and the host's shared
7
+ * pre-registration — so a name or criticality can never disagree between
8
+ * them, and an unresolved version fails the build loudly instead of
9
+ * silently degrading to "*"/"latest" (which disables the strict-singleton
10
+ * guard).
11
+ *
12
+ * Lists:
13
+ * - core: shared by the host and server-side plugin remotes (every-plugin,
14
+ * effect, zod, @orpc/*). Effect-critical entries pin the exact installed
15
+ * version (strictVersion) — the version-check machinery in
16
+ * runtime/services/shared-identity.ts relies on it.
17
+ * - ui: shared by the core ui provider and ui remotes (react, react-dom,
18
+ * @orpc/client, @orpc/contract, TanStack, lingui, the everything-dev
19
+ * session/i18n subpath modules). All strict singletons; consumers add
20
+ * `import: false`.
21
+ */
22
+ import { existsSync, readFileSync } from "node:fs";
23
+ import { createRequire } from "node:module";
24
+ import { dirname, join, resolve } from "node:path";
25
+ import { fileURLToPath } from "node:url";
26
+ import { Data } from "effect";
27
+
28
+ const require = createRequire(import.meta.url);
29
+
30
+ export class SharedDependencyResolutionError extends Data.TaggedError(
31
+ "SharedDependencyResolutionError",
32
+ )<{
33
+ readonly packageName: string;
34
+ readonly searched: string[];
35
+ }> {
36
+ constructor(packageName: string, searched: string[]) {
37
+ super({
38
+ packageName,
39
+ searched,
40
+ });
41
+ }
42
+
43
+ override get message() {
44
+ return (
45
+ `Could not resolve shared dependency "${this.packageName}". Looked in:\n` +
46
+ this.searched.map((location) => ` - ${location}`).join("\n") +
47
+ `\nUnresolved shared dependencies fail loudly (no "*", no "latest" fallback) — ` +
48
+ `install the package in the resolving workspace or pin a resolvable version.`
49
+ );
50
+ }
51
+ }
52
+
53
+ export type SharedDependencyResolution = "self" | "package" | "subpath";
54
+
55
+ export interface SharedDependencySpec {
56
+ name: string;
57
+ singleton: true;
58
+ /** exact-version pin (requiredVersion = resolved version, strictVersion = true) */
59
+ critical: boolean;
60
+ resolution: SharedDependencyResolution;
61
+ }
62
+
63
+ export const CORE_SHARED_DEPS = [
64
+ { name: "every-plugin", singleton: true, critical: true, resolution: "self" },
65
+ { name: "effect", singleton: true, critical: true, resolution: "package" },
66
+ { name: "zod", singleton: true, critical: false, resolution: "package" },
67
+ { name: "@orpc/contract", singleton: true, critical: true, resolution: "package" },
68
+ { name: "@orpc/client", singleton: true, critical: true, resolution: "package" },
69
+ { name: "@orpc/server", singleton: true, critical: true, resolution: "package" },
70
+ // v1's proven sharing set, restored: @orpc/openapi, @orpc/experimental-effect,
71
+ // and @orpc/publisher joined this list in the v2 fleet-spec pass and their
72
+ // share-scope consumption broke plugin loading at runtime
73
+ // (__webpack_modules__[r] is not a function — the runtime's import()-based
74
+ // provides hand the consumer an ESM namespace where a module factory is
75
+ // expected). They stay declared in each workspace's package.json and are
76
+ // bundled per workspace instead.
77
+ ] as const satisfies readonly SharedDependencySpec[];
78
+
79
+ export type CoreSharedDepName = (typeof CORE_SHARED_DEPS)[number]["name"];
80
+
81
+ const coreCriticalNames = CORE_SHARED_DEPS.flatMap((spec) => (spec.critical ? [spec.name] : []));
82
+
83
+ /**
84
+ * Effect-critical shared names, derived from the core list's `critical: true`
85
+ * entries — the one source of criticality (`strictVersion` pinning in the
86
+ * runtime's version-check machinery keys off this list).
87
+ */
88
+ export const EFFECT_CRITICAL_SHARED_DEPS: readonly EffectCriticalSharedDepName[] =
89
+ coreCriticalNames;
90
+
91
+ export type EffectCriticalSharedDepName = (typeof coreCriticalNames)[number];
92
+
93
+ export const isEffectCriticalSharedDep = (name: string): boolean =>
94
+ (EFFECT_CRITICAL_SHARED_DEPS as readonly string[]).includes(name);
95
+
96
+ export const UI_SHARED_DEPS = [
97
+ { name: "react", singleton: true, critical: true, resolution: "package" },
98
+ { name: "react-dom", singleton: true, critical: true, resolution: "package" },
99
+ { name: "@orpc/client", singleton: true, critical: true, resolution: "package" },
100
+ { name: "@orpc/contract", singleton: true, critical: true, resolution: "package" },
101
+ { name: "@tanstack/react-query", singleton: true, critical: true, resolution: "package" },
102
+ { name: "@tanstack/react-router", singleton: true, critical: true, resolution: "package" },
103
+ { name: "@lingui/core", singleton: true, critical: true, resolution: "package" },
104
+ { name: "@lingui/react", singleton: true, critical: true, resolution: "package" },
105
+ {
106
+ name: "everything-dev/ui/auth",
107
+ singleton: true,
108
+ critical: true,
109
+ resolution: "subpath",
110
+ },
111
+ {
112
+ name: "everything-dev/ui/i18n",
113
+ singleton: true,
114
+ critical: true,
115
+ resolution: "subpath",
116
+ },
117
+ ] as const satisfies readonly SharedDependencySpec[];
118
+
119
+ export const SHARED_DEP_SPECS: readonly SharedDependencySpec[] = (() => {
120
+ const byName = new Map<string, SharedDependencySpec>();
121
+ for (const spec of [...CORE_SHARED_DEPS, ...UI_SHARED_DEPS]) {
122
+ const existing = byName.get(spec.name);
123
+ if (existing) {
124
+ if (existing.critical !== spec.critical) {
125
+ throw new Error(
126
+ `Shared dependency spec conflict for "${spec.name}": criticality disagrees between the core and ui lists`,
127
+ );
128
+ }
129
+ continue;
130
+ }
131
+ byName.set(spec.name, spec);
132
+ }
133
+ return [...byName.values()];
134
+ })();
135
+
136
+ export interface SharedDependencyConfig {
137
+ version: string;
138
+ requiredVersion: string | false;
139
+ singleton: boolean;
140
+ strictVersion: boolean;
141
+ eager: boolean;
142
+ shareScope: string;
143
+ }
144
+
145
+ export type SharedDependencies = Record<string, SharedDependencyConfig>;
146
+
147
+ export type SharedConfigInput = {
148
+ version: string;
149
+ requiredVersion?: string | false;
150
+ singleton?: boolean;
151
+ strictVersion?: boolean;
152
+ eager?: boolean;
153
+ shareScope?: string;
154
+ };
155
+
156
+ export interface SharedDependencyResolutionOptions {
157
+ /** the building workspace to resolve from; default is this module's own location */
158
+ workspaceRoot?: string;
159
+ resolution?: "package" | "subpath";
160
+ }
161
+
162
+ function searchedNote(target: string): string {
163
+ return `require.resolve("${target}")`;
164
+ }
165
+
166
+ function findPackageJsonVersion(startDir: string, searched: string[]): string | null {
167
+ let currentDir = startDir;
168
+ for (let i = 0; i < 5; i += 1) {
169
+ const packageJsonPath = join(currentDir, "package.json");
170
+ searched.push(packageJsonPath);
171
+ if (existsSync(packageJsonPath)) {
172
+ try {
173
+ const version = (JSON.parse(readFileSync(packageJsonPath, "utf8")) as { version?: string })
174
+ .version;
175
+ if (version) return version;
176
+ } catch {}
177
+ }
178
+ const parent = dirname(currentDir);
179
+ if (parent === currentDir) break;
180
+ currentDir = parent;
181
+ }
182
+ return null;
183
+ }
184
+
185
+ function resolveSubpathVersion(
186
+ request: string,
187
+ workspaceRoot: string | undefined,
188
+ searched: string[],
189
+ ): string | null {
190
+ if (request.startsWith("@")) {
191
+ throw new Error(
192
+ `Scoped-package subpath "${request}" is not supported — subpath version resolution ` +
193
+ `handles unscoped specifiers only (the known subpath specs, everything-dev/ui/*, are unscoped).`,
194
+ );
195
+ }
196
+ const packageName = request.split("/")[0] ?? request;
197
+ const subpath = request.split("/").slice(1).join("/");
198
+ const candidates: string[] = [];
199
+ if (workspaceRoot) {
200
+ candidates.push(join(workspaceRoot, "node_modules", packageName, "package.json"));
201
+ }
202
+ const resolveRequests: Array<{ request: string; paths?: string[] }> = [
203
+ { request: `${packageName}/${subpath}`, ...(workspaceRoot ? { paths: [workspaceRoot] } : {}) },
204
+ { request: `${packageName}/${subpath}` },
205
+ {
206
+ request: `${packageName}/package.json`,
207
+ ...(workspaceRoot ? { paths: [workspaceRoot] } : {}),
208
+ },
209
+ { request: `${packageName}/package.json` },
210
+ ];
211
+ for (const { request: target, paths } of resolveRequests) {
212
+ try {
213
+ const resolved = require.resolve(target, paths ? { paths } : undefined);
214
+ searched.push(resolved);
215
+ candidates.push(
216
+ resolved.endsWith("package.json")
217
+ ? resolved
218
+ : resolve(dirname(resolved), "..", "..", "package.json"),
219
+ );
220
+ } catch {
221
+ searched.push(searchedNote(target));
222
+ }
223
+ }
224
+ for (const candidate of candidates) {
225
+ if (!existsSync(candidate)) continue;
226
+ try {
227
+ const version = (JSON.parse(readFileSync(candidate, "utf8")) as { version?: string }).version;
228
+ if (version) return version;
229
+ } catch {}
230
+ }
231
+ return null;
232
+ }
233
+
234
+ export function resolveSharedVersion(
235
+ name: string,
236
+ options: SharedDependencyResolutionOptions = {},
237
+ ): string {
238
+ const searched: string[] = [];
239
+ const { workspaceRoot, resolution = "package" } = options;
240
+
241
+ if (resolution === "subpath") {
242
+ const version = resolveSubpathVersion(name, workspaceRoot, searched);
243
+ if (version) return version;
244
+ throw new SharedDependencyResolutionError(name, searched);
245
+ }
246
+
247
+ const roots: Array<string | undefined> = workspaceRoot ? [workspaceRoot, undefined] : [undefined];
248
+ for (const root of roots) {
249
+ try {
250
+ const resolved = root ? require.resolve(name, { paths: [root] }) : require.resolve(name);
251
+ searched.push(resolved);
252
+ const version = findPackageJsonVersion(dirname(resolved), searched);
253
+ if (version) return version;
254
+ } catch {
255
+ searched.push(searchedNote(name));
256
+ }
257
+ }
258
+ throw new SharedDependencyResolutionError(name, searched);
259
+ }
260
+
261
+ function resolveOwnVersion(searched: string[]): string {
262
+ const localPackageJson = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
263
+ searched.push(localPackageJson);
264
+ if (existsSync(localPackageJson)) {
265
+ try {
266
+ const version = (JSON.parse(readFileSync(localPackageJson, "utf8")) as { version?: string })
267
+ .version;
268
+ if (version) return version;
269
+ } catch {}
270
+ }
271
+ try {
272
+ const resolved = require.resolve("every-plugin/package.json");
273
+ searched.push(resolved);
274
+ const version = (JSON.parse(readFileSync(resolved, "utf8")) as { version?: string }).version;
275
+ if (version) return version;
276
+ } catch {
277
+ searched.push(searchedNote("every-plugin/package.json"));
278
+ }
279
+ throw new SharedDependencyResolutionError("every-plugin", searched);
280
+ }
281
+
282
+ export function shareConfigFor(
283
+ spec: SharedDependencySpec,
284
+ version: string,
285
+ ): Omit<SharedDependencyConfig, "version"> {
286
+ return spec.critical
287
+ ? {
288
+ requiredVersion: version,
289
+ singleton: true,
290
+ strictVersion: true,
291
+ eager: false,
292
+ shareScope: "default",
293
+ }
294
+ : {
295
+ requiredVersion: false,
296
+ singleton: true,
297
+ strictVersion: false,
298
+ eager: false,
299
+ shareScope: "default",
300
+ };
301
+ }
302
+
303
+ export interface SharedDepsBuildOptions {
304
+ /** the every-plugin share version; default resolves the installed package.json */
305
+ ownVersion?: string;
306
+ }
307
+
308
+ function specVersion(spec: SharedDependencySpec, options: SharedDepsBuildOptions): string {
309
+ if (spec.resolution === "self") {
310
+ return options.ownVersion ?? resolveOwnVersion([`own package.json of "${spec.name}"`]);
311
+ }
312
+ return resolveSharedVersion(spec.name, {
313
+ resolution: spec.resolution === "subpath" ? "subpath" : "package",
314
+ });
315
+ }
316
+
317
+ export function getPluginSharedDependencies(
318
+ options: SharedDepsBuildOptions = {},
319
+ ): SharedDependencies {
320
+ return Object.fromEntries(
321
+ CORE_SHARED_DEPS.map((spec) => {
322
+ const version = specVersion(spec, options);
323
+ return [spec.name, { version, ...shareConfigFor(spec, version) }];
324
+ }),
325
+ );
326
+ }
327
+
328
+ export interface HostSharedEntry {
329
+ version: string;
330
+ shareScope: string;
331
+ shareConfig: {
332
+ singleton: boolean;
333
+ requiredVersion: string | false;
334
+ strictVersion: boolean;
335
+ eager: boolean;
336
+ };
337
+ }
338
+
339
+ export function toHostSharedEntry(name: string, config: SharedConfigInput): HostSharedEntry {
340
+ const normalized = normalizeSharedConfig(config, name);
341
+ return {
342
+ version: normalized.version,
343
+ shareScope: normalized.shareScope,
344
+ shareConfig: {
345
+ singleton: normalized.singleton,
346
+ requiredVersion: normalized.requiredVersion,
347
+ strictVersion: normalized.strictVersion,
348
+ eager: normalized.eager,
349
+ },
350
+ };
351
+ }
352
+
353
+ /**
354
+ * The runtime mf-config's core shared map: the same entries
355
+ * `getPluginSharedDependencies` assembles, shaped through the one host mapper
356
+ * (`toHostSharedEntry`) so both consumers derive from a single entry type.
357
+ */
358
+ export function buildMfCoreSharedDependencies(
359
+ options: SharedDepsBuildOptions = {},
360
+ ): Record<string, HostSharedEntry> {
361
+ return Object.fromEntries(
362
+ Object.entries(getPluginSharedDependencies(options)).map(([name, config]) => [
363
+ name,
364
+ toHostSharedEntry(name, config),
365
+ ]),
366
+ );
367
+ }
368
+
369
+ export interface UiSharedDepEntry {
370
+ version: string;
371
+ requiredVersion: string | false;
372
+ singleton: true;
373
+ strictVersion: boolean;
374
+ eager: false;
375
+ shareScope: "default";
376
+ /** consumer role only: no bundled fallback copy — the provider provides */
377
+ import?: false;
378
+ }
379
+
380
+ export interface UiSharedDepsOptions {
381
+ /** explicit core-shell parity opt-out; default is the strict singleton */
382
+ strictVersion?: boolean;
383
+ role?: "provider" | "consumer";
384
+ workspaceRoot?: string;
385
+ }
386
+
387
+ export function createUiSharedDeps(
388
+ options: UiSharedDepsOptions = {},
389
+ ): Record<string, UiSharedDepEntry> {
390
+ const deps: Record<string, UiSharedDepEntry> = {};
391
+ for (const spec of UI_SHARED_DEPS) {
392
+ const version = resolveSharedVersion(spec.name, {
393
+ workspaceRoot: options.workspaceRoot,
394
+ resolution: spec.resolution === "subpath" ? "subpath" : "package",
395
+ });
396
+ const strict = options.strictVersion !== false;
397
+ deps[spec.name] = {
398
+ version,
399
+ requiredVersion: strict ? version : false,
400
+ singleton: true,
401
+ strictVersion: strict,
402
+ eager: false,
403
+ shareScope: "default",
404
+ ...(options.role === "consumer" ? { import: false as const } : {}),
405
+ };
406
+ }
407
+ return deps;
408
+ }
409
+
410
+ const UNRESOLVED_VERSIONS = new Set(["*", "latest", ""]);
411
+
412
+ export function assertResolvedSharedVersion(name: string, version: unknown): string {
413
+ if (typeof version !== "string" || UNRESOLVED_VERSIONS.has(version.trim())) {
414
+ throw new SharedDependencyResolutionError(name, [
415
+ `declared version ${JSON.stringify(version ?? null)} is not resolvable — "*", "latest", and empty fail loudly instead of disabling the strict-singleton guard`,
416
+ ]);
417
+ }
418
+ return version;
419
+ }
420
+
421
+ export function normalizeSharedConfig(
422
+ config: SharedConfigInput,
423
+ name: string,
424
+ ): SharedDependencyConfig {
425
+ const version = assertResolvedSharedVersion(name, config.version);
426
+ return {
427
+ version,
428
+ requiredVersion: config.requiredVersion ?? false,
429
+ singleton: config.singleton ?? false,
430
+ strictVersion: config.strictVersion ?? false,
431
+ eager: config.eager ?? false,
432
+ shareScope: config.shareScope ?? "default",
433
+ };
434
+ }
435
+
436
+ function comparableSharedConfig(config: SharedConfigInput) {
437
+ return {
438
+ version: config.version,
439
+ requiredVersion: config.requiredVersion ?? false,
440
+ singleton: config.singleton ?? false,
441
+ strictVersion: config.strictVersion ?? false,
442
+ eager: config.eager ?? false,
443
+ shareScope: config.shareScope ?? "default",
444
+ };
445
+ }
446
+
447
+ export function isSameSharedConfig(a: SharedConfigInput, b: SharedConfigInput): boolean {
448
+ const left = comparableSharedConfig(a);
449
+ const right = comparableSharedConfig(b);
450
+ return (
451
+ left.version === right.version &&
452
+ left.requiredVersion === right.requiredVersion &&
453
+ left.singleton === right.singleton &&
454
+ left.strictVersion === right.strictVersion &&
455
+ left.eager === right.eager &&
456
+ left.shareScope === right.shareScope
457
+ );
458
+ }
459
+
460
+ export function mergeSharedMaps(
461
+ ...maps: Array<Record<string, SharedConfigInput> | undefined>
462
+ ): Record<string, SharedDependencyConfig> {
463
+ const merged: Record<string, SharedDependencyConfig> = {};
464
+ for (const map of maps) {
465
+ if (!map) continue;
466
+ for (const [name, config] of Object.entries(map)) {
467
+ const normalized = normalizeSharedConfig(config, name);
468
+ const existing = merged[name];
469
+ if (existing && !isSameSharedConfig(existing, normalized)) {
470
+ throw new Error(
471
+ `Conflicting shared dependency "${name}" in shared dependency configuration`,
472
+ );
473
+ }
474
+ merged[name] = normalized;
475
+ }
476
+ }
477
+ return merged;
478
+ }
package/src/types.ts CHANGED
@@ -4,8 +4,8 @@ import type {
4
4
  InferSchemaInput,
5
5
  InferSchemaOutput,
6
6
  } from "@orpc/contract";
7
- import type { Router, RouterClient } from "@orpc/server";
8
- import type { Scope } from "effect";
7
+ import type { ContractedRouter, RouterClient } from "@orpc/server";
8
+ import type { Context, Scope } from "effect";
9
9
  import type { Plugin } from "./plugin";
10
10
 
11
11
  /**
@@ -26,7 +26,7 @@ export interface RegisteredPlugins {}
26
26
  /**
27
27
  * Base type for any plugin instance.
28
28
  */
29
- export type AnyPlugin = Plugin<AnyContractRouter, AnySchema, AnySchema, AnySchema | undefined, any>;
29
+ export type AnyPlugin = Plugin<AnyContractRouter, AnySchema, AnySchema, AnySchema | undefined>;
30
30
 
31
31
  /**
32
32
  * Loaded plugin constructor with binding information
@@ -100,13 +100,23 @@ export type PluginContext<T> = T extends {
100
100
  * Extract router type from plugin binding
101
101
  * Uses 'any' for context to support nested router compositions
102
102
  */
103
- export type PluginRouterType<T> = Router<PluginContract<T>, any>;
103
+ export type PluginRouterType<T> = ContractedRouter<PluginContract<T>, any>;
104
104
 
105
105
  /**
106
106
  * Extract client type from plugin binding
107
107
  */
108
108
  export type PluginClientType<T> = RouterClient<PluginRouterType<T>>;
109
109
 
110
+ /**
111
+ * Sibling plugin entry passed to `initialize` and `createRouter`.
112
+ * `client` creates a typed in-process client for the plugin's router;
113
+ * `router` is the raw implemented router for cross-plugin merging.
114
+ */
115
+ export type PluginServicesEntry<T = any> = {
116
+ client: (context?: PluginContextInput<T>) => PluginClientType<T>;
117
+ router: PluginRouterType<T>;
118
+ };
119
+
110
120
  /**
111
121
  * Extract plugin type from registered plugins by key
112
122
  * @param K - The plugin key
@@ -121,15 +131,10 @@ export type RegisteredPlugin<K extends keyof R, R = RegisteredPlugins> = R[K] ex
121
131
  secrets: infer S extends AnySchema;
122
132
  context: infer TRequestContext extends AnySchema | undefined;
123
133
  }
124
- ? Plugin<C, V, S, TRequestContext, any>
134
+ ? Plugin<C, V, S, TRequestContext>
125
135
  : never
126
136
  : never;
127
137
 
128
- /**
129
- * Extract plugin constructor type from registry entry
130
- */
131
- export type PluginConstructor<K extends keyof R, R = RegisteredPlugins> = RegisteredPlugin<K, R>;
132
-
133
138
  /**
134
139
  * Extract context input type from plugin binding (for client creation)
135
140
  */
@@ -144,14 +149,6 @@ export type PluginConfigInput<T> = {
144
149
  secrets: InferSchemaInput<PluginSecrets<T>>;
145
150
  };
146
151
 
147
- /**
148
- * Extract deps context type from plugin instance (used for initialization)
149
- */
150
- export type ContextOf<T extends AnyPlugin> =
151
- T extends Plugin<AnyContractRouter, AnySchema, AnySchema, AnySchema | undefined, infer TDeps>
152
- ? TDeps
153
- : never;
154
-
155
152
  /**
156
153
  * Plugin metadata for remote loading
157
154
  */
@@ -166,11 +163,6 @@ export type PluginMetadata = {
166
163
  */
167
164
  export type PluginRegistry = Record<string, PluginRegistryEntry>;
168
165
 
169
- /**
170
- * Legacy metadata-only registry (for backwards compatibility)
171
- */
172
- export type PluginMetadataRegistry = Record<string, PluginMetadata>;
173
-
174
166
  /**
175
167
  * Configuration for secrets injection.
176
168
  * Secrets are hydrated into plugin configs using template replacement.
@@ -205,8 +197,13 @@ export interface InitializedPlugin<T extends AnyPlugin = AnyPlugin> {
205
197
  variables: InferSchemaOutput<T["configSchema"]["variables"]>;
206
198
  secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
207
199
  };
208
- readonly context: ContextOf<T>;
209
- readonly scope: Scope.CloseableScope;
200
+ /**
201
+ * Built Effect context from the plugin's initialize Layer. Provided to
202
+ * handlers as `effect/context` — `.effect()` handlers `yield* Tag`,
203
+ * plain handlers use `Context.get(context["effect/context"], Tag)`.
204
+ */
205
+ readonly effectContext: Context.Context<any>;
206
+ readonly scope: Scope.Closeable;
210
207
  }
211
208
 
212
209
  /**
@@ -240,18 +237,6 @@ export type UsePluginResult<K extends keyof R, R = RegisteredPlugins> =
240
237
  }
241
238
  : VerifyPluginBinding<K, R>;
242
239
 
243
- /**
244
- * Runtime options
245
- */
246
- export interface RuntimeOptions {
247
- isolation?: "strict" | "shared" | "none";
248
- memoryLimit?: string;
249
- concurrency?: number;
250
- resourceTimeout?: string;
251
- debug?: boolean;
252
- metrics?: boolean;
253
- }
254
-
255
240
  /**
256
241
  * Extract registry type from runtime instance or use type directly
257
242
  * This allows EveryPlugin.Infer to work with both:
@@ -295,15 +280,4 @@ export interface PluginRuntimeConfig<
295
280
  > {
296
281
  registry: R;
297
282
  secrets?: SecretsConfig;
298
- options?: RuntimeOptions;
299
- }
300
-
301
- /**
302
- * Legacy plugin runtime configuration (metadata-only registry)
303
- * @deprecated Use PluginRuntimeConfig with module/remote entries instead
304
- */
305
- export interface LegacyPluginRuntimeConfig {
306
- registry: PluginMetadataRegistry;
307
- secrets?: SecretsConfig;
308
- options?: RuntimeOptions;
309
283
  }