diff --git a/@xen-orchestra/babel-config/index.js b/@xen-orchestra/babel-config/index.js new file mode 100644 index 000000000..f3aa4c680 --- /dev/null +++ b/@xen-orchestra/babel-config/index.js @@ -0,0 +1,47 @@ +'use strict' + +const PLUGINS_RE = /^(?:@babel\/plugin-.+|babel-plugin-lodash)$/ +const PRESETS_RE = /^@babel\/preset-.+$/ + +const NODE_ENV = process.env.NODE_ENV || 'development' +const __PROD__ = NODE_ENV === 'production' +const __TEST__ = NODE_ENV === 'test' + +module.exports = function (pkg, plugins, presets) { + plugins === undefined && (plugins = {}) + + presets === undefined && (presets = {}) + presets['@babel/preset-env'] = { + debug: !__TEST__, + loose: true, + shippedProposals: true, + targets: __PROD__ + ? (() => { + let node = (pkg.engines || {}).node + if (node !== undefined) { + const trimChars = '^=>~' + while (trimChars.includes(node[0])) { + node = node.slice(1) + } + return { node: node } + } + })() + : { browsers: '', node: 'current' }, + useBuiltIns: '@babel/polyfill' in (pkg.dependencies || {}) && 'usage', + } + + Object.keys(pkg.devDependencies || {}).forEach(name => { + if (!(name in presets) && PLUGINS_RE.test(name)) { + plugins[name] = {} + } else if (!(name in presets) && PRESETS_RE.test(name)) { + presets[name] = {} + } + }) + + return { + comments: !__PROD__, + ignore: __TEST__ ? undefined : [/\.spec\.js$/], + plugins: Object.keys(plugins).map(plugin => [plugin, plugins[plugin]]), + presets: Object.keys(presets).map(preset => [preset, presets[preset]]), + } +} diff --git a/@xen-orchestra/babel-config/package.json b/@xen-orchestra/babel-config/package.json new file mode 100644 index 000000000..bdc80cbaa --- /dev/null +++ b/@xen-orchestra/babel-config/package.json @@ -0,0 +1,11 @@ +{ + "private": true, + "name": "@xen-orchestra/babel-config", + "version": "0.0.0", + "homepage": "https://github.com/vatesfr/xen-orchestra/tree/master/packages/@xen-orchestra/babel-config", + "bugs": "https://github.com/vatesfr/xen-orchestra/issues", + "repository": { + "type": "git", + "url": "https://github.com/vatesfr/xen-orchestra.git" + } +} diff --git a/@xen-orchestra/cron/.babelrc.js b/@xen-orchestra/cron/.babelrc.js index 062a2dd9c..4e27ec135 100644 --- a/@xen-orchestra/cron/.babelrc.js +++ b/@xen-orchestra/cron/.babelrc.js @@ -1,47 +1,3 @@ -'use strict' - -const NODE_ENV = process.env.NODE_ENV || 'development' -const __PROD__ = NODE_ENV === 'production' -const __TEST__ = NODE_ENV === 'test' - -const pkg = require('./package') - -const plugins = { - lodash: {}, -} - -const presets = { - '@babel/preset-env': { - debug: !__TEST__, - loose: true, - shippedProposals: true, - targets: __PROD__ - ? (() => { - let node = (pkg.engines || {}).node - if (node !== undefined) { - const trimChars = '^=>~' - while (trimChars.includes(node[0])) { - node = node.slice(1) - } - return { node: node } - } - })() - : { browsers: '', node: 'current' }, - useBuiltIns: '@babel/polyfill' in (pkg.dependencies || {}) && 'usage', - }, -} - -Object.keys(pkg.devDependencies || {}).forEach(name => { - if (!(name in presets) && /@babel\/plugin-.+/.test(name)) { - plugins[name] = {} - } else if (!(name in presets) && /@babel\/preset-.+/.test(name)) { - presets[name] = {} - } -}) - -module.exports = { - comments: !__PROD__, - ignore: __TEST__ ? undefined : [/\.spec\.js$/], - plugins: Object.keys(plugins).map(plugin => [plugin, plugins[plugin]]), - presets: Object.keys(presets).map(preset => [preset, presets[preset]]), -} +module.exports = require('../../@xen-orchestra/babel-config')( + require('./package.json') +) diff --git a/packages/complex-matcher/.babelrc.js b/packages/complex-matcher/.babelrc.js index 062a2dd9c..4e27ec135 100644 --- a/packages/complex-matcher/.babelrc.js +++ b/packages/complex-matcher/.babelrc.js @@ -1,47 +1,3 @@ -'use strict' - -const NODE_ENV = process.env.NODE_ENV || 'development' -const __PROD__ = NODE_ENV === 'production' -const __TEST__ = NODE_ENV === 'test' - -const pkg = require('./package') - -const plugins = { - lodash: {}, -} - -const presets = { - '@babel/preset-env': { - debug: !__TEST__, - loose: true, - shippedProposals: true, - targets: __PROD__ - ? (() => { - let node = (pkg.engines || {}).node - if (node !== undefined) { - const trimChars = '^=>~' - while (trimChars.includes(node[0])) { - node = node.slice(1) - } - return { node: node } - } - })() - : { browsers: '', node: 'current' }, - useBuiltIns: '@babel/polyfill' in (pkg.dependencies || {}) && 'usage', - }, -} - -Object.keys(pkg.devDependencies || {}).forEach(name => { - if (!(name in presets) && /@babel\/plugin-.+/.test(name)) { - plugins[name] = {} - } else if (!(name in presets) && /@babel\/preset-.+/.test(name)) { - presets[name] = {} - } -}) - -module.exports = { - comments: !__PROD__, - ignore: __TEST__ ? undefined : [/\.spec\.js$/], - plugins: Object.keys(plugins).map(plugin => [plugin, plugins[plugin]]), - presets: Object.keys(presets).map(preset => [preset, presets[preset]]), -} +module.exports = require('../../@xen-orchestra/babel-config')( + require('./package.json') +) diff --git a/packages/value-matcher/.babelrc.js b/packages/value-matcher/.babelrc.js index 062a2dd9c..4e27ec135 100644 --- a/packages/value-matcher/.babelrc.js +++ b/packages/value-matcher/.babelrc.js @@ -1,47 +1,3 @@ -'use strict' - -const NODE_ENV = process.env.NODE_ENV || 'development' -const __PROD__ = NODE_ENV === 'production' -const __TEST__ = NODE_ENV === 'test' - -const pkg = require('./package') - -const plugins = { - lodash: {}, -} - -const presets = { - '@babel/preset-env': { - debug: !__TEST__, - loose: true, - shippedProposals: true, - targets: __PROD__ - ? (() => { - let node = (pkg.engines || {}).node - if (node !== undefined) { - const trimChars = '^=>~' - while (trimChars.includes(node[0])) { - node = node.slice(1) - } - return { node: node } - } - })() - : { browsers: '', node: 'current' }, - useBuiltIns: '@babel/polyfill' in (pkg.dependencies || {}) && 'usage', - }, -} - -Object.keys(pkg.devDependencies || {}).forEach(name => { - if (!(name in presets) && /@babel\/plugin-.+/.test(name)) { - plugins[name] = {} - } else if (!(name in presets) && /@babel\/preset-.+/.test(name)) { - presets[name] = {} - } -}) - -module.exports = { - comments: !__PROD__, - ignore: __TEST__ ? undefined : [/\.spec\.js$/], - plugins: Object.keys(plugins).map(plugin => [plugin, plugins[plugin]]), - presets: Object.keys(presets).map(preset => [preset, presets[preset]]), -} +module.exports = require('../../@xen-orchestra/babel-config')( + require('./package.json') +) diff --git a/packages/xo-cli/.babelrc.js b/packages/xo-cli/.babelrc.js index 062a2dd9c..4e27ec135 100644 --- a/packages/xo-cli/.babelrc.js +++ b/packages/xo-cli/.babelrc.js @@ -1,47 +1,3 @@ -'use strict' - -const NODE_ENV = process.env.NODE_ENV || 'development' -const __PROD__ = NODE_ENV === 'production' -const __TEST__ = NODE_ENV === 'test' - -const pkg = require('./package') - -const plugins = { - lodash: {}, -} - -const presets = { - '@babel/preset-env': { - debug: !__TEST__, - loose: true, - shippedProposals: true, - targets: __PROD__ - ? (() => { - let node = (pkg.engines || {}).node - if (node !== undefined) { - const trimChars = '^=>~' - while (trimChars.includes(node[0])) { - node = node.slice(1) - } - return { node: node } - } - })() - : { browsers: '', node: 'current' }, - useBuiltIns: '@babel/polyfill' in (pkg.dependencies || {}) && 'usage', - }, -} - -Object.keys(pkg.devDependencies || {}).forEach(name => { - if (!(name in presets) && /@babel\/plugin-.+/.test(name)) { - plugins[name] = {} - } else if (!(name in presets) && /@babel\/preset-.+/.test(name)) { - presets[name] = {} - } -}) - -module.exports = { - comments: !__PROD__, - ignore: __TEST__ ? undefined : [/\.spec\.js$/], - plugins: Object.keys(plugins).map(plugin => [plugin, plugins[plugin]]), - presets: Object.keys(presets).map(preset => [preset, presets[preset]]), -} +module.exports = require('../../@xen-orchestra/babel-config')( + require('./package.json') +) diff --git a/packages/xo-server-perf-alert/.babelrc.js b/packages/xo-server-perf-alert/.babelrc.js index 062a2dd9c..4e27ec135 100644 --- a/packages/xo-server-perf-alert/.babelrc.js +++ b/packages/xo-server-perf-alert/.babelrc.js @@ -1,47 +1,3 @@ -'use strict' - -const NODE_ENV = process.env.NODE_ENV || 'development' -const __PROD__ = NODE_ENV === 'production' -const __TEST__ = NODE_ENV === 'test' - -const pkg = require('./package') - -const plugins = { - lodash: {}, -} - -const presets = { - '@babel/preset-env': { - debug: !__TEST__, - loose: true, - shippedProposals: true, - targets: __PROD__ - ? (() => { - let node = (pkg.engines || {}).node - if (node !== undefined) { - const trimChars = '^=>~' - while (trimChars.includes(node[0])) { - node = node.slice(1) - } - return { node: node } - } - })() - : { browsers: '', node: 'current' }, - useBuiltIns: '@babel/polyfill' in (pkg.dependencies || {}) && 'usage', - }, -} - -Object.keys(pkg.devDependencies || {}).forEach(name => { - if (!(name in presets) && /@babel\/plugin-.+/.test(name)) { - plugins[name] = {} - } else if (!(name in presets) && /@babel\/preset-.+/.test(name)) { - presets[name] = {} - } -}) - -module.exports = { - comments: !__PROD__, - ignore: __TEST__ ? undefined : [/\.spec\.js$/], - plugins: Object.keys(plugins).map(plugin => [plugin, plugins[plugin]]), - presets: Object.keys(presets).map(preset => [preset, presets[preset]]), -} +module.exports = require('../../@xen-orchestra/babel-config')( + require('./package.json') +)