{"version":3,"file":"plugin.service.cjs","names":["Effect","PluginLoaderService","PluginLifecycleService","Scope","Exit","Layer","PluginRegistryTag","SecretsConfigTag","PluginMapTag","ModuleFederationService","SecretsService","RegistryService"],"sources":["../../../src/runtime/services/plugin.service.ts"],"sourcesContent":["import { Effect, Exit, Layer, Scope } from \"effect\";\nimport type {\n  AnyPlugin,\n  AnyPluginConstructor,\n  InitializedPlugin,\n  PluginRegistry,\n  SecretsConfig,\n} from \"../../types\";\nimport { ModuleFederationService } from \"./module-federation.service\";\nimport { PluginLifecycleService } from \"./plugin-lifecycle.service\";\nimport {\n  PluginLoaderService,\n  PluginMapTag,\n  PluginRegistryTag,\n  RegistryService,\n} from \"./plugin-loader.service\";\nimport { SecretsConfigTag, SecretsService } from \"./secrets.service\";\n\nexport class PluginService extends Effect.Service<PluginService>()(\"PluginService\", {\n  scoped: Effect.gen(function* () {\n    const loader = yield* PluginLoaderService;\n    const lifecycle = yield* PluginLifecycleService;\n\n    return {\n      loadPlugin: loader.loadPlugin,\n      instantiatePlugin: loader.instantiatePlugin,\n      initializePlugin: loader.initializePlugin,\n      registerPlugin: (plugin: InitializedPlugin<AnyPlugin>) => lifecycle.register(plugin),\n      shutdownPlugin: (plugin: InitializedPlugin<AnyPlugin>) =>\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\n          yield* Scope.close(plugin.scope, Exit.succeed(undefined));\n\n          yield* lifecycle.unregister(plugin);\n        }),\n      cleanup: lifecycle.cleanup,\n    };\n  }),\n}) {\n  static Live = (\n    registry: PluginRegistry,\n    secrets: SecretsConfig,\n    pluginMap: Record<string, AnyPluginConstructor> = {},\n  ) => {\n    const contextLayer = Layer.mergeAll(\n      Layer.succeed(PluginRegistryTag, registry),\n      Layer.succeed(SecretsConfigTag, secrets),\n      Layer.succeed(PluginMapTag, pluginMap),\n    );\n\n    const servicesLayer = Layer.mergeAll(\n      ModuleFederationService.Default,\n      SecretsService.Default,\n      RegistryService.Default,\n      PluginLifecycleService.Default,\n    ).pipe(Layer.provide(contextLayer));\n\n    return PluginService.Default.pipe(\n      Layer.provide(PluginLoaderService.Default),\n      Layer.provide(servicesLayer),\n    );\n  };\n}\n"],"mappings":";;;;;;;AAkBA,IAAa,gBAAb,MAAa,sBAAsBA,cAAO,QAAuB,CAAC,CAAC,iBAAiB,EAClF,QAAQA,cAAO,IAAI,aAAa;CAC9B,MAAM,SAAS,OAAOC;CACtB,MAAM,YAAY,OAAOC;CAEzB,OAAO;EACL,YAAY,OAAO;EACnB,mBAAmB,OAAO;EAC1B,kBAAkB,OAAO;EACzB,iBAAiB,WAAyC,UAAU,SAAS,MAAM;EACnF,iBAAiB,WACfF,cAAO,IAAI,aAAa;GACtB,OAAO,OAAO,OACX,SAAS,CAAC,CACV,KACCA,cAAO,UAAU,UACfA,cAAO,WAAW,6BAA6B,OAAO,OAAO,MAAM,KAAK,CAC1E,CACF;GAEF,OAAOG,aAAM,MAAM,OAAO,OAAOC,YAAK,QAAQ,MAAS,CAAC;GAExD,OAAO,UAAU,WAAW,MAAM;EACpC,CAAC;EACH,SAAS,UAAU;CACrB;AACF,CAAC,EACH,CAAC,CAAC,CAAC;CACD,OAAO,QACL,UACA,SACA,YAAkD,CAAC,MAChD;EACH,MAAM,eAAeC,aAAM,SACzBA,aAAM,QAAQC,iDAAmB,QAAQ,GACzCD,aAAM,QAAQE,0CAAkB,OAAO,GACvCF,aAAM,QAAQG,4CAAc,SAAS,CACvC;EAEA,MAAM,gBAAgBH,aAAM,SAC1BI,0DAAwB,SACxBC,uCAAe,SACfC,8CAAgB,SAChBT,wDAAuB,OACzB,CAAC,CAAC,KAAKG,aAAM,QAAQ,YAAY,CAAC;EAElC,OAAO,cAAc,QAAQ,KAC3BA,aAAM,QAAQJ,kDAAoB,OAAO,GACzCI,aAAM,QAAQ,aAAa,CAC7B;CACF;AACF"}