every-plugin 2.10.1 → 3.0.0-rc.10

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 (480) 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 +59 -0
  25. package/dist/build/rspack/chunk-completeness-plugin.cjs.map +1 -0
  26. package/dist/build/rspack/chunk-completeness-plugin.mjs +59 -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 +122 -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 +114 -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/client.cjs +69 -0
  133. package/dist/client.cjs.map +1 -0
  134. package/dist/client.d.cts +15 -0
  135. package/dist/client.d.cts.map +1 -0
  136. package/dist/client.d.mts +15 -0
  137. package/dist/client.d.mts.map +1 -0
  138. package/dist/client.mjs +68 -0
  139. package/dist/client.mjs.map +1 -0
  140. package/dist/dev/host.cjs +149 -0
  141. package/dist/dev/host.cjs.map +1 -0
  142. package/dist/dev/host.d.cts +32 -0
  143. package/dist/dev/host.d.cts.map +1 -0
  144. package/dist/dev/host.d.mts +32 -0
  145. package/dist/dev/host.d.mts.map +1 -0
  146. package/dist/dev/host.mjs +148 -0
  147. package/dist/dev/host.mjs.map +1 -0
  148. package/dist/dev/serve.cjs +295 -0
  149. package/dist/dev/serve.cjs.map +1 -0
  150. package/dist/dev/serve.d.cts +23 -0
  151. package/dist/dev/serve.d.cts.map +1 -0
  152. package/dist/dev/serve.d.mts +23 -0
  153. package/dist/dev/serve.d.mts.map +1 -0
  154. package/dist/dev/serve.mjs +289 -0
  155. package/dist/dev/serve.mjs.map +1 -0
  156. package/dist/dev/watch-kill.cjs +39 -0
  157. package/dist/dev/watch-kill.cjs.map +1 -0
  158. package/dist/dev/watch-kill.mjs +38 -0
  159. package/dist/dev/watch-kill.mjs.map +1 -0
  160. package/dist/effect-helpers.cjs +23 -0
  161. package/dist/effect-helpers.cjs.map +1 -0
  162. package/dist/effect-helpers.d.cts +20 -0
  163. package/dist/effect-helpers.d.cts.map +1 -0
  164. package/dist/effect-helpers.d.mts +20 -0
  165. package/dist/effect-helpers.d.mts.map +1 -0
  166. package/dist/effect-helpers.mjs +22 -0
  167. package/dist/effect-helpers.mjs.map +1 -0
  168. package/dist/errors.cjs +50 -69
  169. package/dist/errors.cjs.map +1 -1
  170. package/dist/errors.d.cts +13 -96
  171. package/dist/errors.d.cts.map +1 -1
  172. package/dist/errors.d.mts +13 -96
  173. package/dist/errors.d.mts.map +1 -1
  174. package/dist/errors.mjs +16 -34
  175. package/dist/errors.mjs.map +1 -1
  176. package/dist/identity.cjs +19 -0
  177. package/dist/identity.cjs.map +1 -0
  178. package/dist/identity.d.cts +33 -0
  179. package/dist/identity.d.cts.map +1 -0
  180. package/dist/identity.d.mts +33 -0
  181. package/dist/identity.d.mts.map +1 -0
  182. package/dist/identity.mjs +16 -0
  183. package/dist/identity.mjs.map +1 -0
  184. package/dist/index.cjs +11 -5
  185. package/dist/index.d.cts +9 -6
  186. package/dist/index.d.mts +9 -6
  187. package/dist/index.mjs +7 -4
  188. package/dist/plugin.cjs +13 -26
  189. package/dist/plugin.cjs.map +1 -1
  190. package/dist/plugin.d.cts +64 -25
  191. package/dist/plugin.d.cts.map +1 -1
  192. package/dist/plugin.d.mts +64 -25
  193. package/dist/plugin.d.mts.map +1 -1
  194. package/dist/plugin.mjs +16 -29
  195. package/dist/plugin.mjs.map +1 -1
  196. package/dist/remote-entry.cjs +102 -0
  197. package/dist/remote-entry.cjs.map +1 -0
  198. package/dist/remote-entry.d.cts +52 -0
  199. package/dist/remote-entry.d.cts.map +1 -0
  200. package/dist/remote-entry.d.mts +52 -0
  201. package/dist/remote-entry.d.mts.map +1 -0
  202. package/dist/remote-entry.mjs +98 -0
  203. package/dist/remote-entry.mjs.map +1 -0
  204. package/dist/runtime/errors.cjs +159 -33
  205. package/dist/runtime/errors.cjs.map +1 -1
  206. package/dist/runtime/errors.d.cts +64 -7
  207. package/dist/runtime/errors.d.cts.map +1 -1
  208. package/dist/runtime/errors.d.mts +64 -7
  209. package/dist/runtime/errors.d.mts.map +1 -1
  210. package/dist/runtime/errors.mjs +154 -30
  211. package/dist/runtime/errors.mjs.map +1 -1
  212. package/dist/runtime/index.cjs +95 -23
  213. package/dist/runtime/index.cjs.map +1 -1
  214. package/dist/runtime/index.d.cts +16 -0
  215. package/dist/runtime/index.d.cts.map +1 -1
  216. package/dist/runtime/index.d.mts +16 -0
  217. package/dist/runtime/index.d.mts.map +1 -1
  218. package/dist/runtime/index.mjs +98 -26
  219. package/dist/runtime/index.mjs.map +1 -1
  220. package/dist/runtime/mf-config.cjs +3 -78
  221. package/dist/runtime/mf-config.cjs.map +1 -1
  222. package/dist/runtime/mf-config.d.cts +3 -49
  223. package/dist/runtime/mf-config.d.cts.map +1 -1
  224. package/dist/runtime/mf-config.d.mts +3 -49
  225. package/dist/runtime/mf-config.d.mts.map +1 -1
  226. package/dist/runtime/mf-config.mjs +5 -78
  227. package/dist/runtime/mf-config.mjs.map +1 -1
  228. package/dist/runtime/services/module-federation.service.cjs +57 -12
  229. package/dist/runtime/services/module-federation.service.cjs.map +1 -1
  230. package/dist/runtime/services/module-federation.service.d.cts +4 -13
  231. package/dist/runtime/services/module-federation.service.d.mts +4 -13
  232. package/dist/runtime/services/module-federation.service.mjs +57 -14
  233. package/dist/runtime/services/module-federation.service.mjs.map +1 -1
  234. package/dist/runtime/services/normalize.cjs +2 -22
  235. package/dist/runtime/services/normalize.d.cts +2 -21
  236. package/dist/runtime/services/normalize.d.mts +2 -21
  237. package/dist/runtime/services/normalize.mjs +2 -21
  238. package/dist/runtime/services/plugin-lifecycle.service.cjs +9 -11
  239. package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -1
  240. package/dist/runtime/services/plugin-lifecycle.service.d.cts +3 -16
  241. package/dist/runtime/services/plugin-lifecycle.service.d.mts +3 -16
  242. package/dist/runtime/services/plugin-lifecycle.service.mjs +10 -13
  243. package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -1
  244. package/dist/runtime/services/plugin-loader.service.cjs +59 -30
  245. package/dist/runtime/services/plugin-loader.service.cjs.map +1 -1
  246. package/dist/runtime/services/plugin-loader.service.d.cts +6 -53
  247. package/dist/runtime/services/plugin-loader.service.d.mts +6 -53
  248. package/dist/runtime/services/plugin-loader.service.mjs +58 -31
  249. package/dist/runtime/services/plugin-loader.service.mjs.map +1 -1
  250. package/dist/runtime/services/plugin.service.cjs +10 -12
  251. package/dist/runtime/services/plugin.service.cjs.map +1 -1
  252. package/dist/runtime/services/plugin.service.d.cts +14 -36
  253. package/dist/runtime/services/plugin.service.d.cts.map +1 -1
  254. package/dist/runtime/services/plugin.service.d.mts +14 -36
  255. package/dist/runtime/services/plugin.service.d.mts.map +1 -1
  256. package/dist/runtime/services/plugin.service.mjs +14 -18
  257. package/dist/runtime/services/plugin.service.mjs.map +1 -1
  258. package/dist/runtime/services/secrets.service.cjs +12 -12
  259. package/dist/runtime/services/secrets.service.cjs.map +1 -1
  260. package/dist/runtime/services/secrets.service.d.cts +3 -15
  261. package/dist/runtime/services/secrets.service.d.mts +3 -15
  262. package/dist/runtime/services/secrets.service.mjs +12 -13
  263. package/dist/runtime/services/secrets.service.mjs.map +1 -1
  264. package/dist/runtime/services/shared-identity.cjs +40 -0
  265. package/dist/runtime/services/shared-identity.cjs.map +1 -0
  266. package/dist/runtime/services/shared-identity.mjs +38 -0
  267. package/dist/runtime/services/shared-identity.mjs.map +1 -0
  268. package/dist/runtime/validation.cjs +2 -2
  269. package/dist/runtime/validation.cjs.map +1 -1
  270. package/dist/runtime/validation.mjs +2 -2
  271. package/dist/runtime/validation.mjs.map +1 -1
  272. package/dist/shared-deps-spec.cjs +384 -0
  273. package/dist/shared-deps-spec.cjs.map +1 -0
  274. package/dist/shared-deps-spec.d.cts +182 -0
  275. package/dist/shared-deps-spec.d.cts.map +1 -0
  276. package/dist/shared-deps-spec.d.mts +182 -0
  277. package/dist/shared-deps-spec.d.mts.map +1 -0
  278. package/dist/shared-deps-spec.mjs +368 -0
  279. package/dist/shared-deps-spec.mjs.map +1 -0
  280. package/dist/types.d.cts +47 -41
  281. package/dist/types.d.cts.map +1 -1
  282. package/dist/types.d.mts +47 -41
  283. package/dist/types.d.mts.map +1 -1
  284. package/dist/ui/manifest/construct.cjs +319 -0
  285. package/dist/ui/manifest/construct.cjs.map +1 -0
  286. package/dist/ui/manifest/construct.d.cts +48 -0
  287. package/dist/ui/manifest/construct.d.cts.map +1 -0
  288. package/dist/ui/manifest/construct.d.mts +48 -0
  289. package/dist/ui/manifest/construct.d.mts.map +1 -0
  290. package/dist/ui/manifest/construct.mjs +319 -0
  291. package/dist/ui/manifest/construct.mjs.map +1 -0
  292. package/dist/ui/manifest/contract.cjs +34 -0
  293. package/dist/ui/manifest/contract.cjs.map +1 -0
  294. package/dist/ui/manifest/contract.d.cts +26 -0
  295. package/dist/ui/manifest/contract.d.cts.map +1 -0
  296. package/dist/ui/manifest/contract.d.mts +26 -0
  297. package/dist/ui/manifest/contract.d.mts.map +1 -0
  298. package/dist/ui/manifest/contract.mjs +26 -0
  299. package/dist/ui/manifest/contract.mjs.map +1 -0
  300. package/dist/ui/manifest/descriptor.cjs +64 -0
  301. package/dist/ui/manifest/descriptor.cjs.map +1 -0
  302. package/dist/ui/manifest/descriptor.d.cts +60 -0
  303. package/dist/ui/manifest/descriptor.d.cts.map +1 -0
  304. package/dist/ui/manifest/descriptor.d.mts +60 -0
  305. package/dist/ui/manifest/descriptor.d.mts.map +1 -0
  306. package/dist/ui/manifest/descriptor.mjs +61 -0
  307. package/dist/ui/manifest/descriptor.mjs.map +1 -0
  308. package/dist/ui/manifest/generator.cjs +128 -0
  309. package/dist/ui/manifest/generator.cjs.map +1 -0
  310. package/dist/ui/manifest/generator.d.cts +41 -0
  311. package/dist/ui/manifest/generator.d.cts.map +1 -0
  312. package/dist/ui/manifest/generator.d.mts +41 -0
  313. package/dist/ui/manifest/generator.d.mts.map +1 -0
  314. package/dist/ui/manifest/generator.mjs +125 -0
  315. package/dist/ui/manifest/generator.mjs.map +1 -0
  316. package/dist/ui/manifest/index.cjs +35 -0
  317. package/dist/ui/manifest/index.d.cts +9 -0
  318. package/dist/ui/manifest/index.d.mts +9 -0
  319. package/dist/ui/manifest/index.mjs +9 -0
  320. package/dist/ui/manifest/manifest-schema.cjs +97 -0
  321. package/dist/ui/manifest/manifest-schema.cjs.map +1 -0
  322. package/dist/ui/manifest/manifest-schema.d.cts +132 -0
  323. package/dist/ui/manifest/manifest-schema.d.cts.map +1 -0
  324. package/dist/ui/manifest/manifest-schema.d.mts +132 -0
  325. package/dist/ui/manifest/manifest-schema.d.mts.map +1 -0
  326. package/dist/ui/manifest/manifest-schema.mjs +90 -0
  327. package/dist/ui/manifest/manifest-schema.mjs.map +1 -0
  328. package/dist/ui/manifest/mount-registry.cjs +52 -0
  329. package/dist/ui/manifest/mount-registry.cjs.map +1 -0
  330. package/dist/ui/manifest/mount-registry.d.cts +61 -0
  331. package/dist/ui/manifest/mount-registry.d.cts.map +1 -0
  332. package/dist/ui/manifest/mount-registry.d.mts +61 -0
  333. package/dist/ui/manifest/mount-registry.d.mts.map +1 -0
  334. package/dist/ui/manifest/mount-registry.mjs +48 -0
  335. package/dist/ui/manifest/mount-registry.mjs.map +1 -0
  336. package/dist/ui/manifest/nav.cjs +13 -0
  337. package/dist/ui/manifest/nav.cjs.map +1 -0
  338. package/dist/ui/manifest/nav.d.cts +34 -0
  339. package/dist/ui/manifest/nav.d.cts.map +1 -0
  340. package/dist/ui/manifest/nav.d.mts +34 -0
  341. package/dist/ui/manifest/nav.d.mts.map +1 -0
  342. package/dist/ui/manifest/nav.mjs +13 -0
  343. package/dist/ui/manifest/nav.mjs.map +1 -0
  344. package/dist/ui/manifest/route-config.cjs +33 -0
  345. package/dist/ui/manifest/route-config.cjs.map +1 -0
  346. package/dist/ui/manifest/route-config.d.cts +40 -0
  347. package/dist/ui/manifest/route-config.d.cts.map +1 -0
  348. package/dist/ui/manifest/route-config.d.mts +40 -0
  349. package/dist/ui/manifest/route-config.d.mts.map +1 -0
  350. package/dist/ui/manifest/route-config.mjs +33 -0
  351. package/dist/ui/manifest/route-config.mjs.map +1 -0
  352. package/dist/version-manifest.cjs +77 -0
  353. package/dist/version-manifest.cjs.map +1 -0
  354. package/dist/version-manifest.d.cts +62 -0
  355. package/dist/version-manifest.d.cts.map +1 -0
  356. package/dist/version-manifest.d.mts +62 -0
  357. package/dist/version-manifest.d.mts.map +1 -0
  358. package/dist/version-manifest.mjs +75 -0
  359. package/dist/version-manifest.mjs.map +1 -0
  360. package/package.json +182 -68
  361. package/skills/plugin-client/SKILL.md +34 -9
  362. package/skills/plugin-development/SKILL.md +79 -47
  363. package/skills/plugin-testing/SKILL.md +42 -12
  364. package/src/build/artifact-names.ts +117 -0
  365. package/src/build/contract-types.ts +101 -0
  366. package/src/build/rspack/build-report-plugin.ts +34 -0
  367. package/src/build/rspack/chunk-completeness-plugin.ts +66 -0
  368. package/src/build/rspack/compose.ts +87 -0
  369. package/src/build/rspack/fix-mf-data-uri-plugin.ts +23 -12
  370. package/src/build/rspack/generated-config.ts +35 -0
  371. package/src/build/rspack/index.ts +10 -5
  372. package/src/build/rspack/module-federation.ts +1 -1
  373. package/src/build/rspack/plugin.ts +103 -105
  374. package/src/build/rspack/utils.ts +8 -2
  375. package/src/build/ui/factory.ts +96 -0
  376. package/src/build/ui/generated-config.ts +137 -0
  377. package/src/build/ui/hash-artifacts-plugin.ts +79 -0
  378. package/src/build/ui/index.ts +98 -0
  379. package/src/build/ui/manifest-plugin.ts +54 -0
  380. package/src/build/ui/rsbuild-config.ts +256 -0
  381. package/src/build/ui/stubs.ts +103 -0
  382. package/src/cli.ts +100 -0
  383. package/src/client.ts +111 -0
  384. package/src/dev/host.ts +235 -0
  385. package/src/dev/serve.ts +359 -0
  386. package/src/dev/watch-kill.ts +58 -0
  387. package/src/effect-helpers.ts +25 -0
  388. package/src/errors.ts +17 -18
  389. package/src/identity.ts +36 -0
  390. package/src/index.ts +13 -0
  391. package/src/plugin.ts +94 -91
  392. package/src/remote-entry.ts +170 -0
  393. package/src/runtime/errors.ts +229 -26
  394. package/src/runtime/index.ts +132 -43
  395. package/src/runtime/mf-config.ts +12 -107
  396. package/src/runtime/services/module-federation.service.ts +218 -117
  397. package/src/runtime/services/normalize.ts +1 -18
  398. package/src/runtime/services/plugin-lifecycle.service.ts +66 -75
  399. package/src/runtime/services/plugin-loader.service.ts +280 -209
  400. package/src/runtime/services/plugin.service.ts +61 -43
  401. package/src/runtime/services/secrets.service.ts +20 -15
  402. package/src/runtime/services/shared-identity.ts +68 -0
  403. package/src/runtime/validation.ts +5 -7
  404. package/src/shared-deps-spec.ts +478 -0
  405. package/src/types.ts +62 -50
  406. package/src/ui/manifest/construct.ts +456 -0
  407. package/src/ui/manifest/contract.ts +33 -0
  408. package/src/ui/manifest/descriptor.ts +96 -0
  409. package/src/ui/manifest/generator.ts +238 -0
  410. package/src/ui/manifest/index.ts +55 -0
  411. package/src/ui/manifest/manifest-schema.ts +107 -0
  412. package/src/ui/manifest/mount-registry.ts +50 -0
  413. package/src/ui/manifest/nav.ts +43 -0
  414. package/src/ui/manifest/route-config.ts +82 -0
  415. package/src/version-manifest.ts +106 -0
  416. package/dist/build/rspack/dev-server-middleware.cjs +0 -248
  417. package/dist/build/rspack/dev-server-middleware.cjs.map +0 -1
  418. package/dist/build/rspack/dev-server-middleware.mjs +0 -247
  419. package/dist/build/rspack/dev-server-middleware.mjs.map +0 -1
  420. package/dist/build/shared-deps.cjs +0 -83
  421. package/dist/build/shared-deps.cjs.map +0 -1
  422. package/dist/build/shared-deps.d.cts +0 -67
  423. package/dist/build/shared-deps.d.cts.map +0 -1
  424. package/dist/build/shared-deps.d.mts +0 -67
  425. package/dist/build/shared-deps.d.mts.map +0 -1
  426. package/dist/build/shared-deps.mjs +0 -79
  427. package/dist/build/shared-deps.mjs.map +0 -1
  428. package/dist/effect.cjs +0 -9
  429. package/dist/effect.d.cts +0 -1
  430. package/dist/effect.d.mts +0 -1
  431. package/dist/effect.mjs +0 -3
  432. package/dist/orpc-openapi.cjs +0 -17
  433. package/dist/orpc-openapi.d.cts +0 -2
  434. package/dist/orpc-openapi.d.mts +0 -2
  435. package/dist/orpc-openapi.mjs +0 -5
  436. package/dist/orpc.cjs +0 -46
  437. package/dist/orpc.d.cts +0 -7
  438. package/dist/orpc.d.mts +0 -7
  439. package/dist/orpc.mjs +0 -11
  440. package/dist/package.cjs +0 -23
  441. package/dist/package.cjs.map +0 -1
  442. package/dist/package.mjs +0 -17
  443. package/dist/package.mjs.map +0 -1
  444. package/dist/runtime/services/module-federation.service.d.cts.map +0 -1
  445. package/dist/runtime/services/module-federation.service.d.mts.map +0 -1
  446. package/dist/runtime/services/normalize.cjs.map +0 -1
  447. package/dist/runtime/services/normalize.d.cts.map +0 -1
  448. package/dist/runtime/services/normalize.d.mts.map +0 -1
  449. package/dist/runtime/services/normalize.mjs.map +0 -1
  450. package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +0 -1
  451. package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +0 -1
  452. package/dist/runtime/services/plugin-loader.service.d.cts.map +0 -1
  453. package/dist/runtime/services/plugin-loader.service.d.mts.map +0 -1
  454. package/dist/runtime/services/secrets.service.d.cts.map +0 -1
  455. package/dist/runtime/services/secrets.service.d.mts.map +0 -1
  456. package/dist/testing/index.cjs +0 -57
  457. package/dist/testing/index.cjs.map +0 -1
  458. package/dist/testing/index.d.cts +0 -54
  459. package/dist/testing/index.d.cts.map +0 -1
  460. package/dist/testing/index.d.mts +0 -54
  461. package/dist/testing/index.d.mts.map +0 -1
  462. package/dist/testing/index.mjs +0 -55
  463. package/dist/testing/index.mjs.map +0 -1
  464. package/dist/zod-core.cjs +0 -9
  465. package/dist/zod-core.d.cts +0 -1
  466. package/dist/zod-core.d.mts +0 -1
  467. package/dist/zod-core.mjs +0 -3
  468. package/dist/zod.cjs +0 -11
  469. package/dist/zod.d.cts +0 -2
  470. package/dist/zod.d.mts +0 -2
  471. package/dist/zod.mjs +0 -3
  472. package/src/build/rspack/dev-server-middleware.ts +0 -324
  473. package/src/build/shared-deps.ts +0 -102
  474. package/src/effect.ts +0 -1
  475. package/src/orpc-openapi.ts +0 -2
  476. package/src/orpc.ts +0 -9
  477. package/src/testing/index.ts +0 -87
  478. package/src/testing/mocks/module-federation.service.ts +0 -41
  479. package/src/zod-core.ts +0 -1
  480. 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,9 +4,10 @@ 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
+ import type { PluginWarningInfo } from "./runtime/errors";
10
11
 
11
12
  /**
12
13
  * Registry bindings interface - populated via module augmentation
@@ -23,10 +24,28 @@ import type { Plugin } from "./plugin";
23
24
  // biome-ignore lint/suspicious/noEmptyInterface: required for module augmentation pattern
24
25
  export interface RegisteredPlugins {}
25
26
 
27
+ export type ModuleTransport = "inproc" | "rpc" | "mf";
28
+
29
+ export type ModuleSurface = "api" | "ui" | "jobs";
30
+
31
+ export interface ModuleEndpoint {
32
+ readonly transport: ModuleTransport;
33
+ readonly surface?: ModuleSurface;
34
+ readonly url: string;
35
+ readonly path?: `/${string}`;
36
+ readonly manifest?: string;
37
+ }
38
+
39
+ export type PluginTransport = ModuleTransport;
40
+
41
+ export type PluginSurface = ModuleSurface;
42
+
43
+ export type PluginEndpoint = ModuleEndpoint;
44
+
26
45
  /**
27
46
  * Base type for any plugin instance.
28
47
  */
29
- export type AnyPlugin = Plugin<AnyContractRouter, AnySchema, AnySchema, AnySchema | undefined, any>;
48
+ export type AnyPlugin = Plugin<AnyContractRouter, AnySchema, AnySchema, AnySchema | undefined>;
30
49
 
31
50
  /**
32
51
  * Loaded plugin constructor with binding information
@@ -45,8 +64,14 @@ export type AnyPluginConstructor = {
45
64
  * Registry entry that supports both direct module imports and remote URLs
46
65
  */
47
66
  export type PluginRegistryEntry =
48
- | { module: AnyPluginConstructor; remote?: string; version?: string; description?: string }
49
- | { remote: string; version?: string; description?: string };
67
+ | {
68
+ module: AnyPluginConstructor;
69
+ remote?: string;
70
+ endpoint?: PluginEndpoint;
71
+ version?: string;
72
+ description?: string;
73
+ }
74
+ | { remote: string; endpoint?: PluginEndpoint; version?: string; description?: string };
50
75
 
51
76
  /**
52
77
  * Extract plugin constructor type from registry entry
@@ -100,13 +125,33 @@ export type PluginContext<T> = T extends {
100
125
  * Extract router type from plugin binding
101
126
  * Uses 'any' for context to support nested router compositions
102
127
  */
103
- export type PluginRouterType<T> = Router<PluginContract<T>, any>;
128
+ export type PluginRouterType<T> = ContractedRouter<PluginContract<T>, any>;
104
129
 
105
130
  /**
106
131
  * Extract client type from plugin binding
107
132
  */
108
133
  export type PluginClientType<T> = RouterClient<PluginRouterType<T>>;
109
134
 
135
+ /**
136
+ * Sibling plugin entry passed to `initialize` and `createRouter`.
137
+ * `client` creates a typed in-process client for the plugin's router;
138
+ * `router` is the raw implemented router for cross-plugin merging.
139
+ */
140
+ export type PluginServicesEntry<T = any> = {
141
+ client: (context?: PluginContextInput<T>) => PluginClientType<T>;
142
+ router: PluginRouterType<T>;
143
+ endpoint?: PluginEndpoint;
144
+ };
145
+
146
+ export type ModuleClientEntry<C extends AnyContractRouter = AnyContractRouter> = {
147
+ client: (context?: Record<string, unknown>) => RouterClient<ContractedRouter<C, any>>;
148
+ router?: ContractedRouter<C, any>;
149
+ endpoint?: PluginEndpoint;
150
+ };
151
+
152
+ export type PluginClientEntry<C extends AnyContractRouter = AnyContractRouter> =
153
+ ModuleClientEntry<C>;
154
+
110
155
  /**
111
156
  * Extract plugin type from registered plugins by key
112
157
  * @param K - The plugin key
@@ -121,15 +166,10 @@ export type RegisteredPlugin<K extends keyof R, R = RegisteredPlugins> = R[K] ex
121
166
  secrets: infer S extends AnySchema;
122
167
  context: infer TRequestContext extends AnySchema | undefined;
123
168
  }
124
- ? Plugin<C, V, S, TRequestContext, any>
169
+ ? Plugin<C, V, S, TRequestContext>
125
170
  : never
126
171
  : never;
127
172
 
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
173
  /**
134
174
  * Extract context input type from plugin binding (for client creation)
135
175
  */
@@ -144,14 +184,6 @@ export type PluginConfigInput<T> = {
144
184
  secrets: InferSchemaInput<PluginSecrets<T>>;
145
185
  };
146
186
 
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
187
  /**
156
188
  * Plugin metadata for remote loading
157
189
  */
@@ -166,11 +198,6 @@ export type PluginMetadata = {
166
198
  */
167
199
  export type PluginRegistry = Record<string, PluginRegistryEntry>;
168
200
 
169
- /**
170
- * Legacy metadata-only registry (for backwards compatibility)
171
- */
172
- export type PluginMetadataRegistry = Record<string, PluginMetadata>;
173
-
174
201
  /**
175
202
  * Configuration for secrets injection.
176
203
  * Secrets are hydrated into plugin configs using template replacement.
@@ -202,11 +229,19 @@ export interface InitializedPlugin<T extends AnyPlugin = AnyPlugin> {
202
229
  readonly plugin: T;
203
230
  readonly metadata: PluginMetadata;
204
231
  readonly config: {
232
+ pluginId: string;
205
233
  variables: InferSchemaOutput<T["configSchema"]["variables"]>;
206
234
  secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
207
235
  };
208
- readonly context: ContextOf<T>;
209
- readonly scope: Scope.CloseableScope;
236
+ /**
237
+ * Built Effect context from the plugin's initialize Layer. Provided to
238
+ * handlers as `effect/context` — `.effect()` handlers `yield* Tag`,
239
+ * plain handlers use `Context.get(context["effect/context"], Tag)`.
240
+ */
241
+ readonly effectContext: Context.Context<any>;
242
+ readonly scope: Scope.Closeable;
243
+ /** Non-fatal config warnings collected during initialization (empty when none). */
244
+ readonly warnings: PluginWarningInfo[];
210
245
  }
211
246
 
212
247
  /**
@@ -240,18 +275,6 @@ export type UsePluginResult<K extends keyof R, R = RegisteredPlugins> =
240
275
  }
241
276
  : VerifyPluginBinding<K, R>;
242
277
 
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
278
  /**
256
279
  * Extract registry type from runtime instance or use type directly
257
280
  * This allows EveryPlugin.Infer to work with both:
@@ -295,15 +318,4 @@ export interface PluginRuntimeConfig<
295
318
  > {
296
319
  registry: R;
297
320
  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
321
  }