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
@@ -1,34 +1,20 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { createRequire } from "node:module";
3
- import { dirname, join } from "node:path";
4
- import pkg from "../../package.json";
1
+ import { readFileSync } from "node:fs";
2
+ import { buildMfCoreSharedDependencies, type CoreSharedDepName } from "../shared-deps-spec";
5
3
 
6
- const require = createRequire(import.meta.url);
7
4
  declare const __EVERY_PLUGIN_VERSION__: string | undefined;
8
5
 
9
6
  function readPackageVersion(): string {
10
7
  try {
11
- return (require("../../package.json") as { version: string }).version;
12
- } catch {
13
- return "0.0.0";
14
- }
15
- }
16
-
17
- function getInstalledPackageVersion(packageName: string, fallbackRange: string): string {
18
- try {
19
- let currentDir = dirname(require.resolve(packageName));
20
- for (let i = 0; i < 5; i += 1) {
21
- const packageJsonPath = join(currentDir, "package.json");
22
- if (existsSync(packageJsonPath)) {
23
- return (JSON.parse(readFileSync(packageJsonPath, "utf-8")) as { version: string }).version;
8
+ // Not createRequire(import.meta.url): under tsx the require's resolution
9
+ // base can come up empty in spawned child processes ("Cannot find module
10
+ // from ''"), reading 0.0.0 and tripping the shared-identity check.
11
+ return (
12
+ JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf-8")) as {
13
+ version: string;
24
14
  }
25
- currentDir = dirname(currentDir);
26
- }
27
-
28
- throw new Error(`Could not resolve installed version for ${packageName}`);
15
+ ).version;
29
16
  } catch {
30
- const match = fallbackRange.match(/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?/);
31
- return match ? match[0] : fallbackRange.replace(/^[\^~>=<\s]+/, "");
17
+ return "0.0.0";
32
18
  }
33
19
  }
34
20
 
@@ -42,87 +28,6 @@ export interface SharedConfig {
42
28
  eager: boolean;
43
29
  }
44
30
 
45
- export const SHARE_CONFIG: SharedConfig = {
46
- singleton: true,
47
- requiredVersion: false,
48
- strictVersion: false,
49
- eager: false,
50
- };
51
-
52
- export const MF_CORE_SHARED_DEPS = {
53
- "every-plugin": {
54
- version: PLUGIN_VERSION,
55
- shareScope: "default",
56
- shareConfig: SHARE_CONFIG,
57
- },
58
- effect: {
59
- version: getInstalledPackageVersion("effect", pkg.peerDependencies.effect),
60
- shareScope: "default",
61
- shareConfig: SHARE_CONFIG,
62
- },
63
- zod: {
64
- version: getInstalledPackageVersion("zod", pkg.peerDependencies.zod),
65
- shareScope: "default",
66
- shareConfig: SHARE_CONFIG,
67
- },
68
- "@orpc/contract": {
69
- version: getInstalledPackageVersion("@orpc/contract", pkg.peerDependencies["@orpc/contract"]),
70
- shareScope: "default",
71
- shareConfig: SHARE_CONFIG,
72
- },
73
- "@orpc/client": {
74
- version: getInstalledPackageVersion("@orpc/client", pkg.peerDependencies["@orpc/client"]),
75
- shareScope: "default",
76
- shareConfig: SHARE_CONFIG,
77
- },
78
- "@orpc/server": {
79
- version: getInstalledPackageVersion("@orpc/server", pkg.peerDependencies["@orpc/server"]),
80
- shareScope: "default",
81
- shareConfig: SHARE_CONFIG,
82
- },
83
- } as const;
84
-
85
- export type CoreSharedDepName = keyof typeof MF_CORE_SHARED_DEPS;
31
+ export const MF_CORE_SHARED_DEPS = buildMfCoreSharedDependencies({ ownVersion: PLUGIN_VERSION });
86
32
 
87
- export interface AppSharedDepConfig {
88
- version: string;
89
- requiredVersion?: string | false;
90
- singleton?: boolean;
91
- strictVersion?: boolean;
92
- eager?: boolean;
93
- shareScope?: string;
94
- }
95
-
96
- export type AppSharedDeps = Record<string, AppSharedDepConfig>;
97
-
98
- export function buildMergedSharedDeps(
99
- appShared?: AppSharedDeps,
100
- ): Record<string, { version: string; shareScope: string; shareConfig: SharedConfig }> {
101
- const merged: Record<string, { version: string; shareScope: string; shareConfig: SharedConfig }> =
102
- {};
103
-
104
- for (const [name, config] of Object.entries(MF_CORE_SHARED_DEPS)) {
105
- merged[name] = {
106
- version: config.version,
107
- shareScope: config.shareScope,
108
- shareConfig: config.shareConfig,
109
- };
110
- }
111
-
112
- if (appShared) {
113
- for (const [name, config] of Object.entries(appShared)) {
114
- merged[name] = {
115
- version: config.version,
116
- shareScope: config.shareScope ?? "default",
117
- shareConfig: {
118
- singleton: config.singleton ?? false,
119
- requiredVersion: config.requiredVersion ?? false,
120
- strictVersion: config.strictVersion ?? false,
121
- eager: config.eager ?? false,
122
- },
123
- };
124
- }
125
- }
126
-
127
- return merged;
128
- }
33
+ export type { CoreSharedDepName };
@@ -1,15 +1,32 @@
1
1
  import { createInstance, getInstance } from "@module-federation/enhanced/runtime";
2
2
  import { setGlobalFederationInstance } from "@module-federation/runtime-core";
3
- import { Effect } from "effect";
3
+ import { Context, Effect, Layer } from "effect";
4
+ import { DEV_ENTRY_FILENAME } from "../../build/artifact-names";
4
5
  import type { AnyPlugin } from "../../types";
5
6
  import { ModuleFederationError } from "../errors";
6
7
  import { type CoreSharedDepName, MF_CORE_SHARED_DEPS } from "../mf-config";
7
8
  import { getNormalizedRemoteName } from "./normalize";
9
+ import {
10
+ compareSharedIdentity,
11
+ describeSharedIdentityMismatch,
12
+ fetchRemoteIdentityManifest,
13
+ } from "./shared-identity";
14
+
15
+ function expectedSharedIdentity(): Map<string, string> {
16
+ return new Map(
17
+ Object.entries(MF_CORE_SHARED_DEPS).map(([name, config]) => [name, config.version]),
18
+ );
19
+ }
8
20
 
9
21
  type RemoteModule = (new () => AnyPlugin) | { default: new () => AnyPlugin };
10
22
 
23
+ export const loadEveryPluginSharedModule = () => import("../../index");
24
+
11
25
  const coreModuleLoaders: Record<CoreSharedDepName, () => Promise<unknown>> = {
12
- "every-plugin": () => import("every-plugin"),
26
+ // Keep the host-provided framework share on the same source graph as the
27
+ // runtime. A package self-import can resolve the published entry when a
28
+ // workspace script is launched through its package manager shim.
29
+ "every-plugin": loadEveryPluginSharedModule,
13
30
  effect: () => import("effect"),
14
31
  zod: () => import("zod"),
15
32
  "@orpc/contract": () => import("@orpc/contract"),
@@ -72,129 +89,216 @@ const createModuleFederationInstance = Effect.cached(
72
89
 
73
90
  return instance;
74
91
  } catch (error) {
75
- throw new Error(`Failed to initialize Module Federation: ${error}`);
92
+ throw new Error(`Failed to initialize Module Federation: ${String(error)}`);
76
93
  }
77
94
  }),
78
95
  );
79
96
 
80
- export class ModuleFederationService extends Effect.Service<ModuleFederationService>()(
81
- "ModuleFederationService",
82
- {
83
- effect: Effect.gen(function* () {
84
- const mf = yield* Effect.flatten(createModuleFederationInstance);
85
-
86
- return {
87
- registerRemote: (pluginId: string, url: string) =>
88
- Effect.gen(function* () {
89
- yield* Effect.logDebug(`[MF] Registering ${pluginId}`);
90
-
91
- const remoteName = getNormalizedRemoteName(pluginId);
92
- const type = url.endsWith("/mf-manifest.json")
93
- ? ("manifest" as const)
94
- : url.endsWith("/remoteEntry.js")
95
- ? ("script" as const)
96
- : undefined;
97
-
98
- yield* Effect.try({
99
- try: () =>
100
- mf.registerRemotes([
101
- {
102
- name: remoteName,
103
- entry: url,
104
- ...(type ? { type } : {}),
105
- },
106
- ]),
107
- catch: (error): ModuleFederationError =>
108
- new ModuleFederationError({
109
- pluginId,
110
- remoteUrl: url,
111
- cause: error instanceof Error ? error : new Error(String(error)),
112
- }),
113
- });
114
-
115
- yield* Effect.logInfo(`[MF] ✅ Registered ${pluginId}`);
116
- }),
117
-
118
- loadRemoteConstructor: (pluginId: string, url: string) =>
119
- Effect.gen(function* () {
120
- const remoteName = getNormalizedRemoteName(pluginId);
121
- yield* Effect.logDebug(`[MF] Loading remote ${remoteName}`);
122
- const modulePath = `${remoteName}/plugin`;
123
-
124
- const pluginConstructor = yield* Effect.tryPromise({
125
- try: async () => {
126
- const container = await mf.loadRemote<RemoteModule>(modulePath);
127
- if (!container) {
128
- throw new Error(`No container returned for ${modulePath}`);
129
- }
97
+ // A built container's runtime code looks up its own chunks through the node
98
+ // runtime's entry-URL fallback keyed by the container's SELF name
99
+ // (`mf-manifest.json` metaData.name — the composition key, e.g.
100
+ // "everything-dev_registry-plugin"), while the host registers the remote
101
+ // under the plugin id ("registry"). When those differ, the fallback misses,
102
+ // resolveUrl returns null, and the node runtime hands back an empty chunk as
103
+ // if it had loaded — the exposed module then requires ids nothing registered
104
+ // ("__webpack_modules__[r] is not a function"). Registering and loading the
105
+ // remote under the container's own name keeps that lookup a hit.
106
+ const remoteSelfNames = new Map<string, string>();
130
107
 
131
- // Support multiple export patterns: direct function, default export, named exports
132
- let Constructor: any;
133
-
134
- if (typeof container === "function") {
135
- // Direct function export
136
- Constructor = container;
137
- } else if (container.default) {
138
- // Default export
139
- Constructor = container.default;
140
- } else {
141
- // Named export fallback - prioritize exports with 'binding' property (plugin classes)
142
- Constructor = Object.values(container).find(
143
- (exp) => typeof exp === "function" && (exp as any).binding !== undefined,
144
- );
108
+ const resolveRemoteSelfName = (pluginId: string, url: string) =>
109
+ Effect.gen(function* () {
110
+ const memoKey = `${pluginId}@${url}`;
111
+ const memo = remoteSelfNames.get(memoKey);
112
+ if (memo) return memo;
145
113
 
146
- // Fallback to any function export if no binding found
147
- if (!Constructor) {
148
- Constructor = Object.values(container).find(
149
- (exp) => typeof exp === "function" && exp.prototype?.constructor === exp,
150
- );
151
- }
152
- }
114
+ let selfName: string | null = null;
115
+ try {
116
+ const manifest = yield* Effect.promise(() => fetchRemoteIdentityManifest(url));
117
+ selfName = manifest?.metaData?.name?.trim() || null;
118
+ } catch {
119
+ selfName = null;
120
+ }
153
121
 
154
- if (!Constructor || typeof Constructor !== "function") {
155
- const containerInfo =
156
- typeof container === "object"
157
- ? `Available exports: ${Object.keys(container).join(", ")}`
158
- : `Container type: ${typeof container}`;
159
-
160
- throw new Error(
161
- `No valid plugin constructor found for '${pluginId}'.\n` +
162
- `Supported patterns:\n` +
163
- ` - export const YourPlugin = createPlugin({...})\n` +
164
- ` - export default createPlugin({...})\n` +
165
- `${containerInfo}`,
166
- );
167
- }
122
+ const resolved = selfName ?? getNormalizedRemoteName(pluginId);
123
+ remoteSelfNames.set(memoKey, resolved);
124
+ return resolved;
125
+ });
126
+
127
+ export interface ModuleFederationServiceShape {
128
+ registerRemote: (pluginId: string, url: string) => Effect.Effect<void, ModuleFederationError>;
129
+ loadRemoteConstructor: (
130
+ pluginId: string,
131
+ url: string,
132
+ ) => Effect.Effect<new () => AnyPlugin, ModuleFederationError>;
133
+ }
134
+
135
+ export class ModuleFederationService extends Context.Service<
136
+ ModuleFederationService,
137
+ ModuleFederationServiceShape
138
+ >()("ModuleFederationService") {}
139
+
140
+ export const ModuleFederationServiceDefault = Layer.effect(
141
+ ModuleFederationService,
142
+ Effect.gen(function* () {
143
+ const mf = yield* Effect.flatten(createModuleFederationInstance);
144
+ const expectedIdentity = expectedSharedIdentity();
145
+
146
+ const buildSharedIdentityError = async (
147
+ pluginId: string,
148
+ url: string,
149
+ ): Promise<ModuleFederationError | null> => {
150
+ let manifest: Awaited<ReturnType<typeof fetchRemoteIdentityManifest>> | null = null;
151
+ try {
152
+ manifest = await fetchRemoteIdentityManifest(url);
153
+ } catch (error) {
154
+ console.warn(
155
+ `[SharedIdentity] Could not fetch mf-manifest.json for plugin "${pluginId}" at ${url} (${error instanceof Error ? error.message : String(error)}); proceeding without identity verification`,
156
+ );
157
+ return null;
158
+ }
159
+ if (!manifest) return null;
160
+ const mismatches = compareSharedIdentity(manifest.shared, expectedIdentity);
161
+ if (mismatches.length === 0) return null;
162
+ const warnOnly = process.env.BOS_MF_IDENTITY === "warn";
163
+ if (warnOnly) {
164
+ console.warn(
165
+ `${describeSharedIdentityMismatch(pluginId, mismatches, "this runtime")} (BOS_MF_IDENTITY=warn: loading anyway)`,
166
+ );
167
+ return null;
168
+ }
169
+ return new ModuleFederationError({
170
+ pluginId,
171
+ remoteUrl: url,
172
+ cause: new Error(describeSharedIdentityMismatch(pluginId, mismatches, "this runtime")),
173
+ });
174
+ };
168
175
 
169
- // Validate it looks like a plugin constructor (has binding property)
170
- if (!(Constructor as any).binding) {
171
- const containerInfo =
172
- typeof container === "object"
173
- ? `Found exports: ${Object.keys(container).join(", ")}`
174
- : `Container type: ${typeof container}`;
175
-
176
- throw new Error(
177
- `Invalid plugin constructor for '${pluginId}'. ` +
178
- `The exported value must be created with createPlugin(). ` +
179
- `Found a function but it's missing the required 'binding' property.\n` +
180
- `${containerInfo}`,
176
+ return {
177
+ registerRemote: (pluginId: string, url: string) =>
178
+ Effect.gen(function* () {
179
+ const remoteName = yield* resolveRemoteSelfName(pluginId, url);
180
+ yield* Effect.logDebug(`[MF][${pluginId}] Registering as "${remoteName}"`);
181
+
182
+ const type = url.endsWith("/mf-manifest.json")
183
+ ? ("manifest" as const)
184
+ : url.endsWith(`/${DEV_ENTRY_FILENAME}`)
185
+ ? ("script" as const)
186
+ : undefined;
187
+
188
+ yield* Effect.try({
189
+ try: () =>
190
+ mf.registerRemotes([
191
+ {
192
+ name: remoteName,
193
+ entry: url,
194
+ ...(type ? { type } : {}),
195
+ },
196
+ ]),
197
+ catch: (error): ModuleFederationError =>
198
+ new ModuleFederationError({
199
+ pluginId,
200
+ remoteUrl: url,
201
+ cause: error instanceof Error ? error : new Error(String(error)),
202
+ }),
203
+ });
204
+
205
+ yield* Effect.logInfo(`[MF][${pluginId}] ✅ Registered`);
206
+ }),
207
+
208
+ loadRemoteConstructor: (pluginId: string, url: string) =>
209
+ Effect.gen(function* () {
210
+ const remoteName = yield* resolveRemoteSelfName(pluginId, url);
211
+ yield* Effect.logDebug(`[MF][${pluginId}] Loading remote ${remoteName}`);
212
+
213
+ const identityError = yield* Effect.promise(() =>
214
+ buildSharedIdentityError(pluginId, url),
215
+ );
216
+ if (identityError) {
217
+ yield* Effect.logError(
218
+ `[MF][${pluginId}] ❌ shared identity mismatch: ${
219
+ identityError.cause instanceof Error
220
+ ? identityError.cause.message
221
+ : String(identityError.cause ?? "shared identity mismatch")
222
+ }`,
223
+ );
224
+ return yield* identityError;
225
+ }
226
+
227
+ const modulePath = `${remoteName}/plugin`;
228
+
229
+ const pluginConstructor = yield* Effect.tryPromise({
230
+ try: async () => {
231
+ const container = await mf.loadRemote<RemoteModule>(modulePath);
232
+ if (!container) {
233
+ throw new Error(`No container returned for ${modulePath}`);
234
+ }
235
+
236
+ // Support multiple export patterns: direct function, default export, named exports
237
+ let Constructor: any;
238
+
239
+ if (typeof container === "function") {
240
+ // Direct function export
241
+ Constructor = container;
242
+ } else if (container.default) {
243
+ // Default export
244
+ Constructor = container.default;
245
+ } else {
246
+ // Named export fallback - prioritize exports with 'binding' property (plugin classes)
247
+ Constructor = Object.values(container).find(
248
+ (exp) => typeof exp === "function" && (exp as any).binding !== undefined,
249
+ );
250
+
251
+ // Fallback to any function export if no binding found
252
+ if (!Constructor) {
253
+ Constructor = Object.values(container).find(
254
+ (exp) => typeof exp === "function" && exp.prototype?.constructor === exp,
181
255
  );
182
256
  }
257
+ }
183
258
 
184
- return Constructor;
185
- },
186
- catch: (error): ModuleFederationError =>
187
- new ModuleFederationError({
188
- pluginId,
189
- remoteUrl: url,
190
- cause: error instanceof Error ? error : new Error(String(error)),
191
- }),
192
- });
193
-
194
- yield* Effect.logInfo(`[MF] ✅ Loaded constructor for ${pluginId}`);
195
- return pluginConstructor;
196
- }),
197
- };
198
- }),
199
- },
200
- ) {}
259
+ if (!Constructor || typeof Constructor !== "function") {
260
+ const containerInfo =
261
+ typeof container === "object"
262
+ ? `Available exports: ${Object.keys(container).join(", ")}`
263
+ : `Container type: ${typeof container}`;
264
+
265
+ throw new Error(
266
+ `No valid plugin constructor found for '${pluginId}'.\n` +
267
+ `Supported patterns:\n` +
268
+ ` - export const YourPlugin = createPlugin({...})\n` +
269
+ ` - export default createPlugin({...})\n` +
270
+ `${containerInfo}`,
271
+ );
272
+ }
273
+
274
+ // Validate it looks like a plugin constructor (has binding property)
275
+ if (!(Constructor as any).binding) {
276
+ const containerInfo =
277
+ typeof container === "object"
278
+ ? `Found exports: ${Object.keys(container).join(", ")}`
279
+ : `Container type: ${typeof container}`;
280
+
281
+ throw new Error(
282
+ `Invalid plugin constructor for '${pluginId}'. ` +
283
+ `The exported value must be created with createPlugin(). ` +
284
+ `Found a function but it's missing the required 'binding' property.\n` +
285
+ `${containerInfo}`,
286
+ );
287
+ }
288
+
289
+ return Constructor;
290
+ },
291
+ catch: (error): ModuleFederationError =>
292
+ new ModuleFederationError({
293
+ pluginId,
294
+ remoteUrl: url,
295
+ cause: error instanceof Error ? error : new Error(String(error)),
296
+ }),
297
+ });
298
+
299
+ yield* Effect.logInfo(`[MF][${pluginId}] ✅ Loaded constructor`);
300
+ return pluginConstructor;
301
+ }),
302
+ };
303
+ }),
304
+ );
@@ -1,18 +1 @@
1
- /**
2
- * Normalizes a package name into the module federation remote name.
3
- * This function must produce identical results in both runtime and build contexts.
4
- *
5
- * Normalization rules:
6
- * - Convert to lowercase
7
- * - Strip a single leading '@' symbol
8
- * - Replace '/' with '_'
9
- * - Preserve hyphens and other characters
10
- *
11
- * Examples:
12
- * - "@scope/my-plugin" → "scope_my-plugin"
13
- * - "@SCOPE/Foo/Bar" → "scope_foo_bar"
14
- * - "foo/bar" → "foo_bar"
15
- * - "simple-plugin" → "simple-plugin"
16
- */
17
- export const getNormalizedRemoteName = (name: string): string =>
18
- name.toLowerCase().replace(/^@/, "").replace(/\//g, "_");
1
+ export { remoteName as getNormalizedRemoteName } from "../../identity";