diff --git a/docs/api-react/schematics/application.md b/docs/api-react/schematics/application.md
index 6afa5d74cf..85d4b27846 100644
--- a/docs/api-react/schematics/application.md
+++ b/docs/api-react/schematics/application.md
@@ -11,6 +11,14 @@ ng generate application ...
## Options
+### babel
+
+Default: `false`
+
+Type: `boolean`
+
+Use Babel and TypeScript preset instead of ts-loader (Useful if you need Babel plugins)
+
### classComponent
Default: `false`
@@ -53,7 +61,7 @@ Default: `false`
Type: `boolean`
-Use pascal case component file name (e.g. App.tsx)®
+Use pascal case component file name (e.g. App.tsx)
### routing
diff --git a/e2e/react.test.ts b/e2e/react.test.ts
index 159f1b8805..1adf54cf60 100644
--- a/e2e/react.test.ts
+++ b/e2e/react.test.ts
@@ -21,7 +21,7 @@ forEachCli(() => {
const appName = uniq('app');
const libName = uniq('lib');
- runCLI(`generate @nrwl/react:app ${appName} --no-interactive`);
+ runCLI(`generate @nrwl/react:app ${appName} --no-interactive --babel`);
runCLI(`generate @nrwl/react:lib ${libName} --no-interactive`);
const mainPath = `apps/${appName}/src/main.tsx`;
@@ -30,16 +30,18 @@ forEachCli(() => {
const libTestResults = await runCLIAsync(`test ${libName}`);
expect(libTestResults.stderr).toContain('Test Suites: 1 passed, 1 total');
- await testGeneratedApp(appName);
+ await testGeneratedApp(appName, { checkStyles: true });
}, 120000);
it('should generate app with routing', async () => {
ensureProject();
const appName = uniq('app');
- runCLI(`generate @nrwl/react:app ${appName} --routing --no-interactive`);
+ runCLI(
+ `generate @nrwl/react:app ${appName} --routing --no-interactive --babel`
+ );
- await testGeneratedApp(appName);
+ await testGeneratedApp(appName, { checkStyles: true });
}, 120000);
it('should generate app with styled-components', async () => {
@@ -47,10 +49,10 @@ forEachCli(() => {
const appName = uniq('app');
runCLI(
- `generate @nrwl/react:app ${appName} --style styled-components --no-interactive`
+ `generate @nrwl/react:app ${appName} --style styled-components --no-interactive --babel`
);
- await testGeneratedApp(appName, false);
+ await testGeneratedApp(appName, { checkStyles: false });
}, 120000);
it('should be able to use JSX', async () => {
@@ -58,7 +60,7 @@ forEachCli(() => {
const appName = uniq('app');
const libName = uniq('lib');
- runCLI(`generate @nrwl/react:app ${appName} --no-interactive`);
+ runCLI(`generate @nrwl/react:app ${appName} --no-interactive --babel`);
runCLI(`generate @nrwl/react:lib ${libName} --no-interactive`);
renameFile(
@@ -90,49 +92,36 @@ forEachCli(() => {
const mainPath = `apps/${appName}/src/main.jsx`;
updateFile(mainPath, `import '@proj/${libName}';\n` + readFile(mainPath));
- await testGeneratedApp(appName);
+ await testGeneratedApp(appName, { checkStyles: true });
}, 30000);
- async function testGeneratedApp(appName, styles = true) {
+ async function testGeneratedApp(appName, opts: { checkStyles: boolean }) {
const lintResults = runCLI(`lint ${appName}`);
expect(lintResults).toContain('All files pass linting.');
runCLI(`build ${appName}`);
let filesToCheck = [
`dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/vendor-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/vendor-es5.js`,
- `dist/apps/${appName}/main-es5.js`
+ `dist/apps/${appName}/polyfills.js`,
+ `dist/apps/${appName}/runtime.js`,
+ `dist/apps/${appName}/vendor.js`,
+ `dist/apps/${appName}/main.js`
];
- if (styles) {
- filesToCheck.push(
- `dist/apps/${appName}/styles-es2015.js`,
- `dist/apps/${appName}/styles-es5.js`
- );
+ if (opts.checkStyles) {
+ filesToCheck.push(`dist/apps/${appName}/styles.js`);
}
checkFilesExist(...filesToCheck);
- expect(readFile(`dist/apps/${appName}/main-es5.js`)).toContain(
- 'var App = function () {'
- );
- expect(readFile(`dist/apps/${appName}/main-es2015.js`)).toContain(
- 'const App = () => {'
+ expect(readFile(`dist/apps/${appName}/main.js`)).toContain(
+ 'var App = function App() {'
);
runCLI(`build ${appName} --prod --output-hashing none`);
filesToCheck = [
`dist/apps/${appName}/index.html`,
- `dist/apps/${appName}/polyfills-es2015.js`,
- `dist/apps/${appName}/runtime-es2015.js`,
- `dist/apps/${appName}/main-es2015.js`,
- `dist/apps/${appName}/polyfills-es5.js`,
- `dist/apps/${appName}/runtime-es5.js`,
- `dist/apps/${appName}/main-es5.js`
+ `dist/apps/${appName}/polyfills.js`,
+ `dist/apps/${appName}/runtime.js`,
+ `dist/apps/${appName}/main.js`
];
- if (styles) {
+ if (opts.checkStyles) {
filesToCheck.push(`dist/apps/${appName}/styles.css`);
}
checkFilesExist(...filesToCheck);
diff --git a/e2e/utils.ts b/e2e/utils.ts
index b21b1e339d..5b782e0345 100644
--- a/e2e/utils.ts
+++ b/e2e/utils.ts
@@ -182,6 +182,15 @@ export function copyMissingPackages(): void {
'@types/react-dom',
'@testing-library',
+ // For testing webpack config with babel-loader
+ '@babel/core',
+ '@babel/preset-env',
+ '@babel/preset-react',
+ '@babel/preset-typescript',
+ '@babel/plugin-proposal-decorators',
+ 'babel-loader',
+ 'babel-plugin-macros',
+
'document-register-element'
];
modulesToCopy.forEach(m => copyNodeModule(m));
diff --git a/package.json b/package.json
index d9aaaa50df..9f2ce6e048 100644
--- a/package.json
+++ b/package.json
@@ -37,6 +37,11 @@
"@angular/platform-browser-dynamic": "^8.0.0",
"@angular/router": "^8.0.0",
"@angular/upgrade": "^8.0.0",
+ "@babel/core": "7.5.5",
+ "@babel/plugin-proposal-decorators": "7.4.4",
+ "@babel/preset-env": "7.5.5",
+ "@babel/preset-react": "7.0.0",
+ "@babel/preset-typescript": "7.3.3",
"@cypress/webpack-preprocessor": "^4.1.0",
"@nestjs/common": "^6.2.4",
"@nestjs/core": "^6.2.4",
@@ -63,6 +68,8 @@
"@types/yargs": "^11.0.0",
"angular": "1.6.6",
"app-root-path": "^2.0.1",
+ "babel-loader": "8.0.6",
+ "babel-plugin-macros": "2.6.1",
"circular-dependency-plugin": "^5.0.2",
"codelyzer": "~5.0.1",
"commitizen": "^2.10.1",
diff --git a/packages/react/plugins/babel.ts b/packages/react/plugins/babel.ts
new file mode 100644
index 0000000000..dce1c29a1a
--- /dev/null
+++ b/packages/react/plugins/babel.ts
@@ -0,0 +1 @@
+module.exports = require('../src/plugins/babel').getBabelWebpackConfig;
diff --git a/packages/react/src/migrations/update-8-3-0/update-8-3-0.spec.ts b/packages/react/src/migrations/update-8-3-0/update-8-3-0.spec.ts
index 7b60b9f694..997abba403 100644
--- a/packages/react/src/migrations/update-8-3-0/update-8-3-0.spec.ts
+++ b/packages/react/src/migrations/update-8-3-0/update-8-3-0.spec.ts
@@ -90,7 +90,7 @@ describe('Update 8-0-0', () => {
devDependencies: {
'@testing-library/react': '8.0.5',
'@types/react': '16.8.23',
- '@types/react-dom': '16.8.23',
+ '@types/react-dom': '16.8.5',
'@types/styled-components': '4.1.18'
}
})
diff --git a/packages/react/src/migrations/update-8-3-0/update-8-3-0.ts b/packages/react/src/migrations/update-8-3-0/update-8-3-0.ts
index a58b4c3863..4c53e9de18 100644
--- a/packages/react/src/migrations/update-8-3-0/update-8-3-0.ts
+++ b/packages/react/src/migrations/update-8-3-0/update-8-3-0.ts
@@ -64,7 +64,7 @@ function updateDependencies(tree: Tree) {
'react-dom': '16.8.6',
'react-router-dom': '5.0.1',
'@types/react': '16.8.23',
- '@types/react-dom': '16.8.23',
+ '@types/react-dom': '16.8.5',
'styled-components': '4.3.2',
'@types/styled-components': '4.1.18',
'@emotion/styled': '10.0.14'
diff --git a/packages/react/src/plugins/babel.ts b/packages/react/src/plugins/babel.ts
new file mode 100644
index 0000000000..58e2c78685
--- /dev/null
+++ b/packages/react/src/plugins/babel.ts
@@ -0,0 +1,38 @@
+import { Configuration } from 'webpack';
+
+export function getBabelWebpackConfig(config: Configuration) {
+ const idx = config.module.rules.findIndex(r => r.loader === 'ts-loader');
+
+ config.module.rules.splice(idx, 1, {
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: [
+ [
+ require('@babel/preset-env').default,
+ {
+ modules: false,
+ // Exclude transforms that make all code slower
+ exclude: ['transform-typeof-symbol']
+ }
+ ],
+ [
+ require('@babel/preset-react').default,
+ {
+ useBuiltIns: true
+ }
+ ],
+ [require('@babel/preset-typescript').default]
+ ],
+ plugins: [
+ require('babel-plugin-macros'),
+ [require('@babel/plugin-proposal-decorators').default, false]
+ ]
+ }
+ },
+ test: /\.tsx?|jsx?$/,
+ exclude: /node_modules/
+ });
+
+ return config;
+}
diff --git a/packages/react/src/schematics/application/application.spec.ts b/packages/react/src/schematics/application/application.spec.ts
index 1606ff6b1c..c9cbb750a9 100644
--- a/packages/react/src/schematics/application/application.spec.ts
+++ b/packages/react/src/schematics/application/application.spec.ts
@@ -229,6 +229,7 @@ describe('app', () => {
const architectConfig = workspaceJson.projects['my-app'].architect;
expect(architectConfig.build.builder).toEqual('@nrwl/web:build');
expect(architectConfig.build.options).toEqual({
+ differentialLoading: true,
assets: ['apps/my-app/src/favicon.ico', 'apps/my-app/src/assets'],
index: 'apps/my-app/src/index.html',
main: 'apps/my-app/src/main.tsx',
@@ -466,4 +467,20 @@ describe('app', () => {
expect(componentSource).toMatch(/ {
+ it('should adds custom webpack config', async () => {
+ const tree = await runSchematic(
+ 'app',
+ { name: 'myApp', babel: true },
+ appTree
+ );
+
+ const workspaceJson = readJsonInTree(tree, '/workspace.json');
+
+ expect(
+ workspaceJson.projects['my-app'].architect.build.options.webpackConfig
+ ).toEqual('@nrwl/react/plugins/babel');
+ });
+ });
});
diff --git a/packages/react/src/schematics/application/application.ts b/packages/react/src/schematics/application/application.ts
index bc3c6578ce..dc8702a784 100644
--- a/packages/react/src/schematics/application/application.ts
+++ b/packages/react/src/schematics/application/application.ts
@@ -33,7 +33,16 @@ import * as ts from 'typescript';
import { Schema } from './schema';
import { CSS_IN_JS_DEPENDENCIES } from '../../utils/styled';
import { addRouter } from '../../utils/ast-utils';
-import { reactRouterVersion } from '../../utils/versions';
+import {
+ babelCoreVersion,
+ babelLoaderVersion,
+ babelPluginDecoratorsVersion,
+ babelPluginMacrosVersion,
+ babelPresetEnvVersion,
+ babelPresetReactVersion,
+ babelPresetTypeScriptVersion,
+ reactRouterVersion
+} from '../../utils/versions';
interface NormalizedSchema extends Schema {
projectName: string;
@@ -75,6 +84,7 @@ export default function(schema: Schema): Rule {
: noop(),
addStyledModuleDependencies(options),
addRouting(options),
+ addBabel(options),
formatFiles(options)
]);
};
@@ -114,6 +124,7 @@ function addProject(options: NormalizedSchema): Rule {
architect.build = {
builder: '@nrwl/web:build',
options: {
+ differentialLoading: !options.babel, // Using babel-loader will not work with differential loading for now
outputPath: join(normalize('dist'), options.appProjectRoot),
index: join(options.appProjectRoot, 'src/index.html'),
main: join(options.appProjectRoot, `src/main.tsx`),
@@ -126,7 +137,8 @@ function addProject(options: NormalizedSchema): Rule {
styles: options.styledModule
? []
: [join(options.appProjectRoot, `src/styles.${options.style}`)],
- scripts: []
+ scripts: [],
+ webpackConfig: options.babel ? '@nrwl/react/plugins/babel' : undefined
},
configurations: {
production: {
@@ -226,6 +238,23 @@ function addRouting(options: NormalizedSchema): Rule {
: noop();
}
+function addBabel(options: NormalizedSchema): Rule {
+ return options.babel
+ ? addDepsToPackageJson(
+ {},
+ {
+ '@babel/core': babelCoreVersion,
+ '@babel/preset-env': babelPresetEnvVersion,
+ '@babel/preset-react': babelPresetReactVersion,
+ '@babel/preset-typescript': babelPresetTypeScriptVersion,
+ '@babel/plugin-proposal-decorators': babelPluginDecoratorsVersion,
+ 'babel-loader': babelLoaderVersion,
+ 'babel-plugin-macros': babelPluginMacrosVersion
+ }
+ )
+ : noop();
+}
+
function normalizeOptions(host: Tree, options: Schema): NormalizedSchema {
const appDirectory = options.directory
? `${toFileName(options.directory)}/${toFileName(options.name)}`
diff --git a/packages/react/src/schematics/application/schema.d.ts b/packages/react/src/schematics/application/schema.d.ts
index 94e61b6bda..dabc4e8d64 100644
--- a/packages/react/src/schematics/application/schema.d.ts
+++ b/packages/react/src/schematics/application/schema.d.ts
@@ -10,4 +10,5 @@ export interface Schema {
pascalCaseFiles?: boolean;
classComponent?: boolean;
routing?: boolean;
+ babel?: boolean;
}
diff --git a/packages/react/src/schematics/application/schema.json b/packages/react/src/schematics/application/schema.json
index e4e0c5c074..f8e7f53f4c 100644
--- a/packages/react/src/schematics/application/schema.json
+++ b/packages/react/src/schematics/application/schema.json
@@ -84,13 +84,18 @@
},
"pascalCaseFiles": {
"type": "boolean",
- "description": "Use pascal case component file name (e.g. App.tsx)®",
+ "description": "Use pascal case component file name (e.g. App.tsx)",
"default": false
},
"classComponent": {
"type": "boolean",
"description": "Use class components instead of functional component",
"default": false
+ },
+ "babel": {
+ "type": "boolean",
+ "description": "Use Babel and TypeScript preset instead of ts-loader (Useful if you need Babel plugins)",
+ "default": false
}
},
"required": []
diff --git a/packages/react/src/schematics/ng-add/ng-add.spec.ts b/packages/react/src/schematics/ng-add/ng-add.spec.ts
index 9d83c40cd5..68e4d1c750 100644
--- a/packages/react/src/schematics/ng-add/ng-add.spec.ts
+++ b/packages/react/src/schematics/ng-add/ng-add.spec.ts
@@ -29,6 +29,9 @@ describe('ng-add', () => {
const result = await runSchematic('ng-add', {}, tree);
const workspaceJson = readJsonInTree(result, 'workspace.json');
expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/react');
+ expect(workspaceJson.schematics['@nrwl/react:application'].babel).toBe(
+ true
+ );
});
it('should be set if @nrwl/workspace was set before', async () => {
@@ -45,6 +48,9 @@ describe('ng-add', () => {
const result = await runSchematic('ng-add', {}, tree);
const workspaceJson = readJsonInTree(result, 'workspace.json');
expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/react');
+ expect(workspaceJson.schematics['@nrwl/react:application'].babel).toBe(
+ true
+ );
});
it('should not be set if something else was set before', async () => {
@@ -54,6 +60,8 @@ describe('ng-add', () => {
defaultCollection: '@nrwl/angular'
};
+ json.schematics = {};
+
return json;
}),
tree
@@ -61,6 +69,9 @@ describe('ng-add', () => {
const result = await runSchematic('ng-add', {}, tree);
const workspaceJson = readJsonInTree(result, 'workspace.json');
expect(workspaceJson.cli.defaultCollection).toEqual('@nrwl/angular');
+ expect(
+ workspaceJson.schematics['@nrwl/react:application']
+ ).not.toBeDefined();
});
});
});
diff --git a/packages/react/src/schematics/ng-add/ng-add.ts b/packages/react/src/schematics/ng-add/ng-add.ts
index 0d4c900a7c..192485dfaa 100644
--- a/packages/react/src/schematics/ng-add/ng-add.ts
+++ b/packages/react/src/schematics/ng-add/ng-add.ts
@@ -50,6 +50,16 @@ function setDefault(): Rule {
if (!defaultCollection || defaultCollection === '@nrwl/workspace') {
(workspace.extensions.cli as JsonObject).defaultCollection =
'@nrwl/react';
+
+ // Also generate apps with babel option by default.
+ workspace.extensions.schematics = {
+ ...(workspace.extensions.schematics
+ ? (workspace.extensions.schematics as JsonObject)
+ : {}),
+ '@nrwl/react:application': {
+ babel: true
+ }
+ };
}
});
}
diff --git a/packages/react/src/utils/versions.ts b/packages/react/src/utils/versions.ts
index 11a397da73..4c1f22ac75 100644
--- a/packages/react/src/utils/versions.ts
+++ b/packages/react/src/utils/versions.ts
@@ -7,3 +7,10 @@ export const emotionVersion = '10.0.14';
export const domTypesVersion = '16.8.5';
export const reactRouterVersion = '5.0.1';
export const testingLibraryVersion = '8.0.5';
+export const babelCoreVersion = '7.5.5';
+export const babelPresetEnvVersion = '7.5.5';
+export const babelPresetReactVersion = '7.0.0';
+export const babelPresetTypeScriptVersion = '7.3.3';
+export const babelPluginDecoratorsVersion = '7.4.4';
+export const babelLoaderVersion = '8.0.6';
+export const babelPluginMacrosVersion = '2.6.1';
diff --git a/packages/web/src/builders/build/build.impl.spec.ts b/packages/web/src/builders/build/build.impl.spec.ts
index 4f3764cb0a..6fd486bedf 100644
--- a/packages/web/src/builders/build/build.impl.spec.ts
+++ b/packages/web/src/builders/build/build.impl.spec.ts
@@ -122,7 +122,7 @@ describe('WebBuildBuilder', () => {
{
...testOptions,
differentialLoading: false,
- webpackConfig: 'apps/webapp/webpack.config.js'
+ webpackConfig: './apps/webapp/webpack.config.js'
},
context
).toPromise();
diff --git a/packages/web/src/utils/normalize.spec.ts b/packages/web/src/utils/normalize.spec.ts
index 8d4be618f6..f47f2e1493 100644
--- a/packages/web/src/utils/normalize.spec.ts
+++ b/packages/web/src/utils/normalize.spec.ts
@@ -25,7 +25,8 @@ describe('normalizeBuildOptions', () => {
}
],
assets: [],
- statsJson: false
+ statsJson: false,
+ webpackConfig: './apps/nodeapp/webpack.config'
};
root = '/root';
sourceRoot = normalize('apps/nodeapp/src');
@@ -95,4 +96,19 @@ describe('normalizeBuildOptions', () => {
}
]);
});
+
+ it('should only resolve relative webpack config path', () => {
+ let result = normalizeBuildOptions(testOptions, root, sourceRoot);
+ expect(result.webpackConfig).toEqual('/root/apps/nodeapp/webpack.config');
+
+ result = normalizeBuildOptions(
+ {
+ ...testOptions,
+ webpackConfig: '@nrwl/react/plugins/babel'
+ },
+ root,
+ sourceRoot
+ );
+ expect(result.webpackConfig).toEqual('@nrwl/react/plugins/babel');
+ });
});
diff --git a/packages/web/src/utils/normalize.ts b/packages/web/src/utils/normalize.ts
index d0f0125898..86564a79c7 100644
--- a/packages/web/src/utils/normalize.ts
+++ b/packages/web/src/utils/normalize.ts
@@ -23,7 +23,10 @@ export function normalizeBuildOptions(
fileReplacements: normalizeFileReplacements(root, options.fileReplacements),
assets: normalizeAssets(options.assets, root, sourceRoot),
webpackConfig: options.webpackConfig
- ? resolve(root, options.webpackConfig)
+ ? // Don't resolve node_modules or absolute paths.
+ options.webpackConfig.startsWith('.')
+ ? resolve(root, options.webpackConfig)
+ : options.webpackConfig
: options.webpackConfig
};
}
diff --git a/packages/workspace/src/schematics/preset/preset.ts b/packages/workspace/src/schematics/preset/preset.ts
index ce337d331e..e6aacf86e5 100644
--- a/packages/workspace/src/schematics/preset/preset.ts
+++ b/packages/workspace/src/schematics/preset/preset.ts
@@ -50,7 +50,8 @@ function createPreset(options: Schema): Rule {
'application',
{
name: options.name,
- style: options.style
+ style: options.style,
+ babel: true
},
{ interactive: false }
),
diff --git a/yarn.lock b/yarn.lock
index 621a499a9c..e9aad23ae1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -226,6 +226,26 @@
dependencies:
"@babel/highlight" "^7.0.0"
+"@babel/core@7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30"
+ integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==
+ dependencies:
+ "@babel/code-frame" "^7.5.5"
+ "@babel/generator" "^7.5.5"
+ "@babel/helpers" "^7.5.5"
+ "@babel/parser" "^7.5.5"
+ "@babel/template" "^7.4.4"
+ "@babel/traverse" "^7.5.5"
+ "@babel/types" "^7.5.5"
+ convert-source-map "^1.1.0"
+ debug "^4.1.0"
+ json5 "^2.1.0"
+ lodash "^4.17.13"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
"@babel/core@^7.0.1":
version "7.4.5"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a"
@@ -292,6 +312,14 @@
"@babel/helper-explode-assignable-expression" "^7.1.0"
"@babel/types" "^7.0.0"
+"@babel/helper-builder-react-jsx@^7.3.0":
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4"
+ integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==
+ dependencies:
+ "@babel/types" "^7.3.0"
+ esutils "^2.0.0"
+
"@babel/helper-call-delegate@^7.4.4":
version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43"
@@ -301,6 +329,18 @@
"@babel/traverse" "^7.4.4"
"@babel/types" "^7.4.4"
+"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.5":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4"
+ integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==
+ dependencies:
+ "@babel/helper-function-name" "^7.1.0"
+ "@babel/helper-member-expression-to-functions" "^7.5.5"
+ "@babel/helper-optimise-call-expression" "^7.0.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-replace-supers" "^7.5.5"
+ "@babel/helper-split-export-declaration" "^7.4.4"
+
"@babel/helper-define-map@^7.5.5":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
@@ -464,6 +504,15 @@
"@babel/helper-remap-async-to-generator" "^7.1.0"
"@babel/plugin-syntax-async-generators" "^7.2.0"
+"@babel/plugin-proposal-decorators@7.4.4":
+ version "7.4.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0"
+ integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.4.4"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-decorators" "^7.2.0"
+
"@babel/plugin-proposal-dynamic-import@^7.5.0":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
@@ -512,6 +561,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-decorators@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b"
+ integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-syntax-dynamic-import@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612"
@@ -526,6 +582,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-jsx@^7.2.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7"
+ integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e"
@@ -540,6 +603,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-syntax-typescript@^7.2.0":
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz#a7cc3f66119a9f7ebe2de5383cce193473d65991"
+ integrity sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
"@babel/plugin-transform-arrow-functions@^7.2.0":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
@@ -726,6 +796,38 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-transform-react-display-name@^7.0.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0"
+ integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+
+"@babel/plugin-transform-react-jsx-self@^7.0.0":
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba"
+ integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@babel/plugin-transform-react-jsx-source@^7.0.0":
+ version "7.5.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b"
+ integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
+"@babel/plugin-transform-react-jsx@^7.0.0":
+ version "7.3.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290"
+ integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==
+ dependencies:
+ "@babel/helper-builder-react-jsx" "^7.3.0"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-jsx" "^7.2.0"
+
"@babel/plugin-transform-regenerator@^7.4.5":
version "7.4.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
@@ -777,6 +879,15 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
+"@babel/plugin-transform-typescript@^7.3.2":
+ version "7.5.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8"
+ integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==
+ dependencies:
+ "@babel/helper-create-class-features-plugin" "^7.5.5"
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-syntax-typescript" "^7.2.0"
+
"@babel/plugin-transform-unicode-regex@^7.4.4":
version "7.4.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f"
@@ -786,7 +897,7 @@
"@babel/helper-regex" "^7.4.4"
regexpu-core "^4.5.4"
-"@babel/preset-env@^7.0.0":
+"@babel/preset-env@7.5.5", "@babel/preset-env@^7.0.0":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a"
integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==
@@ -842,7 +953,26 @@
js-levenshtein "^1.1.3"
semver "^5.5.0"
-"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.4":
+"@babel/preset-react@7.0.0":
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0"
+ integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-transform-react-display-name" "^7.0.0"
+ "@babel/plugin-transform-react-jsx" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-self" "^7.0.0"
+ "@babel/plugin-transform-react-jsx-source" "^7.0.0"
+
+"@babel/preset-typescript@7.3.3":
+ version "7.3.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a"
+ integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/plugin-transform-typescript" "^7.3.2"
+
+"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.4":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132"
integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==
@@ -2468,7 +2598,7 @@ babel-jest@^24.8.0:
chalk "^2.4.2"
slash "^2.0.0"
-babel-loader@^8.0.2:
+babel-loader@8.0.6, babel-loader@^8.0.2:
version "8.0.6"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb"
integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==
@@ -2516,6 +2646,15 @@ babel-plugin-jest-hoist@^24.6.0:
dependencies:
"@types/babel__traverse" "^7.0.6"
+babel-plugin-macros@2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz#41f7ead616fc36f6a93180e89697f69f51671181"
+ integrity sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==
+ dependencies:
+ "@babel/runtime" "^7.4.2"
+ cosmiconfig "^5.2.0"
+ resolve "^1.10.0"
+
"babel-plugin-styled-components@>= 1":
version "1.10.6"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz#f8782953751115faf09a9f92431436912c34006b"
@@ -4404,7 +4543,7 @@ cosmiconfig@^4.0.0:
parse-json "^4.0.0"
require-from-string "^2.0.1"
-cosmiconfig@^5.0.0, cosmiconfig@^5.2.1:
+cosmiconfig@^5.0.0, cosmiconfig@^5.2.0, cosmiconfig@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a"
integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==
@@ -5460,7 +5599,7 @@ estree-walker@^0.6.1:
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
-esutils@^2.0.2:
+esutils@^2.0.0, esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=