UNPKG

every-plugin

Version:
32 lines (30 loc) 1.75 kB
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