Speed up webpack config by using esbuild-loader

Signed-off-by: soupette <cyril@strapi.io>
This commit is contained in:
soupette 2022-03-18 15:21:20 +01:00
parent 6a55ba0e98
commit e0fb1fe0f3
8 changed files with 506 additions and 98 deletions

View File

@ -12,17 +12,17 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/admin": "4.2.0-beta.0",
"@strapi/plugin-documentation": "4.2.0-beta.0",
"@strapi/plugin-graphql": "4.2.0-beta.0",
"@strapi/plugin-i18n": "4.2.0-beta.0",
"@strapi/plugin-sentry": "4.2.0-beta.0",
"@strapi/plugin-users-permissions": "4.2.0-beta.0",
"@strapi/provider-email-mailgun": "4.2.0-beta.0",
"@strapi/provider-upload-aws-s3": "4.2.0-beta.0",
"@strapi/provider-upload-cloudinary": "4.2.0-beta.0",
"@strapi/strapi": "4.2.0-beta.0",
"@strapi/utils": "4.2.0-beta.0",
"@strapi/admin": "4.1.4",
"@strapi/plugin-documentation": "4.1.4",
"@strapi/plugin-graphql": "4.1.4",
"@strapi/plugin-i18n": "4.1.4",
"@strapi/plugin-sentry": "4.1.4",
"@strapi/plugin-users-permissions": "4.1.4",
"@strapi/provider-email-mailgun": "4.1.4",
"@strapi/provider-upload-aws-s3": "4.1.4",
"@strapi/provider-upload-cloudinary": "4.1.4",
"@strapi/strapi": "4.1.4",
"@strapi/utils": "4.1.4",
"lodash": "4.17.21",
"mysql": "2.18.1",
"passport-google-oauth2": "0.2.0",

View File

@ -113,6 +113,7 @@
"request": "2.88.2",
"request-promise-native": "1.0.9",
"rimraf": "3.0.2",
"speed-measure-webpack-plugin": "1.5.0",
"stylelint": "13.13.1",
"stylelint-config-recommended": "3.0.0",
"stylelint-config-styled-components": "0.1.1",

View File

@ -41,7 +41,7 @@ async function build({
ceRoot: path.resolve(cacheDir, 'admin', 'src'),
};
const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].appPathToPlugin );
const pluginsPath = Object.keys(plugins).map(pluginName => plugins[pluginName].appPathToPlugin);
const config = getCustomWebpackConfig(appDir, {
appDir,

View File

@ -27,7 +27,7 @@
"develop": "yarn create:plugin-file && yarn develop:webpack",
"develop:webpack": "cross-env NODE_ENV=development webpack serve --config webpack.config.dev.js --progress profile",
"prepublishOnly": "yarn build",
"build": "rimraf build && node ./scripts/build.js",
"builde": "rimraf build && node ./scripts/build.js",
"test": "echo \"no tests yet\"",
"test:unit": "jest --verbose",
"test:front": "cross-env IS_EE=true jest --config ./jest.config.front.js",

View File

@ -1,15 +1,40 @@
'use strict';
const path = require('path');
const fs = require('fs-extra');
// eslint-disable-next-line node/no-extraneous-require
const glob = require('glob');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const { DuplicateReporterPlugin } = require('duplicate-dependencies-webpack-plugin');
const webpackConfig = require('./webpack.config');
const getPluginsPath = () => {
const rootPath = path.join('..', '..', '..', 'packages');
const corePath = path.join(rootPath, 'core', '*');
const pluginsPath = path.join(rootPath, 'plugins', '*');
const corePackageDirs = glob.sync(corePath);
const pluginsPackageDirs = glob.sync(pluginsPath);
const packageDirs = [...corePackageDirs, ...pluginsPackageDirs].filter(dir => {
const isCoreAdmin = dir.includes('packages/core/admin/');
const pathToEntryPoint = path.join(dir, 'admin', 'src', 'index.js');
const doesAdminFolderExist = fs.pathExistsSync(pathToEntryPoint);
return !isCoreAdmin && doesAdminFolderExist;
});
return packageDirs.map(dir => path.resolve(__dirname, path.join(dir, 'admin', 'src')));
};
module.exports = () => {
const analyzeBundle = process.env.ANALYZE_BUNDLE;
const analyzeDuplicateDependencies = process.env.ANALYZE_DEPS;
const entry = path.join(__dirname, 'admin', 'src');
// Directly inject a polyfill in the webpack entry point before the entry point
// FIXME: I have noticed a bug regarding the helper-plugin and esbuild-loader
// The only I could fix it was to inject the babel polyfill
const babelPolyfill = '@babel/polyfill/dist/polyfill.min.js';
const entry = [babelPolyfill, path.join(__dirname, 'admin', 'src')];
const dest = path.join(__dirname, 'build');
// When running the analyze:bundle command, it needs a production build
@ -23,7 +48,7 @@ module.exports = () => {
const args = {
entry,
cacheDir: __dirname,
pluginsPath: [path.resolve(__dirname, '../../../packages')],
pluginsPath: getPluginsPath(),
dest,
env,
options,
@ -41,27 +66,6 @@ module.exports = () => {
return {
...config,
snapshot: {
managedPaths: [
path.resolve(__dirname, '../content-type-builder'),
path.resolve(__dirname, '../upload'),
path.resolve(__dirname, '../helper-plugin'),
],
buildDependencies: {
hash: true,
timestamp: true,
},
module: {
timestamp: true,
},
resolve: {
timestamp: true,
},
resolveBuildDependencies: {
hash: true,
timestamp: true,
},
},
devServer: {
port: 4000,

View File

@ -1,14 +1,14 @@
'use strict';
const path = require('path');
const fse = require('fs-extra');
const webpack = require('webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const ForkTsCheckerPlugin = require('fork-ts-checker-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const { ESBuildMinifyPlugin } = require('esbuild-loader');
const WebpackBar = require('webpackbar');
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin');
const isWsl = require('is-wsl');
const alias = require('./webpack.alias');
const getClientEnvironment = require('./env');
@ -79,6 +79,11 @@ module.exports = ({
});
}
// Directly inject a polyfill in the webpack entry point before the entry point
// FIXME: I have noticed a bug regarding the helper-plugin and esbuild-loader
// The only I could fix it was to inject the babel polyfill
const babelPolyfill = '@babel/polyfill/dist/polyfill.min.js';
return {
mode: isProduction ? 'production' : 'development',
bail: isProduction ? true : false,
@ -86,7 +91,7 @@ module.exports = ({
experiments: {
topLevelAwait: true,
},
entry,
entry: [babelPolyfill, entry],
output: {
path: dest,
publicPath: options.adminPath,
@ -98,28 +103,9 @@ module.exports = ({
optimization: {
minimize: optimize,
minimizer: [
// Copied from react-scripts
new TerserPlugin({
terserOptions: {
parse: {
ecma: 8,
},
compress: {
ecma: 5,
warnings: false,
comparisons: false,
inline: 2,
},
mangle: {
safari10: true,
},
output: {
ecma: 5,
comments: false,
ascii_only: true,
},
},
parallel: !isWsl,
new ESBuildMinifyPlugin({
target: 'es2015',
css: true, // Apply minification to CSS assets
}),
],
runtimeChunk: true,
@ -128,41 +114,83 @@ module.exports = ({
rules: [
{
test: /\.m?js$/,
// TODO remove when plugins are built separately
include: [cacheDir, ...pluginsPath],
use: {
loader: require.resolve('babel-loader'),
options: {
cacheDirectory: true,
cacheCompression: isProduction,
compact: isProduction,
presets: [
require.resolve('@babel/preset-env'),
require.resolve('@babel/preset-react'),
],
plugins: [
[
require.resolve('@strapi/babel-plugin-switch-ee-ce'),
{
// Imported this tells the custom plugin where to look for the ee folder
roots,
},
],
require.resolve('@babel/plugin-proposal-class-properties'),
require.resolve('@babel/plugin-syntax-dynamic-import'),
require.resolve('@babel/plugin-transform-modules-commonjs'),
require.resolve('@babel/plugin-proposal-async-generator-functions'),
include: cacheDir,
oneOf: [
// Use babel-loader for files that distinct the ee and ce code
// These files have an import Something from 'ee_else_ce/
{
test(filePath) {
if (!filePath) {
return false;
}
[
require.resolve('@babel/plugin-transform-runtime'),
{
// absoluteRuntime: true,s
helpers: true,
regenerator: true,
},
],
[require.resolve('babel-plugin-styled-components'), { pure: true }],
],
try {
const fileContent = fse.readFileSync(filePath).toString();
if (fileContent.match(/from.* ['"]ee_else_ce\//)) {
return true;
}
return false;
} catch (e) {
return false;
}
},
use: {
loader: require.resolve('babel-loader'),
options: {
cacheDirectory: true,
cacheCompression: isProduction,
compact: isProduction,
presets: [
require.resolve('@babel/preset-env'),
require.resolve('@babel/preset-react'),
],
plugins: [
[
require.resolve('@strapi/babel-plugin-switch-ee-ce'),
{
// Imported this tells the custom plugin where to look for the ee folder
roots,
},
],
require.resolve('@babel/plugin-proposal-class-properties'),
require.resolve('@babel/plugin-syntax-dynamic-import'),
require.resolve('@babel/plugin-transform-modules-commonjs'),
require.resolve('@babel/plugin-proposal-async-generator-functions'),
[
require.resolve('@babel/plugin-transform-runtime'),
{
helpers: true,
regenerator: true,
},
],
[require.resolve('babel-plugin-styled-components'), { pure: true }],
],
},
},
},
// Use esbuild-loader for the other files
{
use: {
loader: require.resolve('esbuild-loader'),
options: {
loader: 'jsx',
target: 'es2015',
},
},
},
],
},
{
test: /\.m?js$/,
include: pluginsPath,
use: {
loader: require.resolve('esbuild-loader'),
options: {
loader: 'jsx',
target: 'es2015',
},
},
},
@ -212,8 +240,6 @@ module.exports = ({
new HtmlWebpackPlugin({
inject: true,
template: path.resolve(__dirname, 'index.html'),
// FIXME
// favicon: path.resolve(__dirname, 'admin/src/favicon.ico'),
}),
new webpack.DefinePlugin(envVariables),

View File

@ -21,7 +21,6 @@
}
],
"main": "build/index.js",
"module": "lib/src/index.js",
"files": [
"build"
],

378
yarn.lock
View File

@ -4973,6 +4973,130 @@
resolve-from "^5.0.0"
store2 "^2.12.0"
"@strapi/admin@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/admin/-/admin-4.2.0-beta.0.tgz#537a5d1dae20acb2c0881b4cd2847a264f0e2b0f"
integrity sha512-zNK5jopdnfpwWZ6qHFOSNXenrKIlW1oMzYM6H//SITFD5SH2sMINcJvlyejXGujxvb8Cxm6dKD9HQHlN8wotfw==
dependencies:
"@babel/core" "7.16.7"
"@babel/plugin-proposal-async-generator-functions" "7.16.7"
"@babel/plugin-proposal-class-properties" "7.16.7"
"@babel/plugin-syntax-dynamic-import" "7.8.3"
"@babel/plugin-transform-modules-commonjs" "7.16.7"
"@babel/plugin-transform-runtime" "7.16.7"
"@babel/preset-env" "7.16.7"
"@babel/preset-react" "7.16.7"
"@babel/runtime" "7.16.7"
"@casl/ability" "^5.4.3"
"@fingerprintjs/fingerprintjs" "3.3.2"
"@fortawesome/fontawesome-free" "^5.15.3"
"@fortawesome/fontawesome-svg-core" "^1.2.35"
"@fortawesome/free-brands-svg-icons" "^5.15.3"
"@fortawesome/free-solid-svg-icons" "^5.15.3"
"@fortawesome/react-fontawesome" "^0.1.14"
"@strapi/babel-plugin-switch-ee-ce" "4.2.0-beta.0"
"@strapi/design-system" "0.0.1-alpha.79"
"@strapi/helper-plugin" "4.2.0-beta.0"
"@strapi/icons" "0.0.1-alpha.79"
"@strapi/utils" "4.2.0-beta.0"
axios "0.24.0"
babel-loader "8.2.3"
babel-plugin-styled-components "2.0.2"
bcryptjs "2.4.3"
chalk "^4.1.1"
chokidar "^3.5.1"
codemirror "^5.61.0"
cross-env "^7.0.3"
css-loader "6.5.1"
date-fns "2.22.1"
dotenv "8.5.1"
esbuild-loader "2.18.0"
execa "^1.0.0"
fast-deep-equal "3.1.3"
font-awesome "^4.7.0"
fork-ts-checker-webpack-plugin "7.2.1"
formik "^2.2.6"
fs-extra "10.0.0"
highlight.js "^10.4.1"
history "^4.9.0"
hoist-non-react-statics "^3.3.0"
html-loader "3.0.1"
html-webpack-plugin "5.5.0"
immer "9.0.6"
invariant "^2.2.4"
is-wsl "2.2.0"
js-cookie "2.2.1"
jsonwebtoken "8.5.1"
koa-compose "4.1.0"
koa-passport "4.1.4"
koa-static "5.0.0"
lodash "4.17.21"
markdown-it "^12.3.2"
markdown-it-abbr "^1.0.4"
markdown-it-container "^3.0.0"
markdown-it-deflist "^2.1.0"
markdown-it-emoji "^2.0.0"
markdown-it-footnote "^3.0.3"
markdown-it-ins "^3.0.1"
markdown-it-mark "^3.0.1"
markdown-it-sub "^1.0.0"
markdown-it-sup "1.0.0"
match-sorter "^4.0.2"
mini-css-extract-plugin "2.4.4"
moment "^2.29.1"
node-polyfill-webpack-plugin "1.1.4"
p-map "4.0.0"
passport-local "1.0.0"
prop-types "^15.7.2"
qs "6.10.1"
react "^17.0.2"
react-copy-to-clipboard "^5.0.3"
react-dnd "^14.0.2"
react-dnd-html5-backend "^14.0.0"
react-dom "^17.0.2"
react-error-boundary "3.1.1"
react-fast-compare "^3.2.0"
react-helmet "^6.1.0"
react-intl "5.20.2"
react-query "3.24.3"
react-redux "7.2.3"
react-router "5.2.0"
react-router-dom "5.2.0"
react-select "^4.0.2"
react-virtualized "^9.22.3"
redux "^4.0.1"
redux-saga "^0.16.0"
reselect "^4.0.0"
rimraf "3.0.2"
sanitize-html "2.4.0"
semver "7.3.5"
sift "13.5.0"
style-loader "3.3.1"
styled-components "^5.2.3"
terser-webpack-plugin "5.3.0"
webpack "5.65.0"
webpack-cli "4.9.1"
webpack-dev-server "4.7.3"
webpackbar "5.0.0-3"
yup "^0.32.9"
"@strapi/babel-plugin-switch-ee-ce@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/babel-plugin-switch-ee-ce/-/babel-plugin-switch-ee-ce-4.2.0-beta.0.tgz#4ae4f725bd39fc5bea89d78804541ed2f0809868"
integrity sha512-pWvsbGTcuCvpnUZhNpAUsbAZ0OShvVOgzub+le27PbscHuC244MpGwwtyjVmhNFGGXVd+wr6Hk5nKogA48wLmw==
"@strapi/database@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/database/-/database-4.2.0-beta.0.tgz#518df716f96d4f3776567e3dccb19f05f8a1660b"
integrity sha512-HTVlQP3+e++pCnQviRHaL/xy60SEKuVV+BDDKorEvN6O5tqYPXkx1ZkZXhypL8vfP3JQd7j6ZSJm1RQ3uM+tCw==
dependencies:
date-fns "2.22.1"
debug "4.3.1"
fs-extra "10.0.0"
knex "0.95.6"
lodash "4.17.21"
umzug "2.3.0"
"@strapi/design-system@0.0.1-alpha.79":
version "0.0.1-alpha.79"
resolved "https://registry.yarnpkg.com/@strapi/design-system/-/design-system-0.0.1-alpha.79.tgz#23e6a7f73383b72148c926fa74ed0ba1acc32f0a"
@ -4982,6 +5106,64 @@
compute-scroll-into-view "^1.0.17"
prop-types "^15.7.2"
"@strapi/generate-new@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/generate-new/-/generate-new-4.2.0-beta.0.tgz#86862d7713f54b56cb737856ffa0a6c3f55de53e"
integrity sha512-uiJrlUmYDX8461LJ/vIdLlEbRxYZuySPdwK3mGRXqtwqYBHZI7HgiHj/o5rWVkXXcWJywOZaoZNGLAu4p0uwTA==
dependencies:
"@sentry/node" "6.3.0"
chalk "^4.1.1"
execa "^1.0.0"
fs-extra "10.0.0"
inquirer "8.2.0"
lodash "4.17.21"
node-fetch "^2.6.1"
node-machine-id "^1.1.10"
ora "^5.4.0"
tar "6.1.11"
uuid "^3.3.2"
"@strapi/generators@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/generators/-/generators-4.2.0-beta.0.tgz#4d35a1dcc00c6d7771a8509c7f0e777a0fdc587f"
integrity sha512-KePrXfpxJNzPFAAR3S/jdyVlsY4eVwMvwRmXVmhQmXBSIMJMzzdahgG0a7zRTkCcog4dQTPwC9VGADcQJD20pw==
dependencies:
"@sindresorhus/slugify" "1.1.0"
"@strapi/typescript-utils" "4.2.0-beta.0"
"@strapi/utils" "4.2.0-beta.0"
chalk "4.1.2"
fs-extra "10.0.0"
node-plop "0.26.3"
plop "2.7.6"
pluralize "8.0.0"
"@strapi/helper-plugin@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/helper-plugin/-/helper-plugin-4.2.0-beta.0.tgz#787268de66956466fe3f0fbf77c491add3f495cc"
integrity sha512-tDn9ggXlLOLWFYKbW5j85p1wPNa7WH61c4TLAWwF16ouhcv/zx6jKe2jNSHWfpflKBKwUtQsh3eSh3c5RjmXqw==
dependencies:
"@fortawesome/fontawesome-free" "^5.15.2"
"@fortawesome/fontawesome-svg-core" "^1.2.35"
"@fortawesome/free-brands-svg-icons" "^5.15.2"
"@fortawesome/free-solid-svg-icons" "^5.15.3"
"@fortawesome/react-fontawesome" "^0.1.14"
axios "0.25.0"
babel-plugin-styled-components "2.0.2"
formik "2.2.9"
invariant "^2.2.1"
lodash "4.17.21"
match-sorter "^4.0.2"
mini-css-extract-plugin "2.4.4"
moment "^2.29.1"
react "^17.0.2"
react-dom "^17.0.2"
react-helmet "^6.1.0"
react-intl "5.20.2"
react-router "^5.2.0"
react-router-dom "5.2.0"
styled-components "^5.2.3"
whatwg-fetch "^3.6.2"
"@strapi/icons@0.0.1-alpha.79":
version "0.0.1-alpha.79"
resolved "https://registry.yarnpkg.com/@strapi/icons/-/icons-0.0.1-alpha.79.tgz#eff8790ea3897419489a61cbfd72a436661d1420"
@ -4989,6 +5171,195 @@
dependencies:
rimraf "^3.0.2"
"@strapi/logger@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/logger/-/logger-4.2.0-beta.0.tgz#bdb6d08b90ee2a2199804d931e8a493222056972"
integrity sha512-yIJa9w2kbzLYMyU/NFB3Ss4bB9D+Z6LK+NVWGXdtaaPQ0pFXYOgaFY1t/kE3BY9xL6exB34gizwNLaQJ58dZqQ==
dependencies:
lodash "4.17.21"
winston "3.3.3"
"@strapi/plugin-content-manager@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/plugin-content-manager/-/plugin-content-manager-4.2.0-beta.0.tgz#c9844b556df12c49654f3e8e3718b0df51014e38"
integrity sha512-zPXNxqpCYyDk1yNqRb3jIemWqWrlrtEOQ7CiBSGKzRC1PTbvidrVQroPRVTgEHBfNTQVTfq+LDLvOt0wGJpyig==
dependencies:
"@sindresorhus/slugify" "1.1.0"
"@strapi/utils" "4.2.0-beta.0"
lodash "4.17.21"
"@strapi/plugin-content-type-builder@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/plugin-content-type-builder/-/plugin-content-type-builder-4.2.0-beta.0.tgz#5ce112f520b24b5b8152718341b489ed1689ac58"
integrity sha512-uiQZJgoTAKN3MCB9l4BXAkBjmM3TuwVXpwgcaQxS1ybHo2SGFX9w1cq4y2z3Xt3uFGjJT7gGXjOAuLvgriD15w==
dependencies:
"@sindresorhus/slugify" "1.1.0"
"@strapi/generators" "4.2.0-beta.0"
"@strapi/helper-plugin" "4.2.0-beta.0"
"@strapi/utils" "4.2.0-beta.0"
fs-extra "10.0.0"
lodash "4.17.21"
pluralize "^8.0.0"
react "^17.0.2"
react-dom "^17.0.2"
react-intl "5.20.2"
react-redux "7.2.3"
react-router "^5.2.0"
react-router-dom "5.2.0"
redux "^4.0.1"
reselect "^4.0.0"
yup "^0.32.9"
"@strapi/plugin-email@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/plugin-email/-/plugin-email-4.2.0-beta.0.tgz#2fe0a40b02e72df04062831ec8d7ea9f4d9bb315"
integrity sha512-9iUO5stOiwfYQQXaK/acdMqJY0OxlZkRbR8F3UfWDeMXELCzCD/YLn3YsKw6qVvnlYg5RnI/9yqgP32oRhKx2A==
dependencies:
"@strapi/provider-email-sendmail" "4.2.0-beta.0"
"@strapi/utils" "4.2.0-beta.0"
lodash "4.17.21"
"@strapi/plugin-upload@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/plugin-upload/-/plugin-upload-4.2.0-beta.0.tgz#d4f766491b43570c32159295918ed1ecd5786d76"
integrity sha512-eipDx3BASomnM8zE8bQoeI/x8bD+mJdKaZzQZcNz2I7gqXTX28ODOAdxDFfQnSq4+9JiL2teQfeLEvz6N2bf/g==
dependencies:
"@strapi/helper-plugin" "4.2.0-beta.0"
"@strapi/provider-upload-local" "4.2.0-beta.0"
"@strapi/utils" "4.2.0-beta.0"
byte-size "7.0.1"
cropperjs "1.5.11"
fs-extra "10.0.0"
immer "9.0.6"
koa-range "0.3.0"
koa-static "5.0.0"
lodash "4.17.21"
react "^17.0.2"
react-copy-to-clipboard "^5.0.3"
react-dom "^17.0.2"
react-intl "5.20.2"
react-redux "7.2.3"
react-router "^5.2.0"
react-router-dom "5.2.0"
sharp "0.30.1"
"@strapi/provider-email-mailgun@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/provider-email-mailgun/-/provider-email-mailgun-4.2.0-beta.0.tgz#aef92ee50841300215e0cc79edfeba6d0b4e0dd4"
integrity sha512-OQ/k0hjxw2STlPPjK/uhmYiAU8aVEAn9zJMQo/5ehBpKXUO71fqQsSOIT6k/uUYBV6tmgZC/fkzObh/SgzaOEQ==
dependencies:
"@strapi/utils" "4.2.0-beta.0"
mailgun-js "0.22.0"
"@strapi/provider-email-sendmail@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/provider-email-sendmail/-/provider-email-sendmail-4.2.0-beta.0.tgz#534e4a21e913e51c469be0e4739ba83b3045e345"
integrity sha512-HXhP/zPU/3e58SKiOkm30o/kmvhEsKjZrRr82j48JDbkgGxZWg29KqOFb2lq4GREXkl2xvVZQ2brwOVk+ZgN9A==
dependencies:
"@strapi/utils" "4.2.0-beta.0"
sendmail "^1.6.1"
"@strapi/provider-upload-aws-s3@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/provider-upload-aws-s3/-/provider-upload-aws-s3-4.2.0-beta.0.tgz#4a1b73b09f59496f5b818cb19cfddd6990f64738"
integrity sha512-l4QvHb1mupnhNLmhQgujFzYbWYJoec0ifRLpKDXnzVfXSN/PH908h+6lNbiMCnXfbfCjKrVZpxlQCpGKZlgcmg==
dependencies:
aws-sdk "2.892.0"
lodash "4.17.21"
"@strapi/provider-upload-cloudinary@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/provider-upload-cloudinary/-/provider-upload-cloudinary-4.2.0-beta.0.tgz#190728ddf3ad1f1e352d2734771779befa338a6d"
integrity sha512-GsUC6NzW7DbQCBcKy9FjiM5Ezj1ng3qKBqDV8EiEEXJUDigjiLJHGqUbquIJrP1OMSn1oGl3qxYcBHj1z31+7w==
dependencies:
"@strapi/utils" "4.2.0-beta.0"
cloudinary "^1.25.1"
into-stream "^5.1.0"
"@strapi/provider-upload-local@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/provider-upload-local/-/provider-upload-local-4.2.0-beta.0.tgz#16e3e174543a617963e6110a9d0a78d7500f5a50"
integrity sha512-NQjbRtBaYX7jcgQoZo4/iIKwAjpGhSzQ+mpLDVf/C0eGeGO0S2cE1Zpf3FAybnt295pqmghCjm7XVL/euz+Ozg==
dependencies:
"@strapi/utils" "4.2.0-beta.0"
"@strapi/strapi@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/strapi/-/strapi-4.2.0-beta.0.tgz#c44f7ad611ce1cef40532c3a6c406fb6b740e688"
integrity sha512-m1fEP8CfcyEnHvjFsikHmbtWeHw58dRIieVHdWTOfZyIZVaizmUyFqhGbRlfUcpQ8zR6c25wtLUoo0oJvM0l8Q==
dependencies:
"@koa/cors" "3.1.0"
"@koa/router" "10.1.1"
"@strapi/admin" "4.2.0-beta.0"
"@strapi/database" "4.2.0-beta.0"
"@strapi/generate-new" "4.2.0-beta.0"
"@strapi/generators" "4.2.0-beta.0"
"@strapi/logger" "4.2.0-beta.0"
"@strapi/plugin-content-manager" "4.2.0-beta.0"
"@strapi/plugin-content-type-builder" "4.2.0-beta.0"
"@strapi/plugin-email" "4.2.0-beta.0"
"@strapi/plugin-upload" "4.2.0-beta.0"
"@strapi/typescript-utils" "4.2.0-beta.0"
"@strapi/utils" "4.2.0-beta.0"
bcryptjs "2.4.3"
boxen "5.1.2"
chalk "4.1.2"
chokidar "3.5.2"
ci-info "3.2.0"
cli-table3 "0.6.1"
commander "8.2.0"
configstore "5.0.1"
debug "4.3.2"
delegates "1.0.0"
dotenv "10.0.0"
execa "5.1.1"
fs-extra "10.0.0"
glob "7.2.0"
http-errors "1.8.0"
inquirer "8.2.0"
is-docker "2.2.1"
koa "2.13.3"
koa-body "4.2.0"
koa-compose "4.1.0"
koa-compress "5.1.0"
koa-favicon "2.1.0"
koa-helmet "6.1.0"
koa-ip "2.1.0"
koa-session "6.2.0"
koa-static "5.0.0"
lodash "4.17.21"
node-fetch "2.6.7"
node-machine-id "1.1.12"
node-schedule "2.0.0"
open "8.2.1"
ora "5.4.1"
package-json "7.0.0"
qs "6.10.1"
resolve-cwd "3.0.0"
semver "7.3.5"
statuses "2.0.1"
uuid "^3.3.2"
"@strapi/typescript-utils@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/typescript-utils/-/typescript-utils-4.2.0-beta.0.tgz#9e667bb370df396e2ee52a8588fa8b64724f42b9"
integrity sha512-bTk3F6UxmBMRFaNtX8COSii3kChZohN1A/Juq3kAR3nh7z2zClWfWUlfBvbVgx7N41Xl0mfg75WKSRnyCT3kHw==
dependencies:
fs-extra "10.0.1"
lodash "4.17.21"
typescript "4.6.2"
"@strapi/utils@4.2.0-beta.0":
version "4.2.0-beta.0"
resolved "https://registry.yarnpkg.com/@strapi/utils/-/utils-4.2.0-beta.0.tgz#312bfb67aa895c1a11e1a7a9cbdb3275791cb760"
integrity sha512-si6xLONWeRZdayOAVNcLodbGJlv4KwC96XGUViQgdHx1fNh5+ar/BcH7DF9uG4U7t7RVS5LiPtr3rZfB9BlGzw==
dependencies:
"@sindresorhus/slugify" "1.1.0"
date-fns "2.24.0"
http-errors "1.8.0"
lodash "4.17.21"
yup "0.32.9"
"@stylelint/postcss-css-in-js@^0.37.2":
version "0.37.2"
resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2"
@ -20551,6 +20922,13 @@ specificity@^0.4.1:
resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019"
integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==
speed-measure-webpack-plugin@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.5.0.tgz#caf2c5bee24ab66c1c7c30e8daa7910497f7681a"
integrity sha512-Re0wX5CtM6gW7bZA64ONOfEPEhwbiSF/vz6e2GvadjuaPrQcHTQdRGsD8+BE7iUOysXH8tIenkPCQBEcspXsNg==
dependencies:
chalk "^4.1.0"
split-array-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-2.0.0.tgz#85a4f8bfe14421d7bca7f33a6d176d0c076a53b1"