UNPKG

every-plugin

Version:
36 lines (34 loc) 1.98 kB
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs'); const require_errors = require('../errors.cjs'); let effect = require("effect"); //#region src/runtime/services/plugin-lifecycle.service.ts var PluginLifecycleService = class extends effect.Effect.Service()("PluginLifecycleService", { effect: effect.Effect.gen(function* () { const activePlugins = yield* effect.Ref.make(/* @__PURE__ */ new Set()); return { register: (plugin) => effect.Ref.update(activePlugins, (plugins) => new Set(plugins).add(plugin)), unregister: (plugin) => effect.Ref.update(activePlugins, (plugins) => { const newSet = new Set(plugins); newSet.delete(plugin); return newSet; }), shutdown: (plugin) => effect.Effect.gen(function* () { yield* effect.Ref.update(activePlugins, (plugins) => { const newSet = new Set(plugins); newSet.delete(plugin); return newSet; }); yield* plugin.plugin.shutdown().pipe(effect.Effect.mapError((error) => require_errors.toPluginRuntimeError(error, plugin.plugin.id, void 0, "shutdown-plugin", false))); }), cleanup: () => effect.Effect.gen(function* () { const plugins = yield* effect.Ref.get(activePlugins); yield* effect.Effect.forEach(plugins, (plugin) => effect.Effect.gen(function* () { yield* plugin.plugin.shutdown().pipe(effect.Effect.catchAll((error) => effect.Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error))); yield* effect.Scope.close(plugin.scope, effect.Exit.succeed(void 0)).pipe(effect.Effect.catchAll((error) => effect.Effect.logWarning(`Failed to close scope for plugin ${plugin.plugin.id}`, error))); }), { concurrency: "unbounded" }); yield* effect.Ref.set(activePlugins, /* @__PURE__ */ new Set()); }).pipe(effect.Effect.catchAll((error) => effect.Effect.logWarning("Plugin cleanup failed", error))) }; }) }) {}; //#endregion exports.PluginLifecycleService = PluginLifecycleService; //# sourceMappingURL=plugin-lifecycle.service.cjs.map