every-plugin
Version:
36 lines (34 loc) • 1.98 kB
JavaScript
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