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.
- package/dist/{chunk-zltIcp7o.cjs → _virtual/rolldown_runtime.cjs} +3 -18
- package/dist/{chunk-QQAxy9l9.mjs → _virtual/rolldown_runtime.mjs} +1 -1
- package/dist/build/rspack/dev-server-middleware.cjs +201 -0
- package/dist/build/rspack/dev-server-middleware.cjs.map +1 -0
- package/dist/build/rspack/dev-server-middleware.mjs +200 -0
- package/dist/build/rspack/dev-server-middleware.mjs.map +1 -0
- package/dist/build/rspack/index.cjs +2 -362
- package/dist/build/rspack/index.d.cts +2 -20
- package/dist/build/rspack/index.d.mts +2 -20
- package/dist/build/rspack/index.mjs +2 -360
- package/dist/build/rspack/module-federation.cjs +47 -0
- package/dist/build/rspack/module-federation.cjs.map +1 -0
- package/dist/build/rspack/module-federation.mjs +47 -0
- package/dist/build/rspack/module-federation.mjs.map +1 -0
- package/dist/build/rspack/plugin.cjs +90 -0
- package/dist/build/rspack/plugin.cjs.map +1 -0
- package/dist/build/rspack/plugin.d.cts +20 -0
- package/dist/build/rspack/plugin.d.cts.map +1 -0
- package/dist/build/rspack/plugin.d.mts +20 -0
- package/dist/build/rspack/plugin.d.mts.map +1 -0
- package/dist/build/rspack/plugin.mjs +89 -0
- package/dist/build/rspack/plugin.mjs.map +1 -0
- package/dist/build/rspack/utils.cjs +41 -0
- package/dist/build/rspack/utils.cjs.map +1 -0
- package/dist/build/rspack/utils.mjs +38 -0
- package/dist/build/rspack/utils.mjs.map +1 -0
- package/dist/errors.cjs +62 -3
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +75 -3
- package/dist/errors.d.cts.map +1 -0
- package/dist/errors.d.mts +75 -3
- package/dist/errors.d.mts.map +1 -0
- package/dist/errors.mjs +62 -3
- package/dist/errors.mjs.map +1 -0
- package/dist/index.cjs +8 -55
- package/dist/index.d.cts +6 -5
- package/dist/index.d.mts +6 -5
- package/dist/index.mjs +5 -51
- package/dist/orpc.cjs +1 -1
- package/dist/{package-D4mbTFY1.cjs → package.cjs} +22 -7
- package/dist/package.cjs.map +1 -0
- package/dist/{package-B0vvsKXO.mjs → package.mjs} +22 -5
- package/dist/package.mjs.map +1 -0
- package/dist/plugin.cjs +48 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +62 -0
- package/dist/plugin.d.cts.map +1 -0
- package/dist/plugin.d.mts +62 -0
- package/dist/plugin.d.mts.map +1 -0
- package/dist/plugin.mjs +47 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/runtime/errors.cjs +45 -0
- package/dist/runtime/errors.cjs.map +1 -0
- package/dist/runtime/errors.d.cts +27 -0
- package/dist/runtime/errors.d.cts.map +1 -0
- package/dist/runtime/errors.d.mts +27 -0
- package/dist/runtime/errors.d.mts.map +1 -0
- package/dist/runtime/errors.mjs +41 -0
- package/dist/runtime/errors.mjs.map +1 -0
- package/dist/runtime/index.cjs +157 -5
- package/dist/runtime/index.cjs.map +1 -0
- package/dist/runtime/index.d.cts +43 -5
- package/dist/runtime/index.d.cts.map +1 -0
- package/dist/runtime/index.d.mts +43 -5
- package/dist/runtime/index.d.mts.map +1 -0
- package/dist/runtime/index.mjs +155 -4
- package/dist/runtime/index.mjs.map +1 -0
- package/dist/runtime/services/module-federation.service.cjs +143 -0
- package/dist/runtime/services/module-federation.service.cjs.map +1 -0
- package/dist/runtime/services/module-federation.service.d.cts +15 -0
- package/dist/runtime/services/module-federation.service.d.cts.map +1 -0
- package/dist/runtime/services/module-federation.service.d.mts +15 -0
- package/dist/runtime/services/module-federation.service.d.mts.map +1 -0
- package/dist/runtime/services/module-federation.service.mjs +143 -0
- package/dist/runtime/services/module-federation.service.mjs.map +1 -0
- package/dist/runtime/services/normalize.cjs +22 -2
- package/dist/runtime/services/normalize.cjs.map +1 -0
- package/dist/runtime/services/normalize.d.cts +21 -2
- package/dist/runtime/services/normalize.d.cts.map +1 -0
- package/dist/runtime/services/normalize.d.mts +21 -2
- package/dist/runtime/services/normalize.d.mts.map +1 -0
- package/dist/runtime/services/normalize.mjs +21 -2
- package/dist/runtime/services/normalize.mjs.map +1 -0
- package/dist/runtime/services/plugin-lifecycle.service.cjs +33 -0
- package/dist/runtime/services/plugin-lifecycle.service.cjs.map +1 -0
- package/dist/runtime/services/plugin-lifecycle.service.d.cts +17 -0
- package/dist/runtime/services/plugin-lifecycle.service.d.cts.map +1 -0
- package/dist/runtime/services/plugin-lifecycle.service.d.mts +17 -0
- package/dist/runtime/services/plugin-lifecycle.service.d.mts.map +1 -0
- package/dist/runtime/services/plugin-lifecycle.service.mjs +32 -0
- package/dist/runtime/services/plugin-lifecycle.service.mjs.map +1 -0
- package/dist/runtime/services/plugin-loader.service.cjs +125 -0
- package/dist/runtime/services/plugin-loader.service.cjs.map +1 -0
- package/dist/runtime/services/plugin-loader.service.d.cts +54 -0
- package/dist/runtime/services/plugin-loader.service.d.cts.map +1 -0
- package/dist/runtime/services/plugin-loader.service.d.mts +54 -0
- package/dist/runtime/services/plugin-loader.service.d.mts.map +1 -0
- package/dist/runtime/services/plugin-loader.service.mjs +121 -0
- package/dist/runtime/services/plugin-loader.service.mjs.map +1 -0
- package/dist/runtime/services/plugin.service.cjs +33 -0
- package/dist/runtime/services/plugin.service.cjs.map +1 -0
- package/dist/runtime/services/plugin.service.d.cts +42 -0
- package/dist/runtime/services/plugin.service.d.cts.map +1 -0
- package/dist/runtime/services/plugin.service.d.mts +42 -0
- package/dist/runtime/services/plugin.service.d.mts.map +1 -0
- package/dist/runtime/services/plugin.service.mjs +32 -0
- package/dist/runtime/services/plugin.service.mjs.map +1 -0
- package/dist/runtime/services/secrets.service.cjs +50 -0
- package/dist/runtime/services/secrets.service.cjs.map +1 -0
- package/dist/runtime/services/secrets.service.d.cts +16 -0
- package/dist/runtime/services/secrets.service.d.cts.map +1 -0
- package/dist/runtime/services/secrets.service.d.mts +16 -0
- package/dist/runtime/services/secrets.service.d.mts.map +1 -0
- package/dist/runtime/services/secrets.service.mjs +48 -0
- package/dist/runtime/services/secrets.service.mjs.map +1 -0
- package/dist/runtime/validation.cjs +18 -0
- package/dist/runtime/validation.cjs.map +1 -0
- package/dist/runtime/validation.mjs +17 -0
- package/dist/runtime/validation.mjs.map +1 -0
- package/dist/testing/index.cjs +33 -55
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +28 -33
- package/dist/testing/index.d.cts.map +1 -1
- package/dist/testing/index.d.mts +28 -33
- package/dist/testing/index.d.mts.map +1 -1
- package/dist/testing/index.mjs +34 -54
- package/dist/testing/index.mjs.map +1 -1
- package/dist/types.cjs +0 -0
- package/dist/types.d.cts +261 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +261 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +1 -0
- package/dist/zod-core.cjs +9 -0
- package/dist/zod-core.d.cts +1 -0
- package/dist/zod-core.d.mts +1 -0
- package/dist/zod-core.mjs +3 -0
- package/dist/zod.cjs +13 -1
- package/dist/zod.cjs.map +1 -0
- package/dist/zod.d.cts +8 -2
- package/dist/zod.d.cts.map +1 -0
- package/dist/zod.d.mts +8 -2
- package/dist/zod.d.mts.map +1 -0
- package/dist/zod.mjs +9 -2
- package/dist/zod.mjs.map +1 -0
- package/package.json +17 -2
- package/dist/build/rspack/index.cjs.map +0 -1
- package/dist/build/rspack/index.d.cts.map +0 -1
- package/dist/build/rspack/index.d.mts.map +0 -1
- package/dist/build/rspack/index.mjs.map +0 -1
- package/dist/errors-9sNpYLv5.d.mts +0 -75
- package/dist/errors-9sNpYLv5.d.mts.map +0 -1
- package/dist/errors-CVnoPl9v.cjs +0 -68
- package/dist/errors-CVnoPl9v.cjs.map +0 -1
- package/dist/errors-D7keKf7a.mjs +0 -63
- package/dist/errors-D7keKf7a.mjs.map +0 -1
- package/dist/errors-DKPPPYYT.d.cts +0 -75
- package/dist/errors-DKPPPYYT.d.cts.map +0 -1
- package/dist/fetch-8DauUFDh.mjs +0 -335
- package/dist/fetch-8DauUFDh.mjs.map +0 -1
- package/dist/fetch-CrBvwsZ4.cjs +0 -336
- package/dist/fetch-CrBvwsZ4.cjs.map +0 -1
- package/dist/index-Coz54d1B.d.mts +0 -387
- package/dist/index-Coz54d1B.d.mts.map +0 -1
- package/dist/index-G63gBZIY.d.cts +0 -386
- package/dist/index-G63gBZIY.d.cts.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/normalize-BW7kk8Lk.d.cts +0 -21
- package/dist/normalize-BW7kk8Lk.d.cts.map +0 -1
- package/dist/normalize-D4Qh0wVk.cjs +0 -28
- package/dist/normalize-D4Qh0wVk.cjs.map +0 -1
- package/dist/normalize-D7nae0Hn.mjs +0 -22
- package/dist/normalize-D7nae0Hn.mjs.map +0 -1
- package/dist/normalize-eB_j86fm.d.mts +0 -21
- package/dist/normalize-eB_j86fm.d.mts.map +0 -1
- package/dist/package-B0vvsKXO.mjs.map +0 -1
- package/dist/package-D4mbTFY1.cjs.map +0 -1
- package/dist/plugins-C6MGKdD-.mjs +0 -790
- package/dist/plugins-C6MGKdD-.mjs.map +0 -1
- package/dist/plugins-DNaNtkG7.cjs +0 -791
- package/dist/plugins-DNaNtkG7.cjs.map +0 -1
- package/dist/runtime-BTFJzoBu.cjs +0 -541
- package/dist/runtime-BTFJzoBu.cjs.map +0 -1
- package/dist/runtime-BYDchBFq.mjs +0 -476
- package/dist/runtime-BYDchBFq.mjs.map +0 -1
- package/dist/standard-CkH8zNkx.mjs +0 -584
- package/dist/standard-CkH8zNkx.mjs.map +0 -1
- package/dist/standard-v75BC6Z5.cjs +0 -685
- package/dist/standard-v75BC6Z5.cjs.map +0 -1
- package/dist/zod-A7Pti5IV.d.cts +0 -4
- package/dist/zod-A7Pti5IV.d.cts.map +0 -1
- package/dist/zod-BVo51kgJ.mjs +0 -10
- package/dist/zod-BVo51kgJ.mjs.map +0 -1
- package/dist/zod-DYghWCz1.cjs +0 -14
- package/dist/zod-DYghWCz1.cjs.map +0 -1
- package/dist/zod-Zw8dlP3j.d.mts +0 -4
- 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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|