import { readFile as _readFile } from 'node:fs/promises';
import { type ServiceProperties } from 'knifecycle';
import { type LogService } from 'common-services';
export declare enum NodeEnv {
    Test = "test",
    Development = "development",
    Production = "production"
}
export type BaseAppEnv = 'local';
export interface BaseAppEnvVars {
    NODE_ENV: NodeEnv;
    ISOLATED_ENV?: string;
}
export interface AppEnvVars extends BaseAppEnvVars {
}
export interface ProcessEnvConfig {
    BASE_ENV?: Partial<AppEnvVars>;
}
export type ProcessEnvDependencies<T extends BaseAppEnv> = ProcessEnvConfig & {
    APP_ENV: T;
    PROJECT_DIR: string;
    PROCESS_ENV: Partial<AppEnvVars>;
    log?: LogService;
    readFile?: typeof _readFile;
};
/**
 * Initialize the ENV service using process env plus dotenv files
 *  loaded in `.env.node.${ENV.NODE_ENV}` and `.env.app.${APP_ENV}`.
 * @param  {Object}   services
 * The services `ENV` depends on
 * @param  {Object}   [services.BASE_ENV]
 * Base env vars that will be added to the environment
 * @param  {Object}   services.APP_ENV
 * The injected `APP_ENV` value
 * @param  {Object}   services.PROCESS_ENV
 * The injected `process.env` value
 * @param  {Object}   services.PROJECT_DIR
 * The NodeJS project directory
 * @param  {Object}   [services.log=noop]
 * An optional logging service
 * @return {Promise<Object>}
 * A promise of an object containing the actual env vars.
 */
declare function initENV<T extends BaseAppEnv>({ BASE_ENV, APP_ENV, PROCESS_ENV, PROJECT_DIR, log, readFile, }: ProcessEnvDependencies<T>): Promise<AppEnvVars>;
declare const _default: ServiceProperties & typeof initENV;
export default _default;
