From 3c60c0218a6e70b164c57a141724c14cdebd9004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Feb 2019 18:07:23 +0100 Subject: [PATCH 01/19] Extract webpack utils from build command --- packages/scripts/utils/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/scripts/utils/config.js b/packages/scripts/utils/config.js index 0c5ed70c293ce2..58ee89efcb399e 100644 --- a/packages/scripts/utils/config.js +++ b/packages/scripts/utils/config.js @@ -34,4 +34,5 @@ module.exports = { getWebpackArgs, hasBabelConfig, hasJestConfig, + hasWebpackConfig, }; From 3067bf9f85573d3b6a928765b335ba5d57724820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 27 Feb 2019 16:52:37 +0100 Subject: [PATCH 02/19] Do not export hasWebpackConfig as it is not used anywhere else. --- packages/scripts/utils/config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/scripts/utils/config.js b/packages/scripts/utils/config.js index 58ee89efcb399e..0c5ed70c293ce2 100644 --- a/packages/scripts/utils/config.js +++ b/packages/scripts/utils/config.js @@ -34,5 +34,4 @@ module.exports = { getWebpackArgs, hasBabelConfig, hasJestConfig, - hasWebpackConfig, }; From 2037478b470686bddf0467ffedd96eace826e778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 28 Feb 2019 14:46:41 +0100 Subject: [PATCH 03/19] Webpack will use @wordpress/babel-preset-default if no babel config found --- packages/scripts/config/webpack.config.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/scripts/config/webpack.config.js b/packages/scripts/config/webpack.config.js index 70fed30229ba4f..afec7bf8059771 100644 --- a/packages/scripts/config/webpack.config.js +++ b/packages/scripts/config/webpack.config.js @@ -8,7 +8,7 @@ const path = require( 'path' ); /** * Internal dependencies */ -const { camelCaseDash } = require( '../utils' ); +const { camelCaseDash, hasBabelConfig } = require( '../utils' ); /** * Converts @wordpress/* string request into request object. @@ -66,6 +66,21 @@ const externals = [ const isProduction = process.env.NODE_ENV === 'production'; const mode = isProduction ? 'production' : 'development'; +const babelLoader = hasBabelConfig() ? { + test: /\.js$/, + exclude: /node_modules/, + use: require.resolve( 'babel-loader' ), +} : { + test: /\.js$/, + exclude: /node_modules/, + use: { + loader: require.resolve( 'babel-loader' ), + options: { + presets: [ '@wordpress/babel-preset-default' ], + }, + }, +}; + const config = { mode, entry: { @@ -88,11 +103,7 @@ const config = { use: require.resolve( 'source-map-loader' ), enforce: 'pre', }, - { - test: /\.js$/, - exclude: /node_modules/, - use: require.resolve( 'babel-loader' ), - }, + babelLoader, ], }, plugins: [ From 074002c9ce6daa6c9217ead3f2cce79ec17fe9e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 28 Feb 2019 14:51:37 +0100 Subject: [PATCH 04/19] Teach Webpack where to lookup for @wordpress/babel-preset-default Starts in own @wordpress/scripts node_modules. --- packages/scripts/config/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/scripts/config/webpack.config.js b/packages/scripts/config/webpack.config.js index afec7bf8059771..6d5dfd6ed98041 100644 --- a/packages/scripts/config/webpack.config.js +++ b/packages/scripts/config/webpack.config.js @@ -76,7 +76,7 @@ const babelLoader = hasBabelConfig() ? { use: { loader: require.resolve( 'babel-loader' ), options: { - presets: [ '@wordpress/babel-preset-default' ], + presets: [ require.resolve( '@wordpress/babel-preset-default' ) ], }, }, }; From 0fa9328934aa48d37e02f5bf3356578a32a15efa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 13 Mar 2019 18:40:00 +0100 Subject: [PATCH 05/19] Teach babel-preset-default where to lookup for deps --- packages/babel-preset-default/index.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 8a893ee9c5ea73..163edf3755a9e4 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -3,31 +3,31 @@ module.exports = function( api ) { return { presets: [ - ! isTestEnv && [ '@babel/preset-env', { + ! isTestEnv && [ require.resolve( '@babel/preset-env' ), { modules: false, targets: { - browsers: [ 'extends @wordpress/browserslist-config' ], + browsers: require( '@wordpress/browserslist-config' ), }, } ], - isTestEnv && [ '@babel/preset-env', { + isTestEnv && [ require.resolve( '@babel/preset-env' ), { useBuiltIns: 'usage', } ], ].filter( Boolean ), plugins: [ - '@babel/plugin-proposal-object-rest-spread', + require.resolve( '@babel/plugin-proposal-object-rest-spread' ), [ - '@wordpress/babel-plugin-import-jsx-pragma', + require.resolve( '@wordpress/babel-plugin-import-jsx-pragma' ), { scopeVariable: 'createElement', source: '@wordpress/element', isDefault: false, }, ], - [ '@babel/plugin-transform-react-jsx', { + [ require.resolve( '@babel/plugin-transform-react-jsx' ), { pragma: 'createElement', } ], - '@babel/plugin-proposal-async-generator-functions', - ! isTestEnv && [ '@babel/plugin-transform-runtime', { + require.resolve( '@babel/plugin-proposal-async-generator-functions' ), + ! isTestEnv && [ require.resolve( '@babel/plugin-transform-runtime' ), { helpers: true, useESModules: false, } ], From c165b3a210dde61b2e73c07f23b936d6070c6055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Tue, 12 Mar 2019 12:54:26 +0100 Subject: [PATCH 06/19] Centralize babel logic in preset --- bin/packages/get-babel-config.js | 65 +++----------------------- packages/babel-preset-default/index.js | 56 ++++++++++++++++------ 2 files changed, 48 insertions(+), 73 deletions(-) diff --git a/bin/packages/get-babel-config.js b/bin/packages/get-babel-config.js index b2646da46955c2..bd7f58c48aede4 100644 --- a/bin/packages/get-babel-config.js +++ b/bin/packages/get-babel-config.js @@ -1,64 +1,13 @@ /** * External dependencies */ -const { get, map } = require( 'lodash' ); const babel = require( '@babel/core' ); -/** - * WordPress dependencies - */ -const { options: babelDefaultConfig } = babel.loadPartialConfig( { - configFile: '@wordpress/babel-preset-default', -} ); -const { plugins, presets } = babelDefaultConfig; - -const overrideOptions = ( target, targetName, options ) => { - if ( get( target, [ 'file', 'request' ] ) === targetName ) { - return [ targetName, Object.assign( - {}, - target.options, - options - ) ]; - } - return target; +module.exports = function( environment ) { + process.env.WP_EDITOR_BUILD = environment; + const { options } = babel.loadPartialConfig( { + configFile: '@wordpress/babel-preset-default', + } ); + delete process.env.WP_EDITOR_BUILD; + return options; }; - -const babelConfigs = { - main: Object.assign( - {}, - babelDefaultConfig, - { - plugins, - presets: map( - presets, - ( preset ) => overrideOptions( preset, '@babel/preset-env', { - modules: 'commonjs', - } ) - ), - } - ), - module: Object.assign( - {}, - babelDefaultConfig, - { - plugins: map( - plugins, - ( plugin ) => overrideOptions( plugin, '@babel/plugin-transform-runtime', { - useESModules: true, - } ) - ), - presets: map( - presets, - ( preset ) => overrideOptions( preset, '@babel/preset-env', { - modules: false, - } ) - ), - } - ), -}; - -function getBabelConfig( environment ) { - return babelConfigs[ environment ]; -} - -module.exports = getBabelConfig; diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 163edf3755a9e4..7eded67e684239 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -1,18 +1,47 @@ module.exports = function( api ) { const isTestEnv = api.env() === 'test'; + const getPresetEnv = () => { + const opts = {}; + + if ( isTestEnv ) { + opts.useBuiltIns = 'usage'; + } else { + opts.modules = false; + opts.targets = { + browsers: require( 'extends @wordpress/browserslist-config' ), + }; + } + + // console.log( 'editor build ', process.env.WP_EDITOR_BUILD ); + if ( process.env.WP_EDITOR_BUILD === 'main' ) { + opts.modules = 'commonjs'; + } else if ( process.env.WP_EDITOR_BUILD === 'module' ) { + opts.modules = false; + } + + return [ require.resolve( '@babel/preset-env' ), opts ]; + }; + + const maybeGetPluginTransformRuntime = () => { + if ( isTestEnv ) { + return undefined; + } + + const opts = { + helpers: true, + useESModules: false, + }; + + if ( process.env.WP_EDITOR_BUILD === 'module' ) { + opts.useESModules = true; + } + + return [ require.resolve( '@babel/plugin-transform-runtime' ), opts ]; + }; + return { - presets: [ - ! isTestEnv && [ require.resolve( '@babel/preset-env' ), { - modules: false, - targets: { - browsers: require( '@wordpress/browserslist-config' ), - }, - } ], - isTestEnv && [ require.resolve( '@babel/preset-env' ), { - useBuiltIns: 'usage', - } ], - ].filter( Boolean ), + presets: [ getPresetEnv() ], plugins: [ require.resolve( '@babel/plugin-proposal-object-rest-spread' ), [ @@ -27,10 +56,7 @@ module.exports = function( api ) { pragma: 'createElement', } ], require.resolve( '@babel/plugin-proposal-async-generator-functions' ), - ! isTestEnv && [ require.resolve( '@babel/plugin-transform-runtime' ), { - helpers: true, - useESModules: false, - } ], + maybeGetPluginTransformRuntime(), ].filter( Boolean ), }; }; From fcf15b439c6f60a2e2fd8ef08fbd0d728346ea53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 13 Mar 2019 12:35:46 +0100 Subject: [PATCH 07/19] Use api.caller instead of env variables --- bin/packages/get-babel-config.js | 47 ++++++++++++++++++++------ packages/babel-preset-default/index.js | 30 ++++++++++++---- 2 files changed, 59 insertions(+), 18 deletions(-) diff --git a/bin/packages/get-babel-config.js b/bin/packages/get-babel-config.js index bd7f58c48aede4..d76e171d46b214 100644 --- a/bin/packages/get-babel-config.js +++ b/bin/packages/get-babel-config.js @@ -1,13 +1,38 @@ -/** - * External dependencies - */ -const babel = require( '@babel/core' ); +module.exports = function( environment = '', file ) { + /* + * Specific options to be passed using the caller config option: + * https://babeljs.io/docs/en/options#caller + * + * The caller options can only be 'boolean', 'string', or 'number' by design: + * https://github.com/babel/babel/blob/bd0c62dc0c30cf16a4d4ef0ddf21d386f673815c/packages/babel-core/src/config/validation/option-assertions.js#L122 + */ + const callerOpts = { caller: { + name: `WP_BUILD_${ environment.toUpperCase() }`, + } }; + switch ( environment ) { + case 'main': + // to be merged as a presetEnv option + callerOpts.caller.modules = 'commonjs'; + break; + case 'module': + // to be merged as a presetEnv option + callerOpts.caller.modules = false; + // to be merged as a pluginTransformRuntime option + callerOpts.caller.useESModules = true; + break; + default: + // preventing measure, this shouldn't happen ever + delete callerOpts.caller; + } -module.exports = function( environment ) { - process.env.WP_EDITOR_BUILD = environment; - const { options } = babel.loadPartialConfig( { - configFile: '@wordpress/babel-preset-default', - } ); - delete process.env.WP_EDITOR_BUILD; - return options; + // Sourcemaps options + const sourceMapsOpts = { + sourceMaps: true, + sourceFileName: file, + }; + + return { + ...callerOpts, + ...sourceMapsOpts, + }; }; diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 7eded67e684239..dacdc6dfcff7ba 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -1,6 +1,22 @@ module.exports = function( api ) { + let wpBuildOpts = {}; const isTestEnv = api.env() === 'test'; + // Because we serve a different preset depending + // on the caller options, we need to tell the cache + // when it needs updating. Otherwise, it won't be + // recalculated for different builds. + api.cache.using( () => wpBuildOpts.name ); + + api.caller( ( caller ) => { + if ( caller && ( + caller.name === 'WP_BUILD_MAIN' || + caller.name === 'WP_BUILD_MODULE' + ) ) { + wpBuildOpts = { ...caller }; + } + } ); + const getPresetEnv = () => { const opts = {}; @@ -13,11 +29,11 @@ module.exports = function( api ) { }; } - // console.log( 'editor build ', process.env.WP_EDITOR_BUILD ); - if ( process.env.WP_EDITOR_BUILD === 'main' ) { - opts.modules = 'commonjs'; - } else if ( process.env.WP_EDITOR_BUILD === 'module' ) { - opts.modules = false; + if ( + wpBuildOpts.name === 'WP_BUILD_MAIN' || + wpBuildOpts.name === 'WP_BUILD_MODULE' + ) { + opts.modules = wpBuildOpts.modules; } return [ require.resolve( '@babel/preset-env' ), opts ]; @@ -33,8 +49,8 @@ module.exports = function( api ) { useESModules: false, }; - if ( process.env.WP_EDITOR_BUILD === 'module' ) { - opts.useESModules = true; + if ( wpBuildOpts.name === 'WP_BUILD_MODULE' ) { + opts.useESModules = wpBuildOpts.useESModules; } return [ require.resolve( '@babel/plugin-transform-runtime' ), opts ]; From b71ed56ad04225f020bd4efc521b3c0eb5f75552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 13 Mar 2019 14:04:50 +0100 Subject: [PATCH 08/19] Refactor checks --- packages/babel-preset-default/index.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index dacdc6dfcff7ba..7dbdf5fdd43271 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -1,18 +1,18 @@ module.exports = function( api ) { let wpBuildOpts = {}; const isTestEnv = api.env() === 'test'; + const isWPBuild = ( name ) => [ 'WP_BUILD_MAIN', 'WP_BUILD_MODULE' ].some( + ( buildName ) => name === buildName + ); // Because we serve a different preset depending // on the caller options, we need to tell the cache // when it needs updating. Otherwise, it won't be // recalculated for different builds. - api.cache.using( () => wpBuildOpts.name ); + api.cache.using( () => isWPBuild( wpBuildOpts.name ) ); api.caller( ( caller ) => { - if ( caller && ( - caller.name === 'WP_BUILD_MAIN' || - caller.name === 'WP_BUILD_MODULE' - ) ) { + if ( caller && isWPBuild( caller.name ) ) { wpBuildOpts = { ...caller }; } } ); @@ -29,10 +29,7 @@ module.exports = function( api ) { }; } - if ( - wpBuildOpts.name === 'WP_BUILD_MAIN' || - wpBuildOpts.name === 'WP_BUILD_MODULE' - ) { + if ( isWPBuild( wpBuildOpts.name ) ) { opts.modules = wpBuildOpts.modules; } From 1ddea86b265da82643f14a84f10f8522b05695b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 13 Mar 2019 16:56:36 +0100 Subject: [PATCH 09/19] Changes from rebase --- bin/packages/build.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bin/packages/build.js b/bin/packages/build.js index 8a13f8f10b048d..bb6954b4102e7c 100755 --- a/bin/packages/build.js +++ b/bin/packages/build.js @@ -164,9 +164,7 @@ function buildScssFile( styleFile ) { function buildJsFileFor( file, silent, environment ) { const buildDir = BUILD_DIR[ environment ]; const destPath = getBuildPath( file, buildDir ); - const babelOptions = getBabelConfig( environment ); - babelOptions.sourceMaps = true; - babelOptions.sourceFileName = file.replace( PACKAGES_DIR, '@wordpress' ); + const babelOptions = getBabelConfig( environment, file.replace( PACKAGES_DIR, '@wordpress' ) ); mkdirp.sync( path.dirname( destPath ) ); const transformed = babel.transformFileSync( file, babelOptions ); From fe427622cbf69c14e774ad7076e76d00d0da1408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Wed, 13 Mar 2019 17:29:36 +0100 Subject: [PATCH 10/19] Update how browserslist-config package is looked up It is only used by babel-preset-default. It is looked up by require itself so we need to tell Jest not to substitute with anything. --- test/unit/jest.config.json | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 test/unit/jest.config.json diff --git a/test/unit/jest.config.json b/test/unit/jest.config.json new file mode 100644 index 00000000000000..a445494fb31ec9 --- /dev/null +++ b/test/unit/jest.config.json @@ -0,0 +1,23 @@ +{ + "rootDir": "../../", + "moduleNameMapper": { + "@wordpress\\/(browserslist-config)$": "@wordpress/$1", + "@wordpress\\/(block-serialization-spec-parser|is-shallow-equal)$": "packages/$1", + "@wordpress\\/([a-z0-9-]+)$": "packages/$1/src" + }, + "preset": "@wordpress/jest-preset-default", + "setupFiles": [ + "core-js/fn/symbol/async-iterator", + "/test/unit/config/gutenberg-phase.js" + ], + "testURL": "http://localhost", + "testPathIgnorePatterns": [ + "/node_modules/", + "/packages/e2e-tests", + "/.*/build/", + "/.*/build-module/" + ], + "transformIgnorePatterns": [ + "node_modules/(?!(simple-html-tokenizer)/)" + ] +} From b52c127a60b6a2a4f0d957b63f334bc261ee80a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 10:45:57 +0100 Subject: [PATCH 11/19] Update comment --- packages/babel-preset-default/index.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 7dbdf5fdd43271..269b43e1367041 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -5,10 +5,9 @@ module.exports = function( api ) { ( buildName ) => name === buildName ); - // Because we serve a different preset depending - // on the caller options, we need to tell the cache - // when it needs updating. Otherwise, it won't be - // recalculated for different builds. + // We serve a different preset depending on the caller options. + // We need to tell the cache that it needs updating, otherwise, + // the preset won't be recalculated for different builds. api.cache.using( () => isWPBuild( wpBuildOpts.name ) ); api.caller( ( caller ) => { From 4533479afd4223c54cb3278011b3a775698d2cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 10:49:48 +0100 Subject: [PATCH 12/19] Fix browserslist-config dep --- packages/babel-preset-default/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 269b43e1367041..3ba432b8d38ac9 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -24,7 +24,7 @@ module.exports = function( api ) { } else { opts.modules = false; opts.targets = { - browsers: require( 'extends @wordpress/browserslist-config' ), + browsers: require( '@wordpress/browserslist-config' ), }; } From f137cfa95c2a182015595bfdc9b0502396a4a6f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 12:25:40 +0100 Subject: [PATCH 13/19] Simplify which code changes --- packages/scripts/config/webpack.config.js | 24 +++++++++-------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/scripts/config/webpack.config.js b/packages/scripts/config/webpack.config.js index 6d5dfd6ed98041..39894bbd360af0 100644 --- a/packages/scripts/config/webpack.config.js +++ b/packages/scripts/config/webpack.config.js @@ -66,20 +66,7 @@ const externals = [ const isProduction = process.env.NODE_ENV === 'production'; const mode = isProduction ? 'production' : 'development'; -const babelLoader = hasBabelConfig() ? { - test: /\.js$/, - exclude: /node_modules/, - use: require.resolve( 'babel-loader' ), -} : { - test: /\.js$/, - exclude: /node_modules/, - use: { - loader: require.resolve( 'babel-loader' ), - options: { - presets: [ require.resolve( '@wordpress/babel-preset-default' ) ], - }, - }, -}; +const getBabelLoaderOptions = () => hasBabelConfig() ? {} : { presets: [ require.resolve( '@wordpress/babel-preset-default' ) ] }; const config = { mode, @@ -103,7 +90,14 @@ const config = { use: require.resolve( 'source-map-loader' ), enforce: 'pre', }, - babelLoader, + { + test: /\.js$/, + exclude: /node_modules/, + use: { + loader: require.resolve( 'babel-loader' ), + options: getBabelLoaderOptions(), + }, + }, ], }, plugins: [ From 704f61f24acf6a4463a2fb3d2b167c43b178a4c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 13:15:54 +0100 Subject: [PATCH 14/19] The babel cache uses the api.caller So we don't need to update it manually. --- packages/babel-preset-default/index.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index 3ba432b8d38ac9..c69d2a74ac6301 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -1,19 +1,19 @@ module.exports = function( api ) { let wpBuildOpts = {}; - const isTestEnv = api.env() === 'test'; - const isWPBuild = ( name ) => [ 'WP_BUILD_MAIN', 'WP_BUILD_MODULE' ].some( - ( buildName ) => name === buildName - ); + const isWPBuild = ( name ) => { + const result = [ 'WP_BUILD_MAIN', 'WP_BUILD_MODULE' ].some( + ( buildName ) => name === buildName + ); + return result; + }; - // We serve a different preset depending on the caller options. - // We need to tell the cache that it needs updating, otherwise, - // the preset won't be recalculated for different builds. - api.cache.using( () => isWPBuild( wpBuildOpts.name ) ); + const isTestEnv = api.env() === 'test'; api.caller( ( caller ) => { if ( caller && isWPBuild( caller.name ) ) { wpBuildOpts = { ...caller }; } + return caller.name; } ); const getPresetEnv = () => { From 2c86a81c25d8b617370ac327c3bb1ced5facbae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 13:32:17 +0100 Subject: [PATCH 15/19] Be explicit about cache keys --- packages/babel-preset-default/index.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/babel-preset-default/index.js b/packages/babel-preset-default/index.js index c69d2a74ac6301..5c7f22d98439a8 100644 --- a/packages/babel-preset-default/index.js +++ b/packages/babel-preset-default/index.js @@ -1,19 +1,17 @@ module.exports = function( api ) { let wpBuildOpts = {}; - const isWPBuild = ( name ) => { - const result = [ 'WP_BUILD_MAIN', 'WP_BUILD_MODULE' ].some( - ( buildName ) => name === buildName - ); - return result; - }; + const isWPBuild = ( name ) => [ 'WP_BUILD_MAIN', 'WP_BUILD_MODULE' ].some( + ( buildName ) => name === buildName + ); const isTestEnv = api.env() === 'test'; api.caller( ( caller ) => { if ( caller && isWPBuild( caller.name ) ) { wpBuildOpts = { ...caller }; + return caller.name; } - return caller.name; + return undefined; } ); const getPresetEnv = () => { From 7dc278556e07492b8b64393bbd5d60587722fd32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 16:03:02 +0100 Subject: [PATCH 16/19] Do not use any config file if we provide the config --- packages/scripts/config/webpack.config.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/scripts/config/webpack.config.js b/packages/scripts/config/webpack.config.js index 39894bbd360af0..9a1daabf5d752e 100644 --- a/packages/scripts/config/webpack.config.js +++ b/packages/scripts/config/webpack.config.js @@ -66,7 +66,11 @@ const externals = [ const isProduction = process.env.NODE_ENV === 'production'; const mode = isProduction ? 'production' : 'development'; -const getBabelLoaderOptions = () => hasBabelConfig() ? {} : { presets: [ require.resolve( '@wordpress/babel-preset-default' ) ] }; +const getBabelLoaderOptions = () => hasBabelConfig() ? {} : { + babelrc: false, + configFile: false, + presets: [ require.resolve( '@wordpress/babel-preset-default' ) ], +}; const config = { mode, From a9ab1f4a2c9f45d35a94279f2be73b783deb9a15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 16:09:49 +0100 Subject: [PATCH 17/19] Add .babelrc.js file to the list of valid babel configs See https://babeljs.io/docs/en/config-files#file-relative-configuration --- packages/scripts/utils/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/scripts/utils/config.js b/packages/scripts/utils/config.js index 0c5ed70c293ce2..3ae98725e5fbc7 100644 --- a/packages/scripts/utils/config.js +++ b/packages/scripts/utils/config.js @@ -7,6 +7,7 @@ const { hasPackageProp } = require( './package' ); const hasBabelConfig = () => hasProjectFile( '.babelrc' ) || + hasProjectFile( '.babelrc.js' ) || hasProjectFile( 'babel.config.js' ) || hasPackageProp( 'babel' ); From 72b4f7d7066e5f316e1943163b3884f47c353ac5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 17:42:07 +0100 Subject: [PATCH 18/19] Delete filed added in rebase --- test/unit/jest.config.json | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 test/unit/jest.config.json diff --git a/test/unit/jest.config.json b/test/unit/jest.config.json deleted file mode 100644 index a445494fb31ec9..00000000000000 --- a/test/unit/jest.config.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "rootDir": "../../", - "moduleNameMapper": { - "@wordpress\\/(browserslist-config)$": "@wordpress/$1", - "@wordpress\\/(block-serialization-spec-parser|is-shallow-equal)$": "packages/$1", - "@wordpress\\/([a-z0-9-]+)$": "packages/$1/src" - }, - "preset": "@wordpress/jest-preset-default", - "setupFiles": [ - "core-js/fn/symbol/async-iterator", - "/test/unit/config/gutenberg-phase.js" - ], - "testURL": "http://localhost", - "testPathIgnorePatterns": [ - "/node_modules/", - "/packages/e2e-tests", - "/.*/build/", - "/.*/build-module/" - ], - "transformIgnorePatterns": [ - "node_modules/(?!(simple-html-tokenizer)/)" - ] -} From a60bc06f8d9fe220295c873409a8cd945865f8e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= Date: Thu, 14 Mar 2019 18:21:31 +0100 Subject: [PATCH 19/19] Remove node_modules from packages. Individual packages shouldn't have node_modules installed in their local paths in a normal Gutenberg operation. Yet, if you `cd packages/ && npm install` things start going south - like tests not passing. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f9ada126e5e1be..71bf946b7694ee 100644 --- a/package.json +++ b/package.json @@ -152,7 +152,7 @@ }, "scripts": { "prebuild": "npm run check-engines", - "clean:packages": "rimraf ./packages/*/build ./packages/*/build-module ./packages/*/build-style", + "clean:packages": "rimraf ./packages/*/build ./packages/*/build-module ./packages/*/build-style ./packages/*/node_modules", "prebuild:packages": "npm run clean:packages && lerna run build", "build:packages": "node ./bin/packages/build.js", "build": "npm run build:packages && wp-scripts build",