chore(NA): improves @kbn/ui-shared-deps build performance (#105971)

* chore(NA): move packages assets optimization into the distributable build

* chore(NA): include terser task on distributable build

* chore(NA): migrate everything into the build tasks

* chore(NA): update webpack config to include react profiler

* chore(NA): optional fsevents

* chore(NA): redo optional fsevents

* chore(NA): remove noparse for fsevents

* chore(NA): include missing task declaration

* chore(NA): include sourcemaps

* chore(NA): include metrics bundle file generation during distributable build

* chore(NA): correctly setup paths

* chore(NA): change sourcemap types

* chore(NA): remove useless sourcemaps

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Tiago Costa 2021-07-21 21:00:49 +01:00 committed by GitHub
parent 62e81723af
commit 465b36ca9c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 320 additions and 112 deletions

View file

@ -690,7 +690,7 @@
"copy-webpack-plugin": "^6.0.2",
"cpy": "^8.1.1",
"css-loader": "^3.4.2",
"css-minimizer-webpack-plugin": "^1.3.0",
"cssnano": "^4.1.11",
"cypress": "^6.8.0",
"cypress-cucumber-preprocessor": "^2.5.2",
"cypress-multi-reporters": "^1.4.0",
@ -742,7 +742,11 @@
"grunt-peg": "^2.0.1",
"gulp": "4.0.2",
"gulp-babel": "^8.0.0",
"gulp-brotli": "^3.0.0",
"gulp-postcss": "^8.0.0",
"gulp-sourcemaps": "2.6.5",
"gulp-terser": "^2.0.1",
"gulp-gzip": "^1.4.2",
"gulp-zip": "^5.0.2",
"has-ansi": "^3.0.0",
"hdr-histogram-js": "^1.2.0",
@ -830,6 +834,7 @@
"tempy": "^0.3.0",
"terminal-link": "^2.1.1",
"terser-webpack-plugin": "^2.1.2",
"terser": "^5.7.1",
"ts-loader": "^7.0.5",
"ts-morph": "^9.1.0",
"tsd": "^0.13.1",

View file

@ -44,9 +44,7 @@ SRC_DEPS = [
"@npm//abortcontroller-polyfill",
"@npm//angular",
"@npm//babel-loader",
"@npm//compression-webpack-plugin",
"@npm//core-js",
"@npm//css-minimizer-webpack-plugin",
"@npm//css-loader",
"@npm//fflate",
"@npm//jquery",
@ -67,7 +65,6 @@ SRC_DEPS = [
"@npm//rxjs",
"@npm//styled-components",
"@npm//symbol-observable",
"@npm//terser-webpack-plugin",
"@npm//url-loader",
"@npm//val-loader",
"@npm//whatwg-fetch"

View file

@ -7,20 +7,23 @@
*/
const Path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');
const { REPO_ROOT } = require('@kbn/utils');
const { RawSource } = require('webpack-sources');
const UiSharedDeps = require('./src/index');
const MOMENT_SRC = require.resolve('moment/min/moment-with-locales.js');
const WEBPACK_SRC = require.resolve('webpack');
module.exports = {
node: {
child_process: 'empty',
fs: 'empty',
},
externals: {
module: 'module',
},
mode: 'production',
entry: {
'kbn-ui-shared-deps': './src/entry.js',
@ -30,8 +33,7 @@ module.exports = {
'kbn-ui-shared-deps.v8.light': ['@elastic/eui/dist/eui_theme_amsterdam_light.css'],
},
context: __dirname,
// cheap-source-map should be used if needed
devtool: false,
devtool: 'cheap-source-map',
output: {
path: UiSharedDeps.distDir,
filename: '[name].js',
@ -39,10 +41,11 @@ module.exports = {
devtoolModuleFilenameTemplate: (info) =>
`kbn-ui-shared-deps/${Path.relative(REPO_ROOT, info.absoluteResourcePath)}`,
library: '__kbnSharedDeps__',
futureEmitAssets: true,
},
module: {
noParse: [MOMENT_SRC],
noParse: [MOMENT_SRC, WEBPACK_SRC],
rules: [
{
include: [require.resolve('./src/entry.js')],
@ -102,35 +105,17 @@ module.exports = {
resolve: {
alias: {
moment: MOMENT_SRC,
// NOTE: Used to include react profiling on bundles
// https://gist.github.com/bvaughn/25e6233aeb1b4f0cdb8d8366e54a3977#webpack-4
'react-dom$': 'react-dom/profiling',
'scheduler/tracing': 'scheduler/tracing-profiling',
},
extensions: ['.js', '.ts'],
symlinks: false,
},
optimization: {
minimizer: [
new CssMinimizerPlugin({
parallel: false,
minimizerOptions: {
preset: [
'default',
{
discardComments: false,
},
],
},
}),
new TerserPlugin({
cache: false,
sourceMap: false,
extractComments: false,
parallel: false,
terserOptions: {
compress: true,
mangle: true,
},
}),
],
minimize: false,
noEmitOnErrors: true,
splitChunks: {
cacheGroups: {
@ -155,44 +140,5 @@ module.exports = {
new MiniCssExtractPlugin({
filename: '[name].css',
}),
new CompressionPlugin({
algorithm: 'brotliCompress',
filename: '[path].br',
test: /\.(js|css)$/,
cache: false,
}),
new CompressionPlugin({
algorithm: 'gzip',
filename: '[path].gz',
test: /\.(js|css)$/,
cache: false,
}),
new (class MetricsPlugin {
apply(compiler) {
compiler.hooks.emit.tap('MetricsPlugin', (compilation) => {
const metrics = [
{
group: 'page load bundle size',
id: 'kbnUiSharedDeps-js',
value: compilation.assets['kbn-ui-shared-deps.js'].size(),
},
{
group: 'page load bundle size',
id: 'kbnUiSharedDeps-css',
value:
compilation.assets['kbn-ui-shared-deps.css'].size() +
compilation.assets['kbn-ui-shared-deps.v7.light.css'].size(),
},
{
group: 'page load bundle size',
id: 'kbnUiSharedDeps-elastic',
value: compilation.assets['kbn-ui-shared-deps.@elastic.js'].size(),
},
];
compilation.emitAsset('metrics.json', new RawSource(JSON.stringify(metrics, null, 2)));
});
}
})(),
],
};

View file

@ -64,6 +64,7 @@ export async function buildDistributables(log: ToolingLog, options: BuildOptions
await run(Tasks.TranspileBabel);
await run(Tasks.CreatePackageJson);
await run(Tasks.InstallDependencies);
await run(Tasks.GeneratePackagesOptimizedAssets);
await run(Tasks.CleanPackages);
await run(Tasks.CreateNoticeFile);
await run(Tasks.UpdateLicenseFile);

View file

@ -0,0 +1,200 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import { pipeline } from 'stream';
import { promisify } from 'util';
import fs from 'fs';
import gulpBrotli from 'gulp-brotli';
// @ts-expect-error
import gulpGzip from 'gulp-gzip';
// @ts-expect-error
import gulpPostCSS from 'gulp-postcss';
// @ts-expect-error
import gulpTerser from 'gulp-terser';
import terser from 'terser';
import vfs from 'vinyl-fs';
import { ToolingLog } from '@kbn/dev-utils';
import { Task, Build, write, deleteAll } from '../lib';
const asyncPipeline = promisify(pipeline);
const asyncStat = promisify(fs.stat);
const removePreMinifySourceMaps = async (log: ToolingLog, build: Build) => {
log.debug('Remove Pre Minify Sourcemaps');
await deleteAll(
[build.resolvePath('node_modules/@kbn/ui-shared-deps/shared_built_assets', '**', '*.map')],
log
);
};
const minifyKbnUiSharedDepsCSS = async (log: ToolingLog, build: Build) => {
const buildRoot = build.resolvePath();
log.debug('Minify CSS');
await asyncPipeline(
vfs.src(['node_modules/@kbn/ui-shared-deps/shared_built_assets/**/*.css'], {
cwd: buildRoot,
}),
gulpPostCSS([
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('cssnano')({
preset: [
'default',
{
discardComments: false,
},
],
}),
]),
vfs.dest('node_modules/@kbn/ui-shared-deps/shared_built_assets', { cwd: buildRoot })
);
};
const minifyKbnUiSharedDepsJS = async (log: ToolingLog, build: Build) => {
const buildRoot = build.resolvePath();
log.debug('Minify JS');
await asyncPipeline(
vfs.src(['node_modules/@kbn/ui-shared-deps/shared_built_assets/**/*.js'], {
cwd: buildRoot,
}),
gulpTerser(
{
compress: true,
mangle: true,
},
terser.minify
),
vfs.dest('node_modules/@kbn/ui-shared-deps/shared_built_assets', { cwd: buildRoot })
);
};
const brotliCompressKbnUiSharedDeps = async (log: ToolingLog, build: Build) => {
const buildRoot = build.resolvePath();
log.debug('Brotli compress');
await asyncPipeline(
vfs.src(['node_modules/@kbn/ui-shared-deps/shared_built_assets/**/*.{js,css}'], {
cwd: buildRoot,
}),
gulpBrotli(),
vfs.dest('node_modules/@kbn/ui-shared-deps/shared_built_assets', { cwd: buildRoot })
);
};
const gzipCompressKbnUiSharedDeps = async (log: ToolingLog, build: Build) => {
const buildRoot = build.resolvePath();
log.debug('GZip compress');
await asyncPipeline(
vfs.src(['node_modules/@kbn/ui-shared-deps/shared_built_assets/**/*.{js,css}'], {
cwd: buildRoot,
}),
gulpGzip(),
vfs.dest('node_modules/@kbn/ui-shared-deps/shared_built_assets', { cwd: buildRoot })
);
};
const createKbnUiSharedDepsBundleMetrics = async (log: ToolingLog, build: Build) => {
const bundleMetricsFilePath = build.resolvePath(
'node_modules/@kbn/ui-shared-deps/shared_built_assets',
'metrics.json'
);
const kbnUISharedDepsJSFileSize = (
await asyncStat(
build.resolvePath(
'node_modules/@kbn/ui-shared-deps/shared_built_assets',
'kbn-ui-shared-deps.js'
)
)
).size;
const kbnUISharedDepsCSSFileSize =
(
await asyncStat(
build.resolvePath(
'node_modules/@kbn/ui-shared-deps/shared_built_assets',
'kbn-ui-shared-deps.css'
)
)
).size +
(
await asyncStat(
build.resolvePath(
'node_modules/@kbn/ui-shared-deps/shared_built_assets',
'kbn-ui-shared-deps.v7.light.css'
)
)
).size;
const kbnUISharedDepsElasticJSFileSize = (
await asyncStat(
build.resolvePath(
'node_modules/@kbn/ui-shared-deps/shared_built_assets',
'kbn-ui-shared-deps.@elastic.js'
)
)
).size;
log.debug('Create metrics.json');
const metrics = [
{
group: 'page load bundle size',
id: 'kbnUiSharedDeps-js',
value: kbnUISharedDepsJSFileSize,
},
{
group: 'page load bundle size',
id: 'kbnUiSharedDeps-css',
value: kbnUISharedDepsCSSFileSize,
},
{
group: 'page load bundle size',
id: 'kbnUiSharedDeps-elastic',
value: kbnUISharedDepsElasticJSFileSize,
},
];
await write(bundleMetricsFilePath, JSON.stringify(metrics, null, 2));
};
const generateKbnUiSharedDepsOptimizedAssets = async (log: ToolingLog, build: Build) => {
log.info('Creating optimized assets for @kbn/ui-shared-deps');
await removePreMinifySourceMaps(log, build);
await minifyKbnUiSharedDepsCSS(log, build);
await minifyKbnUiSharedDepsJS(log, build);
await createKbnUiSharedDepsBundleMetrics(log, build);
await brotliCompressKbnUiSharedDeps(log, build);
await gzipCompressKbnUiSharedDeps(log, build);
};
export const GeneratePackagesOptimizedAssets: Task = {
description: 'Generates Optimized Assets for Packages',
async run(config, log, build) {
// Create optimized assets for @kbn/ui-shared-deps
await generateKbnUiSharedDepsOptimizedAssets(log, build);
},
};

View file

@ -15,6 +15,7 @@ export * from './create_archives_sources_task';
export * from './create_archives_task';
export * from './create_empty_dirs_and_files_task';
export * from './create_readme_task';
export * from './generate_packages_optimized_assets';
export * from './install_dependencies_task';
export * from './license_file_task';
export * from './nodejs';

View file

@ -9,7 +9,7 @@ node scripts/build --debug
echo " -> shipping metrics from build to ci-stats"
node scripts/ship_ci_stats \
--metrics target/optimizer_bundle_metrics.json \
--metrics node_modules/@kbn/ui-shared-deps/shared_built_assets/metrics.json
--metrics build/kibana/node_modules/@kbn/ui-shared-deps/shared_built_assets/metrics.json
linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')"
installDir="$PARENT_DIR/install/kibana"

View file

@ -38,7 +38,7 @@ if [[ -z "$CODE_COVERAGE" ]] ; then
echo " -> shipping metrics from build to ci-stats"
node scripts/ship_ci_stats \
--metrics target/optimizer_bundle_metrics.json \
--metrics node_modules/@kbn/ui-shared-deps/shared_built_assets/metrics.json
--metrics build/kibana/node_modules/@kbn/ui-shared-deps/shared_built_assets/metrics.json
linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')"
installDir="$KIBANA_DIR/install/kibana"

View file

@ -10,7 +10,7 @@ node scripts/build --debug
echo " -> shipping metrics from build to ci-stats"
node scripts/ship_ci_stats \
--metrics target/optimizer_bundle_metrics.json \
--metrics node_modules/@kbn/ui-shared-deps/shared_built_assets/metrics.json
--metrics build/kibana/node_modules/@kbn/ui-shared-deps/shared_built_assets/metrics.json
linuxBuild="$(find "$KIBANA_DIR/target" -name 'kibana-*-linux-x86_64.tar.gz')"
installDir="$KIBANA_DIR/install/kibana"

128
yarn.lock
View file

@ -7099,7 +7099,7 @@ any-observable@^0.3.0:
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==
any-promise@^1.0.0:
any-promise@^1.0.0, any-promise@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
@ -8963,7 +8963,7 @@ bytes@3.0.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
bytes@3.1.0:
bytes@3.1.0, bytes@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
@ -10621,21 +10621,6 @@ css-loader@^3.4.2, css-loader@^3.5.3:
schema-utils "^2.7.0"
semver "^6.3.0"
css-minimizer-webpack-plugin@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-1.3.0.tgz#d867b4a54ca9920125b30263505e8cca72bc8cf1"
integrity sha512-jFa0Siplmfef4ndKglpVaduY47oHQwioAOEGK0f0vAX0s+vc+SmP6cCMoc+8Adau5600RnOEld5VVdC8CQau7w==
dependencies:
cacache "^15.0.5"
cssnano "^4.1.10"
find-cache-dir "^3.3.1"
jest-worker "^26.3.0"
p-limit "^3.0.2"
schema-utils "^3.0.0"
serialize-javascript "^5.0.1"
source-map "^0.6.1"
webpack-sources "^1.4.3"
css-select-base-adapter@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
@ -10751,10 +10736,10 @@ cssfontparser@^1.2.1:
resolved "https://registry.yarnpkg.com/cssfontparser/-/cssfontparser-1.2.1.tgz#f4022fc8f9700c68029d542084afbaf425a3f3e3"
integrity sha1-9AIvyPlwDGgCnVQghK+69CWj8+M=
cssnano-preset-default@^4.0.7:
version "4.0.7"
resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76"
integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==
cssnano-preset-default@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff"
integrity sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==
dependencies:
css-declaration-sorter "^4.0.1"
cssnano-util-raw-cache "^4.0.1"
@ -10784,7 +10769,7 @@ cssnano-preset-default@^4.0.7:
postcss-ordered-values "^4.1.2"
postcss-reduce-initial "^4.0.3"
postcss-reduce-transforms "^4.0.2"
postcss-svgo "^4.0.2"
postcss-svgo "^4.0.3"
postcss-unique-selectors "^4.0.1"
cssnano-util-get-arguments@^4.0.0:
@ -10809,13 +10794,13 @@ cssnano-util-same-parent@^4.0.0:
resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3"
integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==
cssnano@^4.1.10:
version "4.1.10"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2"
integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==
cssnano@^4.1.11:
version "4.1.11"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99"
integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==
dependencies:
cosmiconfig "^5.0.0"
cssnano-preset-default "^4.0.7"
cssnano-preset-default "^4.0.8"
is-resolvable "^1.0.0"
postcss "^7.0.0"
@ -15128,6 +15113,14 @@ gulp-babel@^8.0.0:
through2 "^2.0.0"
vinyl-sourcemaps-apply "^0.2.0"
gulp-brotli@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/gulp-brotli/-/gulp-brotli-3.0.0.tgz#7f5a1d8a6d43cab28056f9e56f29ae071dcfe4b4"
integrity sha512-AkGR+FRn4Nrf9Ocx8/WXgNNX+owk4FN4xU4kRrso41DWWd9v1KXO8EyG1cGcwt4364Ax68b7ANcP9Em+/RM2OQ==
dependencies:
plugin-error "^1.0.1"
through2 "^3.0.1"
gulp-cli@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-2.2.0.tgz#5533126eeb7fe415a7e3e84a297d334d5cf70ebc"
@ -15152,6 +15145,29 @@ gulp-cli@^2.2.0:
v8flags "^3.0.1"
yargs "^7.1.0"
gulp-gzip@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/gulp-gzip/-/gulp-gzip-1.4.2.tgz#0422a94014248655b5b1a9eea1c2abee1d4f4337"
integrity sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==
dependencies:
ansi-colors "^1.0.1"
bytes "^3.0.0"
fancy-log "^1.3.2"
plugin-error "^1.0.0"
stream-to-array "^2.3.0"
through2 "^2.0.3"
gulp-postcss@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/gulp-postcss/-/gulp-postcss-8.0.0.tgz#8d3772cd4d27bca55ec8cb4c8e576e3bde4dc550"
integrity sha512-Wtl6vH7a+8IS/fU5W9IbOpcaLqKxd5L1DUOzaPmlnCbX1CrG0aWdwVnC3Spn8th0m8D59YbysV5zPUe1n/GJYg==
dependencies:
fancy-log "^1.3.2"
plugin-error "^1.0.1"
postcss "^7.0.2"
postcss-load-config "^2.0.0"
vinyl-sourcemaps-apply "^0.2.1"
gulp-sourcemaps@2.6.5:
version "2.6.5"
resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz#a3f002d87346d2c0f3aec36af7eb873f23de8ae6"
@ -15169,6 +15185,16 @@ gulp-sourcemaps@2.6.5:
strip-bom-string "1.X"
through2 "2.X"
gulp-terser@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/gulp-terser/-/gulp-terser-2.0.1.tgz#5f8f4fc54588b79519243809cc8eef4936286d0d"
integrity sha512-XCrnCXP8ovNpgLK9McJIXlgm0j3W2TsiWu7K9y3m+Sn5XZgUzi6U8MPHtS3NdLMic9poCj695N0ARJ2B6atypw==
dependencies:
plugin-error "^1.0.1"
terser "5.4.0"
through2 "^4.0.2"
vinyl-sourcemaps-apply "^0.2.1"
gulp-zip@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/gulp-zip/-/gulp-zip-5.0.2.tgz#2edf797ec842e770f4dfde8bef97d139015b1972"
@ -17633,7 +17659,7 @@ jest-worker@^25.4.0:
merge-stream "^2.0.0"
supports-color "^7.0.0"
jest-worker@^26.2.1, jest-worker@^26.3.0, jest-worker@^26.6.2:
jest-worker@^26.2.1, jest-worker@^26.6.2:
version "26.6.2"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
@ -21694,7 +21720,7 @@ platform@^1.3.0:
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444"
integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==
plugin-error@^1.0.1:
plugin-error@^1.0.0, plugin-error@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c"
integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==
@ -22148,7 +22174,7 @@ postcss-selector-parser@^6.0.4:
uniq "^1.0.1"
util-deprecate "^1.0.2"
postcss-svgo@^4.0.2:
postcss-svgo@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e"
integrity sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==
@ -23684,7 +23710,7 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
readable-stream@3, readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@ -25022,7 +25048,7 @@ serialize-error@^2.1.0:
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=
serialize-javascript@5.0.1, serialize-javascript@^5.0.1:
serialize-javascript@5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4"
integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==
@ -25463,7 +25489,7 @@ source-map-support@^0.3.2:
dependencies:
source-map "0.1.32"
source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12:
source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@ -25505,7 +25531,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.7.2, source-map@^0.7.3:
source-map@^0.7.2, source-map@^0.7.3, source-map@~0.7.2:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
@ -25945,6 +25971,13 @@ stream-splicer@^2.0.0:
inherits "^2.0.1"
readable-stream "^2.0.2"
stream-to-array@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353"
integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=
dependencies:
any-promise "^1.1.0"
stream-to-async-iterator@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/stream-to-async-iterator/-/stream-to-async-iterator-0.2.0.tgz#bef5c885e9524f98b2fa5effecc357bd58483780"
@ -26823,6 +26856,15 @@ terser-webpack-plugin@^3.0.0:
terser "^4.8.0"
webpack-sources "^1.4.3"
terser@5.4.0:
version "5.4.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.4.0.tgz#9815c0839072d5c894e22c6fc508fbe9f5e7d7e8"
integrity sha512-3dZunFLbCJis9TAF2VnX+VrQLctRUmt1p3W2kCsJuZE4ZgWqh//+1MZ62EanewrqKoUf4zIaDGZAvml4UDc0OQ==
dependencies:
commander "^2.20.0"
source-map "~0.7.2"
source-map-support "~0.5.19"
terser@^4.1.2, terser@^4.6.12, terser@^4.6.3, terser@^4.8.0:
version "4.8.0"
resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17"
@ -26832,6 +26874,15 @@ terser@^4.1.2, terser@^4.6.12, terser@^4.6.3, terser@^4.8.0:
source-map "~0.6.1"
source-map-support "~0.5.12"
terser@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/terser/-/terser-5.7.1.tgz#2dc7a61009b66bb638305cb2a824763b116bf784"
integrity sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==
dependencies:
commander "^2.20.0"
source-map "~0.7.2"
source-map-support "~0.5.19"
test-exclude@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@ -26916,6 +26967,13 @@ through2@^3.0.1:
dependencies:
readable-stream "2 || 3"
through2@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
dependencies:
readable-stream "3"
"through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3.4, through@~2.3.6, through@~2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
@ -28778,7 +28836,7 @@ vinyl-sourcemap@^1.1.0:
remove-bom-buffer "^3.0.0"
vinyl "^2.0.0"
vinyl-sourcemaps-apply@^0.2.0:
vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705"
integrity sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=