UNPKG

@whook/whook

Version:

Build strong and efficient REST web services.

64 lines (59 loc) 1.67 kB
import { initEnv } from 'application-services'; import { wrapInitializer, alsoInject, location, type ServiceInitializer, } from 'knifecycle'; import { noop, type LogService } from 'common-services'; import { type AppEnvVars, type ProcessEnvDependencies, } from 'application-services'; export interface WhookProxiedENVConfig { PROXIED_ENV_VARS?: (keyof AppEnvVars)[]; } export type WhookProxiedENVDependencies = WhookProxiedENVConfig & { log?: LogService; }; export default location( alsoInject< WhookProxiedENVDependencies, // eslint-disable-next-line @typescript-eslint/no-explicit-any ProcessEnvDependencies<any>, AppEnvVars >( ['?log', '?PROXIED_ENV_VARS'], wrapInitializer( wrapEnvForBuild, initEnv as ServiceInitializer<WhookProxiedENVDependencies, AppEnvVars>, ), ), import.meta.url, ); /** * Wrap the ENV service in order to filter ENV vars for the build * @param {Object} services * The service dependencies * @param {Object} [services.PROXIED_ENV_VARS={}] * A list of environment variable names to proxy * @param {Object} [services.log=noop] * An optional logging service * @return {Promise<Object>} * A promise of an object containing the reshaped env vars. */ async function wrapEnvForBuild( { log = noop, PROXIED_ENV_VARS = [] }: WhookProxiedENVDependencies, ENV: AppEnvVars, ): Promise<AppEnvVars> { log('debug', '♻️ -Filtering environment for build.'); return PROXIED_ENV_VARS.reduce( (GATHERED_ENV, name) => ({ ...GATHERED_ENV, [name]: ENV[name] || GATHERED_ENV[name], }), { NODE_ENV: ENV.NODE_ENV, } as AppEnvVars, ); }