From 31410c875cc0161281f61add98e068a6d7e0acf1 Mon Sep 17 00:00:00 2001 From: Kirill Romanov Date: Thu, 7 Nov 2019 22:56:54 +0300 Subject: [PATCH] feat(babel-transpiler): support object-style babel.config.js (#1762) The babel transpiler will now also work with babel.config.js files that export object instead of function. --- packages/babel-transpiler/src/BabelConfigReader.ts | 9 +++++++-- .../test/integration/BabelProjects.it.spec.ts | 8 +++++++- .../babelProjectWithBabelConfigJsObject/babel.config.js | 3 +++ .../expectedResult/foo.js | 1 + .../expectedResult/main.js | 1 + .../babelProjectWithBabelConfigJsObject/source/foo.ts | 1 + .../babelProjectWithBabelConfigJsObject/source/main.ts | 1 + 7 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/babel.config.js create mode 100644 packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/foo.js create mode 100644 packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/main.js create mode 100644 packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/foo.ts create mode 100644 packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/main.ts diff --git a/packages/babel-transpiler/src/BabelConfigReader.ts b/packages/babel-transpiler/src/BabelConfigReader.ts index 9e5a35ac68..8d5eccba02 100644 --- a/packages/babel-transpiler/src/BabelConfigReader.ts +++ b/packages/babel-transpiler/src/BabelConfigReader.ts @@ -50,8 +50,13 @@ export class BabelConfigReader { return require(babelrcPath) as babel.TransformOptions; } if (path.basename(babelrcPath) === 'babel.config.js') { - const config: babel.ConfigFunction = require(babelrcPath); - return config(optionsApi as babel.ConfigAPI); + const config = require(babelrcPath); + if (typeof config === 'function') { + const configFunction = config as babel.ConfigFunction; + return configFunction(optionsApi as babel.ConfigAPI); + } else { + return config as babel.TransformOptions; + } } return JSON.parse(fs.readFileSync(babelrcPath, 'utf8')) as babel.TransformOptions; } catch (error) { diff --git a/packages/babel-transpiler/test/integration/BabelProjects.it.spec.ts b/packages/babel-transpiler/test/integration/BabelProjects.it.spec.ts index 2af9d9356f..2e75c8a477 100644 --- a/packages/babel-transpiler/test/integration/BabelProjects.it.spec.ts +++ b/packages/babel-transpiler/test/integration/BabelProjects.it.spec.ts @@ -63,7 +63,7 @@ describe('Project with binary files', () => { describe('Different extensions', () => { describeIntegrationTest('differentExtensions'); }); -describe('A Babel project with babel.config.js config file', () => { +describe('A Babel project with babel.config.js config file that exports function', () => { const noop = () => {}; describeIntegrationTest('babelProjectWithBabelConfigJs', { extensions: ['.ts'], @@ -71,6 +71,12 @@ describe('A Babel project with babel.config.js config file', () => { optionsFile: 'babel.config.js' }); }); +describe('A Babel project with babel.config.js config file that exports object', () => { + describeIntegrationTest('babelProjectWithBabelConfigJsObject', { + extensions: ['.ts'], + optionsFile: 'babel.config.js' + }); +}); describe('A Babel project with .babelrc.js config file', () => { describeIntegrationTest('babelProjectWithBabelRcJs', { extensions: ['.ts'], diff --git a/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/babel.config.js b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/babel.config.js new file mode 100644 index 0000000000..b64fcf0f34 --- /dev/null +++ b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ["@babel/preset-typescript"] +} diff --git a/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/foo.js b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/foo.js new file mode 100644 index 0000000000..c95d6c53a9 --- /dev/null +++ b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/foo.js @@ -0,0 +1 @@ +export const foo = 4; \ No newline at end of file diff --git a/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/main.js b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/main.js new file mode 100644 index 0000000000..c4ad81e932 --- /dev/null +++ b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/expectedResult/main.js @@ -0,0 +1 @@ +const x = 0; \ No newline at end of file diff --git a/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/foo.ts b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/foo.ts new file mode 100644 index 0000000000..914e3092cb --- /dev/null +++ b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/foo.ts @@ -0,0 +1 @@ +export const foo: number = 4; \ No newline at end of file diff --git a/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/main.ts b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/main.ts new file mode 100644 index 0000000000..cacb9b4964 --- /dev/null +++ b/packages/babel-transpiler/testResources/babelProjectWithBabelConfigJsObject/source/main.ts @@ -0,0 +1 @@ +const x: number = 0; \ No newline at end of file