diff --git a/packages/apollo-language-server/src/config.ts b/packages/apollo-language-server/src/config.ts index 7633a2d9ae..cf16793f11 100644 --- a/packages/apollo-language-server/src/config.ts +++ b/packages/apollo-language-server/src/config.ts @@ -112,11 +112,18 @@ export type ApolloConfigFormat = // config settings const MODULE_NAME = "apollo"; -const searchPlaces = [ +const defaultSearchPlaces = [ "package.json", `${MODULE_NAME}.config.js`, `${MODULE_NAME}.config.ts` ]; + +// Based on order, a provided config file will take precedence over the defaults +const getSearchPlaces = (configFile?: string) => [ + ...(configFile ? [configFile] : []), + ...defaultSearchPlaces +]; + const loaders = { // XXX improve types for config ".json": (cosmiconfig as any).loadJson as LoaderEntry, @@ -130,7 +137,7 @@ export interface LoadConfigSettings { // the current working directory to start looking for the config // config loading only works on node so we default to // process.cwd() - cwd: string; + configPath?: string; name?: string; type?: "service" | "client"; } @@ -249,23 +256,23 @@ export function isServiceConfig(config: ApolloConfig): config is ServiceConfig { // XXX load .env files automatically export const loadConfig = async ({ - cwd, + configPath, name, type }: LoadConfigSettings): Promise> => { const explorer = cosmiconfig(MODULE_NAME, { - searchPlaces, + searchPlaces: getSearchPlaces(configPath), loaders }); - let loadedConfig = (await explorer.search(cwd)) as ConfigResult< + let loadedConfig = (await explorer.search(configPath)) as ConfigResult< ApolloConfigFormat >; if (!loadedConfig) { loadedConfig = { isEmpty: false, - filepath: cwd || process.cwd(), + filepath: configPath || process.cwd(), config: type === "client" ? { diff --git a/packages/apollo-language-server/src/workspace.ts b/packages/apollo-language-server/src/workspace.ts index ee31eeece9..34caafa499 100644 --- a/packages/apollo-language-server/src/workspace.ts +++ b/packages/apollo-language-server/src/workspace.ts @@ -123,7 +123,7 @@ export class GraphQLWorkspace { `Loading Apollo Config in folder ${configFolder}`, (async () => { try { - const config = await loadConfig({ cwd: configFolder }); + const config = await loadConfig({ configPath: configFolder }); return config && config.config; } catch (e) { console.error(e); diff --git a/packages/apollo/src/Command.ts b/packages/apollo/src/Command.ts index 59684ac673..0481c875e6 100644 --- a/packages/apollo/src/Command.ts +++ b/packages/apollo/src/Command.ts @@ -102,7 +102,7 @@ export abstract class ProjectCommand extends Command { service = getServiceFromKey(process.env.ENGINE_API_KEY); if (flags.key) service = getServiceFromKey(flags.key); const loadedConfig = await loadConfig({ - cwd: flags.config, + configPath: flags.config, name: service, type: this.type });