every-plugin
Version:
32 lines (30 loc) • 1.75 kB
JavaScript
import { ModuleFederationService } from "./module-federation.service.mjs";
import { PluginLifecycleService } from "./plugin-lifecycle.service.mjs";
import { SecretsConfigTag, SecretsService } from "./secrets.service.mjs";
import { PluginLoaderService, PluginMapTag, PluginRegistryTag, RegistryService } from "./plugin-loader.service.mjs";
import { Effect, Exit, Layer, Scope } from "effect";
//#region src/runtime/services/plugin.service.ts
var PluginService = class PluginService extends Effect.Service()("PluginService", { scoped: Effect.gen(function* () {
const loader = yield* PluginLoaderService;
const lifecycle = yield* PluginLifecycleService;
return {
loadPlugin: loader.loadPlugin,
instantiatePlugin: loader.instantiatePlugin,
initializePlugin: loader.initializePlugin,
shutdownPlugin: (plugin) => Effect.gen(function* () {
yield* plugin.plugin.shutdown().pipe(Effect.catchAll((error) => Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error)));
yield* Scope.close(plugin.scope, Exit.succeed(void 0));
yield* lifecycle.unregister(plugin);
}),
cleanup: lifecycle.cleanup
};
}) }) {
static Live = (registry, secrets, pluginMap = {}) => {
const contextLayer = Layer.mergeAll(Layer.succeed(PluginRegistryTag, registry), Layer.succeed(SecretsConfigTag, secrets), Layer.succeed(PluginMapTag, pluginMap));
const servicesLayer = Layer.mergeAll(ModuleFederationService.Default, SecretsService.Default, RegistryService.Default, PluginLifecycleService.Default).pipe(Layer.provide(contextLayer));
return PluginService.Default.pipe(Layer.provide(PluginLoaderService.Default), Layer.provide(servicesLayer));
};
};
//#endregion
export { PluginService };
//# sourceMappingURL=plugin.service.mjs.map