{"version":3,"file":"plugin-lifecycle.service.mjs","names":[],"sources":["../../../src/runtime/services/plugin-lifecycle.service.ts"],"sourcesContent":["import { Effect, Exit, Ref, Scope } from \"effect\";\nimport type { AnyPlugin, InitializedPlugin } from \"../../types\";\nimport { toPluginRuntimeError } from \"../errors\";\n\nexport class PluginLifecycleService extends Effect.Service<PluginLifecycleService>()(\n  \"PluginLifecycleService\",\n  {\n    effect: Effect.gen(function* () {\n      const activePlugins = yield* Ref.make(new Set<InitializedPlugin<AnyPlugin>>());\n\n      return {\n        register: <T extends AnyPlugin>(plugin: InitializedPlugin<T>) =>\n          Ref.update(activePlugins, (plugins) =>\n            new Set(plugins).add(plugin as InitializedPlugin<AnyPlugin>),\n          ),\n\n        unregister: (plugin: InitializedPlugin<AnyPlugin>) =>\n          Ref.update(activePlugins, (plugins) => {\n            const newSet = new Set(plugins);\n            newSet.delete(plugin);\n            return newSet;\n          }),\n\n        shutdown: (plugin: InitializedPlugin<AnyPlugin>) =>\n          Effect.gen(function* () {\n            // Remove from active plugins\n            yield* Ref.update(activePlugins, (plugins) => {\n              const newSet = new Set(plugins);\n              newSet.delete(plugin);\n              return newSet;\n            });\n\n            // Shutdown the plugin\n            yield* plugin.plugin\n              .shutdown()\n              .pipe(\n                Effect.mapError((error) =>\n                  toPluginRuntimeError(\n                    error,\n                    plugin.plugin.id,\n                    undefined,\n                    \"shutdown-plugin\",\n                    false,\n                  ),\n                ),\n              );\n          }),\n\n        cleanup: () =>\n          Effect.gen(function* () {\n            const plugins = yield* Ref.get(activePlugins);\n            if (typeof process !== \"undefined\" && process.env?.EVERY_PLUGIN_DEBUG_SCOPES === \"1\") {\n              yield* Effect.logWarning(\n                `[PluginLifecycle] cleaning up ${plugins.size} active plugin(s)`,\n              );\n            }\n\n            yield* Effect.forEach(\n              plugins,\n              (plugin) =>\n                Effect.gen(function* () {\n                  yield* plugin.plugin\n                    .shutdown()\n                    .pipe(\n                      Effect.catchAll((error) =>\n                        Effect.logWarning(`Failed to shutdown plugin ${plugin.plugin.id}`, error),\n                      ),\n                    );\n                  yield* Scope.close(plugin.scope, Exit.succeed(undefined)).pipe(\n                    Effect.catchAll((error) =>\n                      Effect.logWarning(\n                        `Failed to close scope for plugin ${plugin.plugin.id}`,\n                        error,\n                      ),\n                    ),\n                  );\n                }),\n              { concurrency: \"unbounded\" },\n            );\n\n            yield* Ref.set(activePlugins, new Set());\n          }).pipe(Effect.catchAll((error) => Effect.logWarning(\"Plugin cleanup failed\", error))),\n      };\n    }),\n  },\n) {}\n"],"mappings":";;;;AAIA,IAAa,yBAAb,cAA4C,OAAO,QAAgC,CAAC,CAClF,0BACA,EACE,QAAQ,OAAO,IAAI,aAAa;CAC9B,MAAM,gBAAgB,OAAO,IAAI,qBAAK,IAAI,IAAkC,CAAC;CAE7E,OAAO;EACL,WAAgC,WAC9B,IAAI,OAAO,gBAAgB,YACzB,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,MAAsC,CAC7D;EAEF,aAAa,WACX,IAAI,OAAO,gBAAgB,YAAY;GACrC,MAAM,SAAS,IAAI,IAAI,OAAO;GAC9B,OAAO,OAAO,MAAM;GACpB,OAAO;EACT,CAAC;EAEH,WAAW,WACT,OAAO,IAAI,aAAa;GAEtB,OAAO,IAAI,OAAO,gBAAgB,YAAY;IAC5C,MAAM,SAAS,IAAI,IAAI,OAAO;IAC9B,OAAO,OAAO,MAAM;IACpB,OAAO;GACT,CAAC;GAGD,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACC,OAAO,UAAU,UACf,qBACE,OACA,OAAO,OAAO,IACd,QACA,mBACA,KACF,CACF,CACF;EACJ,CAAC;EAEH,eACE,OAAO,IAAI,aAAa;GACtB,MAAM,UAAU,OAAO,IAAI,IAAI,aAAa;GAC5C,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK,8BAA8B,KAC/E,OAAO,OAAO,WACZ,iCAAiC,QAAQ,KAAK,kBAChD;GAGF,OAAO,OAAO,QACZ,UACC,WACC,OAAO,IAAI,aAAa;IACtB,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACC,OAAO,UAAU,UACf,OAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,CACF;IACF,OAAO,MAAM,MAAM,OAAO,OAAO,KAAK,QAAQ,MAAS,CAAC,CAAC,CAAC,KACxD,OAAO,UAAU,UACf,OAAO,WACL,oCAAoC,OAAO,OAAO,MAClD,KACF,CACF,CACF;GACF,CAAC,GACH,EAAE,aAAa,YAAY,CAC7B;GAEA,OAAO,IAAI,IAAI,+BAAe,IAAI,IAAI,CAAC;EACzC,CAAC,CAAC,CAAC,KAAK,OAAO,UAAU,UAAU,OAAO,WAAW,yBAAyB,KAAK,CAAC,CAAC;CACzF;AACF,CAAC,EACH,CACF,CAAC,CAAC,CAAC"}