diff --git a/packages/config-loader/src/sources/EnvConfigSource.ts b/packages/config-loader/src/sources/EnvConfigSource.ts index c59ba3fb42..0862ac1960 100644 --- a/packages/config-loader/src/sources/EnvConfigSource.ts +++ b/packages/config-loader/src/sources/EnvConfigSource.ts @@ -16,24 +16,25 @@ import { AppConfig } from '@backstage/config'; import { assertError } from '@backstage/errors'; -import { JsonObject, Observable } from '@backstage/types'; -import ObservableImpl from 'zen-observable'; +import { JsonObject } from '@backstage/types'; import { ConfigSource, ConfigSourceData } from './types'; -export function createConfigSource( - observable: Observable<{ data: ConfigSourceData[] }>, -): ConfigSource { - return { configData$: observable }; -} - -export class EnvConfigSource { +export class EnvConfigSource implements ConfigSource { static create(options: { env?: { [name: string]: string | undefined; }; }): ConfigSource { - const data = readEnvConfig(options?.env ?? process.env); - return createConfigSource(ObservableImpl.of({ data })); + return new EnvConfigSource(options?.env ?? process.env); + } + + private constructor( + private readonly env: { [name: string]: string | undefined }, + ) {} + + async *readConfigData(): AsyncIterator<{ data: ConfigSourceData[] }> { + const data = readEnvConfig(this.env); + return { data }; } } diff --git a/packages/config-loader/src/sources/types.ts b/packages/config-loader/src/sources/types.ts index 20cc04392e..9c65499bfe 100644 --- a/packages/config-loader/src/sources/types.ts +++ b/packages/config-loader/src/sources/types.ts @@ -15,7 +15,6 @@ */ import { AppConfig } from '@backstage/config'; -import { Observable } from '@backstage/types'; export interface ConfigSourceData extends AppConfig { /** @@ -24,6 +23,12 @@ export interface ConfigSourceData extends AppConfig { path?: string; } -export interface ConfigSource { - configData$: Observable<{ data: ConfigSourceData[] }>; +export interface ReadConfigDataOptions { + signal?: AbortSignal; +} + +export interface ConfigSource { + readConfigData( + options?: ReadConfigDataOptions, + ): AsyncIterator<{ data: ConfigSourceData[] }>; }