From 18ea5aca51c82fcddaca0d0b1ff91a8995d955ec Mon Sep 17 00:00:00 2001 From: Logan Smyth Date: Wed, 22 Nov 2017 18:24:59 -0800 Subject: [PATCH] Expose a 'cwd' option for Babel's root options. --- packages/babel-core/src/config/build-config-chain.js | 5 +++-- packages/babel-core/src/config/option-manager.js | 7 +++++-- packages/babel-core/src/config/options.js | 2 ++ packages/babel-core/test/config-chain.js | 6 +++++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/babel-core/src/config/build-config-chain.js b/packages/babel-core/src/config/build-config-chain.js index ab253cf8dc..27d6ac99c0 100644 --- a/packages/babel-core/src/config/build-config-chain.js +++ b/packages/babel-core/src/config/build-config-chain.js @@ -39,16 +39,17 @@ type ConfigPart = }; export default function buildConfigChain( + cwd: string, opts: ValidatedOptions, envName: string, ): Array | null { - const filename = opts.filename ? path.resolve(opts.filename) : null; + const filename = opts.filename ? path.resolve(cwd, opts.filename) : null; const builder = new ConfigChainBuilder( filename ? new LoadedFile(filename) : null, ); try { - builder.mergeConfigArguments(opts, process.cwd(), envName); + builder.mergeConfigArguments(opts, cwd, envName); // resolve all .babelrc files if (opts.babelrc !== false && filename) { diff --git a/packages/babel-core/src/config/option-manager.js b/packages/babel-core/src/config/option-manager.js index d7c7c958c5..25e810c083 100644 --- a/packages/babel-core/src/config/option-manager.js +++ b/packages/babel-core/src/config/option-manager.js @@ -1,5 +1,6 @@ // @flow +import path from "path"; import * as context from "../index"; import Plugin, { validatePluginObject } from "./plugin"; import merge from "lodash/merge"; @@ -103,9 +104,10 @@ class OptionManager { init(inputOpts: {}) { const args = validate("arguments", inputOpts); - const { envName = getEnv() } = args; + const { envName = getEnv(), cwd = "." } = args; + const absoluteCwd = path.resolve(cwd); - const configChain = buildConfigChain(args, envName); + const configChain = buildConfigChain(absoluteCwd, args, envName); if (!configChain) return null; try { @@ -134,6 +136,7 @@ class OptionManager { .map(plugins => ({ plugins })); opts.passPerPreset = opts.presets.length > 0; opts.envName = envName; + opts.cwd = absoluteCwd; return { options: opts, diff --git a/packages/babel-core/src/config/options.js b/packages/babel-core/src/config/options.js index 450f52b8e8..9aec95dfa8 100644 --- a/packages/babel-core/src/config/options.js +++ b/packages/babel-core/src/config/options.js @@ -17,6 +17,7 @@ import { } from "./option-assertions"; const ROOT_VALIDATORS: ValidatorSet = { + cwd: (assertString: Validator<$PropertyType>), filename: (assertString: Validator< $PropertyType, >), @@ -128,6 +129,7 @@ const COMMON_VALIDATORS: ValidatorSet = { export type InputOptions = ValidatedOptions; export type ValidatedOptions = { + cwd?: string, filename?: string, filenameRelative?: string, babelrc?: boolean, diff --git a/packages/babel-core/test/config-chain.js b/packages/babel-core/test/config-chain.js index d4bb482212..4b4ea20ff0 100644 --- a/packages/babel-core/test/config-chain.js +++ b/packages/babel-core/test/config-chain.js @@ -1,10 +1,14 @@ import assert from "assert"; import fs from "fs"; import path from "path"; -import buildConfigChain from "../lib/config/build-config-chain"; +import buildConfigChainFn from "../lib/config/build-config-chain"; const DEFAULT_ENV = "development"; +function buildConfigChain(opts, envName) { + return buildConfigChainFn(process.cwd(), opts, envName); +} + function fixture() { const args = [__dirname, "fixtures", "config"]; for (let i = 0; i < arguments.length; i++) {