diff --git a/build.config.js b/build.config.mjs similarity index 89% rename from build.config.js rename to build.config.mjs index 279b9e345..7e14e38bc 100644 --- a/build.config.js +++ b/build.config.mjs @@ -1,4 +1,6 @@ -process.env.ENV_FILE !== null && require('dotenv').config({ path: process.env.ENV_FILE }); +import dotenv from 'dotenv' + +process.env.ENV_FILE !== null && dotenv.config({ path: process.env.ENV_FILE }); const __API_SERVER_PORT__ = process.env.GRAPHQL_URL ? new URL(process.env.GRAPHQL_URL).port @@ -27,4 +29,4 @@ const config = { __BACKEND_URL__: process.env.BACKEND_URL || `${__SERVER_PROTOCOL__}://${__SERVER_HOST__}:${__WEB_SERVER_PORT__}`, }; -module.exports = config; +export default config diff --git a/package.json b/package.json index 64c9fcf1e..51b830b79 100755 --- a/package.json +++ b/package.json @@ -234,6 +234,7 @@ "envalid": "~7.3.1", "enzyme": "^3.11.0", "esbuild": "^0.15.13", + "esbuild-loader": "^2.19.0", "eslint": "^8.27.0", "eslint-config-airbnb-typescript": "^17.0.0", "eslint-config-prettier": "^8.5.0", diff --git a/packages-modules/counter/browser/package.json b/packages-modules/counter/browser/package.json index c0acbf876..3a448689d 100755 --- a/packages-modules/counter/browser/package.json +++ b/packages-modules/counter/browser/package.json @@ -5,6 +5,7 @@ "license": "ISC", "author": "CDMBase LLC", "main": "lib/index.js", + "type": "module", "typings": "lib/index.d.ts", "scripts": { "build": "yarn build:clean && yarn build:lib", diff --git a/servers/frontend-server/babel.config.js b/servers/frontend-server/babel.config.cjs similarity index 100% rename from servers/frontend-server/babel.config.js rename to servers/frontend-server/babel.config.cjs diff --git a/servers/frontend-server/build.config.js b/servers/frontend-server/build.config.mjs similarity index 80% rename from servers/frontend-server/build.config.js rename to servers/frontend-server/build.config.mjs index 6f5c9ee57..a6336de45 100644 --- a/servers/frontend-server/build.config.js +++ b/servers/frontend-server/build.config.mjs @@ -1,5 +1,6 @@ +import buildConfig from "../../build.config.mjs" const config = { - ...require('../../build.config'), + ...buildConfig, __CLIENT__: true, __SERVER__: false, __DEV__: process.env.NODE_ENV !== 'production', @@ -10,4 +11,4 @@ const config = { __FRONTEND_BUILD_DIR__: process.env.FRONTEND_BUILD_DIR || './dist/web', }; -module.exports = config; +export default config diff --git a/servers/frontend-server/package.json b/servers/frontend-server/package.json index 39ac17007..b2a4e84f2 100755 --- a/servers/frontend-server/package.json +++ b/servers/frontend-server/package.json @@ -14,9 +14,10 @@ "license": "MIT", "author": "CDMBase LLC", "main": "index.js", + "type": "module", "scripts": { "prebuild": "yarn build:clean", - "build": "cross-env NODE_ENV=production webpack", + "build": "cross-env NODE_ENV=production webpack -c webpack.config.mjs", "build:clean": "rimraf dist .awcache", "build:debug": "cross-env DEBUGGING=true NODE_ENV=production webpack", "build:debug:verbose": "yarn build:debug -- -v", @@ -54,6 +55,7 @@ "@apollo/client": "~3.3.21", "@apollo/react-components": "^4.0.0", "@apollo/react-hoc": "^4.0.0", + "@babel/runtime": "^7.20.1", "@cdm-logger/client": "^7.0.12", "@cdm-logger/server": "^7.0.12", "@common-stack/client-core": "0.2.16", diff --git a/servers/frontend-server/src/backend/app.ts b/servers/frontend-server/src/backend/app.ts index d5cb439fc..c7d141b50 100755 --- a/servers/frontend-server/src/backend/app.ts +++ b/servers/frontend-server/src/backend/app.ts @@ -4,29 +4,30 @@ /* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable jest/require-hook */ // tslint:disable-next-line:no-unused-expression -process.env.ENV_FILE !== null && require('dotenv').config({ path: process.env.ENV_FILE }); +// import dotenv from 'dotenv'; +// process.env.ENV_FILE !== null && dotenv.config({ path: process.env.ENV_FILE }); import { logger } from '@cdm-logger/server'; import './server'; -process.on('uncaughtException', (ex) => { - logger.error(ex); - process.exit(1); -}); +// process.on('uncaughtException', (ex) => { +// logger.error(ex); +// process.exit(1); +// }); -process.on('unhandledRejection', (reason) => { - logger.error(reason); -}); +// process.on('unhandledRejection', (reason) => { +// logger.error(reason); +// }); -if ((module as any).hot) { - (module as any).hot.status((event) => { - if (event === 'abort' || event === 'fail') { - logger.error(`HMR error status: ${event}`); - // Signal webpack.run.js to do full-reload of the back-end - process.exit(250); - } - }); +// if ((module as any).hot) { +// (module as any).hot.status((event) => { +// if (event === 'abort' || event === 'fail') { +// logger.error(`HMR error status: ${event}`); +// // Signal webpack.run.js to do full-reload of the back-end +// process.exit(250); +// } +// }); - (module as any).hot.accept(); -} +// (module as any).hot.accept(); +// } diff --git a/servers/frontend-server/src/backend/server.ts b/servers/frontend-server/src/backend/server.ts index 6319b35b3..5675ea91d 100755 --- a/servers/frontend-server/src/backend/server.ts +++ b/servers/frontend-server/src/backend/server.ts @@ -14,7 +14,7 @@ import { errorMiddleware } from './middlewares/error'; import { config } from '../config'; import modules from './modules'; -const cookiesMiddleware = require('universal-cookie-express'); +// const cookiesMiddleware = require('universal-cookie-express'); // TODO let server; @@ -27,16 +27,16 @@ for (const applyBeforeware of modules.beforewares) { applyBeforeware(app); } -app.use(cookiesMiddleware()); +// app.use(cookiesMiddleware()); // By default it uses backend_url port, which may conflict with graphql server. const { port: serverPort } = url.parse(config.LOCAL_BACKEND_URL); // Don't rate limit heroku app.enable('trust proxy'); -if (!__DEV__) { - app.use(compression()); -} +// if (!__DEV__) { +// app.use(compression()); +// } app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); @@ -68,21 +68,21 @@ server.on('close', () => { server = undefined; }); -if ((module as any).hot) { - (module as any).hot.dispose(() => { - try { - if (server) { - server.close(); - } - } catch (error) { - logger.error(error.stack); - } - }); - (module as any).hot.accept(['./website'], () => { - logger.debug('...reloading middleware'); - }); - - (module as any).hot.accept(); -} +// if ((module as any).hot) { +// (module as any).hot.dispose(() => { +// try { +// if (server) { +// server.close(); +// } +// } catch (error) { +// logger.error(error.stack); +// } +// }); +// (module as any).hot.accept(['./website'], () => { +// logger.debug('...reloading middleware'); +// }); + +// (module as any).hot.accept(); +// } export default server; diff --git a/servers/frontend-server/src/config/base-apollo-client.ts b/servers/frontend-server/src/config/base-apollo-client.ts index 1837f0bb4..0c2d60d98 100755 --- a/servers/frontend-server/src/config/base-apollo-client.ts +++ b/servers/frontend-server/src/config/base-apollo-client.ts @@ -151,10 +151,10 @@ export const createApolloClient = ({ const links = [errorLink, retrylink, ...(clientState.preLinks || []), link]; // Add apollo logger during development only - if (isBrowser && (isDev || isDebug)) { - const apolloLogger = require('apollo-link-logger'); - links.unshift(apolloLogger.default); - } + // if (isBrowser && (isDev || isDebug)) { + // const apolloLogger = require('apollo-link-logger'); + // links.unshift(apolloLogger.default); + // } const params: ApolloClientOptions = { queryDeduplication: true, diff --git a/servers/frontend-server/src/config/base-redux-config.ts b/servers/frontend-server/src/config/base-redux-config.ts index 164bfa3fa..28997df1e 100644 --- a/servers/frontend-server/src/config/base-redux-config.ts +++ b/servers/frontend-server/src/config/base-redux-config.ts @@ -63,16 +63,16 @@ export const createReduxStore = ({ middlewares.unshift(...preMiddleware); } // Add redux logger during development only - if ((isDev || isDebug) && isBrowser) { - const { createLogger } = require('redux-logger'); + // if ((isDev || isDebug) && isBrowser) { + // const { createLogger } = require('redux-logger'); - middlewares.push( - createLogger({ - level: 'info', - collapsed: true, - }), - ); - } + // middlewares.push( + // createLogger({ + // level: 'info', + // collapsed: true, + // }), + // ); + // } if (middleware) { middlewares.push(...middleware); diff --git a/servers/frontend-server/src/config/public-config.ts b/servers/frontend-server/src/config/public-config.ts index 850928516..6c6e20f37 100755 --- a/servers/frontend-server/src/config/public-config.ts +++ b/servers/frontend-server/src/config/public-config.ts @@ -17,7 +17,7 @@ const publicEnv = [ const isBrowser = typeof window !== 'undefined'; if (!isBrowser) { - process.env.ENV_FILE !== null && require('dotenv').config({ path: process.env.ENV_FILE }); + // process.env.ENV_FILE !== null && require('dotenv').config({ path: process.env.ENV_FILE }); } const base = (isBrowser ? ( window.__ENV__ || __ENV__) : process.env) || {}; const env: any = {}; diff --git a/servers/frontend-server/src/config/redux-config.ts b/servers/frontend-server/src/config/redux-config.ts index 05de62650..bc81fce7e 100644 --- a/servers/frontend-server/src/config/redux-config.ts +++ b/servers/frontend-server/src/config/redux-config.ts @@ -2,9 +2,9 @@ /* eslint-disable no-underscore-dangle */ /* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable global-require */ -import storage from 'redux-persist/lib/storage'; +// import storage from 'redux-persist/es/storage/index.mjs'; import { combineReducers } from 'redux'; -import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2'; +// import autoMergeLevel2 from 'redux-persist/es/stateReconciler/autoMergeLevel2.mjs'; import { createEpicMiddleware } from 'redux-observable'; import { connectRouter, routerMiddleware } from 'connected-react-router'; import { persistReducer } from 'redux-persist'; @@ -29,8 +29,8 @@ export const epicMiddleware = createEpicMiddleware({ export const persistConfig = { key: REDUX_PERSIST_KEY, - storage, - stateReconciler: autoMergeLevel2, + // storage, + // stateReconciler: autoMergeLevel2, transforms: modules.reduxPersistStateTransformers, }; @@ -92,11 +92,11 @@ export const createReduxStore = (history) => { (module as any).hot.accept('../config/epic-config', () => { // we may need to reload epic always as we don't // know whether it is updated using our `modules` - const nextRootEpic = require('./epic-config').rootEpic; - // First kill any running epics - store.dispatch({ type: 'EPIC_END' }); - // Now setup the new one - epic$.next(nextRootEpic); + // const nextRootEpic = require('./epic-config').rootEpic; + // // First kill any running epics + // store.dispatch({ type: 'EPIC_END' }); + // // Now setup the new one + // epic$.next(nextRootEpic); }); } container.bind('ReduxStore').toConstantValue(store); diff --git a/servers/frontend-server/src/webpack-index.js b/servers/frontend-server/src/webpack-index.js new file mode 100644 index 000000000..867d02e73 --- /dev/null +++ b/servers/frontend-server/src/webpack-index.js @@ -0,0 +1,6 @@ + +import dotenv from 'dotenv'; +function util() { + return "I'm a util!"; +} +export default util; diff --git a/servers/frontend-server/src/webpack-test.js b/servers/frontend-server/src/webpack-test.js new file mode 100644 index 000000000..ba0b72eda --- /dev/null +++ b/servers/frontend-server/src/webpack-test.js @@ -0,0 +1,8 @@ +// import { logger } from '@cdm-logger/client'; +import module from '@sample-stack/counter-module-browser'; +// import util from './webpack-index'; +// import { Schemas } from '@vscode-alt/monaco-editor/esm/vs/base/common/network'; + +// console.log(util()); +// logger.info('---UUUU', module); +console.log('----Modules)') diff --git a/servers/frontend-server/tsconfig.json b/servers/frontend-server/tsconfig.json index 9c9f41124..af43cb65a 100755 --- a/servers/frontend-server/tsconfig.json +++ b/servers/frontend-server/tsconfig.json @@ -5,6 +5,9 @@ "esModuleInterop": true, "sourceMap": true, "declaration": false, + "lib": ["es2021"], + "module": "commonjs", + "target": "es2021", "jsx": "react", "outDir": "./dist", "rootDir": "./src", diff --git a/servers/frontend-server/webpack.config.js b/servers/frontend-server/webpack.config.js deleted file mode 100755 index 2a8958e85..000000000 --- a/servers/frontend-server/webpack.config.js +++ /dev/null @@ -1,284 +0,0 @@ -/* eslint-disable no-underscore-dangle */ -const webpack = require('webpack'); -const path = require('path'); -const waitOn = require('wait-on'); -const MiniCSSExtractPlugin = require('mini-css-extract-plugin'); -const { WebpackManifestPlugin } = require('webpack-manifest-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const LoadablePlugin = require('@loadable/webpack-plugin'); -const Dotenv = require('dotenv-webpack'); -const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); -const CompressionPlugin = require('compression-webpack-plugin'); -const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin'); -const zlib = require('zlib'); -const ServerConfig = require('../../tools/webpack/server.config'); - -const bundleStats = process.env.BUNDLE_STATS || false; - -const buildConfig = require('./build.config'); - -const modulenameExtra = process.env.MODULENAME_EXTRA ? `${process.env.MODULENAME_EXTRA}|` : ''; -const modulenameRegex = new RegExp(`node_modules(?![\\\\/](${modulenameExtra}@sample-stack)).*`); - -const plugins = [ - new webpack.ProvidePlugin({ - process: 'process/browser', - Buffer: ['buffer', 'Buffer'], - }), -]; -if (bundleStats) { - plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'static' })); -} - -if (!buildConfig.__SSR__ && buildConfig.__DEV__) { - const dotenv = require('dotenv-safe').config({ - allowEmptyValues: true, - path: process.env.ENV_FILE, - example: '../../config/development/dev.env', - }); - plugins.push( - new webpack.DefinePlugin({ - __ENV__: JSON.stringify(dotenv.parsed), - }), - ); -} - -const isDevelopment = process.env.NODE_ENV !== 'production'; -class WaitOnWebpackPlugin { - constructor(waitOnUrl) { - this.waitOnUrl = waitOnUrl; - this.done = false; - } - - apply(compiler) { - compiler.hooks.afterEmit.tapAsync('WaitOnPlugin', (compilation, callback) => { - if (!this.done) { - console.log(`Waiting for backend at ${this.waitOnUrl}`); - waitOn({ resources: [this.waitOnUrl] }, () => { - console.log(`Backend at ${this.waitOnUrl} has started`); - this.done = true; - callback(); - }); - } else { - callback(); - } - }); - } -} - -/** - * Webpack 5 need manual polyfills. If you need to add anything you can check the following link - * https://gist.github.com/ef4/d2cf5672a93cf241fd47c020b9b3066a - */ -const config = { - entry: { - index: ['raf/polyfill', 'core-js/stable', 'regenerator-runtime/runtime', './src/index.tsx'], - }, - name: 'web', - module: { - rules: [ - { test: /\.mjs$/, include: /node_modules/, type: 'javascript/auto' }, - { - test: /\.(png|ico|jpg|gif|xml)$/, - use: { loader: 'url-loader', options: { name: '[fullhash].[ext]', limit: 100000 } }, - }, - { - test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, - use: { loader: 'url-loader', options: { name: '[fullhash].[ext]', limit: 100000 } }, - }, - { - test: /\.(otf|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, - use: { loader: 'file-loader', options: { name: '[fullhash].[ext]' } }, - }, - { - test: /\.css$/, - use: [ - process.env.NODE_ENV === 'production' - ? { loader: MiniCSSExtractPlugin.loader } - : { loader: 'style-loader' }, - { loader: 'css-loader', options: { sourceMap: true, importLoaders: 1 } }, - { loader: 'postcss-loader', options: { sourceMap: true } }, - ], - }, - { - test: /\.scss$/, - use: [ - process.env.NODE_ENV === 'production' - ? { loader: MiniCSSExtractPlugin.loader } - : { loader: 'style-loader' }, - { loader: 'css-loader', options: { sourceMap: true, importLoaders: 1 } }, - { loader: 'postcss-loader', options: { sourceMap: true } }, - { loader: 'sass-loader', options: { sourceMap: true } }, - ], - }, - { - test: /\.less$/, - use: [ - process.env.NODE_ENV === 'production' - ? { loader: MiniCSSExtractPlugin.loader } - : { loader: 'style-loader' }, - { loader: 'css-loader', options: { sourceMap: true, importLoaders: 1 } }, - { loader: 'postcss-loader', options: { sourceMap: true } }, - { loader: 'less-loader', options: { javascriptEnabled: true, sourceMap: true } }, - ], - }, - { test: /\.graphqls/, use: { loader: 'raw-loader' } }, - { test: /\.(graphql|gql)$/, use: [{ loader: 'graphql-tag/loader' }] }, - { - test: /\.[jt]sx?$/, - exclude: modulenameRegex, - use: { - loader: 'babel-loader', - options: { - babelrc: true, - rootMode: 'upward-optional', - plugins: [isDevelopment && require.resolve('react-refresh/babel')].filter(Boolean), - }, - }, - }, - ], - unsafeCache: false, - }, - resolve: { - symlinks: true, - cacheWithContext: false, - unsafeCache: false, - extensions: [ - '.web.mjs', - '.web.js', - '.web.jsx', - '.web.ts', - '.web.tsx', - '.mjs', - '.js', - '.jsx', - '.ts', - '.tsx', - '.json', - ], - fallback: { - fs: false, - path: require.resolve('path-browserify'), - }, - }, - watchOptions: { ignored: /dist/ }, - output: { - pathinfo: false, - filename: '[name].[fullhash].js', - chunkFilename: '[name].[chunkhash].js', - path: path.join(__dirname, `${buildConfig.__FRONTEND_BUILD_DIR__}`), - publicPath: '/', - }, - devtool: process.env.NODE_ENV === 'production' ? 'nosources-source-map' : 'cheap-module-source-map', - mode: process.env.NODE_ENV || 'development', - performance: { hints: false }, - plugins: (process.env.NODE_ENV !== 'production' - ? [] - .concat( - typeof STORYBOOK_MODE === 'undefined' - ? [ - new WaitOnWebpackPlugin( - `tcp:${buildConfig.__SERVER_HOST__}:${buildConfig.__API_SERVER_PORT__}`, - ), - ] - : [], - ) - .concat( - new Dotenv({ - path: process.env.ENV_FILE, - }), - ) - .concat(new ReactRefreshWebpackPlugin()) - : [ - new MiniCSSExtractPlugin({ - chunkFilename: '[name].[id].[chunkhash].css', - filename: `[name].[chunkhash].css`, - }), - new CompressionPlugin({ - filename: '[path][base].gz', - algorithm: 'gzip', - test: /\.js$|\.css$|\.html$/, - threshold: 10240, - minRatio: 0.8, - }), - new CompressionPlugin({ - filename: '[path][base].br', - algorithm: 'brotliCompress', - test: /\.(js|css|html|svg)$/, - compressionOptions: { - params: { - [zlib.constants.BROTLI_PARAM_QUALITY]: 11, - }, - }, - threshold: 10240, - minRatio: 0.8, - }), - ] - ) - .concat([ - ...plugins, - new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: ['dist'] }), - new webpack.DefinePlugin( - Object.assign( - ...Object.entries(buildConfig).map(([k, v]) => ({ - [k]: typeof v !== 'string' ? v : `"${v.replace(/\\/g, '\\\\')}"`, - })), - ), - ), - new WebpackManifestPlugin({ fileName: 'assets.json' }), - new LoadablePlugin(), - ]) - .concat( - buildConfig.__SSR__ - ? [] - : [ - new HtmlWebpackPlugin({ - template: '../../tools/html-plugin-template.ejs', - inject: true, - cache: false, - }), - ], - ), - optimization: { - splitChunks: { - chunks: 'all', - }, - runtimeChunk: true, - concatenateModules: false, - }, - node: { __dirname: true, __filename: true }, - devServer: { - hot: true, - headers: { 'Access-Control-Allow-Origin': '*' }, - open: true, - historyApiFallback: true, - port: buildConfig.__WEB_DEV_SERVER_PORT__, - devMiddleware: { - publicPath: '/', - writeToDisk: (pathname) => /(assets.json|loadable-stats.json)$/.test(pathname), - }, - ...(buildConfig.__SSR__ - ? { - proxy: { - '!(/sockjs-node/**/*|/*.hot-update.{json,js})': { - target: 'http://localhost:8080', - logLevel: 'info', - }, - }, - } - : {}), - }, -}; - -const ServersConfig = [config]; -if (buildConfig.__SSR__) { - ServersConfig.push( - ServerConfig({ - buildConfig: { ...buildConfig, __CLIENT__: false, __SERVER__: true }, - indexFilePath: './src/backend/app.ts', - currentDir: __dirname, - }), - ); -} -module.exports = ServersConfig; diff --git a/servers/frontend-server/webpack.config.mjs b/servers/frontend-server/webpack.config.mjs new file mode 100755 index 000000000..5d492e7d9 --- /dev/null +++ b/servers/frontend-server/webpack.config.mjs @@ -0,0 +1,297 @@ +/* eslint-disable no-underscore-dangle */ +import webpack from 'webpack'; +import path from 'path'; +import waitOn from 'wait-on'; +import MiniCSSExtractPlugin from 'mini-css-extract-plugin'; +import { WebpackManifestPlugin } from 'webpack-manifest-plugin'; +import { CleanWebpackPlugin } from 'clean-webpack-plugin'; +import HtmlWebpackPlugin from 'html-webpack-plugin'; +import LoadablePlugin from '@loadable/webpack-plugin'; +import Dotenv from 'dotenv-webpack'; +import dotenvSafe from 'dotenv-safe'; +import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; +import CompressionPlugin from 'compression-webpack-plugin'; +import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin'; +import zlib from 'zlib'; +import ServerConfig from '../../tools/webpack/server.config.mjs'; +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; +import buildConfig from './build.config.mjs'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const bundleStats = process.env.BUNDLE_STATS || false; + +const modulenameExtra = process.env.MODULENAME_EXTRA ? `${process.env.MODULENAME_EXTRA}|` : ''; +const modulenameRegex = new RegExp(`node_modules(?![\\\\/](${modulenameExtra}@sample-stack)).*`); + +const plugins = [ + new webpack.ProvidePlugin({ + process: 'process/browser', + Buffer: ['buffer', 'Buffer'], + }), +]; +if (bundleStats) { + plugins.push(new BundleAnalyzerPlugin({ analyzerMode: 'static' })); +} + +if (!buildConfig.__SSR__ && buildConfig.__DEV__) { + const dotenv = dotenvSafe.config({ + allowEmptyValues: true, + path: process.env.ENV_FILE, + example: '../../config/development/dev.env', + }); + plugins.push( + new webpack.DefinePlugin({ + __ENV__: JSON.stringify(dotenv.parsed), + }), + ); +} + +const isDevelopment = process.env.NODE_ENV !== 'production'; +class WaitOnWebpackPlugin { + constructor(waitOnUrl) { + this.waitOnUrl = waitOnUrl; + this.done = false; + } + + apply(compiler) { + compiler.hooks.afterEmit.tapAsync('WaitOnPlugin', (compilation, callback) => { + if (!this.done) { + console.log(`Waiting for backend at ${this.waitOnUrl}`); + waitOn({ resources: [this.waitOnUrl] }, () => { + console.log(`Backend at ${this.waitOnUrl} has started`); + this.done = true; + callback(); + }); + } else { + callback(); + } + }); + } +} + +// UNCOMMENT it after serverside webpack fixed. +/** + * Webpack 5 need manual polyfills. If you need to add anything you can check the following link + * https://gist.github.com/ef4/d2cf5672a93cf241fd47c020b9b3066a + */ +// const config = { +// entry: { +// index: ['raf/polyfill', 'core-js/stable', 'regenerator-runtime/runtime', './src/index.tsx'], +// }, +// name: 'web', +// module: { +// rules: [ +// { test: /\.mjs$/, include: /node_modules/, type: 'javascript/auto' }, +// { +// test: /\.(png|ico|jpg|gif|xml)$/, +// use: { loader: 'url-loader', options: { name: '[fullhash].[ext]', limit: 100000 } }, +// }, +// { +// test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, +// use: { loader: 'url-loader', options: { name: '[fullhash].[ext]', limit: 100000 } }, +// }, +// { +// test: /\.(otf|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, +// use: { loader: 'file-loader', options: { name: '[fullhash].[ext]' } }, +// }, +// { +// test: /\.css$/, +// use: [ +// process.env.NODE_ENV === 'production' +// ? { loader: MiniCSSExtractPlugin.loader } +// : { loader: 'style-loader' }, +// { loader: 'css-loader', options: { sourceMap: true, importLoaders: 1 } }, +// { loader: 'postcss-loader', options: { sourceMap: true } }, +// ], +// }, +// { +// test: /\.scss$/, +// use: [ +// process.env.NODE_ENV === 'production' +// ? { loader: MiniCSSExtractPlugin.loader } +// : { loader: 'style-loader' }, +// { loader: 'css-loader', options: { sourceMap: true, importLoaders: 1 } }, +// { loader: 'postcss-loader', options: { sourceMap: true } }, +// { loader: 'sass-loader', options: { sourceMap: true } }, +// ], +// }, +// { +// test: /\.less$/, +// use: [ +// process.env.NODE_ENV === 'production' +// ? { loader: MiniCSSExtractPlugin.loader } +// : { loader: 'style-loader' }, +// { loader: 'css-loader', options: { sourceMap: true, importLoaders: 1 } }, +// { loader: 'postcss-loader', options: { sourceMap: true } }, +// { loader: 'less-loader', options: { javascriptEnabled: true, sourceMap: true } }, +// ], +// }, +// { test: /\.graphqls/, use: { loader: 'raw-loader' } }, +// { test: /\.(graphql|gql)$/, use: [{ loader: 'graphql-tag/loader' }] }, +// { +// test: /\.[jt]sx?$/, +// exclude: modulenameRegex, +// use: { +// loader: 'babel-loader', +// options: { +// babelrc: true, +// rootMode: 'upward-optional', +// // plugins: [isDevelopment && require.resolve('react-refresh/babel')].filter(Boolean), +// }, +// }, +// }, +// ], +// unsafeCache: false, +// }, +// resolve: { +// symlinks: true, +// cacheWithContext: false, +// unsafeCache: false, +// extensions: [ +// '.web.mjs', +// '.web.js', +// '.web.jsx', +// '.web.ts', +// '.web.tsx', +// '.mjs', +// '.js', +// '.jsx', +// '.ts', +// '.tsx', +// '.json', +// ], +// fallback: { +// fs: false, +// // path: require.resolve('path-browserify'), +// }, +// }, +// watchOptions: { ignored: /dist/ }, +// output: { +// pathinfo: false, +// filename: '[name].[fullhash].js', +// chunkFilename: '[name].[chunkhash].js', +// path: path.join(__dirname, `${buildConfig.__FRONTEND_BUILD_DIR__}`), +// publicPath: '/', +// library: { +// type: 'module', +// }, +// }, +// experiments: { +// outputModule: true, +// }, +// devtool: process.env.NODE_ENV === 'production' ? 'nosources-source-map' : 'cheap-module-source-map', +// mode: process.env.NODE_ENV || 'development', +// performance: { hints: false }, +// plugins: (process.env.NODE_ENV !== 'production' +// ? [] +// .concat( +// typeof STORYBOOK_MODE === 'undefined' +// ? [ +// new WaitOnWebpackPlugin( +// `tcp:${buildConfig.__SERVER_HOST__}:${buildConfig.__API_SERVER_PORT__}`, +// ), +// ] +// : [], +// ) +// .concat( +// new Dotenv({ +// path: process.env.ENV_FILE, +// }), +// ) +// .concat(new ReactRefreshWebpackPlugin()) +// : [ +// new MiniCSSExtractPlugin({ +// chunkFilename: '[name].[id].[chunkhash].css', +// filename: `[name].[chunkhash].css`, +// }), +// new CompressionPlugin({ +// filename: '[path][base].gz', +// algorithm: 'gzip', +// test: /\.js$|\.css$|\.html$/, +// threshold: 10240, +// minRatio: 0.8, +// }), +// new CompressionPlugin({ +// filename: '[path][base].br', +// algorithm: 'brotliCompress', +// test: /\.(js|css|html|svg)$/, +// compressionOptions: { +// params: { +// [zlib.constants.BROTLI_PARAM_QUALITY]: 11, +// }, +// }, +// threshold: 10240, +// minRatio: 0.8, +// }), +// ] +// ) +// .concat([ +// ...plugins, +// new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: ['dist'] }), +// new webpack.DefinePlugin( +// Object.assign( +// ...Object.entries(buildConfig).map(([k, v]) => ({ +// [k]: typeof v !== 'string' ? v : `"${v.replace(/\\/g, '\\\\')}"`, +// })), +// ), +// ), +// new WebpackManifestPlugin({ fileName: 'assets.json' }), +// new LoadablePlugin(), +// ]) +// .concat( +// buildConfig.__SSR__ +// ? [] +// : [ +// new HtmlWebpackPlugin({ +// template: '../../tools/html-plugin-template.ejs', +// inject: true, +// cache: false, +// }), +// ], +// ), +// optimization: { +// splitChunks: { +// chunks: 'all', +// }, +// runtimeChunk: true, +// concatenateModules: false, +// }, +// node: { __dirname: true, __filename: true }, +// devServer: { +// hot: true, +// headers: { 'Access-Control-Allow-Origin': '*' }, +// open: true, +// historyApiFallback: true, +// port: buildConfig.__WEB_DEV_SERVER_PORT__, +// devMiddleware: { +// publicPath: '/', +// writeToDisk: (pathname) => /(assets.json|loadable-stats.json)$/.test(pathname), +// }, +// ...(buildConfig.__SSR__ +// ? { +// proxy: { +// '!(/sockjs-node/**/*|/*.hot-update.{json,js})': { +// target: 'http://localhost:8080', +// logLevel: 'info', +// }, +// }, +// } +// : {}), +// }, +// }; + +// const ServersConfig = [config]; +const ServersConfig = []; + +if (buildConfig.__SSR__) { + ServersConfig.push( + ServerConfig({ + buildConfig: { ...buildConfig, __CLIENT__: false, __SERVER__: true }, + indexFilePath: './src/backend/app.ts', + currentDir: __dirname, + }), + ); +} +export default ServersConfig; diff --git a/servers/frontend-server/webpack.config.test.mjs b/servers/frontend-server/webpack.config.test.mjs new file mode 100644 index 000000000..29ce0e5be --- /dev/null +++ b/servers/frontend-server/webpack.config.test.mjs @@ -0,0 +1,61 @@ +import path from 'path'; +import webpack from 'webpack'; + +import { CleanWebpackPlugin } from 'clean-webpack-plugin'; +import nodeExternals from 'webpack-node-externals'; +import Dotenv from 'dotenv-webpack'; +import NodemonPlugin from 'nodemon-webpack-plugin'; // Ding +import { fileURLToPath } from 'url'; +import buildConfig from './build.config.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +const modulenameExtra = process.env.MODULENAME_EXTRA ? `${process.env.MODULENAME_EXTRA}|` : ''; +const modulenameRegex = new RegExp( + `(${modulenameExtra}@pubngo-stack*|client|webpack/hot/poll)|(\\.(css|less|scss|png|ico|jpg|gif|xml|woff|woff2|otf|ttf|eot|svg)(\\?[0-9a-z]+)?$)`, +); + +export default { + mode: 'development', + entry: './src/webpack-test.js', + target: ["node", "es2021"], + output: { + filename: 'index.js', + path: path.resolve(__dirname, 'dist'), + library: { + type: 'module', + }, + }, + experiments: { + outputModule: true, + }, + devtool: process.env.NODE_ENV === 'production' ? 'nosources-source-map' : 'cheap-module-source-map', + mode: process.env.NODE_ENV || 'development', + performance: { hints: false }, + plugins: (process.env.NODE_ENV !== 'production' + ? [ + // new Dotenv(), + new webpack.HotModuleReplacementPlugin(), + new NodemonPlugin({ script: './dist/index.js' }), + ] + : [] + ).concat([ + new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: ['dist'] }), + // new webpack.BannerPlugin({ banner: 'require("source-map-support").install();', raw: true, entryOnly: true }), + new webpack.DefinePlugin( + Object.assign( + ...Object.entries(buildConfig).map(([k, v]) => ({ + [k]: typeof v !== 'string' ? v : `"${v.replace(/\\/g, '\\\\')}"`, + })), + ), + ), + ]), + // target: 'node', + externals: [ + nodeExternals(), + nodeExternals({ + modulesDir: path.resolve(__dirname, '../../node_modules'), + allowlist: [modulenameRegex], + }), + ], +}; diff --git a/tools/webpack/server.config.js b/tools/webpack/server.config.mjs similarity index 70% rename from tools/webpack/server.config.js rename to tools/webpack/server.config.mjs index e128a6c55..c73c51569 100644 --- a/tools/webpack/server.config.js +++ b/tools/webpack/server.config.mjs @@ -1,11 +1,11 @@ -const webpack = require('webpack'); -const path = require('path'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); +import webpack from 'webpack'; +import path from 'path'; +import CopyWebpackPlugin from 'copy-webpack-plugin'; -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const nodeExternals = require('webpack-node-externals'); -const Dotenv = require('dotenv-webpack'); -const NodemonPlugin = require('nodemon-webpack-plugin'); // Ding +import { CleanWebpackPlugin } from 'clean-webpack-plugin'; +import nodeExternals from 'webpack-node-externals'; +import Dotenv from 'dotenv-webpack'; +import NodemonPlugin from 'nodemon-webpack-plugin'; // Ding const modulenameExtra = process.env.MODULENAME_EXTRA ? `${process.env.MODULENAME_EXTRA}|` : ''; const modulenameRegex = new RegExp( @@ -14,10 +14,20 @@ const modulenameRegex = new RegExp( const config = ({ buildConfig, indexFilePath, currentDir }) => ({ entry: { - index: (process.env.NODE_ENV !== 'production' ? ['webpack/hot/poll?200'] : []).concat([ - 'raf/polyfill', - indexFilePath, - ]), + // index: (process.env.NODE_ENV !== 'production' ? ['webpack/hot/poll?200'] : []).concat([ + // // 'raf/polyfill', + // indexFilePath, + // ]), + server: { + import: indexFilePath, + /* + * This prevents code-splitting of async imports into separate chunks. + * We can't allow that for the server, because Webpack will duplicate + * certain modules that must be shared into each chunk (context, + * gettext, DBDefs, linkedEntities, ...). + */ + chunkLoading: false, + }, }, name: 'server', module: { @@ -66,7 +76,19 @@ const config = ({ buildConfig, indexFilePath, currentDir }) => ({ test: /\.[tj]sx?$/, use: { loader: 'babel-loader', - options: { babelrc: true, rootMode: 'upward-optional' }, + options: { babelrc: true, rootMode: 'upward-optional', + plugins: [ + // ['babel-plugin-transform-require-ignore', {}], + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + ], + }, + // loader: 'esbuild-loader', + // options: { + // loader: 'tsx', + // target: 'es2021', + // }, + }, }, { test: /locales/, use: { loader: '@alienfast/i18next-loader' } }, @@ -94,11 +116,17 @@ const config = ({ buildConfig, indexFilePath, currentDir }) => ({ watchOptions: { ignored: /dist/ }, output: { pathinfo: false, - filename: 'main.js', + filename: 'index.js', path: path.join(currentDir, 'dist'), - publicPath: '/', + library: { + type: 'module', + }, + // publicPath: '/', sourceMapFilename: '[name].[chunkhash].js.map', }, + experiments: { + outputModule: true, + }, devtool: process.env.NODE_ENV === 'production' ? 'nosources-source-map' : 'cheap-module-source-map', mode: process.env.NODE_ENV || 'development', performance: { hints: false }, @@ -111,7 +139,7 @@ const config = ({ buildConfig, indexFilePath, currentDir }) => ({ : [] ).concat([ new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: ['dist'] }), - new webpack.BannerPlugin({ banner: 'require("source-map-support").install();', raw: true, entryOnly: true }), + // new webpack.BannerPlugin({ banner: 'require("source-map-support").install();', raw: true, entryOnly: true }), new webpack.DefinePlugin( Object.assign( ...Object.entries(buildConfig).map(([k, v]) => ({ @@ -119,16 +147,8 @@ const config = ({ buildConfig, indexFilePath, currentDir }) => ({ })), ), ), - new CopyWebpackPlugin({ - patterns: [ - { - from: '../../tools/esm-wrapper.js', - to: 'index.js', - }, - ], - }), ]), - target: 'node', + target: 'node18.0', externals: [ nodeExternals(), nodeExternals({ @@ -140,7 +160,7 @@ const config = ({ buildConfig, indexFilePath, currentDir }) => ({ concatenateModules: false, minimize: false, }, - node: { __dirname: true, __filename: true }, + // node: { __dirname: true, __filename: true }, }); -module.exports = config; +export default config; diff --git a/tsconfig.json b/tsconfig.json index dddeace76..75ff67c2b 100755 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { "target": "es2017", - "module": "commonjs", - "moduleResolution": "node", + "module": "nodenext", + "moduleResolution": "node16", "jsx": "react", "declaration": true, "experimentalDecorators": true, diff --git a/yarn.lock b/yarn.lock index 6d68c0d2c..2b06f20b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -287,7 +287,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.20.2": +"@babel/core@^7.11.6", "@babel/core@^7.12.10", "@babel/core@^7.19.6", "@babel/core@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== @@ -1231,6 +1231,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz#3f02c784e0b711970d7d8ccc96c4359d64e27ac7" + integrity sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" @@ -1462,7 +1469,7 @@ core-js-compat "^3.25.1" semver "^6.3.0" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.20.2": +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== @@ -3201,15 +3208,6 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@hot-loader/react-dom@^17.0.2": - version "17.0.2" - resolved "https://registry.yarnpkg.com/@hot-loader/react-dom/-/react-dom-17.0.2.tgz#0b24e484093e8f97eb5c72bebdda44fc20bc8400" - integrity sha512-G2RZrFhsQClS+bdDh/Ojpk3SgocLPUGnvnJDTQYnmKSSwXtU+Yh+8QMs+Ia3zaAvBiOSpIIDSUxuN69cvKqrWg== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - "@humanwhocodes/config-array@^0.11.6": version "0.11.7" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" @@ -4984,24 +4982,6 @@ dependencies: esquery "^1.0.1" -"@pm2/agent@~1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@pm2/agent/-/agent-1.0.8.tgz#cd15d84dbfc95427e6fccce72bc165b79f1d8579" - integrity sha512-r8mud8BhBz+a2yjlgtk+PBXUR5EQ9UKSJCs232OxfCmuBr1MZw0Mo+Kfog6WJ8OmVk99r1so9yTUK4IyrgGcMQ== - dependencies: - async "~3.2.0" - chalk "~3.0.0" - dayjs "~1.8.24" - debug "~4.3.1" - eventemitter2 "~5.0.1" - fclone "~1.0.11" - nssocket "0.6.0" - pm2-axon "~4.0.1" - pm2-axon-rpc "~0.7.0" - proxy-agent "~4.0.1" - semver "~7.2.0" - ws "~7.2.0" - "@pm2/agent@~2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@pm2/agent/-/agent-2.0.1.tgz#0edffc54cd8ee2b12f90136264e7880f3f78c79d" @@ -6589,6 +6569,112 @@ magic-string "^0.25.0" string.prototype.matchall "^4.0.6" +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz#652bfd4ed0a0699843585cda96faeb09d6e1306e" + integrity sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz#4b78994ab7d39032c729903fc2dd5c0fa4565cb8" + integrity sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + dependencies: + "@babel/types" "^7.20.0" + entities "^4.4.0" + +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -6636,6 +6722,11 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -12104,25 +12195,11 @@ crocket@^0.9.11: dependencies: xpipe "*" -cron@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" - integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== - dependencies: - moment-timezone "^0.5.x" - croner@~4.1.92: version "4.1.97" resolved "https://registry.yarnpkg.com/croner/-/croner-4.1.97.tgz#6e373dc7bb3026fab2deb0d82685feef20796766" integrity sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ== -cross-env@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" - integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag== - dependencies: - cross-spawn "^7.0.0" - cross-env@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -12347,7 +12424,7 @@ css-tree@1.0.0-alpha.37: mdn-data "2.0.4" source-map "^0.6.1" -css-tree@^1.0.0-alpha.39, css-tree@^1.1.2: +css-tree@^1.0.0-alpha.39, css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== @@ -12466,7 +12543,7 @@ cssnano@^4.1.10: is-resolvable "^1.0.0" postcss "^7.0.0" -csso@^4.0.2: +csso@^4.0.2, csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== @@ -12617,7 +12694,7 @@ dayjs@1.x, dayjs@^1.8.15, dayjs@~1.11.5: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.6.tgz#2e79a226314ec3ec904e3ee1dd5a4f5e5b1c7afb" integrity sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ== -dayjs@~1.8.24, dayjs@~1.8.25: +dayjs@~1.8.24: version "1.8.36" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.36.tgz#be36e248467afabf8f5a86bae0de0cdceecced50" integrity sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw== @@ -12827,15 +12904,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -degenerator@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-2.2.0.tgz#49e98c11fa0293c5b26edfbb52f15729afcdb254" - integrity sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg== - dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - degenerator@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-3.0.2.tgz#6a61fcc42a702d6e50ff6023fe17bff435f68235" @@ -14070,6 +14138,18 @@ esbuild-linux-s390x@0.15.13: resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz#d52880ece229d1bd10b2d936b792914ffb07c7fc" integrity sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag== +esbuild-loader@^2.19.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.20.0.tgz#28fcff0142fa7bd227512d69f31e9a6e202bb88f" + integrity sha512-dr+j8O4w5RvqZ7I4PPB4EIyVTd679EBQnMm+JBB7av+vu05Zpje2IpK5N3ld1VWa+WxrInIbNFAg093+E1aRsA== + dependencies: + esbuild "^0.15.6" + joycon "^3.0.1" + json5 "^2.2.0" + loader-utils "^2.0.0" + tapable "^2.2.0" + webpack-sources "^2.2.0" + esbuild-netbsd-64@0.15.13: version "0.15.13" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz#de14da46f1d20352b43e15d97a80a8788275e6ed" @@ -14100,7 +14180,7 @@ esbuild-windows-arm64@0.15.13: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz#4ffd01b6b2888603f1584a2fe96b1f6a6f2b3dd8" integrity sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg== -esbuild@^0.15.13: +esbuild@^0.15.13, esbuild@^0.15.6: version "0.15.13" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.13.tgz#7293480038feb2bafa91d3f6a20edab3ba6c108a" integrity sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ== @@ -19677,7 +19757,7 @@ join-component@^1.1.0: resolved "https://registry.yarnpkg.com/join-component/-/join-component-1.1.0.tgz#b8417b750661a392bee2c2537c68b2a9d4977cd5" integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== -joycon@^3.1.1: +joycon@^3.0.1, joycon@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== @@ -22076,7 +22156,7 @@ moleculer@^0.14.2: node-fetch "^2.6.7" recursive-watch "^1.1.4" -moment-timezone@^0.5.21, moment-timezone@^0.5.x: +moment-timezone@^0.5.21: version "0.5.38" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.38.tgz#9674a5397b8be7c13de820fd387d8afa0f725aad" integrity sha512-nMIrzGah4+oYZPflDvLZUgoVUO4fvAqHstvG3xAUnMolWncuAiLDWNnJZj6EwJGMGfb1ZcuTFE6GI3hNOVWI/Q== @@ -22418,7 +22498,7 @@ nested-error-stacks@~2.0.1: resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b" integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A== -netmask@^2.0.1, netmask@^2.0.2: +netmask@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== @@ -23597,21 +23677,6 @@ p-waterfall@^2.1.1: dependencies: p-reduce "^2.0.0" -pac-proxy-agent@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz#66883eeabadc915fc5e95457324cb0f0ac78defb" - integrity sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^4.1.0" - raw-body "^2.2.0" - socks-proxy-agent "5" - pac-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz#b718f76475a6a5415c2efbe256c1c971c84f635e" @@ -23627,15 +23692,6 @@ pac-proxy-agent@^5.0.0: raw-body "^2.2.0" socks-proxy-agent "5" -pac-resolver@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-4.2.0.tgz#b82bcb9992d48166920bc83c7542abb454bd9bdd" - integrity sha512-rPACZdUyuxT5Io/gFKUeeZFfE5T7ve7cAkE5TUZRRfuKP0u5Hocwe48X7ZEm6mYB+bTB0Qf+xlVlA/RM/i6RCQ== - dependencies: - degenerator "^2.2.0" - ip "^1.1.5" - netmask "^2.0.1" - pac-resolver@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-5.0.1.tgz#c91efa3a9af9f669104fa2f51102839d01cde8e7" @@ -24057,7 +24113,7 @@ pidtree@^0.6.0: resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== -pidusage@2.0.21, pidusage@^2.0.21: +pidusage@^2.0.21: version "2.0.21" resolved "https://registry.yarnpkg.com/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" integrity sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA== @@ -24200,42 +24256,6 @@ pm2-sysmonit@^1.2.8: systeminformation "^5.7" tx2 "~1.0.4" -pm2@^4.2.1: - version "4.5.6" - resolved "https://registry.yarnpkg.com/pm2/-/pm2-4.5.6.tgz#2f477a158957860e440f1e71e88dc82627fcff99" - integrity sha512-4J5q704Xl6VmpmQhXFGMJL4kXyyQw3AZM1FE9vRxhS3LiDI/+WVBtOM6pqJ4g/RKW+AUjEkc23i/DCC4BVenDA== - dependencies: - "@pm2/agent" "~1.0.8" - "@pm2/io" "~5.0.0" - "@pm2/js-api" "~0.6.7" - "@pm2/pm2-version-check" latest - async "~3.2.0" - blessed "0.1.81" - chalk "3.0.0" - chokidar "^3.5.1" - cli-tableau "^2.0.0" - commander "2.15.1" - cron "1.8.2" - dayjs "~1.8.25" - debug "^4.3.1" - enquirer "2.3.6" - eventemitter2 "5.0.1" - fclone "1.0.11" - mkdirp "1.0.4" - needle "2.4.0" - pidusage "2.0.21" - pm2-axon "~4.0.1" - pm2-axon-rpc "~0.7.0" - pm2-deploy "~1.0.2" - pm2-multimeter "^0.1.2" - promptly "^2" - ps-list "6.3.0" - semver "^7.2" - source-map-support "0.5.19" - sprintf-js "1.1.2" - vizion "2.2.1" - yamljs "0.3.0" - pm2@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/pm2/-/pm2-5.2.2.tgz#f563c2b2dbbc19a1380d228a89794f854aa435f2" @@ -24942,20 +24962,6 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-4.0.1.tgz#326c3250776c7044cd19655ccbfadf2e065a045c" - integrity sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA== - dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^4.1.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" - proxy-agent@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-5.0.0.tgz#d31405c10d6e8431fde96cba7a0c027ce01d633b" @@ -24980,11 +24986,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== -ps-list@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/ps-list/-/ps-list-6.3.0.tgz#a2b775c2db7d547a28fbaa3a05e4c281771259be" - integrity sha512-qau0czUSB0fzSlBOQt0bo+I2v6R+xiQdj78e1BR/Qjfl5OHWJ/urXi8+ilw1eHe+5hSeDI1wrwVTgDp2wst4oA== - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -28097,14 +28098,6 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -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== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@0.5.21, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.19, source-map-support@^0.5.21, source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -28926,6 +28919,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + svg-url-loader@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-8.0.0.tgz#05d57af5b19d7caa39624a88e3cd535243634991" @@ -28952,6 +28950,19 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" +svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + swap-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-2.0.2.tgz#671aedb3c9c137e2985ef51c51f9e98445bf70d9" @@ -30548,7 +30559,7 @@ vinyl@1.X, vinyl@^1.0.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vizion@2.2.1, vizion@~2.2.1: +vizion@~2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/vizion/-/vizion-2.2.1.tgz#04201ea45ffd145d5b5210e385a8f35170387fb2" integrity sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww== @@ -31684,11 +31695,6 @@ ws@^8.4.2: resolved "https://registry.yarnpkg.com/ws/-/ws-8.9.0.tgz#2a994bb67144be1b53fe2d23c53c028adeb7f45e" integrity sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg== -ws@~7.2.0: - version "7.2.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.5.tgz#abb1370d4626a5a9cd79d8de404aa18b3465d10d" - integrity sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA== - ws@~7.4.0: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"