every-plugin 0.4.17 → 0.5.1

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 (198) hide show
  1. package/dist/{chunk-zltIcp7o.cjs → _virtual/rolldown_runtime.cjs} +3 -18
  2. package/dist/{chunk-QQAxy9l9.mjs → _virtual/rolldown_runtime.mjs} +1 -1
  3. package/dist/build/rspack/dev-server-middleware.cjs +201 -0
  4. package/dist/build/rspack/dev-server-middleware.cjs.map +1 -0
  5. package/dist/build/rspack/dev-server-middleware.mjs +200 -0
  6. package/dist/build/rspack/dev-server-middleware.mjs.map +1 -0
  7. package/dist/build/rspack/index.cjs +2 -362
  8. package/dist/build/rspack/index.d.cts +2 -20
  9. package/dist/build/rspack/index.d.mts +2 -20
  10. package/dist/build/rspack/index.mjs +2 -360
  11. package/dist/build/rspack/module-federation.cjs +47 -0
  12. package/dist/build/rspack/module-federation.cjs.map +1 -0
  13. package/dist/build/rspack/module-federation.mjs +47 -0
  14. package/dist/build/rspack/module-federation.mjs.map +1 -0
  15. package/dist/build/rspack/plugin.cjs +90 -0
  16. package/dist/build/rspack/plugin.cjs.map +1 -0
  17. package/dist/build/rspack/plugin.d.cts +20 -0
  18. package/dist/build/rspack/plugin.d.cts.map +1 -0
  19. package/dist/build/rspack/plugin.d.mts +20 -0
  20. package/dist/build/rspack/plugin.d.mts.map +1 -0
  21. package/dist/build/rspack/plugin.mjs +89 -0
  22. package/dist/build/rspack/plugin.mjs.map +1 -0
  23. package/dist/build/rspack/utils.cjs +41 -0
  24. package/dist/build/rspack/utils.cjs.map +1 -0
  25. package/dist/build/rspack/utils.mjs +38 -0
  26. package/dist/build/rspack/utils.mjs.map +1 -0
  27. package/dist/errors.cjs +62 -3
  28. package/dist/errors.cjs.map +1 -0
  29. package/dist/errors.d.cts +75 -3
  30. package/dist/errors.d.cts.map +1 -0
  31. package/dist/errors.d.mts +75 -3
  32. package/dist/errors.d.mts.map +1 -0
  33. package/dist/errors.mjs +62 -3
  34. package/dist/errors.mjs.map +1 -0
  35. package/dist/index.cjs +8 -55
  36. package/dist/index.d.cts +6 -5
  37. package/dist/index.d.mts +6 -5
  38. package/dist/index.mjs +5 -51
  39. package/dist/orpc.cjs +1 -1
  40. package/dist/{package-D4mbTFY1.cjs → package.cjs} +22 -7
  41. package/dist/package.cjs.map +1 -0
  42. package/dist/{package-B0vvsKXO.mjs → package.mjs} +22 -5
  43. package/dist/package.mjs.map +1 -0
  44. package/dist/plugin.cjs +48 -0
  45. package/dist/plugin.cjs.map +1 -0
  46. package/dist/plugin.d.cts +62 -0
  47. package/dist/plugin.d.cts.map +1 -0
  48. package/dist/plugin.d.mts +62 -0
  49. package/dist/plugin.d.mts.map +1 -0
  50. package/dist/plugin.mjs +47 -0
  51. package/dist/plugin.mjs.map +1 -0
  52. package/dist/runtime/errors.cjs +45 -0
  53. package/dist/runtime/errors.cjs.map +1 -0
  54. package/dist/runtime/errors.d.cts +27 -0
  55. package/dist/runtime/errors.d.cts.map +1 -0
  56. package/dist/runtime/errors.d.mts +27 -0
  57. package/dist/runtime/errors.d.mts.map +1 -0
  58. package/dist/runtime/errors.mjs +41 -0
  59. package/dist/runtime/errors.mjs.map +1 -0
  60. package/dist/runtime/index.cjs +157 -5
  61. package/dist/runtime/index.cjs.map +1 -0
  62. package/dist/runtime/index.d.cts +43 -5
  63. package/dist/runtime/index.d.cts.map +1 -0
  64. package/dist/runtime/index.d.mts +43 -5
  65. package/dist/runtime/index.d.mts.map +1 -0
  66. package/dist/runtime/index.mjs +155 -4
  67. package/dist/runtime/index.mjs.map +1 -0
  68. package/dist/runtime/services/module-federation.service.cjs +143 -0
  69. package/dist/runtime/services/module-federation.service.cjs.map +1 -0
  70. package/dist/runtime/services/module-federation.service.d.cts +15 -0
  71. package/dist/runtime/services/module-federation.service.d.cts.map +1 -0
  72. package/dist/runtime/services/module-federation.service.d.mts +15 -0
  73. package/dist/runtime/services/module-federation.service.d.mts.map +1 -0
  74. package/dist/runtime/services/module-federation.service.mjs +143 -0
  75. package/dist/runtime/services/module-federation.service.mjs.map +1 -0
  76. package/dist/runtime/services/normalize.cjs +22 -2
  77. package/dist/runtime/services/normalize.cjs.map +1 -0
  78. package/dist/runtime/services/normalize.d.cts +21 -2
  79. package/dist/runtime/services/normalize.d.cts.map +1 -0
  80. package/dist/runtime/services/normalize.d.mts +21 -2
  81. package/dist/runtime/services/normalize.d.mts.map +1 -0
  82. package/dist/runtime/services/normalize.mjs +21 -2
  83. package/dist/runtime/services/normalize.mjs.map +1 -0
  84. package/dist/runtime/services/plugin-lifecycle.service.cjs +33 -0
  85. package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -0
  86. package/dist/runtime/services/plugin-lifecycle.service.d.cts +17 -0
  87. package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +1 -0
  88. package/dist/runtime/services/plugin-lifecycle.service.d.mts +17 -0
  89. package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +1 -0
  90. package/dist/runtime/services/plugin-lifecycle.service.mjs +32 -0
  91. package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -0
  92. package/dist/runtime/services/plugin-loader.service.cjs +125 -0
  93. package/dist/runtime/services/plugin-loader.service.cjs.map +1 -0
  94. package/dist/runtime/services/plugin-loader.service.d.cts +54 -0
  95. package/dist/runtime/services/plugin-loader.service.d.cts.map +1 -0
  96. package/dist/runtime/services/plugin-loader.service.d.mts +54 -0
  97. package/dist/runtime/services/plugin-loader.service.d.mts.map +1 -0
  98. package/dist/runtime/services/plugin-loader.service.mjs +121 -0
  99. package/dist/runtime/services/plugin-loader.service.mjs.map +1 -0
  100. package/dist/runtime/services/plugin.service.cjs +33 -0
  101. package/dist/runtime/services/plugin.service.cjs.map +1 -0
  102. package/dist/runtime/services/plugin.service.d.cts +42 -0
  103. package/dist/runtime/services/plugin.service.d.cts.map +1 -0
  104. package/dist/runtime/services/plugin.service.d.mts +42 -0
  105. package/dist/runtime/services/plugin.service.d.mts.map +1 -0
  106. package/dist/runtime/services/plugin.service.mjs +32 -0
  107. package/dist/runtime/services/plugin.service.mjs.map +1 -0
  108. package/dist/runtime/services/secrets.service.cjs +50 -0
  109. package/dist/runtime/services/secrets.service.cjs.map +1 -0
  110. package/dist/runtime/services/secrets.service.d.cts +16 -0
  111. package/dist/runtime/services/secrets.service.d.cts.map +1 -0
  112. package/dist/runtime/services/secrets.service.d.mts +16 -0
  113. package/dist/runtime/services/secrets.service.d.mts.map +1 -0
  114. package/dist/runtime/services/secrets.service.mjs +48 -0
  115. package/dist/runtime/services/secrets.service.mjs.map +1 -0
  116. package/dist/runtime/validation.cjs +18 -0
  117. package/dist/runtime/validation.cjs.map +1 -0
  118. package/dist/runtime/validation.mjs +17 -0
  119. package/dist/runtime/validation.mjs.map +1 -0
  120. package/dist/testing/index.cjs +33 -55
  121. package/dist/testing/index.cjs.map +1 -1
  122. package/dist/testing/index.d.cts +28 -33
  123. package/dist/testing/index.d.cts.map +1 -1
  124. package/dist/testing/index.d.mts +28 -33
  125. package/dist/testing/index.d.mts.map +1 -1
  126. package/dist/testing/index.mjs +34 -54
  127. package/dist/testing/index.mjs.map +1 -1
  128. package/dist/types.cjs +0 -0
  129. package/dist/types.d.cts +261 -0
  130. package/dist/types.d.cts.map +1 -0
  131. package/dist/types.d.mts +261 -0
  132. package/dist/types.d.mts.map +1 -0
  133. package/dist/types.mjs +1 -0
  134. package/dist/zod-core.cjs +9 -0
  135. package/dist/zod-core.d.cts +1 -0
  136. package/dist/zod-core.d.mts +1 -0
  137. package/dist/zod-core.mjs +3 -0
  138. package/dist/zod.cjs +13 -1
  139. package/dist/zod.cjs.map +1 -0
  140. package/dist/zod.d.cts +8 -2
  141. package/dist/zod.d.cts.map +1 -0
  142. package/dist/zod.d.mts +8 -2
  143. package/dist/zod.d.mts.map +1 -0
  144. package/dist/zod.mjs +9 -2
  145. package/dist/zod.mjs.map +1 -0
  146. package/package.json +17 -2
  147. package/dist/build/rspack/index.cjs.map +0 -1
  148. package/dist/build/rspack/index.d.cts.map +0 -1
  149. package/dist/build/rspack/index.d.mts.map +0 -1
  150. package/dist/build/rspack/index.mjs.map +0 -1
  151. package/dist/errors-9sNpYLv5.d.mts +0 -75
  152. package/dist/errors-9sNpYLv5.d.mts.map +0 -1
  153. package/dist/errors-CVnoPl9v.cjs +0 -68
  154. package/dist/errors-CVnoPl9v.cjs.map +0 -1
  155. package/dist/errors-D7keKf7a.mjs +0 -63
  156. package/dist/errors-D7keKf7a.mjs.map +0 -1
  157. package/dist/errors-DKPPPYYT.d.cts +0 -75
  158. package/dist/errors-DKPPPYYT.d.cts.map +0 -1
  159. package/dist/fetch-8DauUFDh.mjs +0 -335
  160. package/dist/fetch-8DauUFDh.mjs.map +0 -1
  161. package/dist/fetch-CrBvwsZ4.cjs +0 -336
  162. package/dist/fetch-CrBvwsZ4.cjs.map +0 -1
  163. package/dist/index-Coz54d1B.d.mts +0 -387
  164. package/dist/index-Coz54d1B.d.mts.map +0 -1
  165. package/dist/index-G63gBZIY.d.cts +0 -386
  166. package/dist/index-G63gBZIY.d.cts.map +0 -1
  167. package/dist/index.cjs.map +0 -1
  168. package/dist/index.mjs.map +0 -1
  169. package/dist/normalize-BW7kk8Lk.d.cts +0 -21
  170. package/dist/normalize-BW7kk8Lk.d.cts.map +0 -1
  171. package/dist/normalize-D4Qh0wVk.cjs +0 -28
  172. package/dist/normalize-D4Qh0wVk.cjs.map +0 -1
  173. package/dist/normalize-D7nae0Hn.mjs +0 -22
  174. package/dist/normalize-D7nae0Hn.mjs.map +0 -1
  175. package/dist/normalize-eB_j86fm.d.mts +0 -21
  176. package/dist/normalize-eB_j86fm.d.mts.map +0 -1
  177. package/dist/package-B0vvsKXO.mjs.map +0 -1
  178. package/dist/package-D4mbTFY1.cjs.map +0 -1
  179. package/dist/plugins-C6MGKdD-.mjs +0 -790
  180. package/dist/plugins-C6MGKdD-.mjs.map +0 -1
  181. package/dist/plugins-DNaNtkG7.cjs +0 -791
  182. package/dist/plugins-DNaNtkG7.cjs.map +0 -1
  183. package/dist/runtime-BTFJzoBu.cjs +0 -541
  184. package/dist/runtime-BTFJzoBu.cjs.map +0 -1
  185. package/dist/runtime-BYDchBFq.mjs +0 -476
  186. package/dist/runtime-BYDchBFq.mjs.map +0 -1
  187. package/dist/standard-CkH8zNkx.mjs +0 -584
  188. package/dist/standard-CkH8zNkx.mjs.map +0 -1
  189. package/dist/standard-v75BC6Z5.cjs +0 -685
  190. package/dist/standard-v75BC6Z5.cjs.map +0 -1
  191. package/dist/zod-A7Pti5IV.d.cts +0 -4
  192. package/dist/zod-A7Pti5IV.d.cts.map +0 -1
  193. package/dist/zod-BVo51kgJ.mjs +0 -10
  194. package/dist/zod-BVo51kgJ.mjs.map +0 -1
  195. package/dist/zod-DYghWCz1.cjs +0 -14
  196. package/dist/zod-DYghWCz1.cjs.map +0 -1
  197. package/dist/zod-Zw8dlP3j.d.mts +0 -4
  198. package/dist/zod-Zw8dlP3j.d.mts.map +0 -1
@@ -0,0 +1,125 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_errors = require('../errors.cjs');
3
+ const require_module_federation_service = require('./module-federation.service.cjs');
4
+ const require_validation = require('../validation.cjs');
5
+ const require_secrets_service = require('./secrets.service.cjs');
6
+ let effect = require("effect");
7
+
8
+ //#region src/runtime/services/plugin-loader.service.ts
9
+ var PluginRegistryTag = class extends effect.Context.Tag("PluginRegistry")() {};
10
+ var PluginMapTag = class extends effect.Context.Tag("PluginMap")() {};
11
+ var RegistryService = class extends effect.Effect.Service()("RegistryService", { effect: effect.Effect.gen(function* () {
12
+ const registry = yield* PluginRegistryTag;
13
+ const pluginMap = yield* PluginMapTag;
14
+ return {
15
+ get: (pluginId) => effect.Effect.gen(function* () {
16
+ const entry = registry[pluginId];
17
+ if (!entry) return yield* effect.Effect.fail(new require_errors.PluginRuntimeError({
18
+ pluginId,
19
+ operation: "validate-plugin-id",
20
+ cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} not found in registry`),
21
+ retryable: false
22
+ }));
23
+ if ("module" in entry) return {
24
+ constructor: entry.module,
25
+ metadata: {
26
+ remoteUrl: entry.remote || "",
27
+ version: entry.version,
28
+ description: entry.description
29
+ }
30
+ };
31
+ return {
32
+ constructor: null,
33
+ metadata: {
34
+ remoteUrl: entry.remote,
35
+ version: entry.version,
36
+ description: entry.description
37
+ }
38
+ };
39
+ }),
40
+ getModule: (pluginId) => effect.Effect.succeed(pluginMap[pluginId] || null)
41
+ };
42
+ }) }) {};
43
+ var PluginLoaderService = class extends effect.Effect.Service()("PluginLoaderService", { effect: effect.Effect.gen(function* () {
44
+ const moduleFederationService = yield* require_module_federation_service.ModuleFederationService;
45
+ const secretsService = yield* require_secrets_service.SecretsService;
46
+ const registryService = yield* RegistryService;
47
+ const resolveUrl = (baseUrl, version) => version && version !== "latest" ? baseUrl.replace("@latest", `@${version}`) : baseUrl;
48
+ return {
49
+ loadPlugin: (pluginId) => effect.Effect.gen(function* () {
50
+ const entry = yield* registryService.get(pluginId);
51
+ if (entry.constructor) {
52
+ yield* effect.Effect.logDebug("Loading plugin from direct module", { pluginId });
53
+ return {
54
+ ctor: entry.constructor,
55
+ metadata: entry.metadata
56
+ };
57
+ }
58
+ const url = resolveUrl(entry.metadata.remoteUrl);
59
+ yield* moduleFederationService.registerRemote(pluginId, url).pipe(effect.Effect.mapError((error) => require_errors.toPluginRuntimeError(error, pluginId, void 0, "register-remote", true)));
60
+ yield* effect.Effect.logDebug("Loading plugin from remote", {
61
+ pluginId,
62
+ url
63
+ });
64
+ return {
65
+ ctor: yield* moduleFederationService.loadRemoteConstructor(pluginId, url).pipe(effect.Effect.mapError((error) => require_errors.toPluginRuntimeError(error, pluginId, void 0, "load-remote", false))),
66
+ metadata: entry.metadata
67
+ };
68
+ }),
69
+ instantiatePlugin: (pluginId, loadedPlugin) => effect.Effect.gen(function* () {
70
+ const instance = yield* effect.Effect.try(() => new loadedPlugin.ctor()).pipe(effect.Effect.mapError((error) => require_errors.toPluginRuntimeError(error, pluginId, void 0, "instantiate-plugin", false)));
71
+ instance.id = pluginId;
72
+ return {
73
+ plugin: instance,
74
+ metadata: loadedPlugin.metadata
75
+ };
76
+ }),
77
+ initializePlugin: (pluginInstance, config) => effect.Effect.gen(function* () {
78
+ const { plugin } = pluginInstance;
79
+ const validatedVariables = yield* require_validation.validate(plugin.configSchema.variables, config.variables, plugin.id, "config").pipe(effect.Effect.mapError((validationError) => new require_errors.PluginRuntimeError({
80
+ pluginId: plugin.id,
81
+ operation: "validate-config",
82
+ cause: validationError.zodError,
83
+ retryable: false
84
+ })));
85
+ const validatedSecrets = yield* require_validation.validate(plugin.configSchema.secrets, config.secrets, plugin.id, "config").pipe(effect.Effect.mapError((validationError) => new require_errors.PluginRuntimeError({
86
+ pluginId: plugin.id,
87
+ operation: "validate-secrets",
88
+ cause: validationError.zodError,
89
+ retryable: false
90
+ })));
91
+ const hydratedConfig = yield* secretsService.hydrateSecrets({
92
+ variables: validatedVariables,
93
+ secrets: validatedSecrets
94
+ });
95
+ const _variables = yield* require_validation.validate(plugin.configSchema.variables, hydratedConfig.variables, plugin.id, "config").pipe(effect.Effect.mapError((validationError) => new require_errors.PluginRuntimeError({
96
+ pluginId: plugin.id,
97
+ operation: "validate-hydrated-config",
98
+ cause: validationError.zodError,
99
+ retryable: false
100
+ })));
101
+ const scope = yield* effect.Scope.make();
102
+ const context = yield* plugin.initialize({
103
+ variables: _variables,
104
+ secrets: hydratedConfig.secrets
105
+ }).pipe(effect.Effect.provideService(effect.Scope.Scope, scope), effect.Effect.mapError((error) => require_errors.toPluginRuntimeError(error, plugin.id, void 0, "initialize-plugin", false)));
106
+ return {
107
+ plugin,
108
+ metadata: pluginInstance.metadata,
109
+ config: {
110
+ variables: _variables,
111
+ secrets: hydratedConfig.secrets
112
+ },
113
+ context,
114
+ scope
115
+ };
116
+ })
117
+ };
118
+ }) }) {};
119
+
120
+ //#endregion
121
+ exports.PluginLoaderService = PluginLoaderService;
122
+ exports.PluginMapTag = PluginMapTag;
123
+ exports.PluginRegistryTag = PluginRegistryTag;
124
+ exports.RegistryService = RegistryService;
125
+ //# sourceMappingURL=plugin-loader.service.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.service.cjs","names":["Context","Effect","PluginRuntimeError","ModuleFederationService","SecretsService","toPluginRuntimeError","validate","Scope"],"sources":["../../../src/runtime/services/plugin-loader.service.ts"],"sourcesContent":["import type { InferSchemaInput, InferSchemaOutput } from \"@orpc/contract\";\nimport { Context, Effect, Scope } from \"effect\";\nimport type { z } from \"zod\";\nimport type {\n\tAnyPlugin,\n\tAnyPluginConstructor,\n\tInitializedPlugin,\n\tLoadedPlugin,\n\tPluginInstance,\n\tPluginMetadata,\n\tPluginRegistry\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\tPluginRegistryTag,\n\tPluginRegistry\n>() { }\n\nexport class PluginMapTag extends Context.Tag(\"PluginMap\")<\n\tPluginMapTag,\n\tRecord<string, AnyPluginConstructor>\n>() { }\n\nexport class RegistryService extends Effect.Service<RegistryService>()(\"RegistryService\", {\n\teffect: Effect.gen(function* () {\n\t\tconst registry = yield* PluginRegistryTag;\n\t\tconst pluginMap = yield* PluginMapTag;\n\n\t\treturn {\n\t\t\tget: (pluginId: string) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst entry = registry[pluginId];\n\t\t\t\t\t\n\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\t\toperation: \"validate-plugin-id\",\n\t\t\t\t\t\t\t\tcause: new Error(`Plugin ${pluginId} not found in registry`),\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\"module\" in entry) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tconstructor: entry.module,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tremoteUrl: entry.remote || \"\",\n\t\t\t\t\t\t\t\tversion: entry.version,\n\t\t\t\t\t\t\t\tdescription: entry.description,\n\t\t\t\t\t\t\t} as PluginMetadata,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconstructor: null,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tremoteUrl: entry.remote,\n\t\t\t\t\t\t\tversion: entry.version,\n\t\t\t\t\t\t\tdescription: entry.description,\n\t\t\t\t\t\t} as PluginMetadata,\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\tgetModule: (pluginId: string) =>\n\t\t\t\tEffect.succeed(pluginMap[pluginId] || null),\n\t\t};\n\t}),\n}) { }\n\nexport class PluginLoaderService extends Effect.Service<PluginLoaderService>()(\"PluginLoaderService\", {\n\teffect: Effect.gen(function* () {\n\t\tconst moduleFederationService = yield* ModuleFederationService;\n\t\tconst secretsService = yield* SecretsService;\n\t\tconst registryService = yield* RegistryService;\n\n\t\tconst resolveUrl = (baseUrl: string, version?: string): string =>\n\t\t\tversion && version !== \"latest\"\n\t\t\t\t? baseUrl.replace(\"@latest\", `@${version}`)\n\t\t\t\t: baseUrl;\n\n\t\treturn {\n\t\t\tloadPlugin: (pluginId: string) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst entry = yield* registryService.get(pluginId);\n\n\t\t\t\t\tif (entry.constructor) {\n\t\t\t\t\t\tyield* Effect.logDebug(\"Loading plugin from direct module\", { pluginId });\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tctor: entry.constructor,\n\t\t\t\t\t\t\tmetadata: entry.metadata,\n\t\t\t\t\t\t} satisfies LoadedPlugin;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst url = resolveUrl(entry.metadata.remoteUrl);\n\n\t\t\t\t\tyield* moduleFederationService.registerRemote(pluginId, url).pipe(\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(error, pluginId, undefined, \"register-remote\", true),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tyield* Effect.logDebug(\"Loading plugin from remote\", { pluginId, url });\n\n\t\t\t\t\tconst ctor = yield* moduleFederationService.loadRemoteConstructor(pluginId, url).pipe(\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(error, pluginId, undefined, \"load-remote\", false),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor,\n\t\t\t\t\t\tmetadata: entry.metadata,\n\t\t\t\t\t} satisfies LoadedPlugin;\n\t\t\t\t}),\n\n\t\t\tinstantiatePlugin: <T extends AnyPlugin>(\n\t\t\t\tpluginId: string,\n\t\t\t\tloadedPlugin: LoadedPlugin<T>,\n\t\t\t) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\"instantiate-plugin\",\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t(instance.id as string) = pluginId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tplugin: instance,\n\t\t\t\t\t\tmetadata: loadedPlugin.metadata,\n\t\t\t\t\t} satisfies PluginInstance<T>;\n\t\t\t\t}),\n\n\t\t\tinitializePlugin: <T extends AnyPlugin>(\n\t\t\t\tpluginInstance: PluginInstance<T>,\n\t\t\t\tconfig: { variables: InferSchemaInput<T[\"configSchema\"][\"variables\"]>; secrets: InferSchemaInput<T[\"configSchema\"][\"secrets\"]> },\n\t\t\t) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst { plugin } = pluginInstance;\n\n\t\t\t\t\t// Validate and hydrate config\n\t\t\t\t\tconst validatedVariables = yield* validate(\n\t\t\t\t\t\tplugin.configSchema.variables as z.ZodSchema<InferSchemaOutput<T[\"configSchema\"][\"variables\"]>>,\n\t\t\t\t\t\tconfig.variables,\n\t\t\t\t\t\tplugin.id,\n\t\t\t\t\t\t\"config\",\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tEffect.mapError((validationError) =>\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId: plugin.id,\n\t\t\t\t\t\t\t\toperation: \"validate-config\",\n\t\t\t\t\t\t\t\tcause: validationError.zodError,\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Validate secrets\n\t\t\t\t\tconst validatedSecrets = yield* validate(\n\t\t\t\t\t\tplugin.configSchema.secrets as z.ZodSchema<InferSchemaOutput<T[\"configSchema\"][\"secrets\"]>>,\n\t\t\t\t\t\tconfig.secrets,\n\t\t\t\t\t\tplugin.id,\n\t\t\t\t\t\t\"config\",\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tEffect.mapError((validationError) =>\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId: plugin.id,\n\t\t\t\t\t\t\t\toperation: \"validate-secrets\",\n\t\t\t\t\t\t\t\tcause: validationError.zodError,\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Hydrate secrets in variables\n\t\t\t\t\tconst hydratedConfig = yield* secretsService.hydrateSecrets({\n\t\t\t\t\t\tvariables: validatedVariables,\n\t\t\t\t\t\tsecrets: validatedSecrets,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst _variables = yield* validate(\n\t\t\t\t\t\tplugin.configSchema.variables as z.ZodSchema<InferSchemaOutput<T[\"configSchema\"][\"variables\"]>>,\n\t\t\t\t\t\thydratedConfig.variables,\n\t\t\t\t\t\tplugin.id,\n\t\t\t\t\t\t\"config\",\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tEffect.mapError((validationError) =>\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId: plugin.id,\n\t\t\t\t\t\t\t\toperation: \"validate-hydrated-config\",\n\t\t\t\t\t\t\t\tcause: validationError.zodError,\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Create a long-lived scope for this plugin instance\n\t\t\t\t\tconst scope = yield* Scope.make();\n\n\t\t\t\t\t// Initialize plugin within the scope\n\t\t\t\t\tconst context = yield* plugin.initialize({ variables: _variables, secrets: hydratedConfig.secrets }).pipe(\n\t\t\t\t\t\tEffect.provideService(Scope.Scope, scope),\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(error, plugin.id, undefined, \"initialize-plugin\", false),\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tplugin,\n\t\t\t\t\t\tmetadata: pluginInstance.metadata,\n\t\t\t\t\t\tconfig: { variables: _variables, secrets: hydratedConfig.secrets },\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t} satisfies InitializedPlugin<T>;\n\t\t\t\t}),\n\t\t};\n\t}),\n}) {\n}\n"],"mappings":";;;;;;;;AAiBA,IAAa,oBAAb,cAAuCA,eAAQ,IAAI,iBAAiB,EAGjE,CAAC;AAEJ,IAAa,eAAb,cAAkCA,eAAQ,IAAI,YAAY,EAGvD,CAAC;AAEJ,IAAa,kBAAb,cAAqCC,cAAO,SAA0B,CAAC,mBAAmB,EACzF,QAAQA,cAAO,IAAI,aAAa;CAC/B,MAAM,WAAW,OAAO;CACxB,MAAM,YAAY,OAAO;AAEzB,QAAO;EACN,MAAM,aACLA,cAAO,IAAI,aAAa;GACvB,MAAM,QAAQ,SAAS;AAEvB,OAAI,CAAC,MACJ,QAAO,OAAOA,cAAO,KACpB,IAAIC,kCAAmB;IACtB;IACA,WAAW;IACX,uBAAO,IAAI,MAAM,UAAU,SAAS,wBAAwB;IAC5D,WAAW;IACX,CAAC,CACF;AAGF,OAAI,YAAY,MACf,QAAO;IACN,aAAa,MAAM;IACnB,UAAU;KACT,WAAW,MAAM,UAAU;KAC3B,SAAS,MAAM;KACf,aAAa,MAAM;KACnB;IACD;AAGF,UAAO;IACN,aAAa;IACb,UAAU;KACT,WAAW,MAAM;KACjB,SAAS,MAAM;KACf,aAAa,MAAM;KACnB;IACD;IACA;EAEH,YAAY,aACXD,cAAO,QAAQ,UAAU,aAAa,KAAK;EAC5C;EACA,EACF,CAAC,CAAC;AAEH,IAAa,sBAAb,cAAyCA,cAAO,SAA8B,CAAC,uBAAuB,EACrG,QAAQA,cAAO,IAAI,aAAa;CAC/B,MAAM,0BAA0B,OAAOE;CACvC,MAAM,iBAAiB,OAAOC;CAC9B,MAAM,kBAAkB,OAAO;CAE/B,MAAM,cAAc,SAAiB,YACpC,WAAW,YAAY,WACpB,QAAQ,QAAQ,WAAW,IAAI,UAAU,GACzC;AAEJ,QAAO;EACN,aAAa,aACZH,cAAO,IAAI,aAAa;GACvB,MAAM,QAAQ,OAAO,gBAAgB,IAAI,SAAS;AAElD,OAAI,MAAM,aAAa;AACtB,WAAOA,cAAO,SAAS,qCAAqC,EAAE,UAAU,CAAC;AAEzE,WAAO;KACN,MAAM,MAAM;KACZ,UAAU,MAAM;KAChB;;GAGF,MAAM,MAAM,WAAW,MAAM,SAAS,UAAU;AAEhD,UAAO,wBAAwB,eAAe,UAAU,IAAI,CAAC,KAC5DA,cAAO,UAAU,UAChBI,oCAAqB,OAAO,UAAU,QAAW,mBAAmB,KAAK,CACzE,CACD;AAED,UAAOJ,cAAO,SAAS,8BAA8B;IAAE;IAAU;IAAK,CAAC;AAQvE,UAAO;IACN,MAPY,OAAO,wBAAwB,sBAAsB,UAAU,IAAI,CAAC,KAChFA,cAAO,UAAU,UAChBI,oCAAqB,OAAO,UAAU,QAAW,eAAe,MAAM,CACtE,CACD;IAIA,UAAU,MAAM;IAChB;IACA;EAEH,oBACC,UACA,iBAEAJ,cAAO,IAAI,aAAa;GACvB,MAAM,WAAW,OAAOA,cAAO,UAAU,IAAI,aAAa,MAAM,CAAC,CAAC,KACjEA,cAAO,UAAU,UAChBI,oCACC,OACA,UACA,QACA,sBACA,MACA,CACD,CACD;AAED,GAAC,SAAS,KAAgB;AAE1B,UAAO;IACN,QAAQ;IACR,UAAU,aAAa;IACvB;IACA;EAEH,mBACC,gBACA,WAEAJ,cAAO,IAAI,aAAa;GACvB,MAAM,EAAE,WAAW;GAGnB,MAAM,qBAAqB,OAAOK,4BACjC,OAAO,aAAa,WACpB,OAAO,WACP,OAAO,IACP,SACA,CAAC,KACDL,cAAO,UAAU,oBAChB,IAAIC,kCAAmB;IACtB,UAAU,OAAO;IACjB,WAAW;IACX,OAAO,gBAAgB;IACvB,WAAW;IACX,CAAC,CACF,CACD;GAGD,MAAM,mBAAmB,OAAOI,4BAC/B,OAAO,aAAa,SACpB,OAAO,SACP,OAAO,IACP,SACA,CAAC,KACDL,cAAO,UAAU,oBAChB,IAAIC,kCAAmB;IACtB,UAAU,OAAO;IACjB,WAAW;IACX,OAAO,gBAAgB;IACvB,WAAW;IACX,CAAC,CACF,CACD;GAGD,MAAM,iBAAiB,OAAO,eAAe,eAAe;IAC3D,WAAW;IACX,SAAS;IACT,CAAC;GAEF,MAAM,aAAa,OAAOI,4BACzB,OAAO,aAAa,WACpB,eAAe,WACf,OAAO,IACP,SACA,CAAC,KACDL,cAAO,UAAU,oBAChB,IAAIC,kCAAmB;IACtB,UAAU,OAAO;IACjB,WAAW;IACX,OAAO,gBAAgB;IACvB,WAAW;IACX,CAAC,CACF,CACD;GAGD,MAAM,QAAQ,OAAOK,aAAM,MAAM;GAGjC,MAAM,UAAU,OAAO,OAAO,WAAW;IAAE,WAAW;IAAY,SAAS,eAAe;IAAS,CAAC,CAAC,KACpGN,cAAO,eAAeM,aAAM,OAAO,MAAM,EACzCN,cAAO,UAAU,UAChBI,oCAAqB,OAAO,OAAO,IAAI,QAAW,qBAAqB,MAAM,CAC7E,CACD;AAED,UAAO;IACN;IACA,UAAU,eAAe;IACzB,QAAQ;KAAE,WAAW;KAAY,SAAS,eAAe;KAAS;IAClE;IACA;IACA;IACA;EACH;EACA,EACF,CAAC,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { AnyPlugin, AnyPluginConstructor, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry } from "../../types.cjs";
2
+ import { PluginRuntimeError } from "../errors.cjs";
3
+ import { ModuleFederationService } from "./module-federation.service.cjs";
4
+ import { SecretsService } from "./secrets.service.cjs";
5
+ import { Context, Effect, Scope } from "effect";
6
+ import { InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
7
+
8
+ //#region src/runtime/services/plugin-loader.service.d.ts
9
+ declare const PluginRegistryTag_base: Context.TagClass<PluginRegistryTag, "PluginRegistry", PluginRegistry>;
10
+ declare class PluginRegistryTag extends PluginRegistryTag_base {}
11
+ declare const PluginMapTag_base: Context.TagClass<PluginMapTag, "PluginMap", Record<string, AnyPluginConstructor>>;
12
+ declare class PluginMapTag extends PluginMapTag_base {}
13
+ declare const RegistryService_base: Effect.Service.Class<RegistryService, "RegistryService", {
14
+ readonly effect: Effect.Effect<{
15
+ get: (pluginId: string) => Effect.Effect<{
16
+ constructor: AnyPluginConstructor;
17
+ metadata: PluginMetadata;
18
+ } | {
19
+ constructor: null;
20
+ metadata: PluginMetadata;
21
+ }, PluginRuntimeError, never>;
22
+ getModule: (pluginId: string) => Effect.Effect<AnyPluginConstructor | null, never, never>;
23
+ }, never, PluginRegistryTag | PluginMapTag>;
24
+ }>;
25
+ declare class RegistryService extends RegistryService_base {}
26
+ declare const PluginLoaderService_base: Effect.Service.Class<PluginLoaderService, "PluginLoaderService", {
27
+ readonly effect: Effect.Effect<{
28
+ loadPlugin: (pluginId: string) => Effect.Effect<{
29
+ ctor: new () => AnyPlugin;
30
+ metadata: PluginMetadata;
31
+ }, PluginRuntimeError, never>;
32
+ instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
33
+ plugin: T;
34
+ metadata: PluginMetadata;
35
+ }, PluginRuntimeError, never>;
36
+ initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
37
+ variables: InferSchemaInput<T["configSchema"]["variables"]>;
38
+ secrets: InferSchemaInput<T["configSchema"]["secrets"]>;
39
+ }) => Effect.Effect<{
40
+ plugin: T;
41
+ metadata: PluginMetadata;
42
+ config: {
43
+ variables: InferSchemaOutput<T["configSchema"]["variables"]>;
44
+ secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
45
+ };
46
+ context: any;
47
+ scope: Scope.CloseableScope;
48
+ }, PluginRuntimeError, never>;
49
+ }, never, ModuleFederationService | SecretsService | RegistryService>;
50
+ }>;
51
+ declare class PluginLoaderService extends PluginLoaderService_base {}
52
+ //#endregion
53
+ export { PluginLoaderService };
54
+ //# sourceMappingURL=plugin-loader.service.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.service.d.cts","names":[],"sources":["../../../src/runtime/services/plugin-loader.service.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAemD;cAEtC,iBAAA,SAA0B,sBAAA;cAGhC;cAEM,YAAA,SAAqB,iBAAA;cAG3B;EARM,SAAA,MAAA,eAAkB,CAAA;IAGxB,GAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAakB,MAAA,CAAA,MAblB,CAAA;;gBAmCK;;;gBAUD;IA3CE,CAAA,oBAAa,EAAQ,KAAA,CAAA;IAG3B,SAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GA4CwB,MAAA,CAAA,MA5CxB,CA4CwB,oBA5CxB,GAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA;;;AA8BK,cA5BC,eAAA,SAAwB,oBAAA,CA4BzB;cAkBN;EAxCmB,SAAA,MAAA,eAAA,CAAA;IAoCM,UAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAkBC,MAAA,CAAA,MAlBD,CAAA;MAAA,IAAA,EAAA,OAAA,YAAA;;;kCAqDE,2CAEf,aAAa,OAAE,MAAA,CAAA;;;IAjGpB,CAAA,oBAAgB,EAAA,KAAQ,CAAA;IA8C/B,gBAAA,EAAA,CAAA,UA0E0B,SA1E1B,CAAA,CAAA,cAAA,EA2Ec,cA3Ed,CA2E6B,CA3E7B,CAAA,EAAA,MAAA,EAAA;iBA4EmB,iBAAiB;eAA0C,iBAAiB;UAA+B,MAAA,CAAA;;MA9DpG,QAAA,gBAAA;MAmCC,MAAA,EAAA;QAEF,SAAA,mBAAA,EAAA,CAAA,cAAA,CAAA,CAAA,WAAA,CAAA,CAAA;QAAb,OAAA,mBAAA,EAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,CAAA;;;;IAAe,CAAA,oBAAA,EAAA,KAAA,CAAA;EAuBD,CAAA,EAAA,KAAA,yBAAA,iBAAA,kBAAA,CAAA;CACG,CAAA;AAAf,cAzEP,mBAAA,SAA4B,wBAAA,CAyErB"}
@@ -0,0 +1,54 @@
1
+ import { AnyPlugin, AnyPluginConstructor, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry } from "../../types.mjs";
2
+ import { PluginRuntimeError } from "../errors.mjs";
3
+ import { ModuleFederationService } from "./module-federation.service.mjs";
4
+ import { SecretsService } from "./secrets.service.mjs";
5
+ import { Context, Effect, Scope } from "effect";
6
+ import { InferSchemaInput, InferSchemaOutput } from "@orpc/contract";
7
+
8
+ //#region src/runtime/services/plugin-loader.service.d.ts
9
+ declare const PluginRegistryTag_base: Context.TagClass<PluginRegistryTag, "PluginRegistry", PluginRegistry>;
10
+ declare class PluginRegistryTag extends PluginRegistryTag_base {}
11
+ declare const PluginMapTag_base: Context.TagClass<PluginMapTag, "PluginMap", Record<string, AnyPluginConstructor>>;
12
+ declare class PluginMapTag extends PluginMapTag_base {}
13
+ declare const RegistryService_base: Effect.Service.Class<RegistryService, "RegistryService", {
14
+ readonly effect: Effect.Effect<{
15
+ get: (pluginId: string) => Effect.Effect<{
16
+ constructor: AnyPluginConstructor;
17
+ metadata: PluginMetadata;
18
+ } | {
19
+ constructor: null;
20
+ metadata: PluginMetadata;
21
+ }, PluginRuntimeError, never>;
22
+ getModule: (pluginId: string) => Effect.Effect<AnyPluginConstructor | null, never, never>;
23
+ }, never, PluginRegistryTag | PluginMapTag>;
24
+ }>;
25
+ declare class RegistryService extends RegistryService_base {}
26
+ declare const PluginLoaderService_base: Effect.Service.Class<PluginLoaderService, "PluginLoaderService", {
27
+ readonly effect: Effect.Effect<{
28
+ loadPlugin: (pluginId: string) => Effect.Effect<{
29
+ ctor: new () => AnyPlugin;
30
+ metadata: PluginMetadata;
31
+ }, PluginRuntimeError, never>;
32
+ instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
33
+ plugin: T;
34
+ metadata: PluginMetadata;
35
+ }, PluginRuntimeError, never>;
36
+ initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
37
+ variables: InferSchemaInput<T["configSchema"]["variables"]>;
38
+ secrets: InferSchemaInput<T["configSchema"]["secrets"]>;
39
+ }) => Effect.Effect<{
40
+ plugin: T;
41
+ metadata: PluginMetadata;
42
+ config: {
43
+ variables: InferSchemaOutput<T["configSchema"]["variables"]>;
44
+ secrets: InferSchemaOutput<T["configSchema"]["secrets"]>;
45
+ };
46
+ context: any;
47
+ scope: Scope.CloseableScope;
48
+ }, PluginRuntimeError, never>;
49
+ }, never, ModuleFederationService | SecretsService | RegistryService>;
50
+ }>;
51
+ declare class PluginLoaderService extends PluginLoaderService_base {}
52
+ //#endregion
53
+ export { PluginLoaderService };
54
+ //# sourceMappingURL=plugin-loader.service.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.service.d.mts","names":[],"sources":["../../../src/runtime/services/plugin-loader.service.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAemD;cAEtC,iBAAA,SAA0B,sBAAA;cAGhC;cAEM,YAAA,SAAqB,iBAAA;cAG3B;EARM,SAAA,MAAA,eAAkB,CAAA;IAGxB,GAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAakB,MAAA,CAAA,MAblB,CAAA;;gBAmCK;;;gBAUD;IA3CE,CAAA,oBAAa,EAAQ,KAAA,CAAA;IAG3B,SAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GA4CwB,MAAA,CAAA,MA5CxB,CA4CwB,oBA5CxB,GAAA,IAAA,EAAA,KAAA,EAAA,KAAA,CAAA;;;AA8BK,cA5BC,eAAA,SAAwB,oBAAA,CA4BzB;cAkBN;EAxCmB,SAAA,MAAA,eAAA,CAAA;IAoCM,UAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAkBC,MAAA,CAAA,MAlBD,CAAA;MAAA,IAAA,EAAA,OAAA,YAAA;;;kCAqDE,2CAEf,aAAa,OAAE,MAAA,CAAA;;;IAjGpB,CAAA,oBAAgB,EAAA,KAAQ,CAAA;IA8C/B,gBAAA,EAAA,CAAA,UA0E0B,SA1E1B,CAAA,CAAA,cAAA,EA2Ec,cA3Ed,CA2E6B,CA3E7B,CAAA,EAAA,MAAA,EAAA;iBA4EmB,iBAAiB;eAA0C,iBAAiB;UAA+B,MAAA,CAAA;;MA9DpG,QAAA,gBAAA;MAmCC,MAAA,EAAA;QAEF,SAAA,mBAAA,EAAA,CAAA,cAAA,CAAA,CAAA,WAAA,CAAA,CAAA;QAAb,OAAA,mBAAA,EAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,CAAA;;;;IAAe,CAAA,oBAAA,EAAA,KAAA,CAAA;EAuBD,CAAA,EAAA,KAAA,yBAAA,iBAAA,kBAAA,CAAA;CACG,CAAA;AAAf,cAzEP,mBAAA,SAA4B,wBAAA,CAyErB"}
@@ -0,0 +1,121 @@
1
+ import { PluginRuntimeError, toPluginRuntimeError } from "../errors.mjs";
2
+ import { ModuleFederationService } from "./module-federation.service.mjs";
3
+ import { validate } from "../validation.mjs";
4
+ import { SecretsService } from "./secrets.service.mjs";
5
+ import { Context, Effect, Scope } from "effect";
6
+
7
+ //#region src/runtime/services/plugin-loader.service.ts
8
+ var PluginRegistryTag = class extends Context.Tag("PluginRegistry")() {};
9
+ var PluginMapTag = class extends Context.Tag("PluginMap")() {};
10
+ var RegistryService = class extends Effect.Service()("RegistryService", { effect: Effect.gen(function* () {
11
+ const registry = yield* PluginRegistryTag;
12
+ const pluginMap = yield* PluginMapTag;
13
+ return {
14
+ get: (pluginId) => Effect.gen(function* () {
15
+ const entry = registry[pluginId];
16
+ if (!entry) return yield* Effect.fail(new PluginRuntimeError({
17
+ pluginId,
18
+ operation: "validate-plugin-id",
19
+ cause: /* @__PURE__ */ new Error(`Plugin ${pluginId} not found in registry`),
20
+ retryable: false
21
+ }));
22
+ if ("module" in entry) return {
23
+ constructor: entry.module,
24
+ metadata: {
25
+ remoteUrl: entry.remote || "",
26
+ version: entry.version,
27
+ description: entry.description
28
+ }
29
+ };
30
+ return {
31
+ constructor: null,
32
+ metadata: {
33
+ remoteUrl: entry.remote,
34
+ version: entry.version,
35
+ description: entry.description
36
+ }
37
+ };
38
+ }),
39
+ getModule: (pluginId) => Effect.succeed(pluginMap[pluginId] || null)
40
+ };
41
+ }) }) {};
42
+ var PluginLoaderService = class extends Effect.Service()("PluginLoaderService", { effect: Effect.gen(function* () {
43
+ const moduleFederationService = yield* ModuleFederationService;
44
+ const secretsService = yield* SecretsService;
45
+ const registryService = yield* RegistryService;
46
+ const resolveUrl = (baseUrl, version) => version && version !== "latest" ? baseUrl.replace("@latest", `@${version}`) : baseUrl;
47
+ return {
48
+ loadPlugin: (pluginId) => Effect.gen(function* () {
49
+ const entry = yield* registryService.get(pluginId);
50
+ if (entry.constructor) {
51
+ yield* Effect.logDebug("Loading plugin from direct module", { pluginId });
52
+ return {
53
+ ctor: entry.constructor,
54
+ metadata: entry.metadata
55
+ };
56
+ }
57
+ const url = resolveUrl(entry.metadata.remoteUrl);
58
+ yield* moduleFederationService.registerRemote(pluginId, url).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "register-remote", true)));
59
+ yield* Effect.logDebug("Loading plugin from remote", {
60
+ pluginId,
61
+ url
62
+ });
63
+ return {
64
+ ctor: yield* moduleFederationService.loadRemoteConstructor(pluginId, url).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "load-remote", false))),
65
+ metadata: entry.metadata
66
+ };
67
+ }),
68
+ instantiatePlugin: (pluginId, loadedPlugin) => Effect.gen(function* () {
69
+ const instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(Effect.mapError((error) => toPluginRuntimeError(error, pluginId, void 0, "instantiate-plugin", false)));
70
+ instance.id = pluginId;
71
+ return {
72
+ plugin: instance,
73
+ metadata: loadedPlugin.metadata
74
+ };
75
+ }),
76
+ initializePlugin: (pluginInstance, config) => Effect.gen(function* () {
77
+ const { plugin } = pluginInstance;
78
+ const validatedVariables = yield* validate(plugin.configSchema.variables, config.variables, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
79
+ pluginId: plugin.id,
80
+ operation: "validate-config",
81
+ cause: validationError.zodError,
82
+ retryable: false
83
+ })));
84
+ const validatedSecrets = yield* validate(plugin.configSchema.secrets, config.secrets, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
85
+ pluginId: plugin.id,
86
+ operation: "validate-secrets",
87
+ cause: validationError.zodError,
88
+ retryable: false
89
+ })));
90
+ const hydratedConfig = yield* secretsService.hydrateSecrets({
91
+ variables: validatedVariables,
92
+ secrets: validatedSecrets
93
+ });
94
+ const _variables = yield* validate(plugin.configSchema.variables, hydratedConfig.variables, plugin.id, "config").pipe(Effect.mapError((validationError) => new PluginRuntimeError({
95
+ pluginId: plugin.id,
96
+ operation: "validate-hydrated-config",
97
+ cause: validationError.zodError,
98
+ retryable: false
99
+ })));
100
+ const scope = yield* Scope.make();
101
+ const context = yield* plugin.initialize({
102
+ variables: _variables,
103
+ secrets: hydratedConfig.secrets
104
+ }).pipe(Effect.provideService(Scope.Scope, scope), Effect.mapError((error) => toPluginRuntimeError(error, plugin.id, void 0, "initialize-plugin", false)));
105
+ return {
106
+ plugin,
107
+ metadata: pluginInstance.metadata,
108
+ config: {
109
+ variables: _variables,
110
+ secrets: hydratedConfig.secrets
111
+ },
112
+ context,
113
+ scope
114
+ };
115
+ })
116
+ };
117
+ }) }) {};
118
+
119
+ //#endregion
120
+ export { PluginLoaderService, PluginMapTag, PluginRegistryTag, RegistryService };
121
+ //# sourceMappingURL=plugin-loader.service.mjs.map
@@ -0,0 +1 @@
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, Scope } from \"effect\";\nimport type { z } from \"zod\";\nimport type {\n\tAnyPlugin,\n\tAnyPluginConstructor,\n\tInitializedPlugin,\n\tLoadedPlugin,\n\tPluginInstance,\n\tPluginMetadata,\n\tPluginRegistry\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\tPluginRegistryTag,\n\tPluginRegistry\n>() { }\n\nexport class PluginMapTag extends Context.Tag(\"PluginMap\")<\n\tPluginMapTag,\n\tRecord<string, AnyPluginConstructor>\n>() { }\n\nexport class RegistryService extends Effect.Service<RegistryService>()(\"RegistryService\", {\n\teffect: Effect.gen(function* () {\n\t\tconst registry = yield* PluginRegistryTag;\n\t\tconst pluginMap = yield* PluginMapTag;\n\n\t\treturn {\n\t\t\tget: (pluginId: string) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst entry = registry[pluginId];\n\t\t\t\t\t\n\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\t\toperation: \"validate-plugin-id\",\n\t\t\t\t\t\t\t\tcause: new Error(`Plugin ${pluginId} not found in registry`),\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\"module\" in entry) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tconstructor: entry.module,\n\t\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t\tremoteUrl: entry.remote || \"\",\n\t\t\t\t\t\t\t\tversion: entry.version,\n\t\t\t\t\t\t\t\tdescription: entry.description,\n\t\t\t\t\t\t\t} as PluginMetadata,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tconstructor: null,\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tremoteUrl: entry.remote,\n\t\t\t\t\t\t\tversion: entry.version,\n\t\t\t\t\t\t\tdescription: entry.description,\n\t\t\t\t\t\t} as PluginMetadata,\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\tgetModule: (pluginId: string) =>\n\t\t\t\tEffect.succeed(pluginMap[pluginId] || null),\n\t\t};\n\t}),\n}) { }\n\nexport class PluginLoaderService extends Effect.Service<PluginLoaderService>()(\"PluginLoaderService\", {\n\teffect: Effect.gen(function* () {\n\t\tconst moduleFederationService = yield* ModuleFederationService;\n\t\tconst secretsService = yield* SecretsService;\n\t\tconst registryService = yield* RegistryService;\n\n\t\tconst resolveUrl = (baseUrl: string, version?: string): string =>\n\t\t\tversion && version !== \"latest\"\n\t\t\t\t? baseUrl.replace(\"@latest\", `@${version}`)\n\t\t\t\t: baseUrl;\n\n\t\treturn {\n\t\t\tloadPlugin: (pluginId: string) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst entry = yield* registryService.get(pluginId);\n\n\t\t\t\t\tif (entry.constructor) {\n\t\t\t\t\t\tyield* Effect.logDebug(\"Loading plugin from direct module\", { pluginId });\n\t\t\t\t\t\t\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tctor: entry.constructor,\n\t\t\t\t\t\t\tmetadata: entry.metadata,\n\t\t\t\t\t\t} satisfies LoadedPlugin;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst url = resolveUrl(entry.metadata.remoteUrl);\n\n\t\t\t\t\tyield* moduleFederationService.registerRemote(pluginId, url).pipe(\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(error, pluginId, undefined, \"register-remote\", true),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tyield* Effect.logDebug(\"Loading plugin from remote\", { pluginId, url });\n\n\t\t\t\t\tconst ctor = yield* moduleFederationService.loadRemoteConstructor(pluginId, url).pipe(\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(error, pluginId, undefined, \"load-remote\", false),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor,\n\t\t\t\t\t\tmetadata: entry.metadata,\n\t\t\t\t\t} satisfies LoadedPlugin;\n\t\t\t\t}),\n\n\t\t\tinstantiatePlugin: <T extends AnyPlugin>(\n\t\t\t\tpluginId: string,\n\t\t\t\tloadedPlugin: LoadedPlugin<T>,\n\t\t\t) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst instance = yield* Effect.try(() => new loadedPlugin.ctor()).pipe(\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tpluginId,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t\"instantiate-plugin\",\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t(instance.id as string) = pluginId;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tplugin: instance,\n\t\t\t\t\t\tmetadata: loadedPlugin.metadata,\n\t\t\t\t\t} satisfies PluginInstance<T>;\n\t\t\t\t}),\n\n\t\t\tinitializePlugin: <T extends AnyPlugin>(\n\t\t\t\tpluginInstance: PluginInstance<T>,\n\t\t\t\tconfig: { variables: InferSchemaInput<T[\"configSchema\"][\"variables\"]>; secrets: InferSchemaInput<T[\"configSchema\"][\"secrets\"]> },\n\t\t\t) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst { plugin } = pluginInstance;\n\n\t\t\t\t\t// Validate and hydrate config\n\t\t\t\t\tconst validatedVariables = yield* validate(\n\t\t\t\t\t\tplugin.configSchema.variables as z.ZodSchema<InferSchemaOutput<T[\"configSchema\"][\"variables\"]>>,\n\t\t\t\t\t\tconfig.variables,\n\t\t\t\t\t\tplugin.id,\n\t\t\t\t\t\t\"config\",\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tEffect.mapError((validationError) =>\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId: plugin.id,\n\t\t\t\t\t\t\t\toperation: \"validate-config\",\n\t\t\t\t\t\t\t\tcause: validationError.zodError,\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Validate secrets\n\t\t\t\t\tconst validatedSecrets = yield* validate(\n\t\t\t\t\t\tplugin.configSchema.secrets as z.ZodSchema<InferSchemaOutput<T[\"configSchema\"][\"secrets\"]>>,\n\t\t\t\t\t\tconfig.secrets,\n\t\t\t\t\t\tplugin.id,\n\t\t\t\t\t\t\"config\",\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tEffect.mapError((validationError) =>\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId: plugin.id,\n\t\t\t\t\t\t\t\toperation: \"validate-secrets\",\n\t\t\t\t\t\t\t\tcause: validationError.zodError,\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Hydrate secrets in variables\n\t\t\t\t\tconst hydratedConfig = yield* secretsService.hydrateSecrets({\n\t\t\t\t\t\tvariables: validatedVariables,\n\t\t\t\t\t\tsecrets: validatedSecrets,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst _variables = yield* validate(\n\t\t\t\t\t\tplugin.configSchema.variables as z.ZodSchema<InferSchemaOutput<T[\"configSchema\"][\"variables\"]>>,\n\t\t\t\t\t\thydratedConfig.variables,\n\t\t\t\t\t\tplugin.id,\n\t\t\t\t\t\t\"config\",\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\tEffect.mapError((validationError) =>\n\t\t\t\t\t\t\tnew PluginRuntimeError({\n\t\t\t\t\t\t\t\tpluginId: plugin.id,\n\t\t\t\t\t\t\t\toperation: \"validate-hydrated-config\",\n\t\t\t\t\t\t\t\tcause: validationError.zodError,\n\t\t\t\t\t\t\t\tretryable: false,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Create a long-lived scope for this plugin instance\n\t\t\t\t\tconst scope = yield* Scope.make();\n\n\t\t\t\t\t// Initialize plugin within the scope\n\t\t\t\t\tconst context = yield* plugin.initialize({ variables: _variables, secrets: hydratedConfig.secrets }).pipe(\n\t\t\t\t\t\tEffect.provideService(Scope.Scope, scope),\n\t\t\t\t\t\tEffect.mapError((error) =>\n\t\t\t\t\t\t\ttoPluginRuntimeError(error, plugin.id, undefined, \"initialize-plugin\", false),\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tplugin,\n\t\t\t\t\t\tmetadata: pluginInstance.metadata,\n\t\t\t\t\t\tconfig: { variables: _variables, secrets: hydratedConfig.secrets },\n\t\t\t\t\t\tcontext,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t} satisfies InitializedPlugin<T>;\n\t\t\t\t}),\n\t\t};\n\t}),\n}) {\n}\n"],"mappings":";;;;;;;AAiBA,IAAa,oBAAb,cAAuC,QAAQ,IAAI,iBAAiB,EAGjE,CAAC;AAEJ,IAAa,eAAb,cAAkC,QAAQ,IAAI,YAAY,EAGvD,CAAC;AAEJ,IAAa,kBAAb,cAAqC,OAAO,SAA0B,CAAC,mBAAmB,EACzF,QAAQ,OAAO,IAAI,aAAa;CAC/B,MAAM,WAAW,OAAO;CACxB,MAAM,YAAY,OAAO;AAEzB,QAAO;EACN,MAAM,aACL,OAAO,IAAI,aAAa;GACvB,MAAM,QAAQ,SAAS;AAEvB,OAAI,CAAC,MACJ,QAAO,OAAO,OAAO,KACpB,IAAI,mBAAmB;IACtB;IACA,WAAW;IACX,uBAAO,IAAI,MAAM,UAAU,SAAS,wBAAwB;IAC5D,WAAW;IACX,CAAC,CACF;AAGF,OAAI,YAAY,MACf,QAAO;IACN,aAAa,MAAM;IACnB,UAAU;KACT,WAAW,MAAM,UAAU;KAC3B,SAAS,MAAM;KACf,aAAa,MAAM;KACnB;IACD;AAGF,UAAO;IACN,aAAa;IACb,UAAU;KACT,WAAW,MAAM;KACjB,SAAS,MAAM;KACf,aAAa,MAAM;KACnB;IACD;IACA;EAEH,YAAY,aACX,OAAO,QAAQ,UAAU,aAAa,KAAK;EAC5C;EACA,EACF,CAAC,CAAC;AAEH,IAAa,sBAAb,cAAyC,OAAO,SAA8B,CAAC,uBAAuB,EACrG,QAAQ,OAAO,IAAI,aAAa;CAC/B,MAAM,0BAA0B,OAAO;CACvC,MAAM,iBAAiB,OAAO;CAC9B,MAAM,kBAAkB,OAAO;CAE/B,MAAM,cAAc,SAAiB,YACpC,WAAW,YAAY,WACpB,QAAQ,QAAQ,WAAW,IAAI,UAAU,GACzC;AAEJ,QAAO;EACN,aAAa,aACZ,OAAO,IAAI,aAAa;GACvB,MAAM,QAAQ,OAAO,gBAAgB,IAAI,SAAS;AAElD,OAAI,MAAM,aAAa;AACtB,WAAO,OAAO,SAAS,qCAAqC,EAAE,UAAU,CAAC;AAEzE,WAAO;KACN,MAAM,MAAM;KACZ,UAAU,MAAM;KAChB;;GAGF,MAAM,MAAM,WAAW,MAAM,SAAS,UAAU;AAEhD,UAAO,wBAAwB,eAAe,UAAU,IAAI,CAAC,KAC5D,OAAO,UAAU,UAChB,qBAAqB,OAAO,UAAU,QAAW,mBAAmB,KAAK,CACzE,CACD;AAED,UAAO,OAAO,SAAS,8BAA8B;IAAE;IAAU;IAAK,CAAC;AAQvE,UAAO;IACN,MAPY,OAAO,wBAAwB,sBAAsB,UAAU,IAAI,CAAC,KAChF,OAAO,UAAU,UAChB,qBAAqB,OAAO,UAAU,QAAW,eAAe,MAAM,CACtE,CACD;IAIA,UAAU,MAAM;IAChB;IACA;EAEH,oBACC,UACA,iBAEA,OAAO,IAAI,aAAa;GACvB,MAAM,WAAW,OAAO,OAAO,UAAU,IAAI,aAAa,MAAM,CAAC,CAAC,KACjE,OAAO,UAAU,UAChB,qBACC,OACA,UACA,QACA,sBACA,MACA,CACD,CACD;AAED,GAAC,SAAS,KAAgB;AAE1B,UAAO;IACN,QAAQ;IACR,UAAU,aAAa;IACvB;IACA;EAEH,mBACC,gBACA,WAEA,OAAO,IAAI,aAAa;GACvB,MAAM,EAAE,WAAW;GAGnB,MAAM,qBAAqB,OAAO,SACjC,OAAO,aAAa,WACpB,OAAO,WACP,OAAO,IACP,SACA,CAAC,KACD,OAAO,UAAU,oBAChB,IAAI,mBAAmB;IACtB,UAAU,OAAO;IACjB,WAAW;IACX,OAAO,gBAAgB;IACvB,WAAW;IACX,CAAC,CACF,CACD;GAGD,MAAM,mBAAmB,OAAO,SAC/B,OAAO,aAAa,SACpB,OAAO,SACP,OAAO,IACP,SACA,CAAC,KACD,OAAO,UAAU,oBAChB,IAAI,mBAAmB;IACtB,UAAU,OAAO;IACjB,WAAW;IACX,OAAO,gBAAgB;IACvB,WAAW;IACX,CAAC,CACF,CACD;GAGD,MAAM,iBAAiB,OAAO,eAAe,eAAe;IAC3D,WAAW;IACX,SAAS;IACT,CAAC;GAEF,MAAM,aAAa,OAAO,SACzB,OAAO,aAAa,WACpB,eAAe,WACf,OAAO,IACP,SACA,CAAC,KACD,OAAO,UAAU,oBAChB,IAAI,mBAAmB;IACtB,UAAU,OAAO;IACjB,WAAW;IACX,OAAO,gBAAgB;IACvB,WAAW;IACX,CAAC,CACF,CACD;GAGD,MAAM,QAAQ,OAAO,MAAM,MAAM;GAGjC,MAAM,UAAU,OAAO,OAAO,WAAW;IAAE,WAAW;IAAY,SAAS,eAAe;IAAS,CAAC,CAAC,KACpG,OAAO,eAAe,MAAM,OAAO,MAAM,EACzC,OAAO,UAAU,UAChB,qBAAqB,OAAO,OAAO,IAAI,QAAW,qBAAqB,MAAM,CAC7E,CACD;AAED,UAAO;IACN;IACA,UAAU,eAAe;IACzB,QAAQ;KAAE,WAAW;KAAY,SAAS,eAAe;KAAS;IAClE;IACA;IACA;IACA;EACH;EACA,EACF,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
+ const require_module_federation_service = require('./module-federation.service.cjs');
3
+ const require_plugin_lifecycle_service = require('./plugin-lifecycle.service.cjs');
4
+ const require_secrets_service = require('./secrets.service.cjs');
5
+ const require_plugin_loader_service = require('./plugin-loader.service.cjs');
6
+ let effect = require("effect");
7
+
8
+ //#region src/runtime/services/plugin.service.ts
9
+ var PluginService = class PluginService extends effect.Effect.Service()("PluginService", { scoped: effect.Effect.gen(function* () {
10
+ const loader = yield* require_plugin_loader_service.PluginLoaderService;
11
+ const lifecycle = yield* require_plugin_lifecycle_service.PluginLifecycleService;
12
+ return {
13
+ loadPlugin: loader.loadPlugin,
14
+ instantiatePlugin: loader.instantiatePlugin,
15
+ initializePlugin: loader.initializePlugin,
16
+ shutdownPlugin: (plugin) => effect.Effect.gen(function* () {
17
+ yield* plugin.plugin.shutdown().pipe(effect.Effect.catchAll(() => effect.Effect.void));
18
+ yield* effect.Scope.close(plugin.scope, effect.Exit.succeed(void 0));
19
+ yield* lifecycle.unregister(plugin);
20
+ }),
21
+ cleanup: lifecycle.cleanup
22
+ };
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
+ };
29
+ };
30
+
31
+ //#endregion
32
+ exports.PluginService = PluginService;
33
+ //# sourceMappingURL=plugin.service.cjs.map
@@ -0,0 +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\tAnyPlugin,\n\tAnyPluginConstructor,\n\tInitializedPlugin,\n\tPluginRegistry,\n\tSecretsConfig\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport { PluginLoaderService, PluginMapTag, PluginRegistryTag, RegistryService } from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n\tscoped: Effect.gen(function* () {\n\t\tconst loader = yield* PluginLoaderService;\n\t\tconst lifecycle = yield* PluginLifecycleService;\n\n\t\treturn {\n\t\t\tloadPlugin: loader.loadPlugin,\n\t\t\tinstantiatePlugin: loader.instantiatePlugin,\n\t\t\tinitializePlugin: loader.initializePlugin,\n\t\t\tshutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t// Shutdown the plugin first (graceful cleanup)\n\t\t\t\t\tyield* plugin.plugin.shutdown().pipe(\n\t\t\t\t\t\tEffect.catchAll(() => Effect.void)\n\t\t\t\t\t);\n\n\t\t\t\t\t// Close the plugin scope to interrupt fibers and release resources\n\t\t\t\t\tyield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n\t\t\t\t\t// Unregister from lifecycle tracking\n\t\t\t\t\tyield* lifecycle.unregister(plugin);\n\t\t\t\t}),\n\t\t\tcleanup: lifecycle.cleanup,\n\t\t};\n\t}),\n}) {\n\tstatic Live = (registry: PluginRegistry, secrets: SecretsConfig, pluginMap: Record<string, AnyPluginConstructor> = {}) => {\n\t\tconst contextLayer = Layer.mergeAll(\n\t\t\tLayer.succeed(PluginRegistryTag, registry),\n\t\t\tLayer.succeed(SecretsConfigTag, secrets),\n\t\t\tLayer.succeed(PluginMapTag, pluginMap),\n\t\t);\n\n\t\tconst servicesLayer = Layer.mergeAll(\n\t\t\tModuleFederationService.Default,\n\t\t\tSecretsService.Default,\n\t\t\tRegistryService.Default,\n\t\t\tPluginLifecycleService.Default,\n\t\t).pipe(\n\t\t\tLayer.provide(contextLayer)\n\t\t);\n\n\t\treturn PluginService.Default.pipe(\n\t\t\tLayer.provide(PluginLoaderService.Default),\n\t\t\tLayer.provide(servicesLayer)\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;;AAaA,IAAa,gBAAb,MAAa,sBAAsBA,cAAO,SAAwB,CAAC,iBAAiB,EACnF,QAAQA,cAAO,IAAI,aAAa;CAC/B,MAAM,SAAS,OAAOC;CACtB,MAAM,YAAY,OAAOC;AAEzB,QAAO;EACN,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAChBF,cAAO,IAAI,aAAa;AAEvB,UAAO,OAAO,OAAO,UAAU,CAAC,KAC/BA,cAAO,eAAeA,cAAO,KAAK,CAClC;AAGD,UAAOG,aAAM,MAAM,OAAO,OAAOC,YAAK,QAAQ,OAAU,CAAC;AAGzD,UAAO,UAAU,WAAW,OAAO;IAClC;EACH,SAAS,UAAU;EACnB;EACA,EACF,CAAC,CAAC;CACF,OAAO,QAAQ,UAA0B,SAAwB,YAAkD,EAAE,KAAK;EACzH,MAAM,eAAeC,aAAM,SAC1BA,aAAM,QAAQC,iDAAmB,SAAS,EAC1CD,aAAM,QAAQE,0CAAkB,QAAQ,EACxCF,aAAM,QAAQG,4CAAc,UAAU,CACtC;EAED,MAAM,gBAAgBH,aAAM,SAC3BI,0DAAwB,SACxBC,uCAAe,SACfC,8CAAgB,SAChBT,wDAAuB,QACvB,CAAC,KACDG,aAAM,QAAQ,aAAa,CAC3B;AAED,SAAO,cAAc,QAAQ,KAC5BA,aAAM,QAAQJ,kDAAoB,QAAQ,EAC1CI,aAAM,QAAQ,cAAc,CAC5B"}
@@ -0,0 +1,42 @@
1
+ import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.cjs";
2
+ import { PluginRuntimeError } from "../errors.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";
7
+ import * as _orpc_contract0 from "@orpc/contract";
8
+
9
+ //#region src/runtime/services/plugin.service.d.ts
10
+ declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
11
+ readonly scoped: Effect.Effect<{
12
+ loadPlugin: (pluginId: string) => Effect.Effect<{
13
+ ctor: new () => AnyPlugin;
14
+ metadata: PluginMetadata;
15
+ }, PluginRuntimeError, never>;
16
+ instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
17
+ plugin: T;
18
+ metadata: PluginMetadata;
19
+ }, PluginRuntimeError, never>;
20
+ initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
21
+ variables: _orpc_contract0.InferSchemaInput<T["configSchema"]["variables"]>;
22
+ secrets: _orpc_contract0.InferSchemaInput<T["configSchema"]["secrets"]>;
23
+ }) => Effect.Effect<{
24
+ plugin: T;
25
+ metadata: PluginMetadata;
26
+ config: {
27
+ variables: _orpc_contract0.InferSchemaOutput<T["configSchema"]["variables"]>;
28
+ secrets: _orpc_contract0.InferSchemaOutput<T["configSchema"]["secrets"]>;
29
+ };
30
+ context: any;
31
+ scope: Scope.CloseableScope;
32
+ }, PluginRuntimeError, never>;
33
+ shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
34
+ cleanup: () => Effect.Effect<void, never, never>;
35
+ }, never, PluginLoaderService | PluginLifecycleService>;
36
+ }>;
37
+ declare class PluginService extends PluginService_base {
38
+ static Live: (registry: PluginRegistry, secrets: SecretsConfig, pluginMap?: Record<string, AnyPluginConstructor>) => Layer.Layer<PluginService, never, never>;
39
+ }
40
+ //#endregion
41
+ export { PluginService };
42
+ //# sourceMappingURL=plugin.service.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.service.d.cts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAUgH;;;;;IAAA,CAAA,sBAAA,KAAA,CAAA;;;;;;;;;;;;;;;;;;6BAYpF,kBAAkB,eAAU,MAAA,CAAA;;;;cAT3C,aAAA,SAAsB,kBAAA;0BA0BT,yBAAyB,2BAA0B,eAAe,0BAA0B,KAAA,CAAA,MAAA"}
@@ -0,0 +1,42 @@
1
+ import { AnyPlugin, AnyPluginConstructor, InitializedPlugin, LoadedPlugin, PluginInstance, PluginMetadata, PluginRegistry, SecretsConfig } from "../../types.mjs";
2
+ import { PluginRuntimeError } from "../errors.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";
7
+ import * as _orpc_contract0 from "@orpc/contract";
8
+
9
+ //#region src/runtime/services/plugin.service.d.ts
10
+ declare const PluginService_base: Effect.Service.Class<PluginService, "PluginService", {
11
+ readonly scoped: Effect.Effect<{
12
+ loadPlugin: (pluginId: string) => Effect.Effect<{
13
+ ctor: new () => AnyPlugin;
14
+ metadata: PluginMetadata;
15
+ }, PluginRuntimeError, never>;
16
+ instantiatePlugin: <T extends AnyPlugin>(pluginId: string, loadedPlugin: LoadedPlugin<T>) => Effect.Effect<{
17
+ plugin: T;
18
+ metadata: PluginMetadata;
19
+ }, PluginRuntimeError, never>;
20
+ initializePlugin: <T extends AnyPlugin>(pluginInstance: PluginInstance<T>, config: {
21
+ variables: _orpc_contract0.InferSchemaInput<T["configSchema"]["variables"]>;
22
+ secrets: _orpc_contract0.InferSchemaInput<T["configSchema"]["secrets"]>;
23
+ }) => Effect.Effect<{
24
+ plugin: T;
25
+ metadata: PluginMetadata;
26
+ config: {
27
+ variables: _orpc_contract0.InferSchemaOutput<T["configSchema"]["variables"]>;
28
+ secrets: _orpc_contract0.InferSchemaOutput<T["configSchema"]["secrets"]>;
29
+ };
30
+ context: any;
31
+ scope: Scope.CloseableScope;
32
+ }, PluginRuntimeError, never>;
33
+ shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) => Effect.Effect<void, never, never>;
34
+ cleanup: () => Effect.Effect<void, never, never>;
35
+ }, never, PluginLoaderService | PluginLifecycleService>;
36
+ }>;
37
+ declare class PluginService extends PluginService_base {
38
+ static Live: (registry: PluginRegistry, secrets: SecretsConfig, pluginMap?: Record<string, AnyPluginConstructor>) => Layer.Layer<PluginService, never, never>;
39
+ }
40
+ //#endregion
41
+ export { PluginService };
42
+ //# sourceMappingURL=plugin.service.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.service.d.mts","names":[],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":[],"mappings":";;;;;;;;;cAUgH;;;;;IAAA,CAAA,sBAAA,KAAA,CAAA;;;;;;;;;;;;;;;;;;6BAYpF,kBAAkB,eAAU,MAAA,CAAA;;;;cAT3C,aAAA,SAAsB,kBAAA;0BA0BT,yBAAyB,2BAA0B,eAAe,0BAA0B,KAAA,CAAA,MAAA"}
@@ -0,0 +1,32 @@
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";
6
+
7
+ //#region src/runtime/services/plugin.service.ts
8
+ var PluginService = class PluginService extends Effect.Service()("PluginService", { scoped: Effect.gen(function* () {
9
+ const loader = yield* PluginLoaderService;
10
+ const lifecycle = yield* PluginLifecycleService;
11
+ return {
12
+ loadPlugin: loader.loadPlugin,
13
+ instantiatePlugin: loader.instantiatePlugin,
14
+ initializePlugin: loader.initializePlugin,
15
+ shutdownPlugin: (plugin) => Effect.gen(function* () {
16
+ yield* plugin.plugin.shutdown().pipe(Effect.catchAll(() => Effect.void));
17
+ yield* Scope.close(plugin.scope, Exit.succeed(void 0));
18
+ yield* lifecycle.unregister(plugin);
19
+ }),
20
+ cleanup: lifecycle.cleanup
21
+ };
22
+ }) }) {
23
+ static Live = (registry, secrets, pluginMap = {}) => {
24
+ const contextLayer = Layer.mergeAll(Layer.succeed(PluginRegistryTag, registry), Layer.succeed(SecretsConfigTag, secrets), Layer.succeed(PluginMapTag, pluginMap));
25
+ const servicesLayer = Layer.mergeAll(ModuleFederationService.Default, SecretsService.Default, RegistryService.Default, PluginLifecycleService.Default).pipe(Layer.provide(contextLayer));
26
+ return PluginService.Default.pipe(Layer.provide(PluginLoaderService.Default), Layer.provide(servicesLayer));
27
+ };
28
+ };
29
+
30
+ //#endregion
31
+ export { PluginService };
32
+ //# sourceMappingURL=plugin.service.mjs.map
@@ -0,0 +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\tAnyPlugin,\n\tAnyPluginConstructor,\n\tInitializedPlugin,\n\tPluginRegistry,\n\tSecretsConfig\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport { PluginLoaderService, PluginMapTag, PluginRegistryTag, RegistryService } from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n\tscoped: Effect.gen(function* () {\n\t\tconst loader = yield* PluginLoaderService;\n\t\tconst lifecycle = yield* PluginLifecycleService;\n\n\t\treturn {\n\t\t\tloadPlugin: loader.loadPlugin,\n\t\t\tinstantiatePlugin: loader.instantiatePlugin,\n\t\t\tinitializePlugin: loader.initializePlugin,\n\t\t\tshutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t// Shutdown the plugin first (graceful cleanup)\n\t\t\t\t\tyield* plugin.plugin.shutdown().pipe(\n\t\t\t\t\t\tEffect.catchAll(() => Effect.void)\n\t\t\t\t\t);\n\n\t\t\t\t\t// Close the plugin scope to interrupt fibers and release resources\n\t\t\t\t\tyield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n\t\t\t\t\t// Unregister from lifecycle tracking\n\t\t\t\t\tyield* lifecycle.unregister(plugin);\n\t\t\t\t}),\n\t\t\tcleanup: lifecycle.cleanup,\n\t\t};\n\t}),\n}) {\n\tstatic Live = (registry: PluginRegistry, secrets: SecretsConfig, pluginMap: Record<string, AnyPluginConstructor> = {}) => {\n\t\tconst contextLayer = Layer.mergeAll(\n\t\t\tLayer.succeed(PluginRegistryTag, registry),\n\t\t\tLayer.succeed(SecretsConfigTag, secrets),\n\t\t\tLayer.succeed(PluginMapTag, pluginMap),\n\t\t);\n\n\t\tconst servicesLayer = Layer.mergeAll(\n\t\t\tModuleFederationService.Default,\n\t\t\tSecretsService.Default,\n\t\t\tRegistryService.Default,\n\t\t\tPluginLifecycleService.Default,\n\t\t).pipe(\n\t\t\tLayer.provide(contextLayer)\n\t\t);\n\n\t\treturn PluginService.Default.pipe(\n\t\t\tLayer.provide(PluginLoaderService.Default),\n\t\t\tLayer.provide(servicesLayer)\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;AAaA,IAAa,gBAAb,MAAa,sBAAsB,OAAO,SAAwB,CAAC,iBAAiB,EACnF,QAAQ,OAAO,IAAI,aAAa;CAC/B,MAAM,SAAS,OAAO;CACtB,MAAM,YAAY,OAAO;AAEzB,QAAO;EACN,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAChB,OAAO,IAAI,aAAa;AAEvB,UAAO,OAAO,OAAO,UAAU,CAAC,KAC/B,OAAO,eAAe,OAAO,KAAK,CAClC;AAGD,UAAO,MAAM,MAAM,OAAO,OAAO,KAAK,QAAQ,OAAU,CAAC;AAGzD,UAAO,UAAU,WAAW,OAAO;IAClC;EACH,SAAS,UAAU;EACnB;EACA,EACF,CAAC,CAAC;CACF,OAAO,QAAQ,UAA0B,SAAwB,YAAkD,EAAE,KAAK;EACzH,MAAM,eAAe,MAAM,SAC1B,MAAM,QAAQ,mBAAmB,SAAS,EAC1C,MAAM,QAAQ,kBAAkB,QAAQ,EACxC,MAAM,QAAQ,cAAc,UAAU,CACtC;EAED,MAAM,gBAAgB,MAAM,SAC3B,wBAAwB,SACxB,eAAe,SACf,gBAAgB,SAChB,uBAAuB,QACvB,CAAC,KACD,MAAM,QAAQ,aAAa,CAC3B;AAED,SAAO,cAAc,QAAQ,KAC5B,MAAM,QAAQ,oBAAoB,QAAQ,EAC1C,MAAM,QAAQ,cAAc,CAC5B"}