every-plugin 2.10.1 → 3.0.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. package/bin/every-plugin-serve.mjs +12 -0
  2. package/bin/every-plugin.mjs +59 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -2
  4. package/dist/build/artifact-names.cjs +119 -0
  5. package/dist/build/artifact-names.cjs.map +1 -0
  6. package/dist/build/artifact-names.d.cts +68 -0
  7. package/dist/build/artifact-names.d.cts.map +1 -0
  8. package/dist/build/artifact-names.d.mts +68 -0
  9. package/dist/build/artifact-names.d.mts.map +1 -0
  10. package/dist/build/artifact-names.mjs +102 -0
  11. package/dist/build/artifact-names.mjs.map +1 -0
  12. package/dist/build/contract-types.cjs +89 -0
  13. package/dist/build/contract-types.cjs.map +1 -0
  14. package/dist/build/contract-types.mjs +81 -0
  15. package/dist/build/contract-types.mjs.map +1 -0
  16. package/dist/build/rspack/build-report-plugin.cjs +37 -0
  17. package/dist/build/rspack/build-report-plugin.cjs.map +1 -0
  18. package/dist/build/rspack/build-report-plugin.d.cts +18 -0
  19. package/dist/build/rspack/build-report-plugin.d.cts.map +1 -0
  20. package/dist/build/rspack/build-report-plugin.d.mts +18 -0
  21. package/dist/build/rspack/build-report-plugin.d.mts.map +1 -0
  22. package/dist/build/rspack/build-report-plugin.mjs +37 -0
  23. package/dist/build/rspack/build-report-plugin.mjs.map +1 -0
  24. package/dist/build/rspack/chunk-completeness-plugin.cjs +47 -0
  25. package/dist/build/rspack/chunk-completeness-plugin.cjs.map +1 -0
  26. package/dist/build/rspack/chunk-completeness-plugin.mjs +47 -0
  27. package/dist/build/rspack/chunk-completeness-plugin.mjs.map +1 -0
  28. package/dist/build/rspack/compose.cjs +69 -0
  29. package/dist/build/rspack/compose.cjs.map +1 -0
  30. package/dist/build/rspack/compose.d.cts +20 -0
  31. package/dist/build/rspack/compose.d.cts.map +1 -0
  32. package/dist/build/rspack/compose.d.mts +20 -0
  33. package/dist/build/rspack/compose.d.mts.map +1 -0
  34. package/dist/build/rspack/compose.mjs +65 -0
  35. package/dist/build/rspack/compose.mjs.map +1 -0
  36. package/dist/build/rspack/fix-mf-data-uri-plugin.cjs +11 -11
  37. package/dist/build/rspack/fix-mf-data-uri-plugin.cjs.map +1 -1
  38. package/dist/build/rspack/fix-mf-data-uri-plugin.d.cts +2 -0
  39. package/dist/build/rspack/fix-mf-data-uri-plugin.d.cts.map +1 -1
  40. package/dist/build/rspack/fix-mf-data-uri-plugin.d.mts +2 -0
  41. package/dist/build/rspack/fix-mf-data-uri-plugin.d.mts.map +1 -1
  42. package/dist/build/rspack/fix-mf-data-uri-plugin.mjs +11 -10
  43. package/dist/build/rspack/fix-mf-data-uri-plugin.mjs.map +1 -1
  44. package/dist/build/rspack/generated-config.cjs +35 -0
  45. package/dist/build/rspack/generated-config.cjs.map +1 -0
  46. package/dist/build/rspack/generated-config.mjs +32 -0
  47. package/dist/build/rspack/generated-config.mjs.map +1 -0
  48. package/dist/build/rspack/index.cjs +8 -5
  49. package/dist/build/rspack/index.d.cts +5 -3
  50. package/dist/build/rspack/index.d.mts +5 -3
  51. package/dist/build/rspack/index.mjs +5 -3
  52. package/dist/build/rspack/module-federation.cjs +2 -2
  53. package/dist/build/rspack/module-federation.cjs.map +1 -1
  54. package/dist/build/rspack/module-federation.mjs +1 -1
  55. package/dist/build/rspack/module-federation.mjs.map +1 -1
  56. package/dist/build/rspack/plugin.cjs +44 -69
  57. package/dist/build/rspack/plugin.cjs.map +1 -1
  58. package/dist/build/rspack/plugin.d.cts +4 -13
  59. package/dist/build/rspack/plugin.d.cts.map +1 -1
  60. package/dist/build/rspack/plugin.d.mts +4 -13
  61. package/dist/build/rspack/plugin.d.mts.map +1 -1
  62. package/dist/build/rspack/plugin.mjs +44 -69
  63. package/dist/build/rspack/plugin.mjs.map +1 -1
  64. package/dist/build/rspack/utils.cjs +7 -5
  65. package/dist/build/rspack/utils.cjs.map +1 -1
  66. package/dist/build/rspack/utils.mjs +7 -6
  67. package/dist/build/rspack/utils.mjs.map +1 -1
  68. package/dist/build/ui/factory.cjs +88 -0
  69. package/dist/build/ui/factory.cjs.map +1 -0
  70. package/dist/build/ui/factory.d.cts +11 -0
  71. package/dist/build/ui/factory.d.cts.map +1 -0
  72. package/dist/build/ui/factory.d.mts +11 -0
  73. package/dist/build/ui/factory.d.mts.map +1 -0
  74. package/dist/build/ui/factory.mjs +80 -0
  75. package/dist/build/ui/factory.mjs.map +1 -0
  76. package/dist/build/ui/generated-config.cjs +118 -0
  77. package/dist/build/ui/generated-config.cjs.map +1 -0
  78. package/dist/build/ui/generated-config.d.cts +33 -0
  79. package/dist/build/ui/generated-config.d.cts.map +1 -0
  80. package/dist/build/ui/generated-config.d.mts +33 -0
  81. package/dist/build/ui/generated-config.d.mts.map +1 -0
  82. package/dist/build/ui/generated-config.mjs +111 -0
  83. package/dist/build/ui/generated-config.mjs.map +1 -0
  84. package/dist/build/ui/hash-artifacts-plugin.cjs +61 -0
  85. package/dist/build/ui/hash-artifacts-plugin.cjs.map +1 -0
  86. package/dist/build/ui/hash-artifacts-plugin.d.cts +20 -0
  87. package/dist/build/ui/hash-artifacts-plugin.d.cts.map +1 -0
  88. package/dist/build/ui/hash-artifacts-plugin.d.mts +20 -0
  89. package/dist/build/ui/hash-artifacts-plugin.d.mts.map +1 -0
  90. package/dist/build/ui/hash-artifacts-plugin.mjs +58 -0
  91. package/dist/build/ui/hash-artifacts-plugin.mjs.map +1 -0
  92. package/dist/build/ui/index.cjs +90 -0
  93. package/dist/build/ui/index.cjs.map +1 -0
  94. package/dist/build/ui/index.d.cts +29 -0
  95. package/dist/build/ui/index.d.cts.map +1 -0
  96. package/dist/build/ui/index.d.mts +29 -0
  97. package/dist/build/ui/index.d.mts.map +1 -0
  98. package/dist/build/ui/index.mjs +68 -0
  99. package/dist/build/ui/index.mjs.map +1 -0
  100. package/dist/build/ui/manifest-plugin.cjs +37 -0
  101. package/dist/build/ui/manifest-plugin.cjs.map +1 -0
  102. package/dist/build/ui/manifest-plugin.d.cts +19 -0
  103. package/dist/build/ui/manifest-plugin.d.cts.map +1 -0
  104. package/dist/build/ui/manifest-plugin.d.mts +19 -0
  105. package/dist/build/ui/manifest-plugin.d.mts.map +1 -0
  106. package/dist/build/ui/manifest-plugin.mjs +37 -0
  107. package/dist/build/ui/manifest-plugin.mjs.map +1 -0
  108. package/dist/build/ui/rsbuild-config.cjs +203 -0
  109. package/dist/build/ui/rsbuild-config.cjs.map +1 -0
  110. package/dist/build/ui/rsbuild-config.d.cts +45 -0
  111. package/dist/build/ui/rsbuild-config.d.cts.map +1 -0
  112. package/dist/build/ui/rsbuild-config.d.mts +45 -0
  113. package/dist/build/ui/rsbuild-config.d.mts.map +1 -0
  114. package/dist/build/ui/rsbuild-config.mjs +200 -0
  115. package/dist/build/ui/rsbuild-config.mjs.map +1 -0
  116. package/dist/build/ui/stubs.cjs +107 -0
  117. package/dist/build/ui/stubs.cjs.map +1 -0
  118. package/dist/build/ui/stubs.d.cts +25 -0
  119. package/dist/build/ui/stubs.d.cts.map +1 -0
  120. package/dist/build/ui/stubs.d.mts +25 -0
  121. package/dist/build/ui/stubs.d.mts.map +1 -0
  122. package/dist/build/ui/stubs.mjs +106 -0
  123. package/dist/build/ui/stubs.mjs.map +1 -0
  124. package/dist/cli.cjs +83 -0
  125. package/dist/cli.cjs.map +1 -0
  126. package/dist/cli.d.cts +6 -0
  127. package/dist/cli.d.cts.map +1 -0
  128. package/dist/cli.d.mts +6 -0
  129. package/dist/cli.d.mts.map +1 -0
  130. package/dist/cli.mjs +82 -0
  131. package/dist/cli.mjs.map +1 -0
  132. package/dist/dev/serve.cjs +390 -0
  133. package/dist/dev/serve.cjs.map +1 -0
  134. package/dist/dev/serve.d.cts +23 -0
  135. package/dist/dev/serve.d.cts.map +1 -0
  136. package/dist/dev/serve.d.mts +23 -0
  137. package/dist/dev/serve.d.mts.map +1 -0
  138. package/dist/dev/serve.mjs +384 -0
  139. package/dist/dev/serve.mjs.map +1 -0
  140. package/dist/dev/watch-kill.cjs +39 -0
  141. package/dist/dev/watch-kill.cjs.map +1 -0
  142. package/dist/dev/watch-kill.mjs +38 -0
  143. package/dist/dev/watch-kill.mjs.map +1 -0
  144. package/dist/effect-helpers.cjs +23 -0
  145. package/dist/effect-helpers.cjs.map +1 -0
  146. package/dist/effect-helpers.d.cts +20 -0
  147. package/dist/effect-helpers.d.cts.map +1 -0
  148. package/dist/effect-helpers.d.mts +20 -0
  149. package/dist/effect-helpers.d.mts.map +1 -0
  150. package/dist/effect-helpers.mjs +22 -0
  151. package/dist/effect-helpers.mjs.map +1 -0
  152. package/dist/errors.cjs +50 -69
  153. package/dist/errors.cjs.map +1 -1
  154. package/dist/errors.d.cts +13 -96
  155. package/dist/errors.d.cts.map +1 -1
  156. package/dist/errors.d.mts +13 -96
  157. package/dist/errors.d.mts.map +1 -1
  158. package/dist/errors.mjs +16 -34
  159. package/dist/errors.mjs.map +1 -1
  160. package/dist/identity.cjs +19 -0
  161. package/dist/identity.cjs.map +1 -0
  162. package/dist/identity.d.cts +33 -0
  163. package/dist/identity.d.cts.map +1 -0
  164. package/dist/identity.d.mts +33 -0
  165. package/dist/identity.d.mts.map +1 -0
  166. package/dist/identity.mjs +16 -0
  167. package/dist/identity.mjs.map +1 -0
  168. package/dist/index.cjs +9 -5
  169. package/dist/index.d.cts +8 -6
  170. package/dist/index.d.mts +8 -6
  171. package/dist/index.mjs +6 -4
  172. package/dist/plugin.cjs +13 -26
  173. package/dist/plugin.cjs.map +1 -1
  174. package/dist/plugin.d.cts +57 -24
  175. package/dist/plugin.d.cts.map +1 -1
  176. package/dist/plugin.d.mts +58 -25
  177. package/dist/plugin.d.mts.map +1 -1
  178. package/dist/plugin.mjs +16 -29
  179. package/dist/plugin.mjs.map +1 -1
  180. package/dist/remote-entry.cjs +103 -0
  181. package/dist/remote-entry.cjs.map +1 -0
  182. package/dist/remote-entry.d.cts +53 -0
  183. package/dist/remote-entry.d.cts.map +1 -0
  184. package/dist/remote-entry.d.mts +53 -0
  185. package/dist/remote-entry.d.mts.map +1 -0
  186. package/dist/remote-entry.mjs +98 -0
  187. package/dist/remote-entry.mjs.map +1 -0
  188. package/dist/runtime/errors.cjs +159 -33
  189. package/dist/runtime/errors.cjs.map +1 -1
  190. package/dist/runtime/errors.d.cts +64 -7
  191. package/dist/runtime/errors.d.cts.map +1 -1
  192. package/dist/runtime/errors.d.mts +64 -7
  193. package/dist/runtime/errors.d.mts.map +1 -1
  194. package/dist/runtime/errors.mjs +154 -30
  195. package/dist/runtime/errors.mjs.map +1 -1
  196. package/dist/runtime/index.cjs +95 -23
  197. package/dist/runtime/index.cjs.map +1 -1
  198. package/dist/runtime/index.d.cts +16 -0
  199. package/dist/runtime/index.d.cts.map +1 -1
  200. package/dist/runtime/index.d.mts +16 -0
  201. package/dist/runtime/index.d.mts.map +1 -1
  202. package/dist/runtime/index.mjs +98 -26
  203. package/dist/runtime/index.mjs.map +1 -1
  204. package/dist/runtime/mf-config.cjs +3 -78
  205. package/dist/runtime/mf-config.cjs.map +1 -1
  206. package/dist/runtime/mf-config.d.cts +3 -49
  207. package/dist/runtime/mf-config.d.cts.map +1 -1
  208. package/dist/runtime/mf-config.d.mts +3 -49
  209. package/dist/runtime/mf-config.d.mts.map +1 -1
  210. package/dist/runtime/mf-config.mjs +5 -78
  211. package/dist/runtime/mf-config.mjs.map +1 -1
  212. package/dist/runtime/services/module-federation.service.cjs +57 -12
  213. package/dist/runtime/services/module-federation.service.cjs.map +1 -1
  214. package/dist/runtime/services/module-federation.service.d.cts +4 -13
  215. package/dist/runtime/services/module-federation.service.d.mts +4 -13
  216. package/dist/runtime/services/module-federation.service.mjs +57 -14
  217. package/dist/runtime/services/module-federation.service.mjs.map +1 -1
  218. package/dist/runtime/services/normalize.cjs +2 -22
  219. package/dist/runtime/services/normalize.d.cts +2 -21
  220. package/dist/runtime/services/normalize.d.mts +2 -21
  221. package/dist/runtime/services/normalize.mjs +2 -21
  222. package/dist/runtime/services/plugin-lifecycle.service.cjs +9 -11
  223. package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -1
  224. package/dist/runtime/services/plugin-lifecycle.service.d.cts +3 -16
  225. package/dist/runtime/services/plugin-lifecycle.service.d.mts +3 -16
  226. package/dist/runtime/services/plugin-lifecycle.service.mjs +10 -13
  227. package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -1
  228. package/dist/runtime/services/plugin-loader.service.cjs +56 -30
  229. package/dist/runtime/services/plugin-loader.service.cjs.map +1 -1
  230. package/dist/runtime/services/plugin-loader.service.d.cts +6 -53
  231. package/dist/runtime/services/plugin-loader.service.d.mts +6 -53
  232. package/dist/runtime/services/plugin-loader.service.mjs +55 -31
  233. package/dist/runtime/services/plugin-loader.service.mjs.map +1 -1
  234. package/dist/runtime/services/plugin.service.cjs +10 -12
  235. package/dist/runtime/services/plugin.service.cjs.map +1 -1
  236. package/dist/runtime/services/plugin.service.d.cts +14 -36
  237. package/dist/runtime/services/plugin.service.d.cts.map +1 -1
  238. package/dist/runtime/services/plugin.service.d.mts +14 -36
  239. package/dist/runtime/services/plugin.service.d.mts.map +1 -1
  240. package/dist/runtime/services/plugin.service.mjs +14 -18
  241. package/dist/runtime/services/plugin.service.mjs.map +1 -1
  242. package/dist/runtime/services/secrets.service.cjs +12 -12
  243. package/dist/runtime/services/secrets.service.cjs.map +1 -1
  244. package/dist/runtime/services/secrets.service.d.cts +3 -15
  245. package/dist/runtime/services/secrets.service.d.mts +3 -15
  246. package/dist/runtime/services/secrets.service.mjs +12 -13
  247. package/dist/runtime/services/secrets.service.mjs.map +1 -1
  248. package/dist/runtime/services/shared-identity.cjs +40 -0
  249. package/dist/runtime/services/shared-identity.cjs.map +1 -0
  250. package/dist/runtime/services/shared-identity.mjs +38 -0
  251. package/dist/runtime/services/shared-identity.mjs.map +1 -0
  252. package/dist/runtime/validation.cjs +2 -2
  253. package/dist/runtime/validation.cjs.map +1 -1
  254. package/dist/runtime/validation.mjs +2 -2
  255. package/dist/runtime/validation.mjs.map +1 -1
  256. package/dist/shared-deps-spec.cjs +384 -0
  257. package/dist/shared-deps-spec.cjs.map +1 -0
  258. package/dist/shared-deps-spec.d.cts +182 -0
  259. package/dist/shared-deps-spec.d.cts.map +1 -0
  260. package/dist/shared-deps-spec.d.mts +182 -0
  261. package/dist/shared-deps-spec.d.mts.map +1 -0
  262. package/dist/shared-deps-spec.mjs +368 -0
  263. package/dist/shared-deps-spec.mjs.map +1 -0
  264. package/dist/types.d.cts +25 -41
  265. package/dist/types.d.cts.map +1 -1
  266. package/dist/types.d.mts +25 -41
  267. package/dist/types.d.mts.map +1 -1
  268. package/dist/ui/manifest/construct.cjs +268 -0
  269. package/dist/ui/manifest/construct.cjs.map +1 -0
  270. package/dist/ui/manifest/construct.d.cts +48 -0
  271. package/dist/ui/manifest/construct.d.cts.map +1 -0
  272. package/dist/ui/manifest/construct.d.mts +48 -0
  273. package/dist/ui/manifest/construct.d.mts.map +1 -0
  274. package/dist/ui/manifest/construct.mjs +268 -0
  275. package/dist/ui/manifest/construct.mjs.map +1 -0
  276. package/dist/ui/manifest/contract.cjs +34 -0
  277. package/dist/ui/manifest/contract.cjs.map +1 -0
  278. package/dist/ui/manifest/contract.d.cts +26 -0
  279. package/dist/ui/manifest/contract.d.cts.map +1 -0
  280. package/dist/ui/manifest/contract.d.mts +26 -0
  281. package/dist/ui/manifest/contract.d.mts.map +1 -0
  282. package/dist/ui/manifest/contract.mjs +26 -0
  283. package/dist/ui/manifest/contract.mjs.map +1 -0
  284. package/dist/ui/manifest/descriptor.cjs +64 -0
  285. package/dist/ui/manifest/descriptor.cjs.map +1 -0
  286. package/dist/ui/manifest/descriptor.d.cts +60 -0
  287. package/dist/ui/manifest/descriptor.d.cts.map +1 -0
  288. package/dist/ui/manifest/descriptor.d.mts +60 -0
  289. package/dist/ui/manifest/descriptor.d.mts.map +1 -0
  290. package/dist/ui/manifest/descriptor.mjs +61 -0
  291. package/dist/ui/manifest/descriptor.mjs.map +1 -0
  292. package/dist/ui/manifest/generator.cjs +128 -0
  293. package/dist/ui/manifest/generator.cjs.map +1 -0
  294. package/dist/ui/manifest/generator.d.cts +41 -0
  295. package/dist/ui/manifest/generator.d.cts.map +1 -0
  296. package/dist/ui/manifest/generator.d.mts +41 -0
  297. package/dist/ui/manifest/generator.d.mts.map +1 -0
  298. package/dist/ui/manifest/generator.mjs +125 -0
  299. package/dist/ui/manifest/generator.mjs.map +1 -0
  300. package/dist/ui/manifest/index.cjs +35 -0
  301. package/dist/ui/manifest/index.d.cts +9 -0
  302. package/dist/ui/manifest/index.d.mts +9 -0
  303. package/dist/ui/manifest/index.mjs +9 -0
  304. package/dist/ui/manifest/manifest-schema.cjs +97 -0
  305. package/dist/ui/manifest/manifest-schema.cjs.map +1 -0
  306. package/dist/ui/manifest/manifest-schema.d.cts +132 -0
  307. package/dist/ui/manifest/manifest-schema.d.cts.map +1 -0
  308. package/dist/ui/manifest/manifest-schema.d.mts +132 -0
  309. package/dist/ui/manifest/manifest-schema.d.mts.map +1 -0
  310. package/dist/ui/manifest/manifest-schema.mjs +90 -0
  311. package/dist/ui/manifest/manifest-schema.mjs.map +1 -0
  312. package/dist/ui/manifest/mount-registry.cjs +52 -0
  313. package/dist/ui/manifest/mount-registry.cjs.map +1 -0
  314. package/dist/ui/manifest/mount-registry.d.cts +61 -0
  315. package/dist/ui/manifest/mount-registry.d.cts.map +1 -0
  316. package/dist/ui/manifest/mount-registry.d.mts +61 -0
  317. package/dist/ui/manifest/mount-registry.d.mts.map +1 -0
  318. package/dist/ui/manifest/mount-registry.mjs +48 -0
  319. package/dist/ui/manifest/mount-registry.mjs.map +1 -0
  320. package/dist/ui/manifest/nav.cjs +13 -0
  321. package/dist/ui/manifest/nav.cjs.map +1 -0
  322. package/dist/ui/manifest/nav.d.cts +34 -0
  323. package/dist/ui/manifest/nav.d.cts.map +1 -0
  324. package/dist/ui/manifest/nav.d.mts +34 -0
  325. package/dist/ui/manifest/nav.d.mts.map +1 -0
  326. package/dist/ui/manifest/nav.mjs +13 -0
  327. package/dist/ui/manifest/nav.mjs.map +1 -0
  328. package/dist/ui/manifest/route-config.cjs +33 -0
  329. package/dist/ui/manifest/route-config.cjs.map +1 -0
  330. package/dist/ui/manifest/route-config.d.cts +40 -0
  331. package/dist/ui/manifest/route-config.d.cts.map +1 -0
  332. package/dist/ui/manifest/route-config.d.mts +40 -0
  333. package/dist/ui/manifest/route-config.d.mts.map +1 -0
  334. package/dist/ui/manifest/route-config.mjs +33 -0
  335. package/dist/ui/manifest/route-config.mjs.map +1 -0
  336. package/dist/version-manifest.cjs +65 -0
  337. package/dist/version-manifest.cjs.map +1 -0
  338. package/dist/version-manifest.d.cts +52 -0
  339. package/dist/version-manifest.d.cts.map +1 -0
  340. package/dist/version-manifest.d.mts +52 -0
  341. package/dist/version-manifest.d.mts.map +1 -0
  342. package/dist/version-manifest.mjs +63 -0
  343. package/dist/version-manifest.mjs.map +1 -0
  344. package/package.json +165 -68
  345. package/skills/plugin-client/SKILL.md +24 -5
  346. package/skills/plugin-development/SKILL.md +79 -47
  347. package/skills/plugin-testing/SKILL.md +41 -12
  348. package/src/build/artifact-names.ts +117 -0
  349. package/src/build/contract-types.ts +101 -0
  350. package/src/build/rspack/build-report-plugin.ts +34 -0
  351. package/src/build/rspack/chunk-completeness-plugin.ts +57 -0
  352. package/src/build/rspack/compose.ts +87 -0
  353. package/src/build/rspack/fix-mf-data-uri-plugin.ts +23 -12
  354. package/src/build/rspack/generated-config.ts +35 -0
  355. package/src/build/rspack/index.ts +10 -5
  356. package/src/build/rspack/module-federation.ts +1 -1
  357. package/src/build/rspack/plugin.ts +103 -105
  358. package/src/build/rspack/utils.ts +8 -2
  359. package/src/build/ui/factory.ts +96 -0
  360. package/src/build/ui/generated-config.ts +133 -0
  361. package/src/build/ui/hash-artifacts-plugin.ts +79 -0
  362. package/src/build/ui/index.ts +98 -0
  363. package/src/build/ui/manifest-plugin.ts +54 -0
  364. package/src/build/ui/rsbuild-config.ts +256 -0
  365. package/src/build/ui/stubs.ts +103 -0
  366. package/src/cli.ts +100 -0
  367. package/src/dev/serve.ts +477 -0
  368. package/src/dev/watch-kill.ts +58 -0
  369. package/src/effect-helpers.ts +25 -0
  370. package/src/errors.ts +17 -18
  371. package/src/identity.ts +36 -0
  372. package/src/index.ts +4 -0
  373. package/src/plugin.ts +88 -91
  374. package/src/remote-entry.ts +171 -0
  375. package/src/runtime/errors.ts +229 -26
  376. package/src/runtime/index.ts +132 -43
  377. package/src/runtime/mf-config.ts +12 -107
  378. package/src/runtime/services/module-federation.service.ts +218 -117
  379. package/src/runtime/services/normalize.ts +1 -18
  380. package/src/runtime/services/plugin-lifecycle.service.ts +66 -75
  381. package/src/runtime/services/plugin-loader.service.ts +271 -212
  382. package/src/runtime/services/plugin.service.ts +61 -43
  383. package/src/runtime/services/secrets.service.ts +20 -15
  384. package/src/runtime/services/shared-identity.ts +68 -0
  385. package/src/runtime/validation.ts +5 -7
  386. package/src/shared-deps-spec.ts +478 -0
  387. package/src/types.ts +25 -48
  388. package/src/ui/manifest/construct.ts +403 -0
  389. package/src/ui/manifest/contract.ts +33 -0
  390. package/src/ui/manifest/descriptor.ts +96 -0
  391. package/src/ui/manifest/generator.ts +238 -0
  392. package/src/ui/manifest/index.ts +55 -0
  393. package/src/ui/manifest/manifest-schema.ts +107 -0
  394. package/src/ui/manifest/mount-registry.ts +50 -0
  395. package/src/ui/manifest/nav.ts +43 -0
  396. package/src/ui/manifest/route-config.ts +82 -0
  397. package/src/version-manifest.ts +88 -0
  398. package/dist/build/rspack/dev-server-middleware.cjs +0 -248
  399. package/dist/build/rspack/dev-server-middleware.cjs.map +0 -1
  400. package/dist/build/rspack/dev-server-middleware.mjs +0 -247
  401. package/dist/build/rspack/dev-server-middleware.mjs.map +0 -1
  402. package/dist/build/shared-deps.cjs +0 -83
  403. package/dist/build/shared-deps.cjs.map +0 -1
  404. package/dist/build/shared-deps.d.cts +0 -67
  405. package/dist/build/shared-deps.d.cts.map +0 -1
  406. package/dist/build/shared-deps.d.mts +0 -67
  407. package/dist/build/shared-deps.d.mts.map +0 -1
  408. package/dist/build/shared-deps.mjs +0 -79
  409. package/dist/build/shared-deps.mjs.map +0 -1
  410. package/dist/effect.cjs +0 -9
  411. package/dist/effect.d.cts +0 -1
  412. package/dist/effect.d.mts +0 -1
  413. package/dist/effect.mjs +0 -3
  414. package/dist/orpc-openapi.cjs +0 -17
  415. package/dist/orpc-openapi.d.cts +0 -2
  416. package/dist/orpc-openapi.d.mts +0 -2
  417. package/dist/orpc-openapi.mjs +0 -5
  418. package/dist/orpc.cjs +0 -46
  419. package/dist/orpc.d.cts +0 -7
  420. package/dist/orpc.d.mts +0 -7
  421. package/dist/orpc.mjs +0 -11
  422. package/dist/package.cjs +0 -23
  423. package/dist/package.cjs.map +0 -1
  424. package/dist/package.mjs +0 -17
  425. package/dist/package.mjs.map +0 -1
  426. package/dist/runtime/services/module-federation.service.d.cts.map +0 -1
  427. package/dist/runtime/services/module-federation.service.d.mts.map +0 -1
  428. package/dist/runtime/services/normalize.cjs.map +0 -1
  429. package/dist/runtime/services/normalize.d.cts.map +0 -1
  430. package/dist/runtime/services/normalize.d.mts.map +0 -1
  431. package/dist/runtime/services/normalize.mjs.map +0 -1
  432. package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +0 -1
  433. package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +0 -1
  434. package/dist/runtime/services/plugin-loader.service.d.cts.map +0 -1
  435. package/dist/runtime/services/plugin-loader.service.d.mts.map +0 -1
  436. package/dist/runtime/services/secrets.service.d.cts.map +0 -1
  437. package/dist/runtime/services/secrets.service.d.mts.map +0 -1
  438. package/dist/testing/index.cjs +0 -57
  439. package/dist/testing/index.cjs.map +0 -1
  440. package/dist/testing/index.d.cts +0 -54
  441. package/dist/testing/index.d.cts.map +0 -1
  442. package/dist/testing/index.d.mts +0 -54
  443. package/dist/testing/index.d.mts.map +0 -1
  444. package/dist/testing/index.mjs +0 -55
  445. package/dist/testing/index.mjs.map +0 -1
  446. package/dist/zod-core.cjs +0 -9
  447. package/dist/zod-core.d.cts +0 -1
  448. package/dist/zod-core.d.mts +0 -1
  449. package/dist/zod-core.mjs +0 -3
  450. package/dist/zod.cjs +0 -11
  451. package/dist/zod.d.cts +0 -2
  452. package/dist/zod.d.mts +0 -2
  453. package/dist/zod.mjs +0 -3
  454. package/src/build/rspack/dev-server-middleware.ts +0 -324
  455. package/src/build/shared-deps.ts +0 -102
  456. package/src/effect.ts +0 -1
  457. package/src/orpc-openapi.ts +0 -2
  458. package/src/orpc.ts +0 -9
  459. package/src/testing/index.ts +0 -87
  460. package/src/testing/mocks/module-federation.service.ts +0 -41
  461. package/src/zod-core.ts +0 -1
  462. package/src/zod.ts +0 -3
@@ -6,20 +6,41 @@ import { SecretsService } from "./secrets.service.mjs";
6
6
  import { Context, Effect, Exit, Layer, Scope } from "effect";
7
7
 
8
8
  //#region src/runtime/services/plugin-loader.service.ts
9
- var PluginRegistryTag = class extends Context.Tag("PluginRegistry")() {};
10
- var PluginMapTag = class extends Context.Tag("PluginMap")() {};
11
- var RegistryService = class extends Effect.Service()("RegistryService", { effect: Effect.gen(function* () {
9
+ /**
10
+ * Evaluate a plugin's `warnings` function against the validated config.
11
+ * Fail-safe: a throwing warnings function becomes a warning itself rather
12
+ * than failing initialization. Strings are normalized to `PluginWarningInfo`
13
+ * with the plugin's registry key.
14
+ */
15
+ const collectPluginWarnings = (plugin, config) => {
16
+ const warningsFn = plugin.warnings;
17
+ if (!warningsFn) return [];
18
+ try {
19
+ return warningsFn(config).map((warning) => typeof warning === "string" ? {
20
+ pluginKey: plugin.id,
21
+ message: warning
22
+ } : warning);
23
+ } catch (error) {
24
+ return [{
25
+ pluginKey: plugin.id,
26
+ message: `Plugin warnings check failed: ${error instanceof Error ? error.message : String(error)}`
27
+ }];
28
+ }
29
+ };
30
+ var PluginRegistryTag = class extends Context.Service()("PluginRegistry") {};
31
+ var PluginMapTag = class extends Context.Service()("PluginMap") {};
32
+ var RegistryService = class extends Context.Service()("RegistryService") {};
33
+ const RegistryServiceDefault = Layer.effect(RegistryService, Effect.gen(function* () {
12
34
  const registry = yield* PluginRegistryTag;
13
35
  const pluginMap = yield* PluginMapTag;
14
36
  return {
15
37
  get: (pluginId) => Effect.gen(function* () {
16
38
  const entry = registry[pluginId];
17
- if (!entry) return yield* Effect.fail(new PluginRuntimeError({
39
+ if (!entry) return yield* new PluginRuntimeError({
18
40
  pluginId,
19
41
  operation: "validate-plugin-id",
20
- cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} not found in registry`),
21
- retryable: false
22
- }));
42
+ cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} not found in registry`)
43
+ });
23
44
  if ("module" in entry) return {
24
45
  constructor: entry.module,
25
46
  metadata: {
@@ -39,8 +60,9 @@ var RegistryService = class extends Effect.Service()("RegistryService", { effect
39
60
  }),
40
61
  getModule: (pluginId) => Effect.succeed(pluginMap[pluginId] || null)
41
62
  };
42
- }) }) {};
43
- var PluginLoaderService = class extends Effect.Service()("PluginLoaderService", { effect: Effect.gen(function* () {
63
+ }));
64
+ var PluginLoaderService = class extends Context.Service()("PluginLoaderService") {};
65
+ const PluginLoaderServiceDefault = Layer.effect(PluginLoaderService, Effect.gen(function* () {
44
66
  const moduleFederationService = yield* ModuleFederationService;
45
67
  const secretsService = yield* SecretsService;
46
68
  const registryService = yield* RegistryService;
@@ -56,25 +78,24 @@ var PluginLoaderService = class extends Effect.Service()("PluginLoaderService",
56
78
  };
57
79
  }
58
80
  const url = entry.metadata.remoteUrl;
59
- if (!url) return yield* Effect.fail(new PluginRuntimeError({
81
+ if (!url) return yield* new PluginRuntimeError({
60
82
  pluginId,
61
83
  operation: "load-plugin",
62
- cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} has no module or remote URL configured`),
63
- retryable: false
64
- }));
84
+ cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} has no module or remote URL configured`)
85
+ });
65
86
  const resolvedUrl = resolveUrl(url);
66
- yield* moduleFederationService.registerRemote(pluginId, resolvedUrl).pipe(Effect.tapError((error) => Effect.logError(`Plugin ${pluginId} failed during register-remote: ${error}`)), Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "register-remote", true)));
87
+ yield* moduleFederationService.registerRemote(pluginId, resolvedUrl).pipe(Effect.tapError((error) => Effect.logError(`Plugin ${pluginId} failed during register-remote: ${String(error)}`)), Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "register-remote")));
67
88
  yield* Effect.logDebug("Loading plugin from remote", {
68
89
  pluginId,
69
90
  url: resolvedUrl
70
91
  });
71
92
  return {
72
- ctor: yield* moduleFederationService.loadRemoteConstructor(pluginId, resolvedUrl).pipe(Effect.tapError((error) => Effect.logError(`Plugin ${pluginId} failed during load-remote: ${error}`)), Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "load-remote", false))),
93
+ ctor: yield* moduleFederationService.loadRemoteConstructor(pluginId, resolvedUrl).pipe(Effect.tapError((error) => Effect.logError(`Plugin ${pluginId} failed during load-remote: ${String(error)}`)), Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "load-remote"))),
73
94
  metadata: entry.metadata
74
95
  };
75
96
  }),
76
97
  instantiatePlugin: (pluginId, loadedPlugin) => Effect.gen(function* () {
77
- const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(Effect.tapError((error) => Effect.logError(`Plugin ${pluginId} failed during instantiate-plugin: ${error}`)), Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "instantiate-plugin", false)));
98
+ const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(Effect.tapError((error) => Effect.logError(`Plugin ${pluginId} failed during instantiate-plugin: ${error}`)), Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "instantiate-plugin")));
78
99
  instance.id = pluginId;
79
100
  return {
80
101
  plugin: instance,
@@ -86,14 +107,12 @@ var PluginLoaderService = class extends Effect.Service()("PluginLoaderService",
86
107
  const validatedVariables = yield* validate(plugin.configSchema.variables, config.variables, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
87
108
  pluginId: plugin.id,
88
109
  operation: "validate-config",
89
- cause: validationError.zodError,
90
- retryable: false
110
+ cause: validationError.zodError
91
111
  })));
92
112
  const validatedSecrets = yield* validate(plugin.configSchema.secrets, config.secrets, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
93
113
  pluginId: plugin.id,
94
114
  operation: "validate-secrets",
95
- cause: validationError.zodError,
96
- retryable: false
115
+ cause: validationError.zodError
97
116
  })));
98
117
  const hydratedConfig = yield* secretsService.hydrateSecrets({
99
118
  variables: validatedVariables,
@@ -102,15 +121,16 @@ var PluginLoaderService = class extends Effect.Service()("PluginLoaderService",
102
121
  const _variables = yield* validate(plugin.configSchema.variables, hydratedConfig.variables, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
103
122
  pluginId: plugin.id,
104
123
  operation: "validate-hydrated-config",
105
- cause: validationError.zodError,
106
- retryable: false
124
+ cause: validationError.zodError
107
125
  })));
108
126
  const scope = yield* Scope.make();
109
- const memoMap = yield* Layer.makeMemoMap;
110
- const context = yield* plugin.initialize({
111
- variables: _variables,
112
- secrets: hydratedConfig.secrets
113
- }, plugins ?? {}, { buildService: (tag, layer) => Layer.buildWithMemoMap(layer, memoMap, scope).pipe(Effect.map((ctx) => Context.get(ctx, tag))) }).pipe(Effect.provideService(PluginIdTag, plugin.id), Effect.provideService(Scope.Scope, scope), Effect.tapError(() => Scope.close(scope, Exit.succeed(void 0)).pipe(Effect.catchAll((closeError) => Effect.logWarning(`Failed to close scope for plugin ${plugin.id} after initialize error`, closeError)))), Effect.tapError((error) => Effect.logError(`Plugin ${plugin.id} failed during initialize-plugin: ${error}`)), Effect.mapError((error) => toPluginRuntimeError(error, plugin.id, void 0, "initialize-plugin", false)));
127
+ const effectContext = yield* Effect.gen(function* () {
128
+ const layer = yield* plugin.initialize({
129
+ variables: _variables,
130
+ secrets: hydratedConfig.secrets
131
+ }, plugins ?? {}).pipe(Effect.provideService(PluginIdTag, plugin.id), Effect.provideService(Scope.Scope, scope));
132
+ return yield* Layer.buildWithScope(layer, scope).pipe(Effect.provideService(PluginIdTag, plugin.id), Effect.provideService(Scope.Scope, scope), Effect.mapError((error) => toPluginRuntimeError(error, plugin.id, void 0, "initialize-layer")));
133
+ }).pipe(Effect.onExit((exit) => Exit.isSuccess(exit) ? Effect.void : Scope.close(scope, exit).pipe(Effect.catchCause((closeCause) => Effect.logWarning(`Failed to close scope for plugin ${plugin.id} after initialize error`, closeCause)))), Effect.tapError((error) => Effect.logError(`Plugin ${plugin.id} failed during initialize-plugin: ${String(error)}`)), Effect.mapError((error) => toPluginRuntimeError(error, plugin.id, void 0, "initialize-plugin")));
114
134
  return {
115
135
  plugin,
116
136
  metadata: pluginInstance.metadata,
@@ -118,13 +138,17 @@ var PluginLoaderService = class extends Effect.Service()("PluginLoaderService",
118
138
  variables: _variables,
119
139
  secrets: hydratedConfig.secrets
120
140
  },
121
- context,
122
- scope
141
+ effectContext,
142
+ scope,
143
+ warnings: collectPluginWarnings(plugin, {
144
+ variables: _variables,
145
+ secrets: hydratedConfig.secrets
146
+ })
123
147
  };
124
148
  })
125
149
  };
126
- }) }) {};
150
+ }));
127
151
 
128
152
  //#endregion
129
- export { PluginLoaderService, PluginMapTag, PluginRegistryTag, RegistryService };
153
+ export { PluginLoaderService, PluginLoaderServiceDefault, PluginMapTag, PluginRegistryTag, RegistryService, RegistryServiceDefault };
130
154
  //# sourceMappingURL=plugin-loader.service.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-loader.service.mjs","names":["EffectContext"],"sources":["../../../src/runtime/services/plugin-loader.service.ts"],"sourcesContent":["import type { InferSchemaInput, InferSchemaOutput } from \"@orpc/contract\";\nimport { Context, Effect, Context as EffectContext, Exit, Layer, Scope } from \"effect\";\nimport type { z } from \"zod\";\nimport { PluginIdTag, type PluginServicesTools } from \"../../plugin\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n LoadedPlugin,\n PluginInstance,\n PluginMetadata,\n PluginRegistry,\n} from \"../../types\";\nimport { PluginRuntimeError, toPluginRuntimeError } from \"../errors\";\nimport { validate } from \"../validation\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { SecretsService } from \"./secrets.service\";\n\nexport class PluginRegistryTag extends Context.Tag(\"PluginRegistry\")<\n PluginRegistryTag,\n PluginRegistry\n>() {}\n\nexport class PluginMapTag extends Context.Tag(\"PluginMap\")<\n PluginMapTag,\n Record<string, AnyPluginConstructor>\n>() {}\n\nexport class RegistryService extends Effect.Service<RegistryService>()(\"RegistryService\", {\n effect: Effect.gen(function* () {\n const registry = yield* PluginRegistryTag;\n const pluginMap = yield* PluginMapTag;\n\n return {\n get: (pluginId: string) =>\n Effect.gen(function* () {\n const entry = registry[pluginId];\n\n if (!entry) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n pluginId,\n operation: \"validate-plugin-id\",\n cause: new Error(`Plugin ${pluginId} not found in registry`),\n retryable: false,\n }),\n );\n }\n\n if (\"module\" in entry) {\n return {\n constructor: entry.module,\n metadata: {\n remoteUrl: entry.remote || \"\",\n version: entry.version,\n description: entry.description,\n } as PluginMetadata,\n };\n }\n\n return {\n constructor: null,\n metadata: {\n remoteUrl: entry.remote,\n version: entry.version,\n description: entry.description,\n } as PluginMetadata,\n };\n }),\n\n getModule: (pluginId: string) => Effect.succeed(pluginMap[pluginId] || null),\n };\n }),\n}) {}\n\nexport class PluginLoaderService extends Effect.Service<PluginLoaderService>()(\n \"PluginLoaderService\",\n {\n effect: Effect.gen(function* () {\n const moduleFederationService = yield* ModuleFederationService;\n const secretsService = yield* SecretsService;\n const registryService = yield* RegistryService;\n\n const resolveUrl = (baseUrl: string, version?: string): string =>\n version && version !== \"latest\" ? baseUrl.replace(\"@latest\", `@${version}`) : baseUrl;\n\n return {\n loadPlugin: (pluginId: string) =>\n Effect.gen(function* () {\n const entry = yield* registryService.get(pluginId);\n\n if (entry.constructor) {\n yield* Effect.logDebug(\"Loading plugin from direct module\", { pluginId });\n\n return {\n ctor: entry.constructor,\n metadata: entry.metadata,\n } satisfies LoadedPlugin;\n }\n\n const url = entry.metadata.remoteUrl;\n if (!url) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n pluginId,\n operation: \"load-plugin\",\n cause: new Error(`Plugin ${pluginId} has no module or remote URL configured`),\n retryable: false,\n }),\n );\n }\n\n const resolvedUrl = resolveUrl(url);\n\n yield* moduleFederationService.registerRemote(pluginId, resolvedUrl).pipe(\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${pluginId} failed during register-remote: ${error}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, pluginId, undefined, \"register-remote\", true),\n ),\n );\n\n yield* Effect.logDebug(\"Loading plugin from remote\", { pluginId, url: resolvedUrl });\n\n const ctor = yield* moduleFederationService\n .loadRemoteConstructor(pluginId, resolvedUrl)\n .pipe(\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${pluginId} failed during load-remote: ${error}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, pluginId, undefined, \"load-remote\", false),\n ),\n );\n\n return {\n ctor,\n metadata: entry.metadata,\n } satisfies LoadedPlugin;\n }),\n\n instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) =>\n Effect.gen(function* () {\n const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${pluginId} failed during instantiate-plugin: ${error}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, pluginId, undefined, \"instantiate-plugin\", false),\n ),\n );\n\n (instance.id as string) = pluginId;\n\n return {\n plugin: instance,\n metadata: loadedPlugin.metadata,\n } satisfies PluginInstance<T>;\n }),\n\n initializePlugin: <T extends AnyPlugin>(\n pluginInstance: PluginInstance<T>,\n config: {\n variables: InferSchemaInput<T[\"configSchema\"][\"variables\"]>;\n secrets: InferSchemaInput<T[\"configSchema\"][\"secrets\"]>;\n },\n plugins?: Record<string, unknown>,\n ) =>\n Effect.gen(function* () {\n const { plugin } = pluginInstance;\n\n // Validate and hydrate config\n const validatedVariables = yield* validate(\n plugin.configSchema.variables as z.ZodSchema<\n InferSchemaOutput<T[\"configSchema\"][\"variables\"]>\n >,\n config.variables,\n plugin.id,\n \"config\",\n ).pipe(\n Effect.mapError(\n (validationError) =>\n new PluginRuntimeError({\n pluginId: plugin.id,\n operation: \"validate-config\",\n cause: validationError.zodError,\n retryable: false,\n }),\n ),\n );\n\n // Validate secrets\n const validatedSecrets = yield* validate(\n plugin.configSchema.secrets as z.ZodSchema<\n InferSchemaOutput<T[\"configSchema\"][\"secrets\"]>\n >,\n config.secrets,\n plugin.id,\n \"config\",\n ).pipe(\n Effect.mapError(\n (validationError) =>\n new PluginRuntimeError({\n pluginId: plugin.id,\n operation: \"validate-secrets\",\n cause: validationError.zodError,\n retryable: false,\n }),\n ),\n );\n\n // Hydrate secrets in variables\n const hydratedConfig = yield* secretsService.hydrateSecrets({\n variables: validatedVariables,\n secrets: validatedSecrets,\n });\n\n const _variables = yield* validate(\n plugin.configSchema.variables as z.ZodSchema<\n InferSchemaOutput<T[\"configSchema\"][\"variables\"]>\n >,\n hydratedConfig.variables,\n plugin.id,\n \"config\",\n ).pipe(\n Effect.mapError(\n (validationError) =>\n new PluginRuntimeError({\n pluginId: plugin.id,\n operation: \"validate-hydrated-config\",\n cause: validationError.zodError,\n retryable: false,\n }),\n ),\n );\n\n // Create a long-lived scope for this plugin instance\n const scope = yield* Scope.make();\n\n // Create a per-plugin MemoMap so tool-built layers are memoized\n const memoMap = yield* Layer.makeMemoMap;\n\n const tools: PluginServicesTools = {\n buildService: (tag: any, layer: any) =>\n (Layer.buildWithMemoMap(layer, memoMap, scope) as any).pipe(\n Effect.map((ctx: any) => EffectContext.get(ctx, tag)) as any,\n ),\n };\n\n // Initialize plugin within the scope.\n // If initialize fails, close the scope immediately so scoped\n // resources (DB pools, caches) are released — otherwise every\n // failed initialization leaks until the process exits.\n const context = yield* plugin\n .initialize(\n { variables: _variables, secrets: hydratedConfig.secrets },\n plugins ?? {},\n tools,\n )\n .pipe(\n Effect.provideService(PluginIdTag, plugin.id),\n Effect.provideService(Scope.Scope, scope),\n Effect.tapError(() =>\n Scope.close(scope, Exit.succeed(undefined)).pipe(\n Effect.catchAll((closeError) =>\n Effect.logWarning(\n `Failed to close scope for plugin ${plugin.id} after initialize error`,\n closeError,\n ),\n ),\n ),\n ),\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${plugin.id} failed during initialize-plugin: ${error}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, plugin.id, undefined, \"initialize-plugin\", false),\n ),\n );\n\n return {\n plugin,\n metadata: pluginInstance.metadata,\n config: { variables: _variables, secrets: hydratedConfig.secrets },\n context,\n scope,\n } satisfies InitializedPlugin<T>;\n }),\n };\n }),\n },\n) {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-loader.service.mjs","names":[],"sources":["../../../src/runtime/services/plugin-loader.service.ts"],"sourcesContent":["import type { InferSchemaInput, InferSchemaOutput } from \"@orpc/contract\";\nimport { Context, Effect, Exit, Layer, Scope } from \"effect\";\nimport type { z } from \"zod\";\nimport { PluginIdTag } from \"../../plugin\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n LoadedPlugin,\n PluginInstance,\n PluginMetadata,\n PluginRegistry,\n} from \"../../types\";\nimport type { PluginWarningInfo } from \"../errors\";\nimport { PluginRuntimeError, toPluginRuntimeError } from \"../errors\";\nimport { validate } from \"../validation\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { SecretsService } from \"./secrets.service\";\n\n/**\n * Evaluate a plugin's `warnings` function against the validated config.\n * Fail-safe: a throwing warnings function becomes a warning itself rather\n * than failing initialization. Strings are normalized to `PluginWarningInfo`\n * with the plugin's registry key.\n */\nconst collectPluginWarnings = (\n plugin: AnyPlugin,\n config: { variables: unknown; secrets: unknown },\n): PluginWarningInfo[] => {\n const warningsFn = plugin.warnings;\n if (!warningsFn) return [];\n try {\n const raw = warningsFn(config as never);\n return raw.map((warning) =>\n typeof warning === \"string\" ? { pluginKey: plugin.id, message: warning } : warning,\n );\n } catch (error) {\n return [\n {\n pluginKey: plugin.id,\n message: `Plugin warnings check failed: ${error instanceof Error ? error.message : String(error)}`,\n },\n ];\n }\n};\n\nexport class PluginRegistryTag extends Context.Service<PluginRegistryTag, PluginRegistry>()(\n \"PluginRegistry\",\n) {}\n\nexport class PluginMapTag extends Context.Service<\n PluginMapTag,\n Record<string, AnyPluginConstructor>\n>()(\"PluginMap\") {}\n\nexport interface RegistryServiceShape {\n get: (\n pluginId: string,\n ) => Effect.Effect<\n { constructor: (new () => AnyPlugin) | null; metadata: PluginMetadata },\n PluginRuntimeError\n >;\n getModule: (pluginId: string) => Effect.Effect<AnyPluginConstructor | null>;\n}\n\nexport class RegistryService extends Context.Service<RegistryService, RegistryServiceShape>()(\n \"RegistryService\",\n) {}\n\nexport const RegistryServiceDefault = Layer.effect(\n RegistryService,\n Effect.gen(function* () {\n const registry = yield* PluginRegistryTag;\n const pluginMap = yield* PluginMapTag;\n\n return {\n get: (pluginId: string) =>\n Effect.gen(function* () {\n const entry = registry[pluginId];\n\n if (!entry) {\n return yield* new PluginRuntimeError({\n pluginId,\n operation: \"validate-plugin-id\",\n cause: new Error(`Plugin ${pluginId} not found in registry`),\n });\n }\n\n if (\"module\" in entry) {\n return {\n constructor: entry.module,\n metadata: {\n remoteUrl: entry.remote || \"\",\n version: entry.version,\n description: entry.description,\n } as PluginMetadata,\n };\n }\n\n return {\n constructor: null,\n metadata: {\n remoteUrl: entry.remote,\n version: entry.version,\n description: entry.description,\n } as PluginMetadata,\n };\n }),\n\n getModule: (pluginId: string) => Effect.succeed(pluginMap[pluginId] || null),\n };\n }),\n);\n\nexport interface PluginLoaderServiceShape {\n loadPlugin: (pluginId: string) => Effect.Effect<LoadedPlugin, PluginRuntimeError>;\n instantiatePlugin: <T extends AnyPlugin>(\n pluginId: string,\n loadedPlugin: LoadedPlugin<T>,\n ) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;\n initializePlugin: <T extends AnyPlugin>(\n pluginInstance: PluginInstance<T>,\n config: {\n variables: InferSchemaInput<T[\"configSchema\"][\"variables\"]>;\n secrets: InferSchemaInput<T[\"configSchema\"][\"secrets\"]>;\n },\n plugins?: Record<string, unknown>,\n ) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;\n}\n\nexport class PluginLoaderService extends Context.Service<\n PluginLoaderService,\n PluginLoaderServiceShape\n>()(\"PluginLoaderService\") {}\n\nexport const PluginLoaderServiceDefault = Layer.effect(\n PluginLoaderService,\n Effect.gen(function* () {\n const moduleFederationService = yield* ModuleFederationService;\n const secretsService = yield* SecretsService;\n const registryService = yield* RegistryService;\n\n const resolveUrl = (baseUrl: string, version?: string): string =>\n version && version !== \"latest\" ? baseUrl.replace(\"@latest\", `@${version}`) : baseUrl;\n\n return {\n loadPlugin: (pluginId: string) =>\n Effect.gen(function* () {\n const entry = yield* registryService.get(pluginId);\n\n if (entry.constructor) {\n yield* Effect.logDebug(\"Loading plugin from direct module\", { pluginId });\n\n return {\n ctor: entry.constructor,\n metadata: entry.metadata,\n } satisfies LoadedPlugin;\n }\n\n const url = entry.metadata.remoteUrl;\n if (!url) {\n return yield* new PluginRuntimeError({\n pluginId,\n operation: \"load-plugin\",\n cause: new Error(`Plugin ${pluginId} has no module or remote URL configured`),\n });\n }\n\n const resolvedUrl = resolveUrl(url);\n\n yield* moduleFederationService.registerRemote(pluginId, resolvedUrl).pipe(\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${pluginId} failed during register-remote: ${String(error)}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, pluginId, undefined, \"register-remote\"),\n ),\n );\n\n yield* Effect.logDebug(\"Loading plugin from remote\", { pluginId, url: resolvedUrl });\n\n const ctor = yield* moduleFederationService\n .loadRemoteConstructor(pluginId, resolvedUrl)\n .pipe(\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${pluginId} failed during load-remote: ${String(error)}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, pluginId, undefined, \"load-remote\"),\n ),\n );\n\n return {\n ctor,\n metadata: entry.metadata,\n } satisfies LoadedPlugin;\n }),\n\n instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) =>\n Effect.gen(function* () {\n const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(\n Effect.tapError((error) =>\n Effect.logError(`Plugin ${pluginId} failed during instantiate-plugin: ${error}`),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, pluginId, undefined, \"instantiate-plugin\"),\n ),\n );\n\n (instance.id as string) = pluginId;\n\n return {\n plugin: instance,\n metadata: loadedPlugin.metadata,\n } satisfies PluginInstance<T>;\n }),\n\n initializePlugin: <T extends AnyPlugin>(\n pluginInstance: PluginInstance<T>,\n config: {\n variables: InferSchemaInput<T[\"configSchema\"][\"variables\"]>;\n secrets: InferSchemaInput<T[\"configSchema\"][\"secrets\"]>;\n },\n plugins?: Record<string, unknown>,\n ) =>\n Effect.gen(function* () {\n const { plugin } = pluginInstance;\n\n // Validate and hydrate config\n const validatedVariables = yield* validate(\n plugin.configSchema.variables as z.ZodSchema<\n InferSchemaOutput<T[\"configSchema\"][\"variables\"]>\n >,\n config.variables,\n plugin.id,\n \"config\",\n ).pipe(\n Effect.mapError(\n (validationError) =>\n new PluginRuntimeError({\n pluginId: plugin.id,\n operation: \"validate-config\",\n cause: validationError.zodError,\n }),\n ),\n );\n\n // Validate secrets\n const validatedSecrets = yield* validate(\n plugin.configSchema.secrets as z.ZodSchema<\n InferSchemaOutput<T[\"configSchema\"][\"secrets\"]>\n >,\n config.secrets,\n plugin.id,\n \"config\",\n ).pipe(\n Effect.mapError(\n (validationError) =>\n new PluginRuntimeError({\n pluginId: plugin.id,\n operation: \"validate-secrets\",\n cause: validationError.zodError,\n }),\n ),\n );\n\n // Hydrate secrets in variables\n const hydratedConfig = yield* secretsService.hydrateSecrets({\n variables: validatedVariables,\n secrets: validatedSecrets,\n });\n\n const _variables = yield* validate(\n plugin.configSchema.variables as z.ZodSchema<\n InferSchemaOutput<T[\"configSchema\"][\"variables\"]>\n >,\n hydratedConfig.variables,\n plugin.id,\n \"config\",\n ).pipe(\n Effect.mapError(\n (validationError) =>\n new PluginRuntimeError({\n pluginId: plugin.id,\n operation: \"validate-hydrated-config\",\n cause: validationError.zodError,\n }),\n ),\n );\n\n // Create a long-lived scope for this plugin instance. Initialize\n // returns a Layer which is built against this scope, so scoped\n // resources (DB pools, caches) release on plugin shutdown.\n const scope = yield* Scope.make();\n\n // Build the plugin's Layer within the scope.\n // On failure, close the scope immediately so scoped resources\n // (DB pools, caches) are released — otherwise every failed\n // initialization leaks until the process exits.\n const effectContext = yield* Effect.gen(function* () {\n const layer = yield* plugin\n .initialize({ variables: _variables, secrets: hydratedConfig.secrets }, plugins ?? {})\n .pipe(\n Effect.provideService(PluginIdTag, plugin.id),\n Effect.provideService(Scope.Scope, scope),\n );\n\n return yield* Layer.buildWithScope(layer, scope).pipe(\n Effect.provideService(PluginIdTag, plugin.id),\n Effect.provideService(Scope.Scope, scope),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, plugin.id, undefined, \"initialize-layer\"),\n ),\n );\n }).pipe(\n Effect.onExit((exit) =>\n Exit.isSuccess(exit)\n ? Effect.void\n : Scope.close(scope, exit).pipe(\n Effect.catchCause((closeCause) =>\n Effect.logWarning(\n `Failed to close scope for plugin ${plugin.id} after initialize error`,\n closeCause,\n ),\n ),\n ),\n ),\n Effect.tapError((error) =>\n Effect.logError(\n `Plugin ${plugin.id} failed during initialize-plugin: ${String(error)}`,\n ),\n ),\n Effect.mapError((error) =>\n toPluginRuntimeError(error, plugin.id, undefined, \"initialize-plugin\"),\n ),\n );\n\n return {\n plugin,\n metadata: pluginInstance.metadata,\n config: { variables: _variables, secrets: hydratedConfig.secrets },\n effectContext,\n scope,\n warnings: collectPluginWarnings(plugin, {\n variables: _variables,\n secrets: hydratedConfig.secrets,\n }),\n } satisfies InitializedPlugin<T>;\n }),\n };\n }),\n);\n"],"mappings":"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"}
@@ -5,7 +5,8 @@ const require_plugin_loader_service = require('./plugin-loader.service.cjs');
5
5
  let effect = require("effect");
6
6
 
7
7
  //#region src/runtime/services/plugin.service.ts
8
- var PluginService = class PluginService extends effect.Effect.Service()("PluginService", { scoped: effect.Effect.gen(function* () {
8
+ var PluginService = class extends effect.Context.Service()("PluginService") {};
9
+ const PluginServiceDefault = effect.Layer.effect(PluginService, effect.Effect.gen(function* () {
9
10
  const loader = yield* require_plugin_loader_service.PluginLoaderService;
10
11
  const lifecycle = yield* require_plugin_lifecycle_service.PluginLifecycleService;
11
12
  return {
@@ -13,21 +14,18 @@ var PluginService = class PluginService extends effect.Effect.Service()("PluginS
13
14
  instantiatePlugin: loader.instantiatePlugin,
14
15
  initializePlugin: loader.initializePlugin,
15
16
  registerPlugin: (plugin) => lifecycle.register(plugin),
16
- shutdownPlugin: (plugin) => effect.Effect.gen(function* () {
17
- yield* plugin.plugin.shutdown().pipe(effect.Effect.catchAll((error) => effect.Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error)));
18
- yield* effect.Scope.close(plugin.scope, effect.Exit.succeed(void 0));
19
- yield* lifecycle.unregister(plugin);
20
- }),
17
+ shutdownPlugin: (plugin) => effect.Scope.close(plugin.scope, effect.Exit.succeed(void 0)).pipe(effect.Effect.catchCause((cause) => effect.Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, cause)), effect.Effect.ensuring(lifecycle.unregister(plugin))),
21
18
  cleanup: lifecycle.cleanup
22
19
  };
23
- }) }) {
24
- static Live = (registry, secrets, pluginMap = {}) => {
25
- const contextLayer = effect.Layer.mergeAll(effect.Layer.succeed(require_plugin_loader_service.PluginRegistryTag, registry), effect.Layer.succeed(require_secrets_service.SecretsConfigTag, secrets), effect.Layer.succeed(require_plugin_loader_service.PluginMapTag, pluginMap));
26
- const servicesLayer = effect.Layer.mergeAll(require_module_federation_service.ModuleFederationService.Default, require_secrets_service.SecretsService.Default, require_plugin_loader_service.RegistryService.Default, require_plugin_lifecycle_service.PluginLifecycleService.Default).pipe(effect.Layer.provide(contextLayer));
27
- return PluginService.Default.pipe(effect.Layer.provide(require_plugin_loader_service.PluginLoaderService.Default), effect.Layer.provide(servicesLayer));
28
- };
20
+ }));
21
+ const PluginServiceLive = (registry, secrets, pluginMap = {}) => {
22
+ const contextLayer = effect.Layer.mergeAll(effect.Layer.succeed(require_plugin_loader_service.PluginRegistryTag, registry), effect.Layer.succeed(require_secrets_service.SecretsConfigTag, secrets), effect.Layer.succeed(require_plugin_loader_service.PluginMapTag, pluginMap));
23
+ const servicesLayer = effect.Layer.mergeAll(require_module_federation_service.ModuleFederationServiceDefault, require_secrets_service.SecretsServiceDefault, require_plugin_loader_service.RegistryServiceDefault, require_plugin_lifecycle_service.PluginLifecycleServiceDefault).pipe(effect.Layer.provide(contextLayer));
24
+ return PluginServiceDefault.pipe(effect.Layer.provide(require_plugin_loader_service.PluginLoaderServiceDefault), effect.Layer.provide(servicesLayer));
29
25
  };
30
26
 
31
27
  //#endregion
32
28
  exports.PluginService = PluginService;
29
+ exports.PluginServiceDefault = PluginServiceDefault;
30
+ exports.PluginServiceLive = PluginServiceLive;
33
31
  //# sourceMappingURL=plugin.service.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.service.cjs","names":["Effect","PluginLoaderService","PluginLifecycleService","Scope","Exit","Layer","PluginRegistryTag","SecretsConfigTag","PluginMapTag","ModuleFederationService","SecretsService","RegistryService"],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n PluginRegistry,\n SecretsConfig,\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport {\n PluginLoaderService,\n PluginMapTag,\n PluginRegistryTag,\n RegistryService,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n scoped: Effect.gen(function* () {\n const loader = yield* PluginLoaderService;\n const lifecycle = yield* PluginLifecycleService;\n\n return {\n loadPlugin: loader.loadPlugin,\n instantiatePlugin: loader.instantiatePlugin,\n initializePlugin: loader.initializePlugin,\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n Effect.gen(function* () {\n yield* plugin.plugin\n .shutdown()\n .pipe(\n Effect.catchAll((error) =>\n Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error),\n ),\n );\n\n yield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n yield* lifecycle.unregister(plugin);\n }),\n cleanup: lifecycle.cleanup,\n };\n }),\n}) {\n static Live = (\n registry: PluginRegistry,\n secrets: SecretsConfig,\n pluginMap: Record<string, AnyPluginConstructor> = {},\n ) => {\n const contextLayer = Layer.mergeAll(\n Layer.succeed(PluginRegistryTag, registry),\n Layer.succeed(SecretsConfigTag, secrets),\n Layer.succeed(PluginMapTag, pluginMap),\n );\n\n const servicesLayer = Layer.mergeAll(\n ModuleFederationService.Default,\n SecretsService.Default,\n RegistryService.Default,\n PluginLifecycleService.Default,\n ).pipe(Layer.provide(contextLayer));\n\n return PluginService.Default.pipe(\n Layer.provide(PluginLoaderService.Default),\n Layer.provide(servicesLayer),\n );\n };\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,gBAAb,MAAa,sBAAsBA,cAAO,QAAuB,CAAC,CAAC,iBAAiB,EAClF,QAAQA,cAAO,IAAI,aAAa;CAC9B,MAAM,SAAS,OAAOC;CACtB,MAAM,YAAY,OAAOC;CAEzB,OAAO;EACL,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAAyC,UAAU,SAAS,MAAM;EACnF,iBAAiB,WACfF,cAAO,IAAI,aAAa;GACtB,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACCA,cAAO,UAAU,UACfA,cAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,CACF;GAEF,OAAOG,aAAM,MAAM,OAAO,OAAOC,YAAK,QAAQ,MAAS,CAAC;GAExD,OAAO,UAAU,WAAW,MAAM;EACpC,CAAC;EACH,SAAS,UAAU;CACrB;AACF,CAAC,EACH,CAAC,CAAC,CAAC;CACD,OAAO,QACL,UACA,SACA,YAAkD,CAAC,MAChD;EACH,MAAM,eAAeC,aAAM,SACzBA,aAAM,QAAQC,iDAAmB,QAAQ,GACzCD,aAAM,QAAQE,0CAAkB,OAAO,GACvCF,aAAM,QAAQG,4CAAc,SAAS,CACvC;EAEA,MAAM,gBAAgBH,aAAM,SAC1BI,0DAAwB,SACxBC,uCAAe,SACfC,8CAAgB,SAChBT,wDAAuB,OACzB,CAAC,CAAC,KAAKG,aAAM,QAAQ,YAAY,CAAC;EAElC,OAAO,cAAc,QAAQ,KAC3BA,aAAM,QAAQJ,kDAAoB,OAAO,GACzCI,aAAM,QAAQ,aAAa,CAC7B;CACF;AACF"}
1
+ {"version":3,"file":"plugin.service.cjs","names":["Context","Layer","Effect","PluginLoaderService","PluginLifecycleService","Scope","Exit","PluginRegistryTag","SecretsConfigTag","PluginMapTag","ModuleFederationServiceDefault","SecretsServiceDefault","RegistryServiceDefault","PluginLifecycleServiceDefault","PluginLoaderServiceDefault"],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Context, Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n LoadedPlugin,\n PluginInstance,\n PluginRegistry,\n SecretsConfig,\n} from \"../../types\";\nimport type { PluginRuntimeError } from \"../errors\";\nimport { ModuleFederationServiceDefault } from \"./module-federation.service\";\nimport { PluginLifecycleService, PluginLifecycleServiceDefault } from \"./plugin-lifecycle.service\";\nimport {\n PluginLoaderService,\n PluginLoaderServiceDefault,\n PluginMapTag,\n PluginRegistryTag,\n RegistryServiceDefault,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsServiceDefault } from \"./secrets.service\";\n\nexport interface PluginServiceShape {\n loadPlugin: (pluginId: string) => Effect.Effect<LoadedPlugin, PluginRuntimeError>;\n instantiatePlugin: <T extends AnyPlugin>(\n pluginId: string,\n loadedPlugin: LoadedPlugin<T>,\n ) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;\n initializePlugin: <T extends AnyPlugin>(\n pluginInstance: PluginInstance<T>,\n config: any,\n plugins?: Record<string, unknown>,\n ) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;\n cleanup: Effect.Effect<void>;\n}\n\nexport class PluginService extends Context.Service<PluginService, PluginServiceShape>()(\n \"PluginService\",\n) {}\n\nexport const PluginServiceDefault = Layer.effect(\n PluginService,\n Effect.gen(function* () {\n const loader = yield* PluginLoaderService;\n const lifecycle = yield* PluginLifecycleService;\n\n return {\n loadPlugin: loader.loadPlugin,\n instantiatePlugin: loader.instantiatePlugin,\n initializePlugin: loader.initializePlugin,\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n Scope.close(plugin.scope, Exit.succeed(undefined)).pipe(\n Effect.catchCause((cause) =>\n Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, cause),\n ),\n Effect.ensuring(lifecycle.unregister(plugin)),\n ),\n cleanup: lifecycle.cleanup,\n };\n }),\n);\n\nexport const PluginServiceLive = (\n registry: PluginRegistry,\n secrets: SecretsConfig,\n pluginMap: Record<string, AnyPluginConstructor> = {},\n) => {\n const contextLayer = Layer.mergeAll(\n Layer.succeed(PluginRegistryTag, registry),\n Layer.succeed(SecretsConfigTag, secrets),\n Layer.succeed(PluginMapTag, pluginMap),\n );\n\n const servicesLayer = Layer.mergeAll(\n ModuleFederationServiceDefault,\n SecretsServiceDefault,\n RegistryServiceDefault,\n PluginLifecycleServiceDefault,\n ).pipe(Layer.provide(contextLayer));\n\n return PluginServiceDefault.pipe(\n Layer.provide(PluginLoaderServiceDefault),\n Layer.provide(servicesLayer),\n );\n};\n"],"mappings":";;;;;;;AAsCA,IAAa,gBAAb,cAAmCA,eAAQ,QAA2C,CAAC,CACrF,eACF,CAAC,CAAC,CAAC;AAEH,MAAa,uBAAuBC,aAAM,OACxC,eACAC,cAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAOC;CACtB,MAAM,YAAY,OAAOC;CAEzB,OAAO;EACL,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAAyC,UAAU,SAAS,MAAM;EACnF,iBAAiB,WACfC,aAAM,MAAM,OAAO,OAAOC,YAAK,QAAQ,MAAS,CAAC,CAAC,CAAC,KACjDJ,cAAO,YAAY,UACjBA,cAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,GACAA,cAAO,SAAS,UAAU,WAAW,MAAM,CAAC,CAC9C;EACF,SAAS,UAAU;CACrB;AACF,CAAC,CACH;AAEA,MAAa,qBACX,UACA,SACA,YAAkD,CAAC,MAChD;CACH,MAAM,eAAeD,aAAM,SACzBA,aAAM,QAAQM,iDAAmB,QAAQ,GACzCN,aAAM,QAAQO,0CAAkB,OAAO,GACvCP,aAAM,QAAQQ,4CAAc,SAAS,CACvC;CAEA,MAAM,gBAAgBR,aAAM,SAC1BS,kEACAC,+CACAC,sDACAC,8DACF,CAAC,CAAC,KAAKZ,aAAM,QAAQ,YAAY,CAAC;CAElC,OAAO,qBAAqB,KAC1BA,aAAM,QAAQa,wDAA0B,GACxCb,aAAM,QAAQ,aAAa,CAC7B;AACF"}
@@ -1,41 +1,19 @@
1
1
  import { PluginRuntimeError } from "../errors.cjs";
2
- import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.cjs";
3
- import { PluginLifecycleService } from "./plugin-lifecycle.service.cjs";
4
- import { PluginLoaderService } from "./plugin-loader.service.cjs";
5
- import "../../index.cjs";
6
- import { Effect, Layer, Scope } from "effect";
2
+ import { AnyPlugin, InitializedPlugin, LoadedPlugin, PluginInstance } from "../../types.cjs";
3
+ import "./plugin-lifecycle.service.cjs";
4
+ import "./plugin-loader.service.cjs";
5
+ import { Context, Effect, Layer } from "effect";
7
6
  //#region src/runtime/services/plugin.service.d.ts
8
- declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
9
- readonly scoped: Effect.Effect<{
10
- loadPlugin: (pluginId: string) => Effect.Effect<{
11
- ctor: any;
12
- metadata: PluginMetadata;
13
- }, PluginRuntimeError, never>;
14
- instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
15
- plugin: T;
16
- metadata: PluginMetadata;
17
- }, PluginRuntimeError, never>;
18
- initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
19
- variables: import("@orpc/contract").InferSchemaInput<T["configSchema"]["variables"]>;
20
- secrets: import("@orpc/contract").InferSchemaInput<T["configSchema"]["secrets"]>;
21
- }, plugins?: Record<string, unknown>) => Effect.Effect<{
22
- plugin: T;
23
- metadata: PluginMetadata;
24
- config: {
25
- variables: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["variables"]>;
26
- secrets: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["secrets"]>;
27
- };
28
- context: any;
29
- scope: Scope.CloseableScope;
30
- }, PluginRuntimeError, never>;
31
- registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
32
- shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
33
- cleanup: () => Effect.Effect<void, never, never>;
34
- }, never, PluginLoaderService | PluginLifecycleService>;
35
- }>;
36
- declare class PluginService extends PluginService_base {
37
- static Live: (registry: PluginRegistry, secrets: SecretsConfig, pluginMap?: Record<string, AnyPluginConstructor>) => Layer.Layer<PluginService, never, never>;
7
+ interface PluginServiceShape {
8
+ loadPlugin: (pluginId: string) => Effect.Effect<LoadedPlugin, PluginRuntimeError>;
9
+ instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;
10
+ initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: any, plugins?: Record<string, unknown>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
11
+ registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;
12
+ shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;
13
+ cleanup: Effect.Effect<void>;
38
14
  }
15
+ declare const PluginService_base: Context.ServiceClass<PluginService, "PluginService", PluginServiceShape>;
16
+ declare class PluginService extends PluginService_base {}
39
17
  //#endregion
40
- export { PluginService };
18
+ export { PluginService, PluginServiceShape };
41
19
  //# sourceMappingURL=plugin.service.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.service.d.cts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2B+B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;IAC5B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;;;;cAV9C,sBAAsB;SA4B1B,OACL,UAAU,gBACV,SAAS,eACT,YAAW,eAAe,0BAA0B,MAAA,MAAA"}
1
+ {"version":3,"file":"plugin.service.d.cts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":";;;;;;UAsBiB;EACf,aAAa,qBAAqB,OAAO,OAAO,cAAc;EAC9D,oBAAoB,UAAU,WAC5B,kBACA,cAAc,aAAa,OACxB,OAAO,OAAO,eAAe,IAAI;EACtC,mBAAmB,UAAU,WAC3B,gBAAgB,eAAe,IAC/B,aACA,UAAU,4BACP,OAAO,OAAO,kBAAkB,IAAI;EACzC,iBAAiB,QAAQ,kBAAkB,eAAe,OAAO;EACjE,iBAAiB,QAAQ,kBAAkB,eAAe,OAAO;EACjE,SAAS,OAAO;;;cAGL,sBAAsB"}
@@ -1,41 +1,19 @@
1
1
  import { PluginRuntimeError } from "../errors.mjs";
2
- import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.mjs";
3
- import { PluginLifecycleService } from "./plugin-lifecycle.service.mjs";
4
- import { PluginLoaderService } from "./plugin-loader.service.mjs";
5
- import "../../index.mjs";
6
- import { Effect, Layer, Scope } from "effect";
2
+ import { AnyPlugin, InitializedPlugin, LoadedPlugin, PluginInstance } from "../../types.mjs";
3
+ import "./plugin-lifecycle.service.mjs";
4
+ import "./plugin-loader.service.mjs";
5
+ import { Context, Effect, Layer } from "effect";
7
6
  //#region src/runtime/services/plugin.service.d.ts
8
- declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
9
- readonly scoped: Effect.Effect<{
10
- loadPlugin: (pluginId: string) => Effect.Effect<{
11
- ctor: any;
12
- metadata: PluginMetadata;
13
- }, PluginRuntimeError, never>;
14
- instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
15
- plugin: T;
16
- metadata: PluginMetadata;
17
- }, PluginRuntimeError, never>;
18
- initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
19
- variables: import("@orpc/contract").InferSchemaInput<T["configSchema"]["variables"]>;
20
- secrets: import("@orpc/contract").InferSchemaInput<T["configSchema"]["secrets"]>;
21
- }, plugins?: Record<string, unknown>) => Effect.Effect<{
22
- plugin: T;
23
- metadata: PluginMetadata;
24
- config: {
25
- variables: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["variables"]>;
26
- secrets: import("@orpc/contract").InferSchemaOutput<T["configSchema"]["secrets"]>;
27
- };
28
- context: any;
29
- scope: Scope.CloseableScope;
30
- }, PluginRuntimeError, never>;
31
- registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
32
- shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
33
- cleanup: () => Effect.Effect<void, never, never>;
34
- }, never, PluginLoaderService | PluginLifecycleService>;
35
- }>;
36
- declare class PluginService extends PluginService_base {
37
- static Live: (registry: PluginRegistry, secrets: SecretsConfig, pluginMap?: Record<string, AnyPluginConstructor>) => Layer.Layer<PluginService, never, never>;
7
+ interface PluginServiceShape {
8
+ loadPlugin: (pluginId: string) => Effect.Effect<LoadedPlugin, PluginRuntimeError>;
9
+ instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;
10
+ initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: any, plugins?: Record<string, unknown>) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;
11
+ registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;
12
+ shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;
13
+ cleanup: Effect.Effect<void>;
38
14
  }
15
+ declare const PluginService_base: Context.ServiceClass<PluginService, "PluginService", PluginServiceShape>;
16
+ declare class PluginService extends PluginService_base {}
39
17
  //#endregion
40
- export { PluginService };
18
+ export { PluginService, PluginServiceShape };
41
19
  //# sourceMappingURL=plugin.service.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.service.d.mts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2B+B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;IAC5B,iBAAA,QAAA,kBAAkB,eAAU,OAAA;;;;cAV9C,sBAAsB;SA4B1B,OACL,UAAU,gBACV,SAAS,eACT,YAAW,eAAe,0BAA0B,MAAA,MAAA"}
1
+ {"version":3,"file":"plugin.service.d.mts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"mappings":";;;;;;UAsBiB;EACf,aAAa,qBAAqB,OAAO,OAAO,cAAc;EAC9D,oBAAoB,UAAU,WAC5B,kBACA,cAAc,aAAa,OACxB,OAAO,OAAO,eAAe,IAAI;EACtC,mBAAmB,UAAU,WAC3B,gBAAgB,eAAe,IAC/B,aACA,UAAU,4BACP,OAAO,OAAO,kBAAkB,IAAI;EACzC,iBAAiB,QAAQ,kBAAkB,eAAe,OAAO;EACjE,iBAAiB,QAAQ,kBAAkB,eAAe,OAAO;EACjE,SAAS,OAAO;;;cAGL,sBAAsB"}
@@ -1,11 +1,12 @@
1
- import { ModuleFederationService } from "./module-federation.service.mjs";
2
- import { PluginLifecycleService } from "./plugin-lifecycle.service.mjs";
3
- import { SecretsConfigTag, SecretsService } from "./secrets.service.mjs";
4
- import { PluginLoaderService, PluginMapTag, PluginRegistryTag, RegistryService } from "./plugin-loader.service.mjs";
5
- import { Effect, Exit, Layer, Scope } from "effect";
1
+ import { ModuleFederationServiceDefault } from "./module-federation.service.mjs";
2
+ import { PluginLifecycleService, PluginLifecycleServiceDefault } from "./plugin-lifecycle.service.mjs";
3
+ import { SecretsConfigTag, SecretsServiceDefault } from "./secrets.service.mjs";
4
+ import { PluginLoaderService, PluginLoaderServiceDefault, PluginMapTag, PluginRegistryTag, RegistryServiceDefault } from "./plugin-loader.service.mjs";
5
+ import { Context, Effect, Exit, Layer, Scope } from "effect";
6
6
 
7
7
  //#region src/runtime/services/plugin.service.ts
8
- var PluginService = class PluginService extends Effect.Service()("PluginService", { scoped: Effect.gen(function* () {
8
+ var PluginService = class extends Context.Service()("PluginService") {};
9
+ const PluginServiceDefault = Layer.effect(PluginService, Effect.gen(function* () {
9
10
  const loader = yield* PluginLoaderService;
10
11
  const lifecycle = yield* PluginLifecycleService;
11
12
  return {
@@ -13,21 +14,16 @@ var PluginService = class PluginService extends Effect.Service()("PluginService"
13
14
  instantiatePlugin: loader.instantiatePlugin,
14
15
  initializePlugin: loader.initializePlugin,
15
16
  registerPlugin: (plugin) => lifecycle.register(plugin),
16
- shutdownPlugin: (plugin) => Effect.gen(function* () {
17
- yield* plugin.plugin.shutdown().pipe(Effect.catchAll((error) => Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error)));
18
- yield* Scope.close(plugin.scope, Exit.succeed(void 0));
19
- yield* lifecycle.unregister(plugin);
20
- }),
17
+ shutdownPlugin: (plugin) => Scope.close(plugin.scope, Exit.succeed(void 0)).pipe(Effect.catchCause((cause) => Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, cause)), Effect.ensuring(lifecycle.unregister(plugin))),
21
18
  cleanup: lifecycle.cleanup
22
19
  };
23
- }) }) {
24
- static Live = (registry, secrets, pluginMap = {}) => {
25
- const contextLayer = Layer.mergeAll(Layer.succeed(PluginRegistryTag, registry), Layer.succeed(SecretsConfigTag, secrets), Layer.succeed(PluginMapTag, pluginMap));
26
- const servicesLayer = Layer.mergeAll(ModuleFederationService.Default, SecretsService.Default, RegistryService.Default, PluginLifecycleService.Default).pipe(Layer.provide(contextLayer));
27
- return PluginService.Default.pipe(Layer.provide(PluginLoaderService.Default), Layer.provide(servicesLayer));
28
- };
20
+ }));
21
+ const PluginServiceLive = (registry, secrets, pluginMap = {}) => {
22
+ const contextLayer = Layer.mergeAll(Layer.succeed(PluginRegistryTag, registry), Layer.succeed(SecretsConfigTag, secrets), Layer.succeed(PluginMapTag, pluginMap));
23
+ const servicesLayer = Layer.mergeAll(ModuleFederationServiceDefault, SecretsServiceDefault, RegistryServiceDefault, PluginLifecycleServiceDefault).pipe(Layer.provide(contextLayer));
24
+ return PluginServiceDefault.pipe(Layer.provide(PluginLoaderServiceDefault), Layer.provide(servicesLayer));
29
25
  };
30
26
 
31
27
  //#endregion
32
- export { PluginService };
28
+ export { PluginService, PluginServiceDefault, PluginServiceLive };
33
29
  //# sourceMappingURL=plugin.service.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.service.mjs","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n PluginRegistry,\n SecretsConfig,\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport {\n PluginLoaderService,\n PluginMapTag,\n PluginRegistryTag,\n RegistryService,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n scoped: Effect.gen(function* () {\n const loader = yield* PluginLoaderService;\n const lifecycle = yield* PluginLifecycleService;\n\n return {\n loadPlugin: loader.loadPlugin,\n instantiatePlugin: loader.instantiatePlugin,\n initializePlugin: loader.initializePlugin,\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n Effect.gen(function* () {\n yield* plugin.plugin\n .shutdown()\n .pipe(\n Effect.catchAll((error) =>\n Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error),\n ),\n );\n\n yield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n yield* lifecycle.unregister(plugin);\n }),\n cleanup: lifecycle.cleanup,\n };\n }),\n}) {\n static Live = (\n registry: PluginRegistry,\n secrets: SecretsConfig,\n pluginMap: Record<string, AnyPluginConstructor> = {},\n ) => {\n const contextLayer = Layer.mergeAll(\n Layer.succeed(PluginRegistryTag, registry),\n Layer.succeed(SecretsConfigTag, secrets),\n Layer.succeed(PluginMapTag, pluginMap),\n );\n\n const servicesLayer = Layer.mergeAll(\n ModuleFederationService.Default,\n SecretsService.Default,\n RegistryService.Default,\n PluginLifecycleService.Default,\n ).pipe(Layer.provide(contextLayer));\n\n return PluginService.Default.pipe(\n Layer.provide(PluginLoaderService.Default),\n Layer.provide(servicesLayer),\n );\n };\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,gBAAb,MAAa,sBAAsB,OAAO,QAAuB,CAAC,CAAC,iBAAiB,EAClF,QAAQ,OAAO,IAAI,aAAa;CAC9B,MAAM,SAAS,OAAO;CACtB,MAAM,YAAY,OAAO;CAEzB,OAAO;EACL,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAAyC,UAAU,SAAS,MAAM;EACnF,iBAAiB,WACf,OAAO,IAAI,aAAa;GACtB,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACC,OAAO,UAAU,UACf,OAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,CACF;GAEF,OAAO,MAAM,MAAM,OAAO,OAAO,KAAK,QAAQ,MAAS,CAAC;GAExD,OAAO,UAAU,WAAW,MAAM;EACpC,CAAC;EACH,SAAS,UAAU;CACrB;AACF,CAAC,EACH,CAAC,CAAC,CAAC;CACD,OAAO,QACL,UACA,SACA,YAAkD,CAAC,MAChD;EACH,MAAM,eAAe,MAAM,SACzB,MAAM,QAAQ,mBAAmB,QAAQ,GACzC,MAAM,QAAQ,kBAAkB,OAAO,GACvC,MAAM,QAAQ,cAAc,SAAS,CACvC;EAEA,MAAM,gBAAgB,MAAM,SAC1B,wBAAwB,SACxB,eAAe,SACf,gBAAgB,SAChB,uBAAuB,OACzB,CAAC,CAAC,KAAK,MAAM,QAAQ,YAAY,CAAC;EAElC,OAAO,cAAc,QAAQ,KAC3B,MAAM,QAAQ,oBAAoB,OAAO,GACzC,MAAM,QAAQ,aAAa,CAC7B;CACF;AACF"}
1
+ {"version":3,"file":"plugin.service.mjs","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Context, Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n AnyPlugin,\n AnyPluginConstructor,\n InitializedPlugin,\n LoadedPlugin,\n PluginInstance,\n PluginRegistry,\n SecretsConfig,\n} from \"../../types\";\nimport type { PluginRuntimeError } from \"../errors\";\nimport { ModuleFederationServiceDefault } from \"./module-federation.service\";\nimport { PluginLifecycleService, PluginLifecycleServiceDefault } from \"./plugin-lifecycle.service\";\nimport {\n PluginLoaderService,\n PluginLoaderServiceDefault,\n PluginMapTag,\n PluginRegistryTag,\n RegistryServiceDefault,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsServiceDefault } from \"./secrets.service\";\n\nexport interface PluginServiceShape {\n loadPlugin: (pluginId: string) => Effect.Effect<LoadedPlugin, PluginRuntimeError>;\n instantiatePlugin: <T extends AnyPlugin>(\n pluginId: string,\n loadedPlugin: LoadedPlugin<T>,\n ) => Effect.Effect<PluginInstance<T>, PluginRuntimeError>;\n initializePlugin: <T extends AnyPlugin>(\n pluginInstance: PluginInstance<T>,\n config: any,\n plugins?: Record<string, unknown>,\n ) => Effect.Effect<InitializedPlugin<T>, PluginRuntimeError>;\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void>;\n cleanup: Effect.Effect<void>;\n}\n\nexport class PluginService extends Context.Service<PluginService, PluginServiceShape>()(\n \"PluginService\",\n) {}\n\nexport const PluginServiceDefault = Layer.effect(\n PluginService,\n Effect.gen(function* () {\n const loader = yield* PluginLoaderService;\n const lifecycle = yield* PluginLifecycleService;\n\n return {\n loadPlugin: loader.loadPlugin,\n instantiatePlugin: loader.instantiatePlugin,\n initializePlugin: loader.initializePlugin,\n registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n Scope.close(plugin.scope, Exit.succeed(undefined)).pipe(\n Effect.catchCause((cause) =>\n Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, cause),\n ),\n Effect.ensuring(lifecycle.unregister(plugin)),\n ),\n cleanup: lifecycle.cleanup,\n };\n }),\n);\n\nexport const PluginServiceLive = (\n registry: PluginRegistry,\n secrets: SecretsConfig,\n pluginMap: Record<string, AnyPluginConstructor> = {},\n) => {\n const contextLayer = Layer.mergeAll(\n Layer.succeed(PluginRegistryTag, registry),\n Layer.succeed(SecretsConfigTag, secrets),\n Layer.succeed(PluginMapTag, pluginMap),\n );\n\n const servicesLayer = Layer.mergeAll(\n ModuleFederationServiceDefault,\n SecretsServiceDefault,\n RegistryServiceDefault,\n PluginLifecycleServiceDefault,\n ).pipe(Layer.provide(contextLayer));\n\n return PluginServiceDefault.pipe(\n Layer.provide(PluginLoaderServiceDefault),\n Layer.provide(servicesLayer),\n );\n};\n"],"mappings":";;;;;;;AAsCA,IAAa,gBAAb,cAAmC,QAAQ,QAA2C,CAAC,CACrF,eACF,CAAC,CAAC,CAAC;AAEH,MAAa,uBAAuB,MAAM,OACxC,eACA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO;CACtB,MAAM,YAAY,OAAO;CAEzB,OAAO;EACL,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAAyC,UAAU,SAAS,MAAM;EACnF,iBAAiB,WACf,MAAM,MAAM,OAAO,OAAO,KAAK,QAAQ,MAAS,CAAC,CAAC,CAAC,KACjD,OAAO,YAAY,UACjB,OAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,GACA,OAAO,SAAS,UAAU,WAAW,MAAM,CAAC,CAC9C;EACF,SAAS,UAAU;CACrB;AACF,CAAC,CACH;AAEA,MAAa,qBACX,UACA,SACA,YAAkD,CAAC,MAChD;CACH,MAAM,eAAe,MAAM,SACzB,MAAM,QAAQ,mBAAmB,QAAQ,GACzC,MAAM,QAAQ,kBAAkB,OAAO,GACvC,MAAM,QAAQ,cAAc,SAAS,CACvC;CAEA,MAAM,gBAAgB,MAAM,SAC1B,gCACA,uBACA,wBACA,6BACF,CAAC,CAAC,KAAK,MAAM,QAAQ,YAAY,CAAC;CAElC,OAAO,qBAAqB,KAC1B,MAAM,QAAQ,0BAA0B,GACxC,MAAM,QAAQ,aAAa,CAC7B;AACF"}
@@ -1,13 +1,14 @@
1
1
  const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
2
2
  const require_errors = require('../errors.cjs');
3
+ let effect = require("effect");
3
4
  let zod = require("zod");
4
5
  zod = require_runtime.__toESM(zod, 1);
5
- let effect = require("effect");
6
6
 
7
7
  //#region src/runtime/services/secrets.service.ts
8
8
  const configSchema = zod.object({ secrets: zod.record(zod.string(), zod.unknown()) }).passthrough();
9
- var SecretsConfigTag = class extends effect.Context.Tag("SecretsConfig")() {};
10
- var SecretsService = class extends effect.Effect.Service()("SecretsService", { effect: effect.Effect.gen(function* () {
9
+ var SecretsConfigTag = class extends effect.Context.Service()("SecretsConfig") {};
10
+ var SecretsService = class extends effect.Context.Service()("SecretsService") {};
11
+ const SecretsServiceDefault = effect.Layer.effect(SecretsService, effect.Effect.gen(function* () {
11
12
  const secrets = yield* SecretsConfigTag;
12
13
  const hydrateValue = (value) => {
13
14
  if (typeof value === "string") {
@@ -33,19 +34,18 @@ var SecretsService = class extends effect.Effect.Service()("SecretsService", { e
33
34
  };
34
35
  return { hydrateSecrets: (config) => effect.Effect.gen(function* () {
35
36
  const parseResult = configSchema.parse(config);
36
- try {
37
- return hydrateValue(parseResult);
38
- } catch (error) {
39
- return yield* effect.Effect.fail(new require_errors.PluginRuntimeError({
37
+ return yield* effect.Effect.try({
38
+ try: () => hydrateValue(parseResult),
39
+ catch: (error) => new require_errors.PluginRuntimeError({
40
40
  operation: "hydrate-secrets",
41
- cause: error instanceof Error ? error : new Error(String(error)),
42
- retryable: false
43
- }));
44
- }
41
+ cause: error instanceof Error ? error : new Error(String(error))
42
+ })
43
+ });
45
44
  }) };
46
- }) }) {};
45
+ }));
47
46
 
48
47
  //#endregion
49
48
  exports.SecretsConfigTag = SecretsConfigTag;
50
49
  exports.SecretsService = SecretsService;
50
+ exports.SecretsServiceDefault = SecretsServiceDefault;
51
51
  //# sourceMappingURL=secrets.service.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.service.cjs","names":["z","Context","Effect","PluginRuntimeError"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n .object({\n secrets: z.record(z.string(), z.unknown()),\n })\n .passthrough();\n\nexport class SecretsConfigTag extends Context.Tag(\"SecretsConfig\")<\n SecretsConfigTag,\n SecretsConfig\n>() {}\n\nexport class SecretsService extends Effect.Service<SecretsService>()(\"SecretsService\", {\n effect: Effect.gen(function* () {\n const secrets = yield* SecretsConfigTag;\n\n const hydrateValue = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n let result = value;\n for (const [key, secretValue] of Object.entries(secrets)) {\n const pattern = new RegExp(`{{${key}}}`, \"g\");\n result = result.replace(pattern, String(secretValue));\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(hydrateValue);\n }\n\n if (value && typeof value === \"object\") {\n const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n if (isPlainObject) {\n const hydrated: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n const hydrated = Object.create(Object.getPrototypeOf(value));\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n return value;\n };\n\n return {\n hydrateSecrets: <T>(config: T) =>\n Effect.gen(function* () {\n const parseResult = configSchema.parse(config);\n try {\n return hydrateValue(parseResult) as T;\n } catch (error) {\n return yield* Effect.fail(\n new PluginRuntimeError({\n operation: \"hydrate-secrets\",\n cause: error instanceof Error ? error : new Error(String(error)),\n retryable: false,\n }),\n );\n }\n }),\n };\n }),\n}) {}\n"],"mappings":";;;;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAC3C,CAAC,CAAC,CACD,YAAY;AAEf,IAAa,mBAAb,cAAsCC,eAAQ,IAAI,eAAe,CAAC,CAGhE,CAAC,CAAC,CAAC;AAEL,IAAa,iBAAb,cAAoCC,cAAO,QAAwB,CAAC,CAAC,kBAAkB,EACrF,QAAQA,cAAO,IAAI,aAAa;CAC9B,MAAM,UAAU,OAAO;CAEvB,MAAM,gBAAgB,UAA4B;EAChD,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,SAAS;GACb,KAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,OAAO,GAAG;IACxD,MAAM,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK,GAAG;IAC5C,SAAS,OAAO,QAAQ,SAAS,OAAO,WAAW,CAAC;GACtD;GACA,OAAO;EACT;EAEA,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,YAAY;EAG/B,IAAI,SAAS,OAAO,UAAU,UAAU;GAGtC,IAFsB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB,QAEzD;IACjB,MAAM,WAAoC,CAAC;IAC3C,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;IAElC,OAAO;GACT;GAEA,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;GAC3D,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;GAElC,OAAO;EACT;EAEA,OAAO;CACT;CAEA,OAAO,EACL,iBAAoB,WAClBA,cAAO,IAAI,aAAa;EACtB,MAAM,cAAc,aAAa,MAAM,MAAM;EAC7C,IAAI;GACF,OAAO,aAAa,WAAW;EACjC,SAAS,OAAO;GACd,OAAO,OAAOA,cAAO,KACnB,IAAIC,kCAAmB;IACrB,WAAW;IACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;IAC/D,WAAW;GACb,CAAC,CACH;EACF;CACF,CAAC,EACL;AACF,CAAC,EACH,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"secrets.service.cjs","names":["z","Context","Layer","Effect","PluginRuntimeError"],"sources":["../../../src/runtime/services/secrets.service.ts"],"sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport * as z from \"zod\";\nimport type { SecretsConfig } from \"../../types\";\nimport { PluginRuntimeError } from \"../errors\";\n\nconst configSchema = z\n .object({\n secrets: z.record(z.string(), z.unknown()),\n })\n .passthrough();\n\nexport class SecretsConfigTag extends Context.Service<SecretsConfigTag, SecretsConfig>()(\n \"SecretsConfig\",\n) {}\n\nexport interface SecretsServiceShape {\n hydrateSecrets: <T>(config: T) => Effect.Effect<T, PluginRuntimeError>;\n}\n\nexport class SecretsService extends Context.Service<SecretsService, SecretsServiceShape>()(\n \"SecretsService\",\n) {}\n\nexport const SecretsServiceDefault = Layer.effect(\n SecretsService,\n Effect.gen(function* () {\n const secrets = yield* SecretsConfigTag;\n\n const hydrateValue = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n let result = value;\n for (const [key, secretValue] of Object.entries(secrets)) {\n const pattern = new RegExp(`{{${key}}}`, \"g\");\n result = result.replace(pattern, String(secretValue));\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(hydrateValue);\n }\n\n if (value && typeof value === \"object\") {\n const isPlainObject = value.constructor === Object || value.constructor === undefined;\n\n if (isPlainObject) {\n const hydrated: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n const hydrated = Object.create(Object.getPrototypeOf(value));\n for (const [key, val] of Object.entries(value)) {\n hydrated[key] = hydrateValue(val);\n }\n return hydrated;\n }\n\n return value;\n };\n\n return {\n hydrateSecrets: <T>(config: T) =>\n Effect.gen(function* () {\n const parseResult = configSchema.parse(config);\n return yield* Effect.try({\n try: () => hydrateValue(parseResult) as T,\n catch: (error) =>\n new PluginRuntimeError({\n operation: \"hydrate-secrets\",\n cause: error instanceof Error ? error : new Error(String(error)),\n }),\n });\n }),\n };\n }),\n);\n"],"mappings":";;;;;;;AAKA,MAAM,eAAeA,IAClB,OAAO,EACN,SAASA,IAAE,OAAOA,IAAE,OAAO,GAAGA,IAAE,QAAQ,CAAC,EAC3C,CAAC,CAAC,CACD,YAAY;AAEf,IAAa,mBAAb,cAAsCC,eAAQ,QAAyC,CAAC,CACtF,eACF,CAAC,CAAC,CAAC;AAMH,IAAa,iBAAb,cAAoCA,eAAQ,QAA6C,CAAC,CACxF,gBACF,CAAC,CAAC,CAAC;AAEH,MAAa,wBAAwBC,aAAM,OACzC,gBACAC,cAAO,IAAI,aAAa;CACtB,MAAM,UAAU,OAAO;CAEvB,MAAM,gBAAgB,UAA4B;EAChD,IAAI,OAAO,UAAU,UAAU;GAC7B,IAAI,SAAS;GACb,KAAK,MAAM,CAAC,KAAK,gBAAgB,OAAO,QAAQ,OAAO,GAAG;IACxD,MAAM,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK,GAAG;IAC5C,SAAS,OAAO,QAAQ,SAAS,OAAO,WAAW,CAAC;GACtD;GACA,OAAO;EACT;EAEA,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,IAAI,YAAY;EAG/B,IAAI,SAAS,OAAO,UAAU,UAAU;GAGtC,IAFsB,MAAM,gBAAgB,UAAU,MAAM,gBAAgB,QAEzD;IACjB,MAAM,WAAoC,CAAC;IAC3C,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;IAElC,OAAO;GACT;GAEA,MAAM,WAAW,OAAO,OAAO,OAAO,eAAe,KAAK,CAAC;GAC3D,KAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAC3C,SAAS,OAAO,aAAa,GAAG;GAElC,OAAO;EACT;EAEA,OAAO;CACT;CAEA,OAAO,EACL,iBAAoB,WAClBA,cAAO,IAAI,aAAa;EACtB,MAAM,cAAc,aAAa,MAAM,MAAM;EAC7C,OAAO,OAAOA,cAAO,IAAI;GACvB,WAAW,aAAa,WAAW;GACnC,QAAQ,UACN,IAAIC,kCAAmB;IACrB,WAAW;IACX,OAAO,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;GACjE,CAAC;EACL,CAAC;CACH,CAAC,EACL;AACF,CAAC,CACH"}
@@ -1,15 +1,3 @@
1
- import { PluginRuntimeError } from "../errors.cjs";
2
- import { SecretsConfig } from "../../types.cjs";
3
- import { Context, Effect } from "effect";
4
- //#region src/runtime/services/secrets.service.d.ts
5
- declare const SecretsConfigTag_base: Context.TagClass<SecretsConfigTag, "SecretsConfig", SecretsConfig>;
6
- declare class SecretsConfigTag extends SecretsConfigTag_base {}
7
- declare const SecretsService_base: Effect.Service.Class<SecretsService, "SecretsService", {
8
- readonly effect: Effect.Effect<{
9
- hydrateSecrets: <T>(config: T) => Effect.Effect<T, PluginRuntimeError, never>;
10
- }, never, SecretsConfigTag>;
11
- }>;
12
- declare class SecretsService extends SecretsService_base {}
13
- //#endregion
14
- export { SecretsConfigTag, SecretsService };
15
- //# sourceMappingURL=secrets.service.d.cts.map
1
+ import "../errors.cjs";
2
+ import "../../types.cjs";
3
+ import { Context, Effect, Layer } from "effect";