Merge pull request #4155 from storybooks/presets/extend-babel-default

Presets - add babelDefault extension
This commit is contained in:
Filipp Riabchun 2018-09-11 03:11:53 +02:00 committed by GitHub
commit ad9e74fca9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 28 additions and 126 deletions

View File

@ -1,9 +1,6 @@
import { mergeBabel } from '@storybook/core/server';
export function babel(config) {
const patch = {
plugins: [require.resolve('@babel/plugin-transform-react-jsx')],
export function babelDefault(config) {
return {
...config,
plugins: [...config.plugins, require.resolve('@babel/plugin-transform-react-jsx')],
};
return mergeBabel(patch, config);
}

View File

@ -1,9 +1,10 @@
import { mergeBabel } from '@storybook/core/server';
export function babel(config) {
const patch = {
presets: [require.resolve('@babel/preset-react'), require.resolve('@babel/preset-flow')],
export function babelDefault(config) {
return {
...config,
presets: [
...config.presets,
require.resolve('@babel/preset-react'),
require.resolve('@babel/preset-flow'),
],
};
return mergeBabel(patch, config);
}

View File

@ -1,5 +1,4 @@
import VueLoaderPlugin from 'vue-loader/lib/plugin';
import { mergeBabel } from '@storybook/core/server';
export function webpack(config) {
return {
@ -27,10 +26,9 @@ export function webpack(config) {
};
}
export function babel(config) {
const patch = {
presets: [require.resolve('babel-preset-vue')],
export function babelDefault(config) {
return {
...config,
presets: [...config.presets, require.resolve('babel-preset-vue')],
};
return mergeBabel(patch, config);
}

View File

@ -39,7 +39,6 @@
"commander": "^2.17.0",
"core-js": "^2.5.7",
"css-loader": "^1.0.0",
"deepmerge": "^2.1.1",
"detect-port": "^1.2.3",
"dotenv-webpack": "^1.5.7",
"ejs": "^2.6.1",
@ -51,7 +50,6 @@
"inquirer": "^6.2.0",
"interpret": "^1.1.0",
"json5": "^2.0.1",
"object.omit": "^3.0.0",
"opn": "^5.3.0",
"postcss-flexbugs-fixes": "^4.1.0",
"postcss-loader": "^3.0.0",

View File

@ -2,8 +2,5 @@ const defaultWebpackConfig = require('./dist/server/config/webpack.config.defaul
const serverUtils = require('./dist/server/utils');
const buildStatic = require('./dist/server/build-static');
const buildDev = require('./dist/server/build-dev');
const mergeBabel = require('./dist/server/mergeBabel');
module.exports = Object.assign({}, defaultWebpackConfig, buildStatic, buildDev, serverUtils, {
mergeBabel,
});
module.exports = Object.assign({}, defaultWebpackConfig, buildStatic, buildDev, serverUtils);

View File

@ -1,10 +0,0 @@
/* eslint-disable import/no-extraneous-dependencies,global-require */
let babelCore = null;
try {
babelCore = require('@babel/core');
} catch (e) {
babelCore = require('babel-core');
}
module.exports = babelCore;

View File

@ -41,5 +41,5 @@ export default options => {
const presets = loadPresets(presetsConfig);
return getWebpackConfig(restOptions, presets);
return getWebpackConfig({ ...restOptions, presets }, presets);
};

View File

@ -7,8 +7,9 @@ export function webpack(_, options) {
return createDevConfig(options);
}
export function babel(_, { configDir }) {
return loadCustomBabelConfig(configDir, defaultBabelConfig);
export function babel(_, options) {
const { configDir, presets } = options;
return loadCustomBabelConfig(configDir, () => presets.babelDefault(defaultBabelConfig, options));
}
export function manager(_, options) {

View File

@ -7,8 +7,9 @@ export function webpack(_, options) {
return createProdConfig(options);
}
export function babel(_, { configDir }) {
return loadCustomBabelConfig(configDir, defaultBabelConfig);
export function babel(_, options) {
const { configDir, presets } = options;
return loadCustomBabelConfig(configDir, () => presets.babelDefault(defaultBabelConfig, options));
}
export function manager(_, options) {

View File

@ -53,7 +53,7 @@ function isBabelLoader8() {
return satisfies(babelLoaderPkg.version, '>=8.0.0-0');
}
export default function(configDir, defaultConfig) {
export default function(configDir, getDefaultConfig) {
const babelConfig = loadFromPath(path.resolve(configDir, '.babelrc'));
if (babelConfig) {
@ -65,5 +65,5 @@ export default function(configDir, defaultConfig) {
return babelConfig;
}
return isBabelLoader8() ? defaultConfig : {};
return isBabelLoader8() ? getDefaultConfig() : {};
}

View File

@ -1,72 +0,0 @@
/* eslint-disable no-param-reassign,no-shadow */
// https://github.com/neutrinojs/babel-merge
// we can't use this package because we need to have babel/core as a peer
import omit from 'object.omit';
import merge from 'deepmerge';
import { resolvePlugin, resolvePreset } from './babel-core-proxy';
function arrayMerge(source = [], overrides = []) {
return [...new Set([...source, ...overrides])];
}
function mergeArray(source = [], overrides = [], resolve, deepmergeOpts) {
return [...source, ...overrides].reduce((reduction, override) => {
const overrideName = resolve(Array.isArray(override) ? override[0] : override);
const overrideOptions = Array.isArray(override) ? override[1] || {} : {};
const base = reduction.find(base => {
const baseName = resolve(Array.isArray(base) ? base[0] : base);
return baseName === overrideName || baseName.includes(overrideName);
});
const index = reduction.includes(base) ? reduction.indexOf(base) : reduction.length;
const baseName = base ? resolve(Array.isArray(base) ? base[0] : base) : overrideName;
const baseOptions = Array.isArray(base) ? base[1] : {};
const options = merge(baseOptions, overrideOptions, {
arrayMerge,
isMergeableObject: value => Array.isArray(value),
...deepmergeOpts,
});
reduction[index] = Object.keys(options).length ? [baseName, options] : baseName;
return reduction;
}, []);
}
function babelMerge(source = {}, overrides = {}, deepmergeOpts) {
const plugins = mergeArray(source.plugins, overrides.plugins, resolvePlugin, deepmergeOpts);
const presets = mergeArray(source.presets, overrides.presets, resolvePreset, deepmergeOpts);
const sourceEnv = source.env || {};
const overridesEnv = overrides.env || {};
return Object.assign(
presets.length ? { presets } : {},
plugins.length ? { plugins } : {},
merge.all(
[
omit(source, ['plugins', 'presets', 'env']),
omit(overrides, ['plugins', 'presets', 'env']),
...[...new Set([...Object.keys(sourceEnv), ...Object.keys(overridesEnv)])].map(name => ({
env: {
[name]: babelMerge(sourceEnv[name], overridesEnv[name], deepmergeOpts),
},
})),
],
{ arrayMerge, ...deepmergeOpts }
)
);
}
Object.defineProperty(babelMerge, 'all', {
value: (values = [], deepmergeOpts) =>
values.reduce((acc, value) => {
if (value) {
Object.assign(acc, babelMerge(acc, value, deepmergeOpts));
}
return acc;
}, {}),
});
module.exports = babelMerge;

View File

@ -67,6 +67,7 @@ function getPresets(presets) {
return {
babel: (config, args) => applyPresets(loadedPresets, config, args, 'babel'),
babelDefault: (config, args) => applyPresets(loadedPresets, config, args, 'babelDefault'),
webpack: (config, args) => applyPresets(loadedPresets, config, args, 'webpack'),
preview: (config, args) => applyPresets(loadedPresets, config, args, 'preview'),
manager: (config, args) => applyPresets(loadedPresets, config, args, 'manager'),

View File

@ -6237,10 +6237,6 @@ deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
deepmerge@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.1.1.tgz#e862b4e45ea0555072bf51e7fd0d9845170ae768"
default-gateway@^2.6.0:
version "2.7.2"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f"
@ -9603,7 +9599,7 @@ is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
is-extendable@^1.0.0, is-extendable@^1.0.1:
is-extendable@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
dependencies:
@ -13233,12 +13229,6 @@ object.omit@^2.0.0:
for-own "^0.1.4"
is-extendable "^0.1.1"
object.omit@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-3.0.0.tgz#0e3edc2fce2ba54df5577ff529f6d97bd8a522af"
dependencies:
is-extendable "^1.0.0"
object.pick@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"