{"version":3,"file":"plugin-lifecycle.service.cjs","names":["Effect","Ref","toPluginRuntimeError","Scope","Exit"],"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,cAA4CA,cAAO,QAAgC,CAAC,CAClF,0BACA,EACE,QAAQA,cAAO,IAAI,aAAa;CAC9B,MAAM,gBAAgB,OAAOC,WAAI,qBAAK,IAAI,IAAkC,CAAC;CAE7E,OAAO;EACL,WAAgC,WAC9BA,WAAI,OAAO,gBAAgB,YACzB,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,MAAsC,CAC7D;EAEF,aAAa,WACXA,WAAI,OAAO,gBAAgB,YAAY;GACrC,MAAM,SAAS,IAAI,IAAI,OAAO;GAC9B,OAAO,OAAO,MAAM;GACpB,OAAO;EACT,CAAC;EAEH,WAAW,WACTD,cAAO,IAAI,aAAa;GAEtB,OAAOC,WAAI,OAAO,gBAAgB,YAAY;IAC5C,MAAM,SAAS,IAAI,IAAI,OAAO;IAC9B,OAAO,OAAO,MAAM;IACpB,OAAO;GACT,CAAC;GAGD,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACCD,cAAO,UAAU,UACfE,oCACE,OACA,OAAO,OAAO,IACd,QACA,mBACA,KACF,CACF,CACF;EACJ,CAAC;EAEH,eACEF,cAAO,IAAI,aAAa;GACtB,MAAM,UAAU,OAAOC,WAAI,IAAI,aAAa;GAC5C,IAAI,OAAO,YAAY,eAAe,QAAQ,KAAK,8BAA8B,KAC/E,OAAOD,cAAO,WACZ,iCAAiC,QAAQ,KAAK,kBAChD;GAGF,OAAOA,cAAO,QACZ,UACC,WACCA,cAAO,IAAI,aAAa;IACtB,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACCA,cAAO,UAAU,UACfA,cAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,CACF;IACF,OAAOG,aAAM,MAAM,OAAO,OAAOC,YAAK,QAAQ,MAAS,CAAC,CAAC,CAAC,KACxDJ,cAAO,UAAU,UACfA,cAAO,WACL,oCAAoC,OAAO,OAAO,MAClD,KACF,CACF,CACF;GACF,CAAC,GACH,EAAE,aAAa,YAAY,CAC7B;GAEA,OAAOC,WAAI,IAAI,+BAAe,IAAI,IAAI,CAAC;EACzC,CAAC,CAAC,CAAC,KAAKD,cAAO,UAAU,UAAUA,cAAO,WAAW,yBAAyB,KAAK,CAAC,CAAC;CACzF;AACF,CAAC,EACH,CACF,CAAC,CAAC,CAAC"}