diff --git a/.buildkite/pipelines/pull_request/webpack_bundle_analyzer.yml b/.buildkite/pipelines/pull_request/webpack_bundle_analyzer.yml index 6b265c3146a63..d14bcfa8fee58 100644 --- a/.buildkite/pipelines/pull_request/webpack_bundle_analyzer.yml +++ b/.buildkite/pipelines/pull_request/webpack_bundle_analyzer.yml @@ -2,7 +2,7 @@ steps: - command: .buildkite/scripts/steps/webpack_bundle_analyzer/build_and_upload.sh label: 'Build Webpack Bundle Analyzer reports' agents: - machineType: n2-standard-4 + machineType: n2-standard-8 preemptible: true key: webpack_bundle_analyzer timeout_in_minutes: 60 diff --git a/.buildkite/scripts/steps/functional/profiling_cypress.sh b/.buildkite/scripts/steps/functional/profiling_cypress.sh index 318d45d0b125d..012d18ad7f60a 100644 --- a/.buildkite/scripts/steps/functional/profiling_cypress.sh +++ b/.buildkite/scripts/steps/functional/profiling_cypress.sh @@ -14,5 +14,5 @@ echo "--- Profiling Cypress Tests" cd "$XPACK_DIR" -NODE_OPTIONS=--openssl-legacy-provider node solutions/observability/plugins/profiling/scripts/test/e2e.js \ - --kibana-install-dir "$KIBANA_BUILD_LOCATION" \ \ No newline at end of file +node solutions/observability/plugins/profiling/scripts/test/e2e.js \ + --kibana-install-dir "$KIBANA_BUILD_LOCATION" \ diff --git a/.buildkite/scripts/steps/storybooks/build_and_upload.ts b/.buildkite/scripts/steps/storybooks/build_and_upload.ts index 6e0d0a7125673..6b1432b2cbb08 100644 --- a/.buildkite/scripts/steps/storybooks/build_and_upload.ts +++ b/.buildkite/scripts/steps/storybooks/build_and_upload.ts @@ -39,7 +39,11 @@ const build = () => { console.log('--- Building Storybooks'); for (const storybook of Object.keys(storybookAliases)) { - exec(`STORYBOOK_BASE_URL=${STORYBOOK_BASE_URL}`, `yarn storybook --site ${storybook}`); + exec( + `STORYBOOK_BASE_URL=${STORYBOOK_BASE_URL}`, + `NODE_OPTIONS=--max-old-space-size=6144`, + `yarn storybook --site ${storybook}` + ); } }; diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 468680be6105b..0479cc642c938 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -157,6 +157,7 @@ packages/kbn-management/storybook/config @elastic/kibana-management packages/kbn-manifest @elastic/kibana-core packages/kbn-mock-idp-plugin @elastic/kibana-security packages/kbn-mock-idp-utils @elastic/kibana-security +packages/kbn-node-libs-browser-webpack-plugin @elastic/kibana-operations packages/kbn-openapi-bundler @elastic/security-detection-rule-management packages/kbn-openapi-generator @elastic/security-detection-rule-management packages/kbn-optimizer @elastic/kibana-operations diff --git a/examples/embeddable_examples/public/app/overview.tsx b/examples/embeddable_examples/public/app/overview.tsx index dd93f4c3063b0..09f972f7a666a 100644 --- a/examples/embeddable_examples/public/app/overview.tsx +++ b/examples/embeddable_examples/public/app/overview.tsx @@ -11,7 +11,7 @@ import React from 'react'; import { css } from '@emotion/react'; import { EuiMarkdownFormat } from '@elastic/eui'; // @ts-ignore -import overviewMarkdown from '!!raw-loader!@kbn/embeddable-plugin/README.md'; +import overviewMarkdown from '@kbn/embeddable-plugin/README.md?raw'; export const Overview = () => { return ( diff --git a/examples/embeddable_examples/public/app/register_embeddable.tsx b/examples/embeddable_examples/public/app/register_embeddable.tsx index 836eaa8f06209..b15b65cb1da0c 100644 --- a/examples/embeddable_examples/public/app/register_embeddable.tsx +++ b/examples/embeddable_examples/public/app/register_embeddable.tsx @@ -10,13 +10,13 @@ import React from 'react'; import { EuiCodeBlock, EuiSpacer, EuiText } from '@elastic/eui'; // @ts-ignore -import registerSearchEmbeddableSource from '!!raw-loader!../react_embeddables/search/register_search_embeddable'; +import registerSearchEmbeddableSource from '../react_embeddables/search/register_search_embeddable?raw'; // @ts-ignore -import registerAttachActionSource from '!!raw-loader!../react_embeddables/search/register_add_search_panel_action'; +import registerAttachActionSource from '../react_embeddables/search/register_add_search_panel_action?raw'; // @ts-ignore -import registerFieldListEmbeddableSource from '!!raw-loader!../react_embeddables/field_list/register_field_list_embeddable'; +import registerFieldListEmbeddableSource from '../react_embeddables/field_list/register_field_list_embeddable?raw'; // @ts-ignore -import registerReactEmbeddableSavedObjectSource from '!!raw-loader!../react_embeddables/register_saved_object_example'; +import registerReactEmbeddableSavedObjectSource from '../react_embeddables/register_saved_object_example?raw'; export const RegisterEmbeddable = () => { return ( diff --git a/examples/field_formats_example/public/app.tsx b/examples/field_formats_example/public/app.tsx index 894a49c63098d..f378c24cec86c 100644 --- a/examples/field_formats_example/public/app.tsx +++ b/examples/field_formats_example/public/app.tsx @@ -24,15 +24,15 @@ import { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; import * as example1 from './examples/1_using_existing_format'; import * as example2 from './examples/2_creating_custom_formatter'; // @ts-ignore -import example1SampleCode from '!!raw-loader!./examples/1_using_existing_format'; +import example1SampleCode from './examples/1_using_existing_format?raw'; // @ts-ignore -import example2SampleCodePart1 from '!!raw-loader!../common/example_currency_format'; +import example2SampleCodePart1 from '../common/example_currency_format?raw'; // @ts-ignore -import example2SampleCodePart2 from '!!raw-loader!./examples/2_creating_custom_formatter'; +import example2SampleCodePart2 from './examples/2_creating_custom_formatter?raw'; // @ts-ignore -import example2SampleCodePart3 from '!!raw-loader!../server/examples/2_creating_custom_formatter'; +import example2SampleCodePart3 from '../server/examples/2_creating_custom_formatter?raw'; // @ts-ignore -import example3SampleCode from '!!raw-loader!./examples/3_creating_custom_format_editor'; +import example3SampleCode from './examples/3_creating_custom_format_editor?raw'; export interface Deps { fieldFormats: FieldFormatsStart; diff --git a/package.json b/package.json index 8debfdf0d27d0..c413aa63765cc 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "serverless-security": "node scripts/kibana --dev --serverless=security", "spec_to_console": "node scripts/spec_to_console", "start": "node scripts/kibana --dev", - "storybook": "node --openssl-legacy-provider scripts/storybook", + "storybook": "node --no-deprecation scripts/storybook", "test:ftr": "node scripts/functional_tests", "test:ftr:runner": "node scripts/functional_test_runner", "test:ftr:server": "node scripts/functional_tests_server", @@ -682,6 +682,7 @@ "@kbn/newsfeed-plugin": "link:src/platform/plugins/shared/newsfeed", "@kbn/newsfeed-test-plugin": "link:test/common/plugins/newsfeed", "@kbn/no-data-page-plugin": "link:src/platform/plugins/private/no_data_page", + "@kbn/node-libs-browser-webpack-plugin": "link:packages/kbn-node-libs-browser-webpack-plugin", "@kbn/notifications-plugin": "link:x-pack/platform/plugins/shared/notifications", "@kbn/object-utils": "link:src/platform/packages/shared/kbn-object-utils", "@kbn/object-versioning": "link:src/platform/packages/shared/kbn-object-versioning", @@ -1311,7 +1312,6 @@ "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-numeric-separator": "^7.24.7", "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-runtime": "^7.24.7", @@ -1325,7 +1325,7 @@ "@bazel/typescript": "4.6.2", "@cypress/debugging-proxy": "2.0.1", "@cypress/grep": "^4.0.1", - "@cypress/webpack-preprocessor": "^6.0.1", + "@cypress/webpack-preprocessor": "^6.0.2", "@elastic/eslint-plugin-eui": "0.0.2", "@elastic/makelogs": "^6.1.1", "@elastic/synthetics": "^1.12.1", @@ -1536,11 +1536,13 @@ "@storybook/addon-storyshots": "^6.5.16", "@storybook/addons": "^6.5.16", "@storybook/api": "^6.5.16", + "@storybook/builder-webpack5": "^6.5.16", "@storybook/client-api": "^6.5.16", "@storybook/components": "^6.5.16", "@storybook/core": "^6.5.16", "@storybook/core-common": "^6.5.16", "@storybook/core-events": "^6.5.16", + "@storybook/manager-webpack5": "^6.5.16", "@storybook/node-logger": "^6.5.16", "@storybook/preview-web": "^6.5.16", "@storybook/react": "^6.5.16", @@ -1667,11 +1669,10 @@ "@types/vinyl": "^2.0.4", "@types/vinyl-fs": "^3.0.2", "@types/watchpack": "^1.1.5", - "@types/webpack": "^4.41.3", + "@types/webpack": "^5.28.5", "@types/webpack-bundle-analyzer": "^4.7.0", - "@types/webpack-env": "^1.15.3", - "@types/webpack-merge": "^4.1.5", - "@types/webpack-sources": "^0.1.4", + "@types/webpack-env": "^1.18.5", + "@types/webpack-sources": "^3.2.3", "@types/xml2js": "^0.4.11", "@types/yargs": "^15.0.0", "@types/yauzl": "^2.9.1", @@ -1686,12 +1687,13 @@ "autoprefixer": "^10.4.7", "axe-core": "^4.10.0", "babel-jest": "^29.7.0", - "babel-loader": "^8.2.5", + "babel-loader": "^9.1.3", "babel-plugin-add-module-exports": "^1.0.4", "babel-plugin-istanbul": "^6.1.1", "babel-plugin-require-context-hook": "^1.0.0", "babel-plugin-styled-components": "^2.1.4", "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "babel-plugin-transform-require-default": "^0.1.7", "babel-plugin-transform-typescript-metadata": "^0.3.2", "backport": "^9.6.4", "blob-polyfill": "^7.0.20220408", @@ -1700,12 +1702,12 @@ "chance": "1.0.18", "chromedriver": "^131.0.1", "clarify": "^2.2.0", - "clean-webpack-plugin": "^3.0.0", + "clean-webpack-plugin": "^4.0.0", "cli-progress": "^3.12.0", "cli-table3": "^0.6.1", "content-security-policy-parser": "^0.6.0", "cpy": "^8.1.1", - "css-loader": "^3.4.2", + "css-loader": "^7.1.2", "cssnano": "^5.1.12", "cssnano-preset-default": "^5.2.12", "cssstyle": "^4.1.0", @@ -1744,10 +1746,9 @@ "eslint-traverse": "^1.0.0", "exit-hook": "^2.2.0", "expect": "^29.7.0", - "expose-loader": "^0.7.5", + "expose-loader": "^5.0.0", "express": "^4.21.2", "fetch-mock": "^7.3.9", - "file-loader": "^4.2.0", "find-cypress-specs": "^1.41.4", "form-data": "^4.0.0", "geckodriver": "^5.0.0", @@ -1755,7 +1756,7 @@ "gulp-postcss": "^9.0.1", "gulp-terser": "^2.1.0", "has-ansi": "^3.0.0", - "html-loader": "^1.3.2", + "html-loader": "^5.1.0", "http-proxy": "^1.18.1", "http2-proxy": "^5.0.53", "http2-wrapper": "^2.2.1", @@ -1779,10 +1780,9 @@ "license-checker": "^25.0.1", "listr2": "^8.2.5", "lmdb": "^2.9.2", - "loader-utils": "^2.0.4", "marge": "^1.0.1", "micromatch": "^4.0.8", - "mini-css-extract-plugin": "1.1.0", + "mini-css-extract-plugin": "2.9.1", "minimist": "^1.2.8", "mocha": "^10.3.0", "mocha-junit-reporter": "^2.0.2", @@ -1795,7 +1795,7 @@ "mutation-observer": "^1.0.3", "native-hdr-histogram": "^1.0.0", "nock": "12.0.3", - "null-loader": "^3.0.0", + "node-libs-browser": "^2.2.1", "nyc": "^17.1.0", "oboe": "^2.1.7", "openapi-types": "^12.1.3", @@ -1809,12 +1809,11 @@ "playwright-chromium": "1.49.0", "pngjs": "^7.0.0", "postcss": "^8.4.31", - "postcss-loader": "^4.2.0", + "postcss-loader": "^8.1.1", "postcss-prefix-selector": "^1.16.0", "postcss-scss": "^4.0.4", "prettier": "^2.8.8", "proxy": "^2.1.1", - "raw-loader": "^3.1.0", "react-is": "^17.0.2", "react-test-renderer": "^17.0.2", "recast": "^0.23.9", @@ -1822,15 +1821,15 @@ "resolve": "^1.22.0", "rxjs-marbles": "^7.0.1", "sass-embedded": "^1.78.0", - "sass-loader": "^10.5.1", + "sass-loader": "^10.5.2", "selenium-webdriver": "^4.27.0", "sharp": "0.32.6", "simple-git": "^3.16.0", "sinon": "^7.4.2", "sort-package-json": "^1.53.1", "source-map": "^0.7.4", - "string-replace-loader": "^2.2.0", - "style-loader": "^1.1.3", + "string-replace-loader": "^3.1.0", + "style-loader": "^4.0.0", "stylelint": "^14.16.1", "stylelint-scss": "^4.3.0", "superagent": "^10.1.1", @@ -1841,25 +1840,23 @@ "table": "^6.8.2", "tape": "^5.9.0", "terser": "^5.36.0", - "terser-webpack-plugin": "^4.2.3", + "terser-webpack-plugin": "^5.3.10", "tough-cookie": "^5.0.0", "trace": "^3.2.0", "tree-kill": "^1.2.2", "ts-morph": "^15.1.0", "tsd": "^0.31.1", "typescript": "5.1.6", - "url-loader": "^2.2.0", - "val-loader": "^1.1.1", + "val-loader": "^6.0.0", "vinyl-fs": "^4.0.0", "watchpack": "^1.6.0", "web-streams-polyfill": "^4.0.0", - "webpack": "^4.41.5", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^4.2.2", - "webpack-sources": "^1.4.1", - "webpack-visualizer-plugin2": "^1.1.0", + "webpack": "^5.95.0", + "webpack-bundle-analyzer": "^4.10.2", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.4", + "webpack-merge": "^6.0.1", + "webpack-sources": "^3.2.3", "xml-crypto": "^6.0.0", "xmlbuilder": "15.1.1", "yargs": "^15.4.1", diff --git a/packages/kbn-ambient-ui-types/index.d.ts b/packages/kbn-ambient-ui-types/index.d.ts index 93d191900a855..9aa1876e1bc23 100644 --- a/packages/kbn-ambient-ui-types/index.d.ts +++ b/packages/kbn-ambient-ui-types/index.d.ts @@ -36,3 +36,15 @@ declare module '*.mdx' { // eslint-disable-next-line import/no-default-export export default MDXComponent; } + +declare module '*?asUrl' { + const content: string; + // eslint-disable-next-line import/no-default-export + export default string; +} + +declare module '*?raw' { + const content: string; + // eslint-disable-next-line import/no-default-export + export default string; +} diff --git a/packages/kbn-babel-preset/BUILD.bazel b/packages/kbn-babel-preset/BUILD.bazel index 37a07ed15d77f..32e642d5742d5 100644 --- a/packages/kbn-babel-preset/BUILD.bazel +++ b/packages/kbn-babel-preset/BUILD.bazel @@ -41,6 +41,7 @@ RUNTIME_DEPS = [ "@npm//babel-plugin-styled-components", "@npm//babel-plugin-transform-react-remove-prop-types", "@npm//babel-plugin-transform-typescript-metadata", + "@npm//babel-plugin-transform-require-default", ] js_library( diff --git a/packages/kbn-babel-preset/webpack_preset.js b/packages/kbn-babel-preset/webpack_preset.js index 78a1b23232287..143026ed37bba 100644 --- a/packages/kbn-babel-preset/webpack_preset.js +++ b/packages/kbn-babel-preset/webpack_preset.js @@ -10,7 +10,12 @@ const { USES_STYLED_COMPONENTS } = require('./styled_components_files'); /** @type {import('@babel/core').ConfigFunction} */ -module.exports = (api, options = {}) => { +module.exports = ( + api, + options = { + useTransformRequireDefault: false, + } +) => { return { presets: [ [ @@ -27,6 +32,18 @@ module.exports = (api, options = {}) => { ], [require('./common_preset'), options], ], + plugins: [ + // Conditionally include babel-plugin-transform-require-default + // + // We need to include this plugin in the main worker webpack config that handles our + // non node modules code base in order to support resolving esm + // as a priority over cjs (if that's defined in the mainFields). Without that we might run into + // cases where we have a repo wide cjs code that requires an esm module (coming from the ui-shared-deps that also prioritizes esm) + // which will not be applying the .default key in the require itself. + ...(options.useTransformRequireDefault + ? [require.resolve('babel-plugin-transform-require-default')] + : []), + ], env: { production: { plugins: [ diff --git a/packages/kbn-cypress-config/index.ts b/packages/kbn-cypress-config/index.ts index a6ef563682ee2..425f9d4fced3f 100644 --- a/packages/kbn-cypress-config/index.ts +++ b/packages/kbn-cypress-config/index.ts @@ -10,6 +10,7 @@ import { v4 as uuid } from 'uuid'; import { defineConfig } from 'cypress'; import wp from '@cypress/webpack-preprocessor'; +import { NodeLibsBrowserPlugin } from '@kbn/node-libs-browser-webpack-plugin'; export function defineCypressConfig(options?: Cypress.ConfigOptions) { return defineConfig({ @@ -43,6 +44,7 @@ export function defineCypressConfig(options?: Cypress.ConfigOptions) { }, ], }, + plugins: [new NodeLibsBrowserPlugin()], }, })(file); }); diff --git a/packages/kbn-cypress-config/tsconfig.json b/packages/kbn-cypress-config/tsconfig.json index 2f9ddddbeea23..4a36f2ecdf6a5 100644 --- a/packages/kbn-cypress-config/tsconfig.json +++ b/packages/kbn-cypress-config/tsconfig.json @@ -13,5 +13,7 @@ "exclude": [ "target/**/*" ], - "kbn_references": [] + "kbn_references": [ + "@kbn/node-libs-browser-webpack-plugin", + ] } diff --git a/packages/kbn-eslint-plugin-imports/src/rules/no_boundary_crossing.ts b/packages/kbn-eslint-plugin-imports/src/rules/no_boundary_crossing.ts index 3f426e13a6215..f5a536ababce9 100644 --- a/packages/kbn-eslint-plugin-imports/src/rules/no_boundary_crossing.ts +++ b/packages/kbn-eslint-plugin-imports/src/rules/no_boundary_crossing.ts @@ -89,8 +89,8 @@ export const NoBoundaryCrossingRule: Rule.RuleModule = { return visitAllImportStatements((req, { node, importer, type }) => { if ( req === null || - // we can ignore imports using the raw-loader, they will need to be resolved but can be managed on a case by case basis - req.startsWith('!!raw-loader') || + // we can ignore imports using the ?raw (replacing legacy raw-loader), they will need to be resolved but can be managed on a case by case basis + req.endsWith('?raw') || // type only imports can stretch across all the boundaries isTypeOnlyImport(importer) ) { diff --git a/packages/kbn-eslint-plugin-imports/src/rules/no_group_crossing_imports.ts b/packages/kbn-eslint-plugin-imports/src/rules/no_group_crossing_imports.ts index fb262e88a02ac..518325dc1eb4f 100644 --- a/packages/kbn-eslint-plugin-imports/src/rules/no_group_crossing_imports.ts +++ b/packages/kbn-eslint-plugin-imports/src/rules/no_group_crossing_imports.ts @@ -39,8 +39,8 @@ export const NoGroupCrossingImportsRule: Rule.RuleModule = { return visitAllImportStatements((req, { node }) => { if ( req === null || - // we can ignore imports using the raw-loader, they will need to be resolved but can be managed on a case by case basis - req.startsWith('!!raw-loader') + // we can ignore imports using the ?raw (replacing legacy raw-loader), they will need to be resolved but can be managed on a case by case basis + req.endsWith('?raw') ) { return; } diff --git a/packages/kbn-import-resolver/src/import_resolver.ts b/packages/kbn-import-resolver/src/import_resolver.ts index 9ca16981b2afc..e012a7b6004aa 100644 --- a/packages/kbn-import-resolver/src/import_resolver.ts +++ b/packages/kbn-import-resolver/src/import_resolver.ts @@ -231,8 +231,8 @@ export class ImportResolver { resolve(req: string, dirname: string): ResolveResult | null { // transform webpack loader requests and focus on the actual file selected const lastExI = req.lastIndexOf('!'); - if (lastExI > -1) { - const quesI = req.lastIndexOf('?'); + const quesI = req.lastIndexOf('?'); + if (lastExI > -1 || quesI > -1) { const prefix = req.slice(0, lastExI + 1); const postfix = quesI > -1 ? req.slice(quesI) : ''; const result = this.resolve(req.slice(lastExI + 1, quesI > -1 ? quesI : undefined), dirname); diff --git a/packages/kbn-node-libs-browser-webpack-plugin/BUILD.bazel b/packages/kbn-node-libs-browser-webpack-plugin/BUILD.bazel new file mode 100644 index 0000000000000..b01c5a4c56766 --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/BUILD.bazel @@ -0,0 +1,40 @@ +load("@npm//@bazel/typescript:index.bzl", "ts_config") +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") +load("//src/dev/bazel:index.bzl", "pkg_npm", "ts_project") + +SRCS = glob( + [ + "**/*.js", + "**/*.ts", + ], + exclude = [ + "**/*.config.js", + "**/*.mock.*", + "**/*.test.*", + "**/*.stories.*", + "**/__snapshots__/**", + "**/integration_tests/**", + "**/mocks/**", + "**/scripts/**", + "**/storybook/**", + "**/test_fixtures/**", + "**/test_helpers/**", + ], +) + +BUNDLER_DEPS = [ + "@npm//node-libs-browser", +] + +filegroup( + name = 'root_pkg_json', + srcs = ["//:package.json"] +) + +js_library( + name = "kbn-node-libs-browser-webpack-plugin", + package_name = "@kbn/node-libs-browser-webpack-plugin", + srcs = ["package.json"] + SRCS, + deps = BUNDLER_DEPS, + visibility = ["//visibility:public"], +) diff --git a/packages/kbn-node-libs-browser-webpack-plugin/README.md b/packages/kbn-node-libs-browser-webpack-plugin/README.md new file mode 100644 index 0000000000000..97a3a76998a97 --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/README.md @@ -0,0 +1,3 @@ +# @kbn/node-libs-browser-webpack-plugin + +Empty package generated by @kbn/generate diff --git a/packages/kbn-node-libs-browser-webpack-plugin/index.js b/packages/kbn-node-libs-browser-webpack-plugin/index.js new file mode 100644 index 0000000000000..f55b032aeda31 --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/index.js @@ -0,0 +1,75 @@ +/* + * 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +/** @typedef {import('webpack').Compiler} WebpackCompiler */ + +/* eslint-disable import/no-extraneous-dependencies */ +// @ts-expect-error +const nodeLibsBrowser = require('node-libs-browser'); + +const NodeLibsBrowserPlugin = class NodeLibsBrowserPlugin { + /** + * @param {WebpackCompiler} compiler + */ + apply(compiler) { + compiler.options.plugins.push( + new compiler.webpack.ProvidePlugin({ + Buffer: [nodeLibsBrowser.buffer, 'Buffer'], + console: nodeLibsBrowser.console, + process: nodeLibsBrowser.process, + }) + ); + + compiler.options.resolve.fallback = { + assert: nodeLibsBrowser.assert, + buffer: nodeLibsBrowser.buffer, + child_process: false, + cluster: false, + console: false, + constants: nodeLibsBrowser.constants, + crypto: nodeLibsBrowser.crypto, + dgram: false, + dns: false, + domain: nodeLibsBrowser.domain, + events: nodeLibsBrowser.events, + fs: false, + http: nodeLibsBrowser.http, + https: nodeLibsBrowser.https, + module: false, + net: false, + os: nodeLibsBrowser.os, + path: nodeLibsBrowser.path, + punycode: nodeLibsBrowser.punycode, + process: nodeLibsBrowser.process, + querystring: nodeLibsBrowser.querystring, + readline: false, + repl: false, + stream: nodeLibsBrowser.stream, + _stream_duplex: nodeLibsBrowser._stream_duplex, + _stream_passthrough: nodeLibsBrowser._stream_passthrough, + _stream_readable: nodeLibsBrowser._stream_readable, + _stream_transform: nodeLibsBrowser._stream_transform, + _stream_writable: nodeLibsBrowser._stream_writable, + string_decoder: nodeLibsBrowser.string_decoder, + sys: nodeLibsBrowser.sys, + timers: nodeLibsBrowser.timers, + tls: false, + tty: nodeLibsBrowser.tty, + url: nodeLibsBrowser.url, + util: nodeLibsBrowser.util, + vm: nodeLibsBrowser.vm, + zlib: nodeLibsBrowser.zlib, + ...compiler.options.resolve.fallback, + }; + } +}; + +module.exports = { + NodeLibsBrowserPlugin, +}; diff --git a/src/platform/plugins/shared/discover/.storybook/main.ts b/packages/kbn-node-libs-browser-webpack-plugin/jest.config.js similarity index 76% rename from src/platform/plugins/shared/discover/.storybook/main.ts rename to packages/kbn-node-libs-browser-webpack-plugin/jest.config.js index 6833e95dbd5a8..839f7a449020f 100644 --- a/src/platform/plugins/shared/discover/.storybook/main.ts +++ b/packages/kbn-node-libs-browser-webpack-plugin/jest.config.js @@ -7,6 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { discoverStorybookConfig } from './discover.webpack'; - -module.exports = discoverStorybookConfig; +module.exports = { + preset: '@kbn/test/jest_node', + rootDir: '../..', + roots: ['/packages/kbn-node-libs-browser-webpack-plugin'], +}; diff --git a/packages/kbn-node-libs-browser-webpack-plugin/kibana.jsonc b/packages/kbn-node-libs-browser-webpack-plugin/kibana.jsonc new file mode 100644 index 0000000000000..69acaf05df176 --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/kibana.jsonc @@ -0,0 +1,5 @@ +{ + "type": "shared-common", + "id": "@kbn/node-libs-browser-webpack-plugin", + "owner": "@elastic/kibana-operations" +} diff --git a/packages/kbn-node-libs-browser-webpack-plugin/package.json b/packages/kbn-node-libs-browser-webpack-plugin/package.json new file mode 100644 index 0000000000000..bee6eb1db67de --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/package.json @@ -0,0 +1,7 @@ +{ + "name": "@kbn/node-libs-browser-webpack-plugin", + "devOnly": true, + "private": true, + "version": "1.0.0", + "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0" +} diff --git a/packages/kbn-node-libs-browser-webpack-plugin/tsconfig.json b/packages/kbn-node-libs-browser-webpack-plugin/tsconfig.json new file mode 100644 index 0000000000000..3bbf05e134ce1 --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "checkJs": true, + "outDir": "target/types", + "types": [ + "jest", + "node" + ] + }, + "include": [ + "index.js", + "types.ts" + ], + "exclude": [ + "target/**/*", + ] +} diff --git a/packages/kbn-optimizer-webpack-helpers/index.ts b/packages/kbn-optimizer-webpack-helpers/index.ts index 78e5eb9693bfe..53d78dd588044 100644 --- a/packages/kbn-optimizer-webpack-helpers/index.ts +++ b/packages/kbn-optimizer-webpack-helpers/index.ts @@ -17,6 +17,8 @@ export type { } from './src/webpack_helpers'; export { + STATS_WARNINGS_FILTER, + STATS_OPTIONS_DEFAULT_USEFUL_FILTER, isFailureStats, failedStatsToErrorMessage, getModulePath, @@ -25,4 +27,5 @@ export { isExternalModule, isIgnoredModule, isNormalModule, + isRuntimeModule, } from './src/webpack_helpers'; diff --git a/packages/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts b/packages/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts index 0bc96a6505e15..2f0a97c935be2 100644 --- a/packages/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts +++ b/packages/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts @@ -8,46 +8,31 @@ */ import webpack from 'webpack'; -// @ts-expect-error module is not typed -import Stats from 'webpack/lib/Stats'; export function isFailureStats(stats: webpack.Stats) { if (stats.hasErrors()) { return true; } - const { warnings } = stats.toJson({ all: false, warnings: true }); - - // 1 - when typescript doesn't do a full type check, as we have the ts-loader - // configured here, it does not have enough information to determine - // whether an imported name is a type or not, so when the name is then - // exported, typescript has no choice but to emit the export. Fortunately, - // the extraneous export should not be harmful, so we just suppress these warnings - // https://github.com/TypeStrong/ts-loader#transpileonly-boolean-defaultfalse - // - // 2 - Mini Css Extract plugin tracks the order for each css import we have - // through the project (and it's successive imports) since version 0.4.2. - // In case we have the same imports more than one time with different - // sequences, this plugin will throw a warning. This should not be harmful, - // but the an issue was opened and can be followed on: - // https://github.com/webpack-contrib/mini-css-extract-plugin/issues/250#issuecomment-415345126 - const filteredWarnings = Stats.filterWarnings(warnings, STATS_WARNINGS_FILTER); + const { warnings } = stats.toJson({ + all: false, + warnings: true, + }); - return filteredWarnings.length > 0; + return warnings && warnings.length > 0; } -const STATS_WARNINGS_FILTER = new RegExp( +export const STATS_WARNINGS_FILTER = new RegExp( [ - '(export .* was not found in)', + '(export .* was not found in)', // with reexportExportsPresence = false and importExportsPresence = false in the module parser this should not be necessary but looks like it affects performance '|(chunk .* \\[mini-css-extract-plugin\\]\\\nConflicting order between:)', ].join('') ); export function failedStatsToErrorMessage(stats: webpack.Stats) { const details = stats.toString({ - ...Stats.presetToOptions('minimal'), + ...stats.compilation.createStatsOptions('minimal'), colors: true, - warningsFilter: STATS_WARNINGS_FILTER, errors: true, errorDetails: true, moduleTrace: true, @@ -56,6 +41,21 @@ export function failedStatsToErrorMessage(stats: webpack.Stats) { return `Optimizations failure.\n${details.split('\n').join('\n ')}`; } +export const STATS_OPTIONS_DEFAULT_USEFUL_FILTER = { + all: false, + hash: true, + version: true, + timings: true, + assets: true, + modules: true, + reasons: true, + chunks: true, + chunkModules: true, + errorDetails: false, + entrypoints: true, + ids: true, +}; + export interface WebpackResolveData { /** compilation context */ context: string; @@ -103,7 +103,7 @@ export interface WebpackNormalModule { resource: string; buildInfo: { cacheable: boolean; - fileDependencies: Set; + buildDependencies: Set; }; dependencies: Dependency[]; } @@ -122,7 +122,7 @@ export interface WebpackIgnoredModule { } export function isIgnoredModule(module: any): module is WebpackIgnoredModule { - return module?.constructor?.name === 'RawModule' && module.identifierStr?.startsWith('ignored '); + return module?.constructor?.name === 'RawModule' && module.identifierStr?.startsWith('ignored'); } /** module replacing imports for webpack externals */ @@ -169,3 +169,7 @@ export function getModulePath(module: WebpackNormalModule) { const queryIndex = module.resource.indexOf('?'); return queryIndex === -1 ? module.resource : module.resource.slice(0, queryIndex); } + +export function isRuntimeModule(module: any): boolean { + return module instanceof webpack.RuntimeModule; +} diff --git a/packages/kbn-optimizer/limits.yml b/packages/kbn-optimizer/limits.yml index 6f31687b36bac..3bf3bdf356242 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -30,7 +30,7 @@ pageLoadAssetSize: dataUsage: 30000 dataViewEditor: 28082 dataViewFieldEditor: 42021 - dataViewManagement: 5370 + dataViewManagement: 6250 dataViews: 65000 dataVisualizer: 30000 devTools: 38637 @@ -122,8 +122,8 @@ pageLoadAssetSize: observabilityShared: 111036 osquery: 107090 painlessLab: 179748 - presentationPanel: 11468 - presentationUtil: 33186 + presentationPanel: 11550 + presentationUtil: 33905 productDocBase: 22500 profiling: 36694 remoteClusters: 51327 diff --git a/packages/kbn-optimizer/src/common/bundle_cache.ts b/packages/kbn-optimizer/src/common/bundle_cache.ts index 1eecddc6e0b4d..4947107c7d285 100644 --- a/packages/kbn-optimizer/src/common/bundle_cache.ts +++ b/packages/kbn-optimizer/src/common/bundle_cache.ts @@ -122,7 +122,7 @@ export class BundleCache { } } - public writeWebpackAsset(compilation: webpack.compilation.Compilation) { + public writeWebpackAsset(compilation: webpack.Compilation) { if (!this.path) { return; } diff --git a/packages/kbn-optimizer/src/optimizer/observe_worker.ts b/packages/kbn-optimizer/src/optimizer/observe_worker.ts index ff14af5944908..edcf8651320c9 100644 --- a/packages/kbn-optimizer/src/optimizer/observe_worker.ts +++ b/packages/kbn-optimizer/src/optimizer/observe_worker.ts @@ -62,12 +62,19 @@ function usingWorkerProc(config: OptimizerConfig, fn: (proc: ChildProcess) => const proc = fork(require.resolve('../worker/run_worker'), [], { execArgv: [ `--require=@kbn/babel-register/install`, - '--openssl-legacy-provider', ...(inspectFlag && config.inspectWorkers ? [`${inspectFlag}=${inspectPortCounter++}`] : []), ], stdio: ['ignore', 'pipe', 'pipe', 'ipc'], + env: { + // NOTE: with the default 2000 limit we get a lot of recursive watcher recreations (introduced in watchpack v2) + // which makes the experience horrible and the performance between 2.5x to 3x worse when watching. + // If that fails in other mac machines with lower defaults for maxfiles and maxfilesperproc + // or just low powerful ones we need to default to polling instead of relying in the OS events watcher system. + // That can be done in the worker/run_compilers file. + WATCHPACK_WATCHER_LIMIT: '4000', + }, }); return { diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts b/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts index d69b248ac188a..0b07ea8c3e334 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_config.test.ts @@ -22,6 +22,36 @@ jest.mock('os', () => { cpus() { return ['foo'] as any; }, + totalmem() { + return 64000000000; + }, + freemem() { + return 20000000000; + }, + }; +}); + +jest.mock('v8', () => { + return { + ...jest.requireActual('v8'), + getHeapStatistics() { + return { + total_heap_size: 5816320, + total_heap_size_executable: 262144, + total_physical_size: 6012928, + total_available_size: 4341242192, + used_heap_size: 4930768, + heap_size_limit: 4345298944, + malloced_memory: 262320, + peak_malloced_memory: 571392, + does_zap_garbage: 0, + number_of_native_contexts: 2, + number_of_detached_contexts: 0, + total_global_handles_size: 8192, + used_global_handles_size: 3296, + external_memory: 2209666, + }; + }, }; }); diff --git a/packages/kbn-optimizer/src/optimizer/optimizer_config.ts b/packages/kbn-optimizer/src/optimizer/optimizer_config.ts index fbeaf8b5014f6..bc78a3ebf82aa 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_config.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_config.ts @@ -26,15 +26,59 @@ export interface Limits { }; } -function pickMaxWorkerCount(dist: boolean) { - // don't break if cpus() returns nothing, or an empty array - const cpuCount = Math.max(Os.cpus()?.length, 1); - // if we're buiding the dist then we can use more of the system's resources to get things done a little quicker - const maxWorkers = dist ? cpuCount - 1 : Math.ceil(cpuCount / 3); - // ensure we always have at least two workers - return Math.max(maxWorkers, 2); +interface SystemInfo { + cpuCount: number; } +function getSystemInfo(): SystemInfo { + // collects useful system information for resource usage calculations + const cpuCount = Math.max(Os.cpus()?.length ?? 0, 1); + + return { cpuCount }; +} + +const pickMaxWorkerCount = (dist: boolean) => { + const isDist = dist; + const isCI = !!process.env.CI; + const isUseMaxAvailableResources = !!process.env.KBN_OPTIMIZER_USE_MAX_AVAILABLE_RESOURCES; + const minWorkers = 2; + const { cpuCount } = getSystemInfo(); + const maxWorkers = Math.max(cpuCount - 1, minWorkers); + + // In case we get this env var set, just use max workers and avoid any kind of + // resource balance according to memory and cpu + if (isUseMaxAvailableResources) { + return maxWorkers; + } + + // Start calculating base worker count + let workerCount; + if (isDist && isCI) { + // For CI dist builds, start with most available resources + workerCount = maxWorkers; + } else if (isDist) { + // For local dist builds, start with 80% of resources but leaving some headroom + workerCount = Math.max(Math.floor(cpuCount * 0.8), 2); + } else { + // For regular local builds, start with fewer resources of 50% + workerCount = Math.max(Math.floor(cpuCount * 0.5), 2); + } + + // Adjust by the ratio workerCount to maxWorkers. + // If it is lower or equal to 50% it adds an extra worker + // so the available resources are better used + const ratioWorkerCountToMaxWorkers = 1 - workerCount / maxWorkers; + if (ratioWorkerCountToMaxWorkers >= 0.5) { + workerCount = Math.min(workerCount + 1, cpuCount); + } + + // Make sure we respect min and max worker limits + workerCount = Math.max(workerCount, minWorkers); + workerCount = Math.min(workerCount, maxWorkers); + + return workerCount; +}; + interface Options { /** absolute path to root of the repo/build */ repoRoot: string; diff --git a/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts b/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts index 55eb7911a1249..4356c784f674e 100644 --- a/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts +++ b/packages/kbn-optimizer/src/worker/bundle_metrics_plugin.ts @@ -32,82 +32,90 @@ export class BundleMetricsPlugin { const { bundle } = this; - compiler.hooks.emit.tap('BundleMetricsPlugin', (compilation) => { - const assets = Object.entries(compilation.assets) - .map( - ([name, source]: [string, any]): Asset => ({ - name, - size: source.size(), - }) - ) - .filter((asset) => { - const filename = Path.basename(asset.name); - if (filename.startsWith('.')) { - return false; - } - - const ext = Path.extname(filename); - if (IGNORED_EXTNAME.includes(ext)) { - return false; + compiler.hooks.compilation.tap('BundleMetricsPlugin', (compilation) => { + compilation.hooks.processAssets.tap( + { + name: 'BundleMetricsPlugin', + stage: webpack.Compilation.PROCESS_ASSETS_STAGE_ANALYSE, + }, + () => { + const assets = Object.entries(compilation.assets) + .map( + ([name, source]: [string, any]): Asset => ({ + name, + size: source.size(), + }) + ) + .filter((asset) => { + const filename = Path.basename(asset.name); + if (filename.startsWith('.')) { + return false; + } + + const ext = Path.extname(filename); + if (IGNORED_EXTNAME.includes(ext)) { + return false; + } + + return true; + }); + + const entryName = `${bundle.id}.${bundle.type}.js`; + const entry = assets.find((a) => a.name === entryName); + if (!entry) { + throw new Error( + `Unable to find bundle entry named [${entryName}] in [${bundle.outputDir}]` + ); } - return true; - }); - - const entryName = `${bundle.id}.${bundle.type}.js`; - const entry = assets.find((a) => a.name === entryName); - if (!entry) { - throw new Error( - `Unable to find bundle entry named [${entryName}] in [${bundle.outputDir}]` - ); - } + const chunkPrefix = `${bundle.id}.chunk.`; + const asyncChunks = assets.filter((a) => a.name.startsWith(chunkPrefix)); + const miscFiles = assets.filter((a) => a !== entry && !asyncChunks.includes(a)); - const chunkPrefix = `${bundle.id}.chunk.`; - const asyncChunks = assets.filter((a) => a.name.startsWith(chunkPrefix)); - const miscFiles = assets.filter((a) => a !== entry && !asyncChunks.includes(a)); + const sumSize = (files: Asset[]) => files.reduce((acc: number, a) => acc + a.size, 0); - const sumSize = (files: Asset[]) => files.reduce((acc: number, a) => acc + a.size, 0); - - const moduleCount = bundle.cache.getModuleCount(); - if (moduleCount === undefined) { - throw new Error(`moduleCount wasn't populated by PopulateBundleCachePlugin`); - } - - const bundleMetrics: CiStatsMetric[] = [ - { - group: `@kbn/optimizer bundle module count`, - id: bundle.id, - value: moduleCount, - }, - { - group: `page load bundle size`, - id: bundle.id, - value: entry.size, - limit: bundle.pageLoadAssetSizeLimit, - limitConfigPath: `packages/kbn-optimizer/limits.yml`, - }, - { - group: `async chunks size`, - id: bundle.id, - value: sumSize(asyncChunks), - }, - { - group: `async chunk count`, - id: bundle.id, - value: asyncChunks.length, - }, - { - group: `miscellaneous assets size`, - id: bundle.id, - value: sumSize(miscFiles), - }, - ]; - - const metricsSource = new RawSource(JSON.stringify(bundleMetrics, null, 2)); + const moduleCount = bundle.cache.getModuleCount(); + if (moduleCount === undefined) { + throw new Error(`moduleCount wasn't populated by PopulateBundleCachePlugin`); + } - // see https://github.com/jantimon/html-webpack-plugin/blob/33d69f49e6e9787796402715d1b9cd59f80b628f/index.js#L266 - // @ts-expect-error undocumented, used to add assets to the output - compilation.emitAsset('metrics.json', metricsSource); + const bundleMetrics: CiStatsMetric[] = [ + { + group: `@kbn/optimizer bundle module count`, + id: bundle.id, + value: moduleCount, + }, + { + group: `page load bundle size`, + id: bundle.id, + value: entry.size, + limit: bundle.pageLoadAssetSizeLimit, + limitConfigPath: `packages/kbn-optimizer/limits.yml`, + }, + { + group: `async chunks size`, + id: bundle.id, + value: sumSize(asyncChunks), + }, + { + group: `async chunk count`, + id: bundle.id, + value: asyncChunks.length, + }, + { + group: `miscellaneous assets size`, + id: bundle.id, + value: sumSize(miscFiles), + }, + ]; + + const metricsSource = new RawSource(JSON.stringify(bundleMetrics, null, 2)); + + // see https://github.com/jantimon/html-webpack-plugin/blob/33d69f49e6e9787796402715d1b9cd59f80b628f/index.js#L266 + // @ts-expect-error undocumented, used to add assets to the output + compilation.emitAsset('metrics.json', metricsSource); + } + ); }); } } diff --git a/packages/kbn-optimizer/src/worker/bundle_remote_module.ts b/packages/kbn-optimizer/src/worker/bundle_remote_module.ts index 7c379b7b0d897..bd8f56e5e9b18 100644 --- a/packages/kbn-optimizer/src/worker/bundle_remote_module.ts +++ b/packages/kbn-optimizer/src/worker/bundle_remote_module.ts @@ -12,6 +12,9 @@ import { KbnImportReq } from '@kbn/repo-packages'; // @ts-ignore not typed by @types/webpack import Module from 'webpack/lib/Module'; +// @ts-ignore not typed by @types/webpack +// import StaticExportsDependency from 'webpack/lib/dependencies/StaticExportsDependency'; +import { RawSource } from 'webpack-sources'; import { BundleRemote } from '../common'; export class BundleRemoteModule extends Module { @@ -27,8 +30,8 @@ export class BundleRemoteModule extends Module { return this.req.full; } - chunkCondition(chunk: any) { - return chunk.hasEntryModule(); + chunkCondition(chunk: any, { chunkGraph }: any) { + return chunkGraph.getNumberOfEntryModules(chunk) > 0; } identifier() { @@ -39,19 +42,57 @@ export class BundleRemoteModule extends Module { return this.identifier(); } - needRebuild() { - return false; + needBuild(context: any, callback: any) { + return callback(null, !this.buildMeta); } build(_: any, __: any, ___: any, ____: any, callback: () => void) { - this.built = true; - this.buildMeta = {}; + // this.built = true; + this.buildMeta = { + async: false, + exportsType: undefined, + }; this.buildInfo = { + strict: false, + topLevelDeclarations: new Set(), + module: __.outputOptions.module, exportsArgument: '__webpack_exports__', }; + + // super.addDependency(new StaticExportsDependency(true, false)); callback(); } + getConcatenationBailoutReason({ moduleGraph }: any) { + return `@kbn/bundleRemote externals can't be concatenated`; + } + + codeGeneration(_: any) { + const sources = new Map(); + sources.set( + 'javascript', + new RawSource(` + __webpack_require__.r(__webpack_exports__); + var ns = __kbnBundles__.get('${this.remote.bundleType}/${this.remote.bundleId}/${this.req.target}'); + Object.defineProperties(__webpack_exports__, Object.getOwnPropertyDescriptors(ns)) + `) + ); + + const data = new Map(); + data.set('url', this.req.full); + + return { + sources, + runtimeRequirements: new Set([ + 'module', + '__webpack_exports__', + '__webpack_require__', + // '__webpack_require__.r', + ]), + data, + }; + } + source() { return ` __webpack_require__.r(__webpack_exports__); @@ -64,8 +105,8 @@ export class BundleRemoteModule extends Module { return 42; } - updateHash(hash: any) { + updateHash(hash: any, context: any) { hash.update(this.identifier()); - super.updateHash(hash); + super.updateHash(hash, context); } } diff --git a/packages/kbn-optimizer/src/worker/bundle_remote_used_exports_plugin.ts b/packages/kbn-optimizer/src/worker/bundle_remote_used_exports_plugin.ts new file mode 100644 index 0000000000000..82d9186a84ddb --- /dev/null +++ b/packages/kbn-optimizer/src/worker/bundle_remote_used_exports_plugin.ts @@ -0,0 +1,87 @@ +/* + * 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import NormalizePath from 'normalize-path'; +import webpack from 'webpack'; +import { Minimatch } from 'minimatch'; +import { Bundle } from '../common'; + +export class BundleRemoteUsedExportsPlugin { + constructor(private readonly bundle: Bundle) {} + apply(compiler: webpack.Compiler) { + const buildPublicDirsPatterns = () => { + const targets = this.bundle.remoteInfo.targets; + const extensions = '.{js,ts,tsx,json}'; + const builtPattern = !targets.length + ? 'public' + : targets.length === 1 + ? targets[0] + : `{${targets}}`; + return [`**/${builtPattern}/index${extensions}`, `**/${builtPattern}${extensions}`]; + }; + + const publicDirsPatterns = buildPublicDirsPatterns(); + const KbnPluginMainEntryGlob = new Minimatch(publicDirsPatterns[0]); + const KbnPluginExtraFileEntryGlob = new Minimatch(publicDirsPatterns[1]); + + compiler.hooks.compilation.tap('MarkExportsAsUsedPlugin', (compilation) => { + const moduleGraph = compilation.moduleGraph; + compilation.hooks.optimizeDependencies.tap('MarkExportsAsUsedPlugin', (modules) => { + Array.from(modules).forEach((module: any) => { + if (!module.resource) { + return; + } + + const normalizedModuleResource = NormalizePath(module.resource); + if ( + KbnPluginMainEntryGlob.match(normalizedModuleResource) || + KbnPluginExtraFileEntryGlob.match(normalizedModuleResource) + ) { + // if (module && module.resource && (module.resource.endsWith(Path.join('public', 'index.ts')) || module.resource.endsWith(Path.join('public', 'index.js')))) { + // Get all exports of the module + const exportsInfo = moduleGraph.getExportsInfo(module); + + // Array.from(exportsInfo.exports).forEach((exportInfo) => { + // if (exportInfo.name) { + // // Mark the export as used + // moduleGraph.getExportsInfo(module).setUsedInUnknownWay(exportInfo.name); + // moduleGraph.addExtraReason( + // module, + // `BundleRemoteUsedExportsPlugin/${exportInfo.name}` + // ); + // } + // }); + + // If the module uses export *, mark it as used in unknown way + if (module.buildMeta && module.buildMeta.exportsType === 'namespace') { + // @ts-ignore + moduleGraph.getExportsInfo(module).setAllKnownExportsUsed(); + // @ts-ignore + moduleGraph.getExportsInfo(module).setUsedInUnknownWay(); + moduleGraph.addExtraReason( + module, + `BundleRemoteUsedExportsPlugin/namespace#=>${module.resource}` + ); + } else { + Array.from(exportsInfo.exports).forEach((exportInfo) => { + if (exportInfo.name) { + moduleGraph.getExportsInfo(module).setUsedInUnknownWay(exportInfo.name); + moduleGraph.addExtraReason( + module, + `BundleRemoteUsedExportsPlugin/${exportInfo.name}#=>${module.resource}` + ); + } + }); + } + } + }); + }); + }); + } +} diff --git a/packages/kbn-optimizer/src/worker/bundle_remotes_plugin.ts b/packages/kbn-optimizer/src/worker/bundle_remotes_plugin.ts index 1a5eb8b50710d..97a4da2ec09ab 100644 --- a/packages/kbn-optimizer/src/worker/bundle_remotes_plugin.ts +++ b/packages/kbn-optimizer/src/worker/bundle_remotes_plugin.ts @@ -21,7 +21,7 @@ interface RequestData { } type Callback = (error?: any, result?: T) => void; -type ModuleFactory = (data: RequestData, callback: Callback) => void; +// type ModuleFactory = (data: RequestData, callback: Callback) => void; export class BundleRemotesPlugin { private allowedBundleIds = new Set(); @@ -40,34 +40,61 @@ export class BundleRemotesPlugin { // hook into the creation of NormalModule instances in webpack, if the import // statement leading to the creation of the module is pointing to a bundleRef // entry then create a BundleRefModule instead of a NormalModule. - compilationParams.normalModuleFactory.hooks.factory.tap( - 'BundleRefsPlugin/normalModuleFactory/factory', - (wrappedFactory: ModuleFactory): ModuleFactory => - (data, callback) => { - const { request } = data.dependencies[0]; - - const cached = moduleCache.get(request); - if (cached === null) { - return wrappedFactory(data, callback); - } - if (cached !== undefined) { - return callback(null, cached); - } + // compilationParams.normalModuleFactory.hooks.factorize.tap( + // 'BundleRefsPlugin/normalModuleFactory/factorize', + // (data: RequestData) => { + // const { request } = data.dependencies[0]; + // + // const cached = moduleCache.get(request); + // if (cached === null) { + // return; + // } + // if (cached !== undefined) { + // return cached; + // } + // + // this.resolve(request, (error, result) => { + // if (error || result === undefined) { + // throw error; + // } + // + // moduleCache.set(request, result); + // + // if (result === null) { + // return; + // } + // + // return result; + // }); + // } + // ); + compilationParams.normalModuleFactory.hooks.factorize.tapAsync( + 'BundleRefsPlugin/normalModuleFactory/factorize', + (data: RequestData, callback: Callback) => { + const { request } = data.dependencies[0]; + + const cached = moduleCache.get(request); + if (cached === null) { + return callback(); + } + if (cached !== undefined) { + return callback(null, cached); + } - this.resolve(request, (error, result) => { - if (error || result === undefined) { - return callback(error); - } + this.resolve(request, (error, result) => { + if (error || result === undefined) { + return callback(error); + } - moduleCache.set(request, result); + moduleCache.set(request, result); - if (result === null) { - return wrappedFactory(data, callback); - } + if (result === null) { + return callback(); + } - callback(null, result); - }); - } + callback(null, result); + }); + } ); }); @@ -87,7 +114,7 @@ export class BundleRemotesPlugin { compilation.hooks.finishModules.tapPromise( 'BundleRefsPlugin/finishModules', async (modules) => { - const usedBundleIds = (modules as any[]) + const usedBundleIds = (Array.from(modules) as any[]) .filter((m: any): m is BundleRemoteModule => m instanceof BundleRemoteModule) .map((m) => m.remote.bundleId); @@ -96,7 +123,7 @@ export class BundleRemotesPlugin { .join(', '); if (unusedBundleIds) { - const error = new Error( + const error = new webpack.WebpackError( `Bundle for [${this.bundle.id}] lists [${unusedBundleIds}] as a required bundle, but does not use it. Please remove it.` ); (error as any).file = manifestPath; diff --git a/packages/kbn-optimizer/src/worker/emit_stats_plugin.ts b/packages/kbn-optimizer/src/worker/emit_stats_plugin.ts index 69eeecdb2006f..39232495963cc 100644 --- a/packages/kbn-optimizer/src/worker/emit_stats_plugin.ts +++ b/packages/kbn-optimizer/src/worker/emit_stats_plugin.ts @@ -11,7 +11,7 @@ import Fs from 'fs'; import Path from 'path'; import webpack from 'webpack'; - +import { STATS_OPTIONS_DEFAULT_USEFUL_FILTER } from '@kbn/optimizer-webpack-helpers'; import { Bundle } from '../common'; export class EmitStatsPlugin { @@ -22,12 +22,12 @@ export class EmitStatsPlugin { { name: 'EmitStatsPlugin', // run at the very end, ensure that it's after clean-webpack-plugin - stage: 10, + // stage: webpack.Compilation.PROCESS_ASSETS_STAGE_REPORT, }, (stats) => { Fs.writeFileSync( Path.resolve(this.bundle.outputDir, 'stats.json'), - JSON.stringify(stats.toJson(), null, 2) + JSON.stringify(stats.toJson(STATS_OPTIONS_DEFAULT_USEFUL_FILTER), null, 2) ); } ); diff --git a/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts b/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts index c1b0d0f6486ca..bcd67125642f6 100644 --- a/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts +++ b/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts @@ -8,7 +8,7 @@ */ import Path from 'path'; -import { inspect } from 'util'; +import { inspect, promisify } from 'util'; import webpack from 'webpack'; import { @@ -17,6 +17,7 @@ import { isIgnoredModule, isConcatenatedModule, isDelegatedModule, + isRuntimeModule, getModulePath, } from '@kbn/optimizer-webpack-helpers'; @@ -30,6 +31,14 @@ import { } from '../common'; import { BundleRemoteModule } from './bundle_remote_module'; +interface InputFileSystem { + readFile: ( + path: string, + encoding: null | undefined, + callback: (err: Error | null, stats: Buffer) => void + ) => void; +} + /** * sass-loader creates about a 40% overhead on the overall optimizer runtime, and * so this constant is used to indicate to assignBundlesToWorkers() that there is @@ -48,117 +57,157 @@ export class PopulateBundleCachePlugin { public apply(compiler: webpack.Compiler) { const { bundle, workerConfig } = this; - - compiler.hooks.emit.tap( - { - name: 'PopulateBundleCachePlugin', - before: ['BundleMetricsPlugin'], - }, - (compilation) => { - const bundleRefExportIds: string[] = []; - let moduleCount = 0; - let workUnits = compilation.fileDependencies.size; - - const paths = new Set(); - const rawHashes = new Map(); - const addReferenced = (path: string) => { - if (paths.has(path)) { - return; + const inputFs = compiler.inputFileSystem as InputFileSystem; + if (!inputFs) { + throw new Error('expected inputFs to be defined'); + } + const readFile = promisify(inputFs.readFile); + const moduleFileDepsMap = new Map(); + const allFileDepsPathSet = new Set(); + + compiler.hooks.compilation.tap('PopulateBundleCachePlugin', (compilation) => { + const hooks = webpack.NormalModule.getCompilationHooks(compilation); + + // first collect file deps for modules + hooks.beforeSnapshot.tap('PopulateBundleCachePlugin', (module: any) => { + // make sure we have file deps for this module + if (module.buildInfo.fileDependencies.size > 0) { + const realFileDeps = []; + + for (const path of module.buildInfo.fileDependencies) { + // in webpack v5 there a lot of paths collected that are not real files + // but instead folders or partial paths. + // Here we're verifying if what we have as indeed a filepath + if (Path.extname(path).length > 0) { + realFileDeps.push(path); + allFileDepsPathSet.add(path); + } } - paths.add(path); - let content: Buffer; - try { - content = compiler.inputFileSystem.readFileSync(path); - } catch { - return rawHashes.set(path, null); - } + moduleFileDepsMap.set(module.identifier(), realFileDeps); + } + }); + + // in the end process assets to calculate workUnites and references + compilation.hooks.processAssets.tapAsync( + { + name: 'PopulateBundleCachePlugin', + stage: webpack.Compilation.PROCESS_ASSETS_STAGE_DEV_TOOLING, + }, + async (_, callback) => { + const bundleRefExportIds: string[] = []; + let moduleCount = 0; + let workUnits = allFileDepsPathSet.size; + + const paths = new Set(); + const rawHashes = new Map(); + const addReferenced = async (path: string) => { + if (paths.has(path)) { + return; + } - return rawHashes.set(path, Hashes.hash(content)); - }; + paths.add(path); + let content: Buffer; + try { + content = await readFile(path, null); + } catch { + return rawHashes.set(path, null); + } - const dllRefKeys = new Set(); + return rawHashes.set(path, Hashes.hash(content)); + }; - if (bundle.manifestPath) { - addReferenced(bundle.manifestPath); - } + const dllRefKeys = new Set(); + + if (bundle.manifestPath) { + await addReferenced(bundle.manifestPath); + workUnits += 1; + } - for (const module of compilation.modules) { - if (isNormalModule(module)) { - moduleCount += 1; - const path = getModulePath(module); - const parsedPath = parseFilePath(path); + for (const module of compilation.modules) { + if (isNormalModule(module)) { + const path = getModulePath(module); + if (Path.extname(path).length === 0) { + continue; + } - // TODO: Does this need to be updated to support @kbn/ packages? - if (!parsedPath.dirs.includes('node_modules')) { - addReferenced(path); + moduleCount += 1; + const parsedPath = parseFilePath(path); - if (path.endsWith('.scss')) { - workUnits += EXTRA_SCSS_WORK_UNITS; + if (!parsedPath.dirs.includes('node_modules')) { + await addReferenced(path); - for (const depPath of module.buildInfo.fileDependencies) { - addReferenced(depPath); + if (path.endsWith('.scss')) { + workUnits += EXTRA_SCSS_WORK_UNITS; + + const dependencies = moduleFileDepsMap.get(module.identifier()); + if (dependencies) { + await Promise.all( + dependencies.map((depPath: string) => addReferenced(depPath)) + ); + } } + + continue; } + const nmIndex = parsedPath.dirs.lastIndexOf('node_modules'); + const isScoped = parsedPath.dirs[nmIndex + 1].startsWith('@'); + const pkgJsonPath = Path.join( + parsedPath.root, + ...parsedPath.dirs.slice(0, nmIndex + 1 + (isScoped ? 2 : 1)), + 'package.json' + ); + await addReferenced(pkgJsonPath); continue; } - const nmIndex = parsedPath.dirs.lastIndexOf('node_modules'); - const isScoped = parsedPath.dirs[nmIndex + 1].startsWith('@'); - const pkgJsonPath = Path.join( - parsedPath.root, - ...parsedPath.dirs.slice(0, nmIndex + 1 + (isScoped ? 2 : 1)), - 'package.json' - ); - addReferenced(pkgJsonPath); - continue; - } + if (module instanceof BundleRemoteModule) { + bundleRefExportIds.push(module.req.full); + continue; + } - if (module instanceof BundleRemoteModule) { - bundleRefExportIds.push(module.req.full); - continue; - } + if (isConcatenatedModule(module)) { + moduleCount += 1; + continue; + } - if (isConcatenatedModule(module)) { - moduleCount += module.modules.length; - continue; - } + if (isDelegatedModule(module)) { + dllRefKeys.add(module.userRequest); + continue; + } - if (isDelegatedModule(module)) { - // delegated modules are the references to the ui-shared-deps-npm dll - dllRefKeys.add(module.userRequest); - continue; - } + if (isExternalModule(module) || isIgnoredModule(module) || isRuntimeModule(module)) { + continue; + } - if (isExternalModule(module) || isIgnoredModule(module)) { - continue; + throw new Error(`Unexpected module type: ${inspect(module)}`); } - throw new Error(`Unexpected module type: ${inspect(module)}`); - } + const referencedPaths = Array.from(paths).sort(ascending((p) => p)); + const sortedDllRefKeys = Array.from(dllRefKeys).sort(ascending((p) => p)); + + bundle.cache.set({ + remoteBundleImportReqs: bundleRefExportIds.sort(ascending((p) => p)), + optimizerCacheKey: workerConfig.optimizerCacheKey, + cacheKey: bundle.createCacheKey( + referencedPaths, + new Hashes(rawHashes), + this.dllManifest, + sortedDllRefKeys + ), + moduleCount, + workUnits, + referencedPaths, + dllRefKeys: sortedDllRefKeys, + }); - const referencedPaths = Array.from(paths).sort(ascending((p) => p)); - const sortedDllRefKeys = Array.from(dllRefKeys).sort(ascending((p) => p)); + // write the cache to the compilation so that it isn't cleaned by clean-webpack-plugin + bundle.cache.writeWebpackAsset(compilation); - bundle.cache.set({ - remoteBundleImportReqs: bundleRefExportIds.sort(ascending((p) => p)), - optimizerCacheKey: workerConfig.optimizerCacheKey, - cacheKey: bundle.createCacheKey( - referencedPaths, - new Hashes(rawHashes), - this.dllManifest, - sortedDllRefKeys - ), - moduleCount, - workUnits, - referencedPaths, - dllRefKeys: sortedDllRefKeys, - }); - - // write the cache to the compilation so that it isn't cleaned by clean-webpack-plugin - bundle.cache.writeWebpackAsset(compilation); - } - ); + callback(); + } + ); + }); } } diff --git a/packages/kbn-optimizer/src/worker/run_compilers.ts b/packages/kbn-optimizer/src/worker/run_compilers.ts index c9a689edf377e..1ef138e8776ea 100644 --- a/packages/kbn-optimizer/src/worker/run_compilers.ts +++ b/packages/kbn-optimizer/src/worker/run_compilers.ts @@ -53,7 +53,6 @@ const observeCompiler = ( */ const complete$ = Rx.fromEventPattern((cb) => done.tap(PLUGIN_NAME, cb)).pipe( maybeMap((stats) => { - // @ts-expect-error not included in types, but it is real https://github.com/webpack/webpack/blob/ab4fa8ddb3f433d286653cd6af7e3aad51168649/lib/Watching.js#L58 if (stats.compilation.needAdditionalPass) { return undefined; } diff --git a/packages/kbn-optimizer/src/worker/theme_loader.ts b/packages/kbn-optimizer/src/worker/theme_loader.ts index 3bce12d94e974..97b56426c010b 100644 --- a/packages/kbn-optimizer/src/worker/theme_loader.ts +++ b/packages/kbn-optimizer/src/worker/theme_loader.ts @@ -7,7 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { stringifyRequest, getOptions } from 'loader-utils'; import webpack from 'webpack'; import { FALLBACK_THEME_TAG, @@ -15,11 +14,17 @@ import { hasNonDefaultThemeTags, } from '@kbn/core-ui-settings-common'; +const getStringifiedRequest = (loaderContext: webpack.LoaderContext, request: string) => { + return JSON.stringify( + loaderContext.utils.contextify(loaderContext.context || loaderContext.rootContext, request) + ); +}; + // eslint-disable-next-line import/no-default-export -export default function (this: webpack.loader.LoaderContext) { +export default function (this: webpack.LoaderContext) { this.cacheable(true); - const options = getOptions(this); + const options = this.getOptions(); const bundleId = options.bundleId as string; const themeTags = parseThemeTags(options.themeTags); const isFallbackNeeded = hasNonDefaultThemeTags(themeTags); @@ -38,7 +43,10 @@ export default function (this: webpack.loader.LoaderContext) { defaultClause = ` default: console.error(new Error("SASS files in [${bundleId}] were not built for theme [" + window.__kbnThemeTag__ + "]. Styles were compiled using the [${FALLBACK_THEME_TAG}] theme instead to keep Kibana somewhat usable. Please adjust the advanced settings to make use of [${themeTags}] or make sure the KBN_OPTIMIZER_THEMES environment variable includes [" + window.__kbnThemeTag__ + "] in a comma-separated list of themes you want to compile. You can also set it to \'*\' to build all themes.")); - return require(${stringifyRequest(this, `${this.resourcePath}?${FALLBACK_THEME_TAG}`)});`; + return require(${getStringifiedRequest( + this, + `${this.resourcePath}?${FALLBACK_THEME_TAG}` + )});`; } return ` @@ -47,7 +55,7 @@ ${themeTags .map( (tag) => ` case '${tag}': - return require(${stringifyRequest(this, `${this.resourcePath}?${tag}`)});` + return require(${getStringifiedRequest(this, `${this.resourcePath}?${tag}`)});` ) .join('\n')} ${defaultClause} diff --git a/packages/kbn-optimizer/src/worker/webpack.config.ts b/packages/kbn-optimizer/src/worker/webpack.config.ts index 98549d7ec745a..ebeed2d882d59 100644 --- a/packages/kbn-optimizer/src/worker/webpack.config.ts +++ b/packages/kbn-optimizer/src/worker/webpack.config.ts @@ -10,22 +10,24 @@ import Path from 'path'; import Fs from 'fs'; -import { stringifyRequest } from 'loader-utils'; import webpack from 'webpack'; -// @ts-expect-error import TerserPlugin from 'terser-webpack-plugin'; -import webpackMerge from 'webpack-merge'; +import { merge as webpackMerge } from 'webpack-merge'; import { CleanWebpackPlugin } from 'clean-webpack-plugin'; import UiSharedDepsNpm from '@kbn/ui-shared-deps-npm'; import * as UiSharedDepsSrc from '@kbn/ui-shared-deps-src'; import StatoscopeWebpackPlugin from '@statoscope/webpack-plugin'; -// @ts-expect-error -import VisualizerPlugin from 'webpack-visualizer-plugin2'; import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer'; +import { + STATS_WARNINGS_FILTER, + STATS_OPTIONS_DEFAULT_USEFUL_FILTER, +} from '@kbn/optimizer-webpack-helpers'; +import { NodeLibsBrowserPlugin } from '@kbn/node-libs-browser-webpack-plugin'; import { Bundle, BundleRemotes, WorkerConfig, parseDllManifest } from '../common'; import { BundleRemotesPlugin } from './bundle_remotes_plugin'; import { BundleMetricsPlugin } from './bundle_metrics_plugin'; +import { BundleRemoteUsedExportsPlugin } from './bundle_remote_used_exports_plugin'; import { EmitStatsPlugin } from './emit_stats_plugin'; import { PopulateBundleCachePlugin } from './populate_bundle_cache_plugin'; @@ -40,31 +42,35 @@ export function getWebpackConfig( const ENTRY_CREATOR = require.resolve('./entry_point_creator'); const commonConfig: webpack.Configuration = { - node: { fs: 'empty' }, context: bundle.contextDir, - cache: true, entry: { [bundle.id]: ENTRY_CREATOR, }, - devtool: worker.dist ? false : '#cheap-source-map', + devtool: worker.dist ? false : 'cheap-source-map', profile: worker.profileWebpack, + target: 'web', + output: { - hashFunction: 'sha1', + // TODO: remove this commented line if xxhash64 is faster + // hashFunction: 'sha1', path: bundle.outputDir, filename: `${bundle.id}.${bundle.type}.js`, chunkFilename: `${bundle.id}.chunk.[id].js`, - devtoolModuleFilenameTemplate: (info) => + devtoolModuleFilenameTemplate: (info: any) => `/${bundle.type}:${bundle.id}/${Path.relative( bundle.sourceRoot, info.absoluteResourcePath )}${info.query}`, - jsonpFunction: `${bundle.id}_bundle_jsonpfunction`, + chunkLoadingGlobal: `${bundle.id}_bundle_jsonpfunction`, + chunkLoading: 'jsonp', }, optimization: { - noEmitOnErrors: true, + moduleIds: worker.dist ? 'deterministic' : 'natural', + chunkIds: worker.dist ? 'deterministic' : 'natural', + emitOnErrors: false, splitChunks: { maxAsyncRequests: 10, cacheGroups: { @@ -75,9 +81,13 @@ export function getWebpackConfig( }, }, - externals: UiSharedDepsSrc.externals, + externals: { + 'node:crypto': 'commonjs crypto', + ...UiSharedDepsSrc.externals, + }, plugins: [ + new NodeLibsBrowserPlugin(), new CleanWebpackPlugin(), new BundleRemotesPlugin(bundle, bundleRemotes), new PopulateBundleCachePlugin(worker, bundle, parseDllManifest(DLL_MANIFEST)), @@ -86,24 +96,22 @@ export function getWebpackConfig( context: worker.repoRoot, manifest: DLL_MANIFEST, }), - // @ts-ignore something is wrong with the StatoscopeWebpackPlugin type. - ...(worker.profileWebpack + ...((worker.profileWebpack ? [ new EmitStatsPlugin(bundle), - new StatoscopeWebpackPlugin({ - open: false, - saveReportTo: `${bundle.outputDir}/${bundle.id}.statoscope.html`, - }), - new VisualizerPlugin({ filename: `${bundle.id}.visualizer.html` }), new BundleAnalyzerPlugin({ analyzerMode: 'static', reportFilename: `${bundle.id}.analyzer.html`, openAnalyzer: false, logLevel: 'silent', }), + new StatoscopeWebpackPlugin({ + open: false, + saveReportTo: `${bundle.outputDir}/${bundle.id}.statoscope.html`, + statsOptions: STATS_OPTIONS_DEFAULT_USEFUL_FILTER, + }), ] - : []), - // @ts-ignore something is wrong with the StatoscopeWebpackPlugin type. + : []) as any), ...(bundle.banner ? [new webpack.BannerPlugin({ banner: bundle.banner, raw: true })] : []), ], @@ -199,14 +207,17 @@ export function getWebpackConfig( { loader: 'sass-loader', options: { - additionalData(content: string, loaderContext: webpack.loader.LoaderContext) { - return `@import ${stringifyRequest( - loaderContext, - Path.resolve( - worker.repoRoot, - `src/core/public/styles/core_app/_globals_${theme}.scss` + additionalData(content: string, loaderContext: webpack.LoaderContext) { + const req = JSON.stringify( + loaderContext.utils.contextify( + loaderContext.context || loaderContext.rootContext, + Path.resolve( + worker.repoRoot, + `src/core/public/styles/core_app/_globals_${theme}.scss` + ) ) - )};\n${content}`; + ); + return `@import ${req};\n${content}`; }, implementation: require('sass-embedded'), sassOptions: { @@ -214,6 +225,17 @@ export function getWebpackConfig( includePaths: [Path.resolve(worker.repoRoot, 'node_modules')], sourceMap: true, quietDeps: true, + logger: { + warn: (message: string, warning: any) => { + // Muted - see https://github.com/elastic/kibana/issues/190345 for tracking remediation + if (warning?.deprecationType?.id === 'mixed-decls') return; + if (warning.deprecation) + return process.stderr.write( + `DEPRECATION WARNING: ${message}\n${warning.stack}` + ); + process.stderr.write('WARNING: ' + message); + }, + }, }, }, }, @@ -228,13 +250,6 @@ export function getWebpackConfig( }, ], }, - { - test: /\.(woff|woff2|ttf|eot|svg|ico|png|jpg|gif|jpeg)(\?|$)/, - loader: 'url-loader', - options: { - limit: 8192, - }, - }, { test: /\.(js|tsx?)$/, exclude: /node_modules/, @@ -243,67 +258,51 @@ export function getWebpackConfig( options: { babelrc: false, envName: worker.dist ? 'production' : 'development', - presets: [BABEL_PRESET], + presets: [[BABEL_PRESET, { useTransformRequireDefault: true }]], }, }, }, { - test: /node_modules\/@?xstate5\/.*\.js$/, - use: { - loader: 'babel-loader', - options: { - babelrc: false, - envName: worker.dist ? 'production' : 'development', - presets: [BABEL_PRESET], - plugins: ['@babel/plugin-transform-logical-assignment-operators'], - }, - }, - }, - { - test: /\.js$/, - include: /node_modules[\\\/]@dagrejs/, - use: { - loader: 'babel-loader', - options: { - envName: worker.dist ? 'production' : 'development', - presets: ['@babel/preset-env'], // Doesn't work with BABEL_PRESET - plugins: ['@babel/plugin-proposal-class-properties'], - }, - }, + test: /\.peggy$/, + loader: require.resolve('@kbn/peggy-loader'), }, + // emits a separate file and exports the URL. Previously achievable by using file-loader. { - test: /node_modules[\/\\]@?xyflow[\/\\].*.js$/, - loaders: 'babel-loader', - options: { - envName: worker.dist ? 'production' : 'development', - presets: [BABEL_PRESET], - plugins: ['@babel/plugin-transform-logical-assignment-operators'], - }, + include: [ + require.resolve('@mapbox/mapbox-gl-rtl-text/mapbox-gl-rtl-text.min.js'), + require.resolve('maplibre-gl/dist/maplibre-gl-csp-worker'), + ], + type: 'asset/resource', }, + // exports the source code of the asset. Previously achievable by using raw-loader. { - test: /node_modules[\/\\]launchdarkly[^\/\\]+[\/\\].*.js$/, - loaders: 'babel-loader', - options: { - envName: worker.dist ? 'production' : 'development', - presets: [BABEL_PRESET], - }, + resourceQuery: /raw/, + type: 'asset/source', }, { test: /\.(html|md|txt|tmpl)$/, - use: { - loader: 'raw-loader', - }, + type: 'asset/source', }, + // automatically chooses between exporting a data URI and emitting a separate file. Previously achievable by using url-loader with asset size limit. { - test: /\.peggy$/, - loader: require.resolve('@kbn/peggy-loader'), + test: /\.(woff|woff2|ttf|eot|svg|ico|png|jpg|gif|jpeg)(\?|$)/, + type: 'asset', + parser: { + dataUrlCondition: { + maxSize: 8192, + }, + }, }, ], }, resolve: { extensions: ['.js', '.ts', '.tsx', '.json'], - mainFields: ['browser', 'main'], + mainFields: ['browser', 'module', 'main'], + // conditionNames: ['browser', 'module', 'import', 'require', 'default'], + // + // mainFields: ['browser', 'main', 'module'], + // // conditionNames: ['require', 'node', 'module', 'import', 'default'], alias: { core_app_image_assets: Path.resolve( worker.repoRoot, @@ -323,16 +322,65 @@ export function getWebpackConfig( // and not for the webpack compilations performance itself hints: false, }, + + ignoreWarnings: [STATS_WARNINGS_FILTER], }; const nonDistributableConfig: webpack.Configuration = { mode: 'development', + + // TODO: potential performance impact flags + cache: { + type: 'memory', + cacheUnaffected: true, + }, + + output: { + // xxhash64 or sha1: according to docs xxhash should be faster but for now sha1 looks faster + hashFunction: 'xxhash64', + // Setting this to false looks like it will boost performance by a little + // pathinfo: false, + }, + + experiments: { + cacheUnaffected: true, + // TODO: enable this after converting all plugins to v5 + backCompat: false, + }, + + optimization: { + // Need to test which composition makes for the best performance + sideEffects: false, + // providedExports: false, + // usedExports: false, + removeAvailableModules: false, + removeEmptyChunks: false, + // mergeDuplicateChunks: false, + }, + + // resolve: { + // // Not sure if this is bringing any performance to the table + // cacheWithContext: false, + // }, + + module: { + // This was default on webpack v4 + unsafeCache: true, + }, + // NOTE: I'm not sure about this, but it does seem like it is speeding up + // parallelism: 5000, + // }; const distributableConfig: webpack.Configuration = { mode: 'production', plugins: [ + // NOTE: this plugin is needed to mark exports on public and extraPublicDir entry files + // as used otherwise the new webpack v5 aggressive exports analysis will mark them as unused + // and they will be removed. Without this plugin we need to run with usedExports: false which + // affects the bundle sizes by a big margin. + new BundleRemoteUsedExportsPlugin(bundle), new webpack.DefinePlugin({ 'process.env': { IS_KIBANA_DISTRIBUTABLE: `"true"`, @@ -343,8 +391,6 @@ export function getWebpackConfig( optimization: { minimizer: [ new TerserPlugin({ - cache: false, - sourceMap: false, extractComments: false, parallel: false, terserOptions: { @@ -354,6 +400,11 @@ export function getWebpackConfig( }, }), ], + // TODO: try to understand why usedExports is treeShaking code it shouldn't be + // usedExports: false, + // sideEffects: false, + // mangleExports: false, + // }, }; diff --git a/packages/kbn-optimizer/tsconfig.json b/packages/kbn-optimizer/tsconfig.json index d6e79f66a561a..9bf0aab74cb53 100644 --- a/packages/kbn-optimizer/tsconfig.json +++ b/packages/kbn-optimizer/tsconfig.json @@ -30,5 +30,6 @@ "@kbn/dev-cli-runner", "@kbn/jest-serializers", "@kbn/repo-packages", + "@kbn/node-libs-browser-webpack-plugin", ] } diff --git a/packages/kbn-peggy-loader/BUILD.bazel b/packages/kbn-peggy-loader/BUILD.bazel index 13afe2c2bc2de..96c064189d69e 100644 --- a/packages/kbn-peggy-loader/BUILD.bazel +++ b/packages/kbn-peggy-loader/BUILD.bazel @@ -2,6 +2,7 @@ load("@build_bazel_rules_nodejs//:index.bzl", "js_library") SRCS = glob( [ + "**/*.js", "**/*.ts", ], exclude = [ diff --git a/packages/kbn-peggy-loader/index.ts b/packages/kbn-peggy-loader/index.js similarity index 90% rename from packages/kbn-peggy-loader/index.ts rename to packages/kbn-peggy-loader/index.js index 4829ba6f0f778..a2a2a26014967 100644 --- a/packages/kbn-peggy-loader/index.ts +++ b/packages/kbn-peggy-loader/index.js @@ -8,10 +8,12 @@ */ import { getJsSource } from '@kbn/peggy'; -import webpack from 'webpack'; // eslint-disable-next-line import/no-default-export -export default function (this: webpack.loader.LoaderContext) { +/** + * @this {import('webpack').LoaderContext} + */ +export default function () { this.cacheable(true); const callback = this.async(); diff --git a/packages/kbn-peggy-loader/tsconfig.json b/packages/kbn-peggy-loader/tsconfig.json index 3e412325cfa91..34ee5a02ff506 100644 --- a/packages/kbn-peggy-loader/tsconfig.json +++ b/packages/kbn-peggy-loader/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { + "checkJs": true, "outDir": "target/types", "types": [ "jest", @@ -9,11 +10,12 @@ }, "include": [ "**/*.ts", - ], - "kbn_references": [ - "@kbn/peggy" + "**/*.js" ], "exclude": [ "target/**/*", + ], + "kbn_references": [ + "@kbn/peggy", ] } diff --git a/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts b/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts index b0149d0e53274..8620611fc469e 100644 --- a/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts +++ b/packages/kbn-plugin-helpers/src/integration_tests/build.test.ts @@ -40,9 +40,6 @@ it('builds a generated plugin into a viable archive', async () => { process.execPath, ['scripts/generate_plugin', '-y', '--name', 'fooTestPlugin'], { - env: { - NODE_OPTIONS: '--openssl-legacy-provider', - }, cwd: REPO_ROOT, all: true, } @@ -55,8 +52,7 @@ it('builds a generated plugin into a viable archive', async () => { }; expect(filterLogs(generateProc.all)).toMatchInlineSnapshot(` - "Kibana is currently running with legacy OpenSSL providers enabled! For details and instructions on how to disable see https://www.elastic.co/guide/en/kibana/current/production.html#openssl-legacy-provider - succ 🎉 + " succ 🎉 Your plugin has been created in plugins/foo_test_plugin " @@ -66,17 +62,13 @@ it('builds a generated plugin into a viable archive', async () => { process.execPath, ['../../scripts/plugin_helpers', 'build', '--kibana-version', '7.5.0'], { - env: { - NODE_OPTIONS: '--openssl-legacy-provider', - }, cwd: PLUGIN_DIR, all: true, } ); expect(filterLogs(buildProc.all)).toMatchInlineSnapshot(` - "Kibana is currently running with legacy OpenSSL providers enabled! For details and instructions on how to disable see https://www.elastic.co/guide/en/kibana/current/production.html#openssl-legacy-provider - info deleting the build and target directories + " info deleting the build and target directories info run bazel and build required artifacts for the optimizer succ bazel run successfully and artifacts were created info running @kbn/optimizer @@ -106,8 +98,8 @@ it('builds a generated plugin into a viable archive', async () => { "kibana/fooTestPlugin/server/plugin.js", "kibana/fooTestPlugin/server/routes/index.js", "kibana/fooTestPlugin/server/types.js", - "kibana/fooTestPlugin/target/public/fooTestPlugin.chunk.1.js", - "kibana/fooTestPlugin/target/public/fooTestPlugin.chunk.1.js.br", + "kibana/fooTestPlugin/target/public/fooTestPlugin.chunk.189.js", + "kibana/fooTestPlugin/target/public/fooTestPlugin.chunk.189.js.br", "kibana/fooTestPlugin/target/public/fooTestPlugin.plugin.js", "kibana/fooTestPlugin/target/public/fooTestPlugin.plugin.js.br", "kibana/fooTestPlugin/translations/ja-JP.json", diff --git a/packages/kbn-plugin-helpers/src/tasks/optimize.ts b/packages/kbn-plugin-helpers/src/tasks/optimize.ts index 1ef238665879f..cdb622438be08 100644 --- a/packages/kbn-plugin-helpers/src/tasks/optimize.ts +++ b/packages/kbn-plugin-helpers/src/tasks/optimize.ts @@ -64,7 +64,7 @@ export async function optimize({ const proc = fork(require.resolve('./optimize_worker'), { cwd: REPO_ROOT, - execArgv: ['--require=@kbn/babel-register/install', '--openssl-legacy-provider'], + execArgv: ['--require=@kbn/babel-register/install'], stdio: ['ignore', 'pipe', 'pipe', 'ipc'], }); diff --git a/packages/kbn-plugin-helpers/src/tasks/optimize_worker.ts b/packages/kbn-plugin-helpers/src/tasks/optimize_worker.ts index 823da79c934c9..d05c10ee69eb1 100644 --- a/packages/kbn-plugin-helpers/src/tasks/optimize_worker.ts +++ b/packages/kbn-plugin-helpers/src/tasks/optimize_worker.ts @@ -42,7 +42,7 @@ process.on('message', (msg: any) => { return; } - if (stats.hasErrors()) { + if (stats?.hasErrors()) { send.call(process, { success: false, error: `Failed to compile with webpack:\n${stats.toString()}`, @@ -52,7 +52,7 @@ process.on('message', (msg: any) => { send.call(process, { success: true, - warnings: stats.hasWarnings() ? stats.toString() : '', + warnings: stats?.hasWarnings() ? stats.toString() : '', }); } ); diff --git a/packages/kbn-repo-source-classifier/README.mdx b/packages/kbn-repo-source-classifier/README.mdx index 2f197aa83a0c8..8e05d53808be4 100644 --- a/packages/kbn-repo-source-classifier/README.mdx +++ b/packages/kbn-repo-source-classifier/README.mdx @@ -13,7 +13,7 @@ This package exposes a class which can be used to efficiently classify all of th - `browser package`: plugin code in the root `public/` directory (and a few others in specific plugins), eventually this will include packages of type `browser-plugin` or `browser-shared` - `common packages`: includes any existing package, plugin code in root `common/` directories, (and a few others in specific plugins), Eventually this will include `common-shared` packages - `tests or mocks`: code that is loaded by jest/storybook, and mocks/helpers intended for use by that code. These files usually live along side package code but will have a separate dependency tree and are pieces of code which should never end up in the product. - - `static`: static files, currently any .json file or things loaded via `raw-loader` in browser code + - `static`: static files, currently any .json file or things loaded via `?raw` or `?asUrl` in browser code - `tooling`: scripts, config files for tools like eslint, webpack, etc. - `non-package`: code that lives outside of packages/plugins or doesn't fit into other more specific categories. Once the package project is complete this category should be limited to just `@kbn/pm` diff --git a/packages/kbn-storybook/src/ignore_not_found_export_plugin.ts b/packages/kbn-storybook/src/ignore_not_found_export_plugin.ts index bbb9177c68023..4ba5d977136d5 100644 --- a/packages/kbn-storybook/src/ignore_not_found_export_plugin.ts +++ b/packages/kbn-storybook/src/ignore_not_found_export_plugin.ts @@ -12,26 +12,35 @@ // This plugin suppresses the irritating TS-related warnings in Storybook HMR. import { Compiler, Stats } from 'webpack'; -// @ts-expect-error -import ModuleDependencyWarning from 'webpack/lib/ModuleDependencyWarning'; export class IgnoreNotFoundExportPlugin { apply(compiler: Compiler) { + // const messageRegExp = /export '.*'( \(reexported as '.*'\))? was not found in/; + // + // function doneHook(stats: Stats) { + // stats.compilation.warnings = stats.compilation.warnings.filter(function (warn) { + // if (warn instanceof ModuleDependencyWarning && messageRegExp.test(warn.message)) { + // return false; + // } + // return true; + // }); + // } + // + // if (compiler.hooks) { + // compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook); + // } else { + // compiler.plugin('done', doneHook); + // } + // + // TODO: remove the upper part as this converts to webpack v5 const messageRegExp = /export '.*'( \(reexported as '.*'\))? was not found in/; + const doneHook = (stats: Stats) => + (stats.compilation.warnings = stats.compilation.warnings.filter( + (warn: any) => + // Unfortunately webpack is not exporting ModuleDependencyWarning type, so I'm using constructor.name instead + warn.constructor.name === 'ModuleDependencyWarning' && !messageRegExp.test(warn.message) + )); - function doneHook(stats: Stats) { - stats.compilation.warnings = stats.compilation.warnings.filter(function (warn) { - if (warn instanceof ModuleDependencyWarning && messageRegExp.test(warn.message)) { - return false; - } - return true; - }); - } - - if (compiler.hooks) { - compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook); - } else { - compiler.plugin('done', doneHook); - } + compiler.hooks.done.tap('IgnoreNotFoundExportPlugin', doneHook); } } diff --git a/packages/kbn-storybook/src/lib/default_config.ts b/packages/kbn-storybook/src/lib/default_config.ts index 1a2fc7924b6d9..1c6ff42264a00 100644 --- a/packages/kbn-storybook/src/lib/default_config.ts +++ b/packages/kbn-storybook/src/lib/default_config.ts @@ -11,7 +11,7 @@ import * as path from 'path'; import fs from 'fs'; import type { StorybookConfig } from '@storybook/core-common'; import webpack, { Configuration } from 'webpack'; -import webpackMerge from 'webpack-merge'; +import { merge as webpackMerge } from 'webpack-merge'; import { REPO_ROOT } from './constants'; import { default as WebpackConfig } from '../webpack.config'; @@ -24,11 +24,18 @@ const toPath = (_path: string) => path.join(REPO_ROOT, _path); // This ignore pattern excludes all of node_modules EXCEPT for `@kbn`. This allows for // changes to packages to cause a refresh in Storybook. -const IGNORE_PATTERN = - /[/\\]node_modules[/\\](?!@kbn[/\\][^/\\]+[/\\](?!node_modules)([^/\\]+))([^/\\]+[/\\][^/\\]+)/; +const IGNORE_GLOBS = [ + '**/node_modules/**', + '!**/node_modules/@kbn/**', + '!**/node_modules/@kbn/*/**', + '!**/node_modules/@kbn/*/!(node_modules)/**', +]; export const defaultConfig: StorybookConfig = { addons: ['@kbn/storybook/preset', '@storybook/addon-a11y', '@storybook/addon-essentials'], + core: { + builder: 'webpack5', + }, stories: ['../**/*.stories.tsx', '../**/*.stories.mdx'], typescript: { reactDocgen: false, @@ -99,11 +106,17 @@ export const defaultConfig: StorybookConfig = { }) ); - config.node = { fs: 'empty' }; + config.resolve = { + ...config.resolve, + fallback: { + ...config?.resolve?.fallback, + fs: false, + }, + }; config.watch = true; config.watchOptions = { ...config.watchOptions, - ignored: [IGNORE_PATTERN], + ignored: IGNORE_GLOBS, }; // Remove when @storybook has moved to @emotion v11 diff --git a/packages/kbn-storybook/src/webpack.config.ts b/packages/kbn-storybook/src/webpack.config.ts index f2c17e2313d99..c085c4237183c 100644 --- a/packages/kbn-storybook/src/webpack.config.ts +++ b/packages/kbn-storybook/src/webpack.config.ts @@ -7,25 +7,18 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +/* eslint-disable import/no-default-export */ import { externals } from '@kbn/ui-shared-deps-src'; -import { stringifyRequest } from 'loader-utils'; import { resolve } from 'path'; -import webpack, { Configuration, Stats } from 'webpack'; -import webpackMerge from 'webpack-merge'; +import webpack, { Configuration } from 'webpack'; +import { merge as webpackMerge } from 'webpack-merge'; +import { NodeLibsBrowserPlugin } from '@kbn/node-libs-browser-webpack-plugin'; import { REPO_ROOT } from './lib/constants'; import { IgnoreNotFoundExportPlugin } from './ignore_not_found_export_plugin'; import 'webpack-dev-server'; // Extends webpack configuration with `devServer` property type Preset = string | [string, Record] | Record; -const stats = { - ...Stats.presetToOptions('minimal'), - colors: true, - errorDetails: true, - errors: true, - moduleTrace: true, -}; - function isProgressPlugin(plugin: any) { return 'handler' in plugin && plugin.showActiveModules && plugin.showModules; } @@ -35,7 +28,10 @@ function isHtmlPlugin(plugin: any): plugin is { options: { template: string } } } interface BabelLoaderRule extends webpack.RuleSetRule { - use: webpack.RuleSetLoader[]; + use: Array<{ + loader: 'babel-loader'; + [key: string]: unknown; + }>; } function isBabelLoaderRule(rule: webpack.RuleSetRule): rule is BabelLoaderRule { @@ -44,7 +40,7 @@ function isBabelLoaderRule(rule: webpack.RuleSetRule): rule is BabelLoaderRule { Array.isArray(rule.use) && rule.use.some( (l) => - typeof l === 'object' && typeof l.loader === 'string' && l.loader.includes('babel-loader') + typeof l === 'object' && typeof l?.loader === 'string' && l?.loader.includes('babel-loader') ) ); } @@ -69,12 +65,14 @@ function isDesiredPreset(preset: Preset) { } // Extend the Storybook Webpack config with some customizations -/* eslint-disable import/no-default-export */ +/** + * @returns {import('webpack').Configuration} + */ export default ({ config: storybookConfig }: { config: Configuration }) => { const config: Configuration = { devServer: { devMiddleware: { - stats, + stats: 'errors-only', }, }, externals, @@ -91,9 +89,7 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { }, { test: /\.(html|md|txt|tmpl)$/, - use: { - loader: 'raw-loader', - }, + type: 'asset/source', }, { test: /\.peggy$/, @@ -119,10 +115,13 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { loader: 'sass-loader', options: { additionalData(content: string, loaderContext: any) { - return `@import ${stringifyRequest( - loaderContext, - resolve(REPO_ROOT, 'src/core/public/styles/core_app/_globals_v8light.scss') - )};\n${content}`; + const req = JSON.stringify( + loaderContext.utils.contextify( + loaderContext.context || loaderContext.rootContext, + resolve(REPO_ROOT, 'src/core/public/styles/core_app/_globals_v8light.scss') + ) + ); + return `@import ${req};\n${content}`; }, implementation: require('sass-embedded'), sassOptions: { @@ -133,39 +132,9 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { }, ], }, - { - test: /node_modules\/@?xstate5\/.*\.js$/, - use: { - loader: 'babel-loader', - options: { - babelrc: false, - presets: [require.resolve('@kbn/babel-preset/webpack_preset')], - plugins: ['@babel/plugin-transform-logical-assignment-operators'], - }, - }, - }, - { - test: /\.js$/, - include: /node_modules[\\\/]@dagrejs/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env'], // Doesn't work with @kbn/babel-preset/webpack_preset - plugins: ['@babel/plugin-proposal-class-properties'], - }, - }, - }, - { - test: /node_modules[\/\\]@?xyflow[\/\\].*.js$/, - loaders: 'babel-loader', - options: { - presets: [require.resolve('@kbn/babel-preset/webpack_preset')], - plugins: ['@babel/plugin-transform-logical-assignment-operators'], - }, - }, ], }, - plugins: [new IgnoreNotFoundExportPlugin()], + plugins: [new NodeLibsBrowserPlugin(), new IgnoreNotFoundExportPlugin()], resolve: { extensions: ['.js', '.mjs', '.ts', '.tsx', '.json', '.mdx'], mainFields: ['browser', 'main'], @@ -175,16 +144,16 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { vega: resolve(REPO_ROOT, 'node_modules/vega/build-es5/vega.js'), }, }, - stats, + stats: 'errors-only', }; // Override storybookConfig mainFields instead of merging with config delete storybookConfig.resolve?.mainFields; - const updatedModuleRules = []; + const updatedModuleRules: webpack.RuleSetRule[] = []; // clone and modify the module.rules config provided by storybook so that the default babel plugins run after the typescript preset for (const originalRule of storybookConfig.module?.rules ?? []) { - const rule = { ...originalRule }; + const rule = typeof originalRule !== 'string' ? { ...originalRule } : {}; updatedModuleRules.push(rule); if (isBabelLoaderRule(rule)) { @@ -237,7 +206,7 @@ export default ({ config: storybookConfig }: { config: Configuration }) => { filteredStorybookPlugins.push(plugin); } - return webpackMerge( + return webpackMerge( { ...storybookConfig, plugins: filteredStorybookPlugins, diff --git a/packages/kbn-storybook/tsconfig.json b/packages/kbn-storybook/tsconfig.json index ab513c1d02c0c..8f120043dc5d7 100644 --- a/packages/kbn-storybook/tsconfig.json +++ b/packages/kbn-storybook/tsconfig.json @@ -22,6 +22,7 @@ "@kbn/core-i18n-browser", "@kbn/react-kibana-context-root", "@kbn/core-analytics-browser", + "@kbn/node-libs-browser-webpack-plugin", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-test/src/jest/resolver.js b/packages/kbn-test/src/jest/resolver.js index 8698e72a2e917..24a6b0f4d245a 100644 --- a/packages/kbn-test/src/jest/resolver.js +++ b/packages/kbn-test/src/jest/resolver.js @@ -32,6 +32,18 @@ const STATIC_FILE_EXT = const IS_REACT_18 = process.env.REACT_18 === 'true'; +/** + * @param {string} str + * @returns + */ +function parseRequestOrExtSuffix(str) { + const rawSuffix = '?raw'; + if (str.endsWith(rawSuffix)) { + return str.slice(0, -rawSuffix.length); + } + return str; +} + /** * @param {string} request * @param {import('resolve').SyncOpts} options @@ -85,25 +97,27 @@ module.exports = (request, options) => { const reqExt = Path.extname(request); if (reqExt) { - const reqBasename = Path.basename(request, reqExt); - if ((reqExt === '.css' || reqExt === '.scss') && reqBasename.endsWith('.module')) { + const pRequest = parseRequestOrExtSuffix(request); + const pReqExt = parseRequestOrExtSuffix(reqExt); + const reqBasename = Path.basename(pRequest, pReqExt); + if ((pReqExt === '.css' || pReqExt === '.scss') && reqBasename.endsWith('.module')) { return CSS_MODULE_MOCK; } - if (reqExt === '.css' || reqExt === '.less' || reqExt === '.scss') { + if (pReqExt === '.css' || pReqExt === '.less' || pReqExt === '.scss') { return STYLE_MOCK; } - if (STATIC_FILE_EXT.includes(reqExt)) { + if (STATIC_FILE_EXT.includes(pReqExt)) { return FILE_MOCK; } - if (reqExt === '.worker' && reqBasename.endsWith('.editor')) { + if (pReqExt === '.worker' && reqBasename.endsWith('.editor')) { return WORKER_MOCK; } } - if (request.startsWith('file-loader!') || request.startsWith('!!file-loader!')) { + if (request.endsWith('?asUrl')) { return FILE_MOCK; } diff --git a/renovate.json b/renovate.json index 78e472e639a6d..95ee4796b38ba 100644 --- a/renovate.json +++ b/renovate.json @@ -40,6 +40,15 @@ ], "enabled": false }, + { + "groupName": "webpack", + "matchDepNames": ["webpack", "@types/webpack", "webpack-cli", "webpack-dev-server", "webpack-merge"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "backport:all-open", "release_note:skip", "ci:build-webpack-bundle-analyzer"], + "minimumReleaseAge": "60 days", + "enabled": true + }, { "groupName": "devcontainer", "reviewers": [ diff --git a/src/core/packages/integrations/browser-internal/src/styles/styles_service.test.ts b/src/core/packages/integrations/browser-internal/src/styles/styles_service.test.ts index e3e49bfe8e7aa..0a7d6d9898d61 100644 --- a/src/core/packages/integrations/browser-internal/src/styles/styles_service.test.ts +++ b/src/core/packages/integrations/browser-internal/src/styles/styles_service.test.ts @@ -9,7 +9,7 @@ import { BehaviorSubject } from 'rxjs'; -jest.mock('!!raw-loader!./disable_animations.css', () => 'MOCK DISABLE ANIMATIONS CSS'); +jest.mock('./disable_animations.css?raw', () => 'MOCK DISABLE ANIMATIONS CSS'); import { StylesService } from './styles_service'; import { uiSettingsServiceMock } from '@kbn/core-ui-settings-browser-mocks'; diff --git a/src/core/packages/integrations/browser-internal/src/styles/styles_service.ts b/src/core/packages/integrations/browser-internal/src/styles/styles_service.ts index 71132085ec1fa..7b04e0dd72191 100644 --- a/src/core/packages/integrations/browser-internal/src/styles/styles_service.ts +++ b/src/core/packages/integrations/browser-internal/src/styles/styles_service.ts @@ -12,7 +12,7 @@ import { Subscription } from 'rxjs'; import type { CoreService } from '@kbn/core-base-browser-internal'; import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; // @ts-expect-error -import disableAnimationsCss from '!!raw-loader!./disable_animations.css'; +import disableAnimationsCss from './disable_animations.css?raw'; interface StartDeps { uiSettings: IUiSettingsClient; diff --git a/src/dev/storybook/run_storybook_cli.ts b/src/dev/storybook/run_storybook_cli.ts index 26369b6646196..dd9855bdbfdd9 100644 --- a/src/dev/storybook/run_storybook_cli.ts +++ b/src/dev/storybook/run_storybook_cli.ts @@ -41,6 +41,7 @@ run( log.verbose('Loading Storybook:', configDir); + // TODO: once storybook is upgraded into a newer version, --no-deprecation flag could be removed when invoking it through the package.json script runStorybookCli({ configDir, name: alias }); }, { diff --git a/src/platform/packages/private/kbn-mapbox-gl/index.ts b/src/platform/packages/private/kbn-mapbox-gl/index.ts index dfc5a876ec262..7721b98cfa3b4 100644 --- a/src/platform/packages/private/kbn-mapbox-gl/index.ts +++ b/src/platform/packages/private/kbn-mapbox-gl/index.ts @@ -33,10 +33,8 @@ import type { // @ts-expect-error import maplibreglDist from 'maplibre-gl/dist/maplibre-gl-csp'; -// @ts-expect-error -import mbRtlPlugin from '!!file-loader!@mapbox/mapbox-gl-rtl-text/mapbox-gl-rtl-text.min.js'; -// @ts-expect-error -import mbWorkerUrl from '!!file-loader!maplibre-gl/dist/maplibre-gl-csp-worker'; +import mbRtlPlugin from '@mapbox/mapbox-gl-rtl-text/mapbox-gl-rtl-text.min.js?asUrl'; +import mbWorkerUrl from 'maplibre-gl/dist/maplibre-gl-csp-worker?asUrl'; import 'maplibre-gl/dist/maplibre-gl.css'; const maplibregl: any = maplibreglDist; diff --git a/src/platform/packages/private/kbn-mapbox-gl/tsconfig.json b/src/platform/packages/private/kbn-mapbox-gl/tsconfig.json index 9a47088cfbaa3..4ca45c90ec152 100644 --- a/src/platform/packages/private/kbn-mapbox-gl/tsconfig.json +++ b/src/platform/packages/private/kbn-mapbox-gl/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../../../../../tsconfig.base.json", "compilerOptions": { "outDir": "target/types", - "types": [] + "types": ["@kbn/ambient-ui-types"] }, "include": [ "**/*.ts", diff --git a/src/platform/packages/private/kbn-repo-packages/modern/parse_kbn_import_req.js b/src/platform/packages/private/kbn-repo-packages/modern/parse_kbn_import_req.js index b4f0da88898ab..35033b0029d6a 100644 --- a/src/platform/packages/private/kbn-repo-packages/modern/parse_kbn_import_req.js +++ b/src/platform/packages/private/kbn-repo-packages/modern/parse_kbn_import_req.js @@ -15,7 +15,8 @@ * @returns {import('./types').KbnImportReq | undefined} */ function parseKbnImportReq(importReq) { - if (!importReq.startsWith('@kbn/')) { + // TODO: evaluate if we want to keep excluding raw imports (as before) or just patch the bundle_remotes_plugin logic + if (!importReq.startsWith('@kbn/') || importReq.endsWith('?raw')) { return undefined; } diff --git a/src/platform/packages/private/kbn-ui-shared-deps-npm/BUILD.bazel b/src/platform/packages/private/kbn-ui-shared-deps-npm/BUILD.bazel index 1e54524fdf55e..19225c0eefe06 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-npm/BUILD.bazel +++ b/src/platform/packages/private/kbn-ui-shared-deps-npm/BUILD.bazel @@ -26,8 +26,8 @@ SRCS = glob( RUNTIME_DEPS = [ "@npm//babel-loader", "@npm//@babel/plugin-proposal-optional-chaining", - "@npm//loader-utils", "@npm//val-loader", + "//packages/kbn-node-libs-browser-webpack-plugin", "//src/platform/packages/shared/kbn-repo-info", # deps in the dll need to be included in the sandbox for consumers # of this DLL (ui-shared-deps-src) because webpack won't actually @@ -53,6 +53,7 @@ RUNTIME_DEPS = [ "@npm//jquery", "@npm//lodash", "@npm//moment-timezone", + "@npm//node-libs-browser", "@npm//react-dom", "@npm//react-dom-18", "@npm//react-router-dom", @@ -96,11 +97,9 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", - "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", - "NODE_OPTIONS": "--openssl-legacy-provider", "REACT_18": "$(REACT_18)", }, }) diff --git a/src/platform/packages/private/kbn-ui-shared-deps-npm/src/public_path_loader.js b/src/platform/packages/private/kbn-ui-shared-deps-npm/src/public_path_loader.js index bc0e90a8031f3..6e2f0d7e1ee94 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-npm/src/public_path_loader.js +++ b/src/platform/packages/private/kbn-ui-shared-deps-npm/src/public_path_loader.js @@ -7,19 +7,21 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -// eslint-disable-next-line import/no-extraneous-dependencies -const { stringifyRequest } = require('loader-utils'); - const VAL_LOADER = require.resolve('val-loader'); const MODULE_CREATOR = require.resolve('./public_path_module_creator'); /** - * @this {any} this + * @this {import('webpack').LoaderContext} * @param {string} source */ module.exports = function (source) { const options = this.query; const valOpts = new URLSearchParams({ key: options.key }).toString(); - const req = `${VAL_LOADER}?${valOpts}!${MODULE_CREATOR}`; - return `require(${stringifyRequest(this, req)});${source}`; + const req = JSON.stringify( + this.utils.contextify( + this.context || this.rootContext, + `${VAL_LOADER}?${valOpts}!${MODULE_CREATOR}` + ) + ); + return `require(${req});${source}`; }; diff --git a/src/platform/packages/private/kbn-ui-shared-deps-npm/webpack.config.js b/src/platform/packages/private/kbn-ui-shared-deps-npm/webpack.config.js index 08efd5863c147..8340583ca0f8e 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-npm/webpack.config.js +++ b/src/platform/packages/private/kbn-ui-shared-deps-npm/webpack.config.js @@ -9,6 +9,7 @@ const Path = require('path'); const webpack = require('webpack'); +const { NodeLibsBrowserPlugin } = require('@kbn/node-libs-browser-webpack-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); @@ -19,14 +20,11 @@ const WEBPACK_SRC = require.resolve('webpack'); const REPO_ROOT = Path.resolve(__dirname, '..', '..', '..', '..', '..'); +/** @returns {import('webpack').Configuration} */ module.exports = (_, argv) => { const outputPath = argv.outputPath ? Path.resolve(argv.outputPath) : UiSharedDepsNpm.distDir; return { - node: { - child_process: 'empty', - fs: 'empty', - }, externals: { module: 'module', }, @@ -63,12 +61,12 @@ module.exports = (_, argv) => { '@elastic/charts', '@elastic/eui', '@elastic/eui/optimize/es/components/provider/nested', - '@elastic/eui/optimize/es/services', - '@elastic/eui/optimize/es/services/format', + '@elastic/eui/optimize/es/services/theme/warning', '@elastic/eui/dist/eui_theme_amsterdam_light.json', '@elastic/eui/dist/eui_theme_amsterdam_dark.json', '@elastic/eui/dist/eui_theme_borealis_light.json', '@elastic/eui/dist/eui_theme_borealis_dark.json', + '@elastic/eui-theme-borealis', '@elastic/numeral', '@emotion/cache', '@emotion/react', @@ -105,6 +103,7 @@ module.exports = (_, argv) => { }, context: __dirname, devtool: 'cheap-source-map', + target: 'web', output: { path: outputPath, filename: '[name].dll.js', @@ -112,7 +111,6 @@ module.exports = (_, argv) => { devtoolModuleFilenameTemplate: (info) => `kbn-ui-shared-deps-npm/${Path.relative(REPO_ROOT, info.absoluteResourcePath)}`, library: '__kbnSharedDeps_npm__', - futureEmitAssets: true, }, module: { @@ -148,11 +146,17 @@ module.exports = (_, argv) => { react: process.env.REACT_18 === 'true' ? 'react-18' : 'react', }, extensions: ['.js', '.ts'], + mainFields: ['browser', 'module', 'main'], + conditionNames: ['browser', 'module', 'import', 'require', 'default'], + // mainFields: ['browser', 'main', 'module'], + // // conditionNames: ['require', 'node', 'module', 'import', 'default'], }, optimization: { + moduleIds: process.env.NODE_ENV === 'production' ? 'deterministic' : 'natural', + chunkIds: process.env.NODE_ENV === 'production' ? 'deterministic' : 'natural', minimize: false, - noEmitOnErrors: true, + emitOnErrors: false, }, performance: { @@ -163,6 +167,7 @@ module.exports = (_, argv) => { }, plugins: [ + new NodeLibsBrowserPlugin(), new CleanWebpackPlugin({ protectWebpackAssets: false, cleanAfterEveryBuildPatterns: [ @@ -175,6 +180,7 @@ module.exports = (_, argv) => { }), new webpack.DllPlugin({ context: REPO_ROOT, + entryOnly: false, path: Path.resolve(outputPath, '[name]-manifest.json'), name: '__kbnSharedDeps_npm__', }), diff --git a/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel b/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel index f14402dfa88c1..879eb69aa723c 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel +++ b/src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel @@ -15,7 +15,6 @@ webpack_cli( "@npm//moment", "@npm//babel-loader", "@npm//css-loader", - "@npm//url-loader", "@npm//@babel/plugin-transform-numeric-separator", "//src/platform/packages/private/kbn-ui-shared-deps-npm", "//packages/kbn-babel-register", @@ -56,11 +55,9 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", - "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", - "NODE_OPTIONS": "--openssl-legacy-provider", "REACT_18": "$(REACT_18)", }, }), diff --git a/src/platform/packages/private/kbn-ui-shared-deps-src/src/definitions.js b/src/platform/packages/private/kbn-ui-shared-deps-src/src/definitions.js index 4c6a66de525c3..109c376cb6cd3 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-src/src/definitions.js +++ b/src/platform/packages/private/kbn-ui-shared-deps-src/src/definitions.js @@ -75,8 +75,7 @@ const externals = { '@elastic/eui': '__kbnSharedDeps__.ElasticEui', '@elastic/eui/lib/components/provider/nested': '__kbnSharedDeps__.ElasticEuiLibComponentsUseIsNestedEuiProvider', - '@elastic/eui/lib/services': '__kbnSharedDeps__.ElasticEuiLibServices', - '@elastic/eui/lib/services/format': '__kbnSharedDeps__.ElasticEuiLibServicesFormat', + '@elastic/eui/lib/services/theme/warning': '__kbnSharedDeps__.ElasticEuiLibServicesThemeWarning', '@elastic/eui-theme-borealis': '__kbnSharedDeps__.ElasticEuiThemeBorealis', // transient dep of eui diff --git a/src/platform/packages/private/kbn-ui-shared-deps-src/src/entry.js b/src/platform/packages/private/kbn-ui-shared-deps-src/src/entry.js index 74025ceb7f476..ffc90a8c514ba 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-src/src/entry.js +++ b/src/platform/packages/private/kbn-ui-shared-deps-src/src/entry.js @@ -42,10 +42,9 @@ export const Rxjs = require('rxjs'); export const ElasticNumeral = require('@elastic/numeral'); export const ElasticCharts = require('@elastic/charts'); export const ElasticEui = require('@elastic/eui'); -export const ElasticEuiThemeBorealis = require('@elastic/eui-theme-borealis'); export const ElasticEuiLibComponentsUseIsNestedEuiProvider = require('@elastic/eui/optimize/es/components/provider/nested'); -export const ElasticEuiLibServices = require('@elastic/eui/optimize/es/services'); -export const ElasticEuiLibServicesFormat = require('@elastic/eui/optimize/es/services/format'); +export const ElasticEuiLibServicesThemeWarning = require('@elastic/eui/optimize/es/services/theme/warning'); +export const ElasticEuiThemeBorealis = require('@elastic/eui-theme-borealis'); export const KbnDatemath = require('@kbn/datemath'); export const HelloPangeaDnd = require('@hello-pangea/dnd/dist/dnd'); export const ReduxjsToolkit = require('@reduxjs/toolkit'); diff --git a/src/platform/packages/private/kbn-ui-shared-deps-src/webpack.config.js b/src/platform/packages/private/kbn-ui-shared-deps-src/webpack.config.js index 2c01d209b7315..987efa7a7c057 100644 --- a/src/platform/packages/private/kbn-ui-shared-deps-src/webpack.config.js +++ b/src/platform/packages/private/kbn-ui-shared-deps-src/webpack.config.js @@ -13,6 +13,7 @@ require('@kbn/babel-register').install(); const Path = require('path'); const webpack = require('webpack'); +const { NodeLibsBrowserPlugin } = require('@kbn/node-libs-browser-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const UiSharedDepsNpm = require('@kbn/ui-shared-deps-npm'); @@ -22,11 +23,8 @@ const MOMENT_SRC = require.resolve('moment/min/moment-with-locales.js'); const REPO_ROOT = Path.resolve(__dirname, '..', '..', '..', '..', '..'); +/** @returns {import('webpack').Configuration} */ module.exports = { - node: { - child_process: 'empty', - fs: 'empty', - }, externals: { module: 'module', }, @@ -36,6 +34,7 @@ module.exports = { }, context: __dirname, devtool: 'cheap-source-map', + target: 'web', output: { path: UiSharedDepsSrcDistDir, filename: '[name].js', @@ -44,7 +43,6 @@ module.exports = { devtoolModuleFilenameTemplate: (info) => `kbn-ui-shared-deps-src/${Path.relative(REPO_ROOT, info.absoluteResourcePath)}`, library: '__kbnSharedDeps__', - futureEmitAssets: true, }, module: { @@ -68,13 +66,6 @@ module.exports = { test: /\.css$/, use: [MiniCssExtractPlugin.loader, 'css-loader'], }, - { - test: /\.(ttf)(\?|$)/, - loader: 'url-loader', - options: { - limit: 8192, - }, - }, { test: /\.(js|tsx?)$/, exclude: /[\/\\]node_modules[\/\\](?!@kbn)([^\/\\]+)[\/\\]/, @@ -102,13 +93,30 @@ module.exports = { }, }, }, + // automatically chooses between exporting a data URI and emitting a separate file. Previously achievable by using url-loader with asset size limit. + { + test: /\.(ttf)(\?|$)/, + type: 'asset', + parser: { + dataUrlCondition: { + maxSize: 8192, + }, + }, + }, ], }, resolve: { extensions: ['.js', '.ts', '.tsx'], + mainFields: ['browser', 'module', 'main'], + conditionNames: ['browser', 'module', 'import', 'require', 'default'], + // mainFields: ['browser', 'main', 'module'], + // // conditionNames: ['require', 'node', 'module', 'import', 'default'], alias: { '@elastic/eui$': '@elastic/eui/optimize/es', + '@elastic/eui/lib/components/provider/nested$': + '@elastic/eui/optimize/es/components/provider/nested', + '@elastic/eui/lib/services/theme/warning$': '@elastic/eui/optimize/es/services/theme/warning', moment: MOMENT_SRC, // NOTE: Used to include react profiling on bundles // https://gist.github.com/bvaughn/25e6233aeb1b4f0cdb8d8366e54a3977#webpack-4 @@ -120,8 +128,10 @@ module.exports = { }, optimization: { + moduleIds: process.env.NODE_ENV === 'production' ? 'deterministic' : 'natural', + chunkIds: process.env.NODE_ENV === 'production' ? 'deterministic' : 'natural', minimize: false, - noEmitOnErrors: true, + emitOnErrors: false, }, performance: { @@ -132,6 +142,7 @@ module.exports = { }, plugins: [ + new NodeLibsBrowserPlugin(), new MiniCssExtractPlugin({ filename: '[name].css', }), diff --git a/src/platform/packages/shared/kbn-monaco/BUILD.bazel b/src/platform/packages/shared/kbn-monaco/BUILD.bazel index e552cf0822a83..de340d159e365 100644 --- a/src/platform/packages/shared/kbn-monaco/BUILD.bazel +++ b/src/platform/packages/shared/kbn-monaco/BUILD.bazel @@ -28,6 +28,7 @@ SHARED_DEPS = [ "//src/platform/packages/shared/kbn-ui-theme", "//src/platform/packages/shared/kbn-esql-validation-autocomplete", "//src/platform/packages/shared/kbn-esql-ast", + "//packages/kbn-node-libs-browser-webpack-plugin", "@npm//antlr4", "@npm//monaco-editor", "@npm//monaco-yaml", @@ -41,7 +42,6 @@ webpack_cli( "@npm//terser-webpack-plugin", "@npm//@babel/runtime", "@npm//babel-loader", - "@npm//raw-loader", "@npm//rxjs", "webpack.config.js", @@ -59,11 +59,9 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", - "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", - "NODE_OPTIONS": "--openssl-legacy-provider", }, }), visibility = ["//visibility:public"], diff --git a/src/platform/packages/shared/kbn-monaco/webpack.config.js b/src/platform/packages/shared/kbn-monaco/webpack.config.js index 4f558834d8059..ddd21c9c7e029 100644 --- a/src/platform/packages/shared/kbn-monaco/webpack.config.js +++ b/src/platform/packages/shared/kbn-monaco/webpack.config.js @@ -8,6 +8,7 @@ */ const path = require('path'); +const { NodeLibsBrowserPlugin } = require('@kbn/node-libs-browser-webpack-plugin'); const getWorkerEntry = (language) => { switch (language) { @@ -30,7 +31,8 @@ const workerConfig = (languages) => ({ entries[language] = getWorkerEntry(language); return entries; }, {}), - devtool: process.env.NODE_ENV === 'production' ? false : '#cheap-source-map', + devtool: process.env.NODE_ENV === 'production' ? false : 'cheap-source-map', + target: 'web', output: { path: path.resolve(__dirname, 'target_workers'), filename: ({ chunk }) => `${chunk.name}.editor.worker.js`, @@ -42,6 +44,7 @@ const workerConfig = (languages) => ({ 'vscode-uri$': require.resolve('vscode-uri').replace(/\/umd\/index.js/, '/esm/index.mjs'), }, }, + plugins: [new NodeLibsBrowserPlugin()], stats: 'errors-only', module: { rules: [ diff --git a/src/platform/plugins/private/vis_types/vega/public/default_spec.ts b/src/platform/plugins/private/vis_types/vega/public/default_spec.ts index fd4d54a26eab7..fc68b8566b45f 100644 --- a/src/platform/plugins/private/vis_types/vega/public/default_spec.ts +++ b/src/platform/plugins/private/vis_types/vega/public/default_spec.ts @@ -8,6 +8,6 @@ */ // @ts-ignore -import defaultSpec from '!!raw-loader!./default.spec.hjson'; +import defaultSpec from './default.spec.hjson?raw'; export const getDefaultSpec = () => defaultSpec; diff --git a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/.storybook/main.js b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/.storybook/main.js index 18faa0335df0d..ee807948934b7 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/.storybook/main.js +++ b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/.storybook/main.js @@ -8,7 +8,7 @@ */ import { defaultConfig } from '@kbn/storybook'; -import webpackMerge from 'webpack-merge'; +import { merge as webpackMerge } from 'webpack-merge'; import { resolve } from 'path'; const mockConfig = { diff --git a/src/platform/plugins/shared/chart_expressions/expression_metric/.storybook/main.js b/src/platform/plugins/shared/chart_expressions/expression_metric/.storybook/main.js index b12d2e91b8540..5b8471849cda8 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_metric/.storybook/main.js +++ b/src/platform/plugins/shared/chart_expressions/expression_metric/.storybook/main.js @@ -8,7 +8,7 @@ */ import { defaultConfig } from '@kbn/storybook'; -import webpackMerge from 'webpack-merge'; +import { merge as webpackMerge } from 'webpack-merge'; import { resolve } from 'path'; const mockConfig = { diff --git a/src/platform/plugins/shared/chart_expressions/expression_tagcloud/.storybook/main.js b/src/platform/plugins/shared/chart_expressions/expression_tagcloud/.storybook/main.js index 65c802d71b989..206604f1ff758 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_tagcloud/.storybook/main.js +++ b/src/platform/plugins/shared/chart_expressions/expression_tagcloud/.storybook/main.js @@ -8,7 +8,7 @@ */ import { defaultConfig } from '@kbn/storybook'; -import webpackMerge from 'webpack-merge'; +import { merge as webpackMerge } from 'webpack-merge'; import { resolve } from 'path'; const mockConfig = { diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_app/_dashboard_app.scss b/src/platform/plugins/shared/dashboard/public/dashboard_app/_dashboard_app.scss index c89337d29e720..dfef1bf0c4ec9 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_app/_dashboard_app.scss +++ b/src/platform/plugins/shared/dashboard/public/dashboard_app/_dashboard_app.scss @@ -1,4 +1,4 @@ -@import 'src/core/public/mixins'; +@import '../../../../../../../src/core/public/mixins'; .dshUnsavedListingItem { margin-top: $euiSizeM; diff --git a/src/platform/plugins/shared/discover/.storybook/discover.webpack.ts b/src/platform/plugins/shared/discover/.storybook/main.js similarity index 81% rename from src/platform/plugins/shared/discover/.storybook/discover.webpack.ts rename to src/platform/plugins/shared/discover/.storybook/main.js index 91c2a37df3942..aa82846a1c085 100644 --- a/src/platform/plugins/shared/discover/.storybook/discover.webpack.ts +++ b/src/platform/plugins/shared/discover/.storybook/main.js @@ -7,9 +7,9 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { defaultConfig, StorybookConfig } from '@kbn/storybook'; +import { defaultConfig } from '@kbn/storybook'; -export const discoverStorybookConfig: StorybookConfig = { +module.exports = { ...defaultConfig, stories: ['../**/*.stories.tsx'], }; diff --git a/src/platform/plugins/shared/unified_search/.storybook/main.js b/src/platform/plugins/shared/unified_search/.storybook/main.js index 86528a888e70e..6eb26edfec43e 100644 --- a/src/platform/plugins/shared/unified_search/.storybook/main.js +++ b/src/platform/plugins/shared/unified_search/.storybook/main.js @@ -8,7 +8,7 @@ */ import { defaultConfig } from '@kbn/storybook'; -import webpackMerge from 'webpack-merge'; +import { merge as webpackMerge } from 'webpack-merge'; import { resolve } from 'path'; const mockConfig = { diff --git a/tsconfig.base.json b/tsconfig.base.json index 06df1ec525415..d14ecf25c1f28 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1306,6 +1306,8 @@ "@kbn/newsfeed-test-plugin/*": ["test/common/plugins/newsfeed/*"], "@kbn/no-data-page-plugin": ["src/platform/plugins/private/no_data_page"], "@kbn/no-data-page-plugin/*": ["src/platform/plugins/private/no_data_page/*"], + "@kbn/node-libs-browser-webpack-plugin": ["packages/kbn-node-libs-browser-webpack-plugin"], + "@kbn/node-libs-browser-webpack-plugin/*": ["packages/kbn-node-libs-browser-webpack-plugin/*"], "@kbn/notifications-plugin": ["x-pack/platform/plugins/shared/notifications"], "@kbn/notifications-plugin/*": ["x-pack/platform/plugins/shared/notifications/*"], "@kbn/object-utils": ["src/platform/packages/shared/kbn-object-utils"], diff --git a/x-pack/platform/plugins/private/canvas/scripts/shareable_runtime.js b/x-pack/platform/plugins/private/canvas/scripts/shareable_runtime.js index f3e1e66c1744a..a0b8421f8da01 100644 --- a/x-pack/platform/plugins/private/canvas/scripts/shareable_runtime.js +++ b/x-pack/platform/plugins/private/canvas/scripts/shareable_runtime.js @@ -55,7 +55,6 @@ run( execa.sync( process.execPath, [ - '--openssl-legacy-provider', require.resolve('webpack-dev-server/bin/webpack-dev-server'), '--config', webpackConfig, @@ -89,7 +88,6 @@ run( execa.sync( process.execPath, [ - '--openssl-legacy-provider', require.resolve('webpack/bin/webpack'), '--config', webpackConfig, diff --git a/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack.config.js b/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack.config.js index bfd95fe5e607f..d092fd5ad27f6 100644 --- a/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack.config.js +++ b/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack.config.js @@ -9,7 +9,6 @@ require('@kbn/babel-register').install(); const path = require('path'); const webpack = require('webpack'); -const { stringifyRequest } = require('loader-utils'); const { CiStatsPlugin } = require('./webpack/ci_stats_plugin'); const { @@ -21,11 +20,13 @@ const { const isProd = process.env.NODE_ENV === 'production'; +/** @type {import('webpack').Configuration} */ module.exports = { context: KIBANA_ROOT, entry: { [SHAREABLE_RUNTIME_NAME]: require.resolve('./index.ts'), }, + target: 'web', mode: isProd ? 'production' : 'development', output: { path: SHAREABLE_RUNTIME_OUTPUT, @@ -35,18 +36,28 @@ module.exports = { resolve: { alias: { core_app_image_assets: path.resolve(KIBANA_ROOT, 'src/core/public/styles/core_app/images'), + [require.resolve('@elastic/eui/es/components/drag_and_drop')]: false, }, extensions: ['.js', '.json', '.ts', '.tsx', '.scss'], - mainFields: ['browser', 'main'], + mainFields: ['browser', 'module', 'main'], + fallback: { + fs: false, + child_process: false, + }, }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, - loaders: 'babel-loader', + loader: 'babel-loader', options: { - presets: [require.resolve('@kbn/babel-preset/webpack_preset')], + presets: [ + [ + require.resolve('@kbn/babel-preset/webpack_preset'), + { useTransformRequireDefault: true }, + ], + ], }, }, { @@ -105,15 +116,15 @@ module.exports = { }, { test: /\.module\.s(a|c)ss$/, - loader: [ + use: [ 'style-loader', { loader: 'css-loader', options: { modules: { localIdentName: '[name]__[local]___[hash:base64:5]', + exportLocalsConvention: 'camelCase', }, - localsConvention: 'camelCase', sourceMap: !isProd, }, }, @@ -160,10 +171,16 @@ module.exports = { loader: 'sass-loader', options: { additionalData(content, loaderContext) { - return `@import ${stringifyRequest( - loaderContext, - path.resolve(KIBANA_ROOT, 'src/core/public/styles/core_app/_globals_v8light.scss') - )};\n${content}`; + const req = JSON.stringify( + loaderContext.utils.contextify( + loaderContext.context || loaderContext.rootContext, + path.resolve( + KIBANA_ROOT, + 'src/core/public/styles/core_app/_globals_v8light.scss' + ) + ) + ); + return `@import ${req};\n${content}`; }, implementation: require('sass-embedded'), sassOptions: { @@ -176,11 +193,23 @@ module.exports = { }, { test: require.resolve('jquery'), - loader: 'expose-loader?jQuery!expose-loader?$', + use: [ + { + loader: 'expose-loader', + options: { + exposes: ['jQuery', '$'], + }, + }, + ], }, { test: /\.(woff|woff2|ttf|eot|svg|ico|png|jpg|gif|jpeg)(\?|$)/, - loader: 'url-loader', + type: 'asset', + parser: { + dataUrlCondition: { + maxSize: 8192, + }, + }, sideEffects: false, }, { @@ -188,20 +217,12 @@ module.exports = { loader: 'html-loader', exclude: /node_modules/, }, - { - test: [require.resolve('@elastic/eui/es/components/drag_and_drop')], - use: require.resolve('null-loader'), - }, { test: /\.peggy$/, use: require.resolve('@kbn/peggy-loader'), }, ], }, - node: { - fs: 'empty', - child_process: 'empty', - }, plugins: [ isProd ? new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 }) : [], new CiStatsPlugin({ diff --git a/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts b/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts index a0f6c8fe0e9bb..7bc0105ef13b9 100644 --- a/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts +++ b/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts @@ -67,7 +67,7 @@ export class CiStatsPlugin { throw new Error(`Unable to find bundle entry named [${entryName}]`); } - const moduleCount = compilation.modules.reduce((acc, module) => { + const moduleCount = Array.from(compilation.modules).reduce((acc, module) => { if (isNormalModule(module)) { return acc + 1; } diff --git a/x-pack/platform/plugins/private/canvas/storybook/canvas_webpack.ts b/x-pack/platform/plugins/private/canvas/storybook/canvas_webpack.ts index 751f30cb6cfb9..44f501e74b79b 100644 --- a/x-pack/platform/plugins/private/canvas/storybook/canvas_webpack.ts +++ b/x-pack/platform/plugins/private/canvas/storybook/canvas_webpack.ts @@ -8,15 +8,16 @@ import { resolve } from 'path'; import { defaultConfig, mergeWebpackFinal } from '@kbn/storybook'; import type { StorybookConfig } from '@kbn/storybook'; +import { Configuration } from 'webpack'; import { KIBANA_ROOT } from './constants'; -export const canvasWebpack = { +export const canvasWebpack: Configuration = { module: { rules: [ // Enable CSS Modules in Storybook (Shareable Runtime) { test: /\.module\.s(a|c)ss$/, - loader: [ + use: [ 'style-loader', { loader: 'css-loader', @@ -43,22 +44,14 @@ export const canvasWebpack = { }, ], }, - // Exclude large-dependency, troublesome or irrelevant modules. - { - test: [ - resolve( - KIBANA_ROOT, - 'x-pack/platform/plugins/private/canvas/public/components/embeddable_flyout' - ), - resolve(KIBANA_ROOT, 'x-pack/platform/plugins/private/reporting/public'), - ], - use: 'null-loader', - }, ], }, resolve: { alias: { 'src/plugins': resolve(KIBANA_ROOT, 'src/plugins'), + // Exclude large-dependency, troublesome or irrelevant modules. + [resolve(KIBANA_ROOT, 'x-pack/plugins/canvas/public/components/embeddable_flyout')]: false, + [resolve(KIBANA_ROOT, 'x-pack/plugins/reporting/public')]: false, }, }, }; diff --git a/x-pack/platform/plugins/shared/fleet/package.json b/x-pack/platform/plugins/shared/fleet/package.json index fb9e7bfdf3653..093f9068485a1 100644 --- a/x-pack/platform/plugins/shared/fleet/package.json +++ b/x-pack/platform/plugins/shared/fleet/package.json @@ -5,11 +5,11 @@ "private": true, "license": "Elastic License 2.0", "scripts": { - "cypress_space_awareness": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/fleet/cypress.config.space_awareness.ts --ftr-config-file ../../../../../x-pack/test/fleet_cypress/cli_config.space_awareness", + "cypress_space_awareness": "node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/fleet/cypress.config.space_awareness.ts --ftr-config-file ../../../../../x-pack/test/fleet_cypress/cli_config.space_awareness", "cypress_space_awareness:open": "yarn cypress_space_awareness open", "cypress_space_awareness:run": "yarn cypress_space_awareness run", "cypress_space_awareness:run:reporter": "yarn cypress_space_awareness run --reporter ../../../../../node_modules/cypress-multi-reporters --reporter-options configFile=cypress/reporter_config.json", - "cypress": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/fleet/cypress.config.ts --ftr-config-file ../../../../../x-pack/test/fleet_cypress/cli_config", + "cypress": "node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/fleet/cypress.config.ts --ftr-config-file ../../../../../x-pack/test/fleet_cypress/cli_config", "cypress:open": "yarn cypress open", "cypress:run": "yarn cypress run", "cypress:run:reporter": "yarn cypress run --reporter ../../../../../node_modules/cypress-multi-reporters --reporter-options configFile=cypress/reporter_config.json", diff --git a/x-pack/platform/plugins/shared/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx b/x-pack/platform/plugins/shared/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx index f021055dd2934..566663a65bb76 100644 --- a/x-pack/platform/plugins/shared/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx +++ b/x-pack/platform/plugins/shared/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx @@ -8,7 +8,7 @@ import { EuiPageTemplate } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; -import { css } from '@emotion/react/dist/emotion-react.cjs'; +import { css } from '@emotion/react'; export const EmptyList = ({ addDatabaseButton }: { addDatabaseButton: JSX.Element }) => { return ( diff --git a/x-pack/platform/plugins/shared/osquery/package.json b/x-pack/platform/plugins/shared/osquery/package.json index 83bbba6434325..c04442d2971c3 100644 --- a/x-pack/platform/plugins/shared/osquery/package.json +++ b/x-pack/platform/plugins/shared/osquery/package.json @@ -7,13 +7,13 @@ "scripts": { "cypress:burn": "yarn cypress:run --env burn=2 --headed", "cypress:changed-specs-only": "yarn cypress:run --changed-specs-only --env burn=2", - "cypress": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/cli_config", + "cypress": "node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/cli_config", "cypress:open": "yarn cypress open", "cypress:run": "yarn cypress run", - "cypress:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/serverless_cli_config", + "cypress:serverless": "node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress.config.ts --ftr-config-file ../../../../../x-pack/test/osquery_cypress/serverless_cli_config", "cypress:serverless:open": "yarn cypress:serverless open", "cypress:serverless:run": "yarn cypress:serverless run", - "cypress:qa:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress_qa.config.ts --onBeforeHook ../../../../test/osquery_cypress/runner_qa.ts", + "cypress:qa:serverless": "node ../../../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../platform/plugins/shared/osquery/cypress/serverless_cypress_qa.config.ts --onBeforeHook ../../../../test/osquery_cypress/runner_qa.ts", "cypress:qa:serverless:run": "yarn cypress:qa:serverless run", "nyc": "../../../../../node_modules/.bin/nyc report --reporter=text-summary", "junit:merge": "../../../../../node_modules/.bin/mochawesome-merge ../../../../../target/kibana-osquery/cypress/results/mochawesome*.json > ../../../../../target/kibana-osquery/cypress/results/output.json && ../../../../../node_modules/.bin/marge ../../../../../target/kibana-osquery/cypress/results/output.json --reportDir ../../../../../target/kibana-osquery/cypress/results && yarn junit:transform && mkdir -p ../../../../../target/junit && cp ../../../../../target/kibana-osquery/cypress/results/*.xml ../../../../../target/junit/", @@ -21,4 +21,4 @@ "openapi:generate": "node scripts/openapi/generate", "openapi:bundle": "node scripts/openapi/bundle" } -} +} \ No newline at end of file diff --git a/x-pack/solutions/observability/plugins/inventory/scripts/test/e2e.js b/x-pack/solutions/observability/plugins/inventory/scripts/test/e2e.js index 5c0d897cc671d..6bd8d7ccfd83f 100644 --- a/x-pack/solutions/observability/plugins/inventory/scripts/test/e2e.js +++ b/x-pack/solutions/observability/plugins/inventory/scripts/test/e2e.js @@ -73,7 +73,6 @@ function runTests() { env: { ...process.env, CYPRESS_CLI_ARGS: JSON.stringify(cypressCliArgs), - NODE_OPTIONS: '--openssl-legacy-provider', }, encoding: 'utf8', stdio: 'inherit', diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/scripts/test/e2e.js b/x-pack/solutions/observability/plugins/observability_onboarding/scripts/test/e2e.js index fd2da7b56fb68..e5c7901bb869e 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/scripts/test/e2e.js +++ b/x-pack/solutions/observability/plugins/observability_onboarding/scripts/test/e2e.js @@ -80,7 +80,6 @@ function runTests() { env: { ...process.env, CYPRESS_CLI_ARGS: JSON.stringify(cypressCliArgs), - NODE_OPTIONS: '--openssl-legacy-provider', }, encoding: 'utf8', stdio: 'inherit', diff --git a/x-pack/solutions/observability/plugins/profiling/scripts/test/e2e.js b/x-pack/solutions/observability/plugins/profiling/scripts/test/e2e.js index fd2da7b56fb68..e5c7901bb869e 100644 --- a/x-pack/solutions/observability/plugins/profiling/scripts/test/e2e.js +++ b/x-pack/solutions/observability/plugins/profiling/scripts/test/e2e.js @@ -80,7 +80,6 @@ function runTests() { env: { ...process.env, CYPRESS_CLI_ARGS: JSON.stringify(cypressCliArgs), - NODE_OPTIONS: '--openssl-legacy-provider', }, encoding: 'utf8', stdio: 'inherit', diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts index b5e6c436a29b6..2936cad4c0ddb 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts @@ -18,11 +18,11 @@ const graphWebpack: Configuration = { '../src/components/mock/use_fetch_graph_data.mock.ts' ), }, - }, - node: { - fs: 'empty', - stream: false, - os: false, + fallback: { + fs: false, + stream: false, + os: false, + }, }, }; diff --git a/x-pack/solutions/security/plugins/security_solution/package.json b/x-pack/solutions/security/plugins/security_solution/package.json index 70bae657557b7..f5f2658df70d8 100644 --- a/x-pack/solutions/security/plugins/security_solution/package.json +++ b/x-pack/solutions/security/plugins/security_solution/package.json @@ -7,16 +7,16 @@ "scripts": { "extract-mitre-attacks": "node scripts/extract_tactics_techniques_mitre.js && node ../../../../../scripts/eslint ./public/detections/mitre/mitre_tactics_techniques.ts --fix", "build-beat-doc": "node scripts/beat_docs/build.js && node ../../../../../scripts/eslint ../timelines/server/utils/beat_schema/fields.ts --fix", - "cypress": "NODE_OPTIONS=--openssl-legacy-provider ../../../../../node_modules/.bin/cypress", + "cypress": "../../../../../node_modules/.bin/cypress", "cypress:burn": "yarn cypress:dw run --env burn=2 --headed", "cypress:changed-specs-only": "yarn cypress:dw run --changed-specs-only --env burn=2", - "cypress:dw": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file plugins/security_solution/public/management/cypress/cypress.config.ts --ftr-config-file ../../../../test/defend_workflows_cypress/cli_config", + "cypress:dw": "node ./scripts/start_cypress_parallel --config-file plugins/security_solution/public/management/cypress/cypress.config.ts --ftr-config-file ../../../../test/defend_workflows_cypress/cli_config", "cypress:dw:open": "yarn cypress:dw open", "cypress:dw:run": "yarn cypress:dw run", - "cypress:dw:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel --config-file plugins/security_solution/public/management/cypress/cypress_serverless.config.ts --ftr-config-file ../../../../test/defend_workflows_cypress/serverless_config", + "cypress:dw:serverless": "node ./scripts/start_cypress_parallel --config-file plugins/security_solution/public/management/cypress/cypress_serverless.config.ts --ftr-config-file ../../../../test/defend_workflows_cypress/serverless_config", "cypress:dw:serverless:open": "yarn cypress:dw:serverless open", "cypress:dw:serverless:run": "yarn cypress:dw:serverless run", - "cypress:dw:qa:serverless": "NODE_OPTIONS=--openssl-legacy-provider node ./scripts/start_cypress_parallel_serverless --config-file plugins/security_solution/public/management/cypress/cypress_serverless_qa.config.ts", + "cypress:dw:qa:serverless": "node ./scripts/start_cypress_parallel_serverless --config-file plugins/security_solution/public/management/cypress/cypress_serverless_qa.config.ts", "cypress:dw:qa:serverless:run": "yarn cypress:dw:qa:serverless run", "cypress:dw:serverless:changed-specs-only": "yarn cypress:dw:serverless run --changed-specs-only --env burn=2", "cypress:dw:endpoint": "echo '\n** WARNING **: Run script `cypress:dw:endpoint` no longer valid! Use `cypress:dw` instead\n'", diff --git a/x-pack/test/security_solution_cypress/package.json b/x-pack/test/security_solution_cypress/package.json index 6223b9b3bc624..da0861e64af39 100644 --- a/x-pack/test/security_solution_cypress/package.json +++ b/x-pack/test/security_solution_cypress/package.json @@ -5,11 +5,11 @@ "private": true, "license": "Elastic License 2.0", "scripts": { - "cypress": "NODE_OPTIONS=--openssl-legacy-provider ../../../node_modules/.bin/cypress", - "cypress:open:ess": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel open --spec './cypress/e2e/**/*.cy.ts' --config-file ../../test/security_solution_cypress/cypress/cypress.config.ts --ftr-config-file ../../test/security_solution_cypress/cli_config", + "cypress": "../../../node_modules/.bin/cypress", + "cypress:open:ess": "TZ=UTC node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel open --spec './cypress/e2e/**/*.cy.ts' --config-file ../../test/security_solution_cypress/cypress/cypress.config.ts --ftr-config-file ../../test/security_solution_cypress/cli_config", "cypress:entity_analytics:run:ess": "yarn cypress:ess --spec './cypress/e2e/entity_analytics/**/*.cy.ts'", "cypress:run:cases:ess": "yarn cypress:ess --spec './cypress/e2e/explore/cases/*.cy.ts'", - "cypress:ess": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel run --config-file ../../test/security_solution_cypress/cypress/cypress_ci.config.ts --ftr-config-file ../../test/security_solution_cypress/cli_config", + "cypress:ess": "TZ=UTC node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel run --config-file ../../test/security_solution_cypress/cypress/cypress_ci.config.ts --ftr-config-file ../../test/security_solution_cypress/cli_config", "cypress:rule_management:run:ess": "yarn cypress:ess --spec './cypress/e2e/detection_response/rule_management/!(prebuilt_rules)/**/*.cy.ts'", "cypress:rule_management:prebuilt_rules:run:ess": "yarn cypress:ess --spec './cypress/e2e/detection_response/rule_management/prebuilt_rules/**/*.cy.ts'", "cypress:detection_engine:run:ess": "yarn cypress:ess --spec './cypress/e2e/detection_response/detection_engine/!(exceptions)/**/*.cy.ts'", @@ -23,8 +23,8 @@ "cypress:burn:ess": "yarn cypress:ess --env burn=5", "junit:merge": "../../../node_modules/.bin/mochawesome-merge ../../../target/kibana-security-solution/cypress/results/mochawesome*.json > ../../../target/kibana-security-solution/cypress/results/output.json && ../../../node_modules/.bin/marge ../../../target/kibana-security-solution/cypress/results/output.json --reportDir ../../../target/kibana-security-solution/cypress/results && yarn junit:transform && mkdir -p ../../../target/junit && cp ../../../target/kibana-security-solution/cypress/results/*.xml ../../../target/junit/", "junit:transform": "node ../../solutions/security/plugins/security_solution/scripts/junit_transformer --pathPattern '../../../target/kibana-security-solution/cypress/results/*.xml' --rootDirectory ../../../ --reportName 'Security Solution Cypress' --writeInPlace", - "cypress:serverless": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../test/security_solution_cypress/cypress/cypress_ci_serverless.config.ts --ftr-config-file ../../test/security_solution_cypress/serverless_config", - "cypress:cloud:serverless": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider NODE_TLS_REJECT_UNAUTHORIZED=0 ../../../node_modules/.bin/cypress", + "cypress:serverless": "TZ=UTC node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel --config-file ../../test/security_solution_cypress/cypress/cypress_ci_serverless.config.ts --ftr-config-file ../../test/security_solution_cypress/serverless_config", + "cypress:cloud:serverless": "TZ=UTC NODE_TLS_REJECT_UNAUTHORIZED=0 ../../../node_modules/.bin/cypress", "cypress:open:cloud:serverless": "yarn cypress:cloud:serverless open --config-file ./cypress/cypress_serverless.config.ts --env CLOUD_SERVERLESS=true", "cypress:open:serverless": "yarn cypress:serverless open --config-file ../../test/security_solution_cypress/cypress/cypress_serverless.config.ts --spec './cypress/e2e/**/*.cy.ts'", "cypress:entity_analytics:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/entity_analytics/**/*.cy.ts'", @@ -39,7 +39,7 @@ "cypress:changed-specs-only:serverless": "yarn cypress:serverless --changed-specs-only --env burn=5", "cypress:cloud_security_posture:run:serverless": "yarn cypress:serverless --spec './cypress/e2e/cloud_security_posture/**/*.cy.ts'", "cypress:burn:serverless": "yarn cypress:serverless --env burn=2", - "cypress:qa:serverless": "TZ=UTC NODE_OPTIONS=--openssl-legacy-provider node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../test/security_solution_cypress/cypress/cypress_ci_serverless_qa.config.ts", + "cypress:qa:serverless": "TZ=UTC node ../../solutions/security/plugins/security_solution/scripts/start_cypress_parallel_serverless --config-file ../../test/security_solution_cypress/cypress/cypress_ci_serverless_qa.config.ts", "cypress:open:qa:serverless": "yarn cypress:qa:serverless open", "cypress:run:qa:serverless:entity_analytics": "yarn cypress:qa:serverless --spec './cypress/e2e/entity_analytics/**/*.cy.ts'", "cypress:run:qa:serverless:investigations": "yarn cypress:qa:serverless --spec './cypress/e2e/investigations/**/*.cy.ts'", @@ -51,4 +51,4 @@ "cypress:run:qa:serverless:ai_assistant": "yarn cypress:qa:serverless --spec './cypress/e2e/ai_assistant/**/*.cy.ts'", "cypress:run:qa:serverless:cloud_security_posture": "yarn cypress:qa:serverless --spec './cypress/e2e/cloud_security_posture/**/*.cy.ts" } -} +} \ No newline at end of file diff --git a/x-pack/test_serverless/functional/test_suites/observability/cypress/package.json b/x-pack/test_serverless/functional/test_suites/observability/cypress/package.json index bf0dad8dd01e6..d50d6e5ab8a36 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/cypress/package.json +++ b/x-pack/test_serverless/functional/test_suites/observability/cypress/package.json @@ -5,9 +5,9 @@ "private": true, "license": "Elastic License 2.0", "scripts": { - "cypress:open": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../../../node_modules/.bin/cypress open --config-file ./cypress.config.ts", - "cypress:run": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../../../node_modules/.bin/cypress run --browser chrome --config-file ./cypress.config.ts", - "cypress:serverless:open": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../../../scripts/functional_tests --config ./config_runner.ts", - "cypress:serverless:run": "NODE_OPTIONS=--openssl-legacy-provider node ../../../../../../scripts/functional_tests --config ./config_server.ts" + "cypress:open": "node ../../../../../../node_modules/.bin/cypress open --config-file ./cypress.config.ts", + "cypress:run": "node ../../../../../../node_modules/.bin/cypress run --browser chrome --config-file ./cypress.config.ts", + "cypress:serverless:open": "node ../../../../../../scripts/functional_tests --config ./config_runner.ts", + "cypress:serverless:run": "node ../../../../../../scripts/functional_tests --config ./config_server.ts" } } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5b6a37abe6ac5..11965b9a405b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2115,10 +2115,10 @@ tunnel-agent "^0.6.0" uuid "^8.3.2" -"@cypress/webpack-preprocessor@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.1.tgz#5369527c063b2f4718a125ddbd163c5775086e06" - integrity sha512-WVNeFVSnFKxE3WZNRIriduTgqJRpevaiJIPlfqYTTzfXRD7X1Pv4woDE+G4caPV9bJqVKmVFiwzrXMRNeJxpxA== +"@cypress/webpack-preprocessor@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.2.tgz#58a96aa4dbff7433dd37d24ed47e413aa3d3fabb" + integrity sha512-0+1+4iy4W9PE6R5ywBNKAZoFp8Sf//w3UJ+CKTqkcAjA29b+dtsD0iFT70DsYE0BMqUM1PO7HXFGbXllQ+bRAA== dependencies: bluebird "3.7.1" debug "^4.3.4" @@ -2161,7 +2161,7 @@ gonzales-pe "^4.3.0" node-source-walk "^6.0.1" -"@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@^0.5.3", "@discoveryjs/json-ext@^0.5.7": +"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@^0.5.3", "@discoveryjs/json-ext@^0.5.7": version "0.5.7" resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== @@ -3850,6 +3850,26 @@ resolved "https://registry.yarnpkg.com/@jsep-plugin/regex/-/regex-1.0.4.tgz#cb2fc423220fa71c609323b9ba7f7d344a755fcc" integrity sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg== +"@jsonjoy.com/base64@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/json-pack@^1.0.3": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz#33ca57ee29d12feef540f2139225597469dec894" + integrity sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg== + dependencies: + "@jsonjoy.com/base64" "^1.1.1" + "@jsonjoy.com/util" "^1.1.2" + hyperdyperid "^1.2.0" + thingies "^1.20.0" + +"@jsonjoy.com/util@^1.1.2", "@jsonjoy.com/util@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.3.0.tgz#e5623885bb5e0c48c1151e4dae422fb03a5887a1" + integrity sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw== + "@juggle/resize-observer@^3.3.1": version "3.4.0" resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" @@ -6466,6 +6486,10 @@ version "0.0.0" uid "" +"@kbn/node-libs-browser-webpack-plugin@link:packages/kbn-node-libs-browser-webpack-plugin": + version "0.0.0" + uid "" + "@kbn/notifications-plugin@link:x-pack/platform/plugins/shared/notifications": version "0.0.0" uid "" @@ -9108,10 +9132,10 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== +"@polka/url@^1.0.0-next.24": + version "1.0.0-next.28" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.28.tgz#d45e01c4a56f143ee69c54dd6b12eade9e270a73" + integrity sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw== "@popperjs/core@^2.11.8", "@popperjs/core@^2.5.4": version "2.11.8" @@ -10350,6 +10374,50 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.2.2" +"@storybook/builder-webpack5@^6.5.16": + version "6.5.16" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-6.5.16.tgz#2f260e29fbc87f6f3bb3212459048ce37f3fb54e" + integrity sha512-kh8Sofm1sbijaHDWtm0sXabqACHVFjikU/fIkkW786kpjoPIPIec1a+hrLgDsZxMU3I7XapSOaCFzWt6FjVXjg== + dependencies: + "@babel/core" "^7.12.10" + "@storybook/addons" "6.5.16" + "@storybook/api" "6.5.16" + "@storybook/channel-postmessage" "6.5.16" + "@storybook/channels" "6.5.16" + "@storybook/client-api" "6.5.16" + "@storybook/client-logger" "6.5.16" + "@storybook/components" "6.5.16" + "@storybook/core-common" "6.5.16" + "@storybook/core-events" "6.5.16" + "@storybook/node-logger" "6.5.16" + "@storybook/preview-web" "6.5.16" + "@storybook/router" "6.5.16" + "@storybook/semver" "^7.3.2" + "@storybook/store" "6.5.16" + "@storybook/theming" "6.5.16" + "@types/node" "^14.0.10 || ^16.0.0" + babel-loader "^8.0.0" + babel-plugin-named-exports-order "^0.0.2" + browser-assert "^1.2.1" + case-sensitive-paths-webpack-plugin "^2.3.0" + core-js "^3.8.2" + css-loader "^5.0.1" + fork-ts-checker-webpack-plugin "^6.0.4" + glob "^7.1.6" + glob-promise "^3.4.0" + html-webpack-plugin "^5.0.0" + path-browserify "^1.0.1" + process "^0.11.10" + stable "^0.1.8" + style-loader "^2.0.0" + terser-webpack-plugin "^5.0.3" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + webpack "^5.9.0" + webpack-dev-middleware "^4.1.0" + webpack-hot-middleware "^2.25.1" + webpack-virtual-modules "^0.4.1" + "@storybook/channel-postmessage@6.5.16": version "6.5.16" resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.5.16.tgz#06167c0a66c06b2b5f8ff01d1dd436fff8119a15" @@ -10667,6 +10735,44 @@ webpack-dev-middleware "^3.7.3" webpack-virtual-modules "^0.2.2" +"@storybook/manager-webpack5@^6.5.16": + version "6.5.16" + resolved "https://registry.yarnpkg.com/@storybook/manager-webpack5/-/manager-webpack5-6.5.16.tgz#48b223557d9633614ff8c6e3227c01a57ab4eb55" + integrity sha512-OtxXv8JCe0r/0rE5HxaFicsNsXA+fqZxzokxquFFgrYf/1Jg4d7QX6/pG5wINF+5qInJfVkRG6xhPzv1s5bk9Q== + dependencies: + "@babel/core" "^7.12.10" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/preset-react" "^7.12.10" + "@storybook/addons" "6.5.16" + "@storybook/core-client" "6.5.16" + "@storybook/core-common" "6.5.16" + "@storybook/node-logger" "6.5.16" + "@storybook/theming" "6.5.16" + "@storybook/ui" "6.5.16" + "@types/node" "^14.0.10 || ^16.0.0" + babel-loader "^8.0.0" + case-sensitive-paths-webpack-plugin "^2.3.0" + chalk "^4.1.0" + core-js "^3.8.2" + css-loader "^5.0.1" + express "^4.17.1" + find-up "^5.0.0" + fs-extra "^9.0.1" + html-webpack-plugin "^5.0.0" + node-fetch "^2.6.7" + process "^0.11.10" + read-pkg-up "^7.0.1" + regenerator-runtime "^0.13.7" + resolve-from "^5.0.0" + style-loader "^2.0.0" + telejson "^6.0.8" + terser-webpack-plugin "^5.0.3" + ts-dedent "^2.0.0" + util-deprecate "^1.0.2" + webpack "^5.9.0" + webpack-dev-middleware "^4.1.0" + webpack-virtual-modules "^0.4.1" + "@storybook/mdx1-csf@^0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz#d4184e3f6486fade9f7a6bfaf934d9bc07718d5b" @@ -11265,10 +11371,10 @@ "@types/connect" "*" "@types/node" "*" -"@types/bonjour@^3.5.9": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" - integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" @@ -11362,10 +11468,10 @@ resolved "https://registry.yarnpkg.com/@types/command-line-usage/-/command-line-usage-5.0.4.tgz#374e4c62d78fbc5a670a0f36da10235af879a0d5" integrity sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg== -"@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== +"@types/connect-history-api-fallback@^1.5.4": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" + integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" @@ -11591,7 +11697,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.21": +"@types/express@*", "@types/express@^4.17.21": version "4.17.21" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== @@ -11724,11 +11830,21 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + "@types/http-proxy@^1.17.4", "@types/http-proxy@^1.17.8": version "1.17.9" resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" @@ -12034,7 +12150,7 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node-forge@^1.3.11": +"@types/node-forge@^1.3.0", "@types/node-forge@^1.3.11": version "1.3.11" resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.11.tgz#0972ea538ddb0f4d9c2fa0ec5db5724773a604da" integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== @@ -12349,6 +12465,11 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== + "@types/seedrandom@>=2.0.0 <4.0.0": version "2.4.28" resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.28.tgz#9ce8fa048c1e8c85cb71d7fe4d704e000226036f" @@ -12380,14 +12501,14 @@ "@types/mime" "^1" "@types/node" "*" -"@types/serve-index@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" - integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== +"@types/serve-index@^1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" -"@types/serve-static@*", "@types/serve-static@^1.13.10": +"@types/serve-static@*": version "1.13.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== @@ -12395,6 +12516,15 @@ "@types/mime" "^1" "@types/node" "*" +"@types/serve-static@^1.15.5": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + "@types/set-value@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/set-value/-/set-value-2.0.0.tgz#63d386b103926dcf49b50e16e0f6dd49983046be" @@ -12415,10 +12545,10 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== -"@types/sockjs@^0.3.33": - version "0.3.33" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" - integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== +"@types/sockjs@^0.3.36": + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" @@ -12602,19 +12732,17 @@ tapable "^2.2.0" webpack "^5" -"@types/webpack-env@^1.15.3", "@types/webpack-env@^1.16.0": +"@types/webpack-env@^1.16.0": version "1.16.3" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.3.tgz#b776327a73e561b71e7881d0cd6d34a1424db86a" integrity sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw== -"@types/webpack-merge@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/webpack-merge/-/webpack-merge-4.1.5.tgz#265fbee4810474860d0f4c17e0107032881eed47" - integrity sha512-cbDo592ljSHeaVe5Q39JKN6Z4vMhmo4+C3JbksOIg+kjhKQYN2keGN7dvr/i18+dughij98Qrsfn1mU9NgVoCA== - dependencies: - "@types/webpack" "*" +"@types/webpack-env@^1.18.5": + version "1.18.5" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.5.tgz#eccda0b04fe024bed505881e2e532f9c119169bf" + integrity sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA== -"@types/webpack-sources@*", "@types/webpack-sources@^0.1.4": +"@types/webpack-sources@*": version "0.1.5" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-0.1.5.tgz#be47c10f783d3d6efe1471ff7f042611bd464a92" integrity sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w== @@ -12623,7 +12751,16 @@ "@types/source-list-map" "*" source-map "^0.6.1" -"@types/webpack@*", "@types/webpack@^4", "@types/webpack@^4.4.31", "@types/webpack@^4.41.26", "@types/webpack@^4.41.3", "@types/webpack@^4.41.8": +"@types/webpack-sources@^3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.3.tgz#b667bd13e9fa15a9c26603dce502c7985418c3d8" + integrity sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4", "@types/webpack@^4.41.26", "@types/webpack@^4.41.8": version "4.41.32" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.32.tgz#a7bab03b72904070162b2f169415492209e94212" integrity sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg== @@ -12635,7 +12772,7 @@ anymatch "^3.0.0" source-map "^0.6.0" -"@types/webpack@^5.0.0": +"@types/webpack@^5.0.0", "@types/webpack@^5.28.5": version "5.28.5" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-5.28.5.tgz#0e9d9a15efa09bbda2cef41356ca4ac2031ea9a2" integrity sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw== @@ -12644,13 +12781,20 @@ tapable "^2.2.0" webpack "^5" -"@types/ws@*", "@types/ws@^8.5.1": +"@types/ws@*": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== dependencies: "@types/node" "*" +"@types/ws@^8.5.10": + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + dependencies: + "@types/node" "*" + "@types/xml2js@^0.4.11": version "0.4.11" resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.11.tgz#bf46a84ecc12c41159a7bd9cf51ae84129af0e79" @@ -13056,22 +13200,20 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== "@wojtekmaj/enzyme-adapter-react-17@^0.6.7": version "0.6.7" @@ -13375,7 +13517,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -13392,7 +13534,7 @@ ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.17.1, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.17.1, ajv@^8.9.0: version "8.17.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== @@ -13719,11 +13861,6 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - array-from@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" @@ -14065,7 +14202,7 @@ babel-jest@^29.7.0: graceful-fs "^4.2.9" slash "^3.0.0" -babel-loader@^8.0.0, babel-loader@^8.2.5: +babel-loader@^8.0.0: version "8.2.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== @@ -14075,6 +14212,14 @@ babel-loader@^8.0.0, babel-loader@^8.2.5: make-dir "^3.1.0" schema-utils "^2.6.5" +babel-loader@^9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" + integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== + dependencies: + find-cache-dir "^4.0.0" + schema-utils "^4.0.0" + babel-plugin-add-module-exports@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz#6caa4ddbe1f578c6a5264d4d3e6c8a2720a7ca2b" @@ -14155,6 +14300,11 @@ babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" +babel-plugin-named-exports-order@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz#ae14909521cf9606094a2048239d69847540cb09" + integrity sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw== + babel-plugin-polyfill-corejs2@^0.4.10: version "0.4.10" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" @@ -14222,6 +14372,11 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== +babel-plugin-transform-require-default@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-require-default/-/babel-plugin-transform-require-default-0.1.7.tgz#fa97c97e52c30d70f8a505b7fffc5503dfa84a88" + integrity sha512-eoH8Tm/fVtkRluI6UDc8B/TdsbjuvQwd5BPaw4yShHV0USsKoFHgGJsVCcFPhsPVyoBKbTlisiEc4sBpbtUldA== + babel-plugin-transform-typescript-metadata@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz#7a327842d8c36ffe07ee1b5276434e56c297c9b7" @@ -14532,13 +14687,11 @@ body-parser@1.20.3: type-is "~1.6.18" unpipe "1.0.0" -bonjour-service@^1.0.11: - version "1.0.13" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.13.tgz#4ac003dc1626023252d58adf2946f57e5da450c1" - integrity sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA== +bonjour-service@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.2.1.tgz#eb41b3085183df3321da1264719fbada12478d02" + integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" @@ -14656,6 +14809,11 @@ brotli@^1.2.0: dependencies: base64-js "^1.1.2" +browser-assert@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" + integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== + browser-stdout@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -14814,6 +14972,13 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + byte-size@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-8.1.0.tgz#6353d0bc14ab7a69abcefbf11f8db0145a862cb5" @@ -14968,13 +15133,13 @@ callsites@^3.0.0, callsites@^3.1.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== +camel-case@^4.1.1, camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: - pascal-case "^3.1.1" - tslib "^1.10.0" + pascal-case "^3.1.2" + tslib "^2.0.3" camelcase-css@2.0.1: version "2.0.1" @@ -15207,7 +15372,7 @@ cheerio@^1.0.0-rc.12, cheerio@^1.0.0-rc.3: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" -chokidar@^2.1.2, chokidar@^2.1.8, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3: +chokidar@^2.1.2, chokidar@^2.1.8, chokidar@^3.4.0, chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.1, chokidar@^3.5.3, chokidar@^3.6.0: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -15344,17 +15509,23 @@ clean-css@^4.2.3: dependencies: source-map "~0.6.0" +clean-css@^5.2.2, clean-css@~5.3.2: + version "5.3.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" + integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== + dependencies: + source-map "~0.6.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clean-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz#a99d8ec34c1c628a4541567aa7b457446460c62b" - integrity sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A== +clean-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" + integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== dependencies: - "@types/webpack" "^4.4.31" del "^4.1.1" cli-boxes@^2.2.1: @@ -15698,12 +15869,12 @@ commander@6.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== -commander@7, commander@^7.0.0, commander@^7.2.0: +commander@7, commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^10.0.1: +commander@^10.0.0, commander@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== @@ -15733,6 +15904,11 @@ commander@^6.2.0, commander@^6.2.1: resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -16202,7 +16378,7 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@^3.4.2, css-loader@^3.6.0: +css-loader@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== @@ -16221,6 +16397,36 @@ css-loader@^3.4.2, css-loader@^3.6.0: schema-utils "^2.7.0" semver "^6.3.0" +css-loader@^5.0.1: + version "5.2.7" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" + integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== + dependencies: + icss-utils "^5.1.0" + loader-utils "^2.0.0" + postcss "^8.2.15" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^3.0.0" + semver "^7.3.5" + +css-loader@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-7.1.2.tgz#64671541c6efe06b0e22e750503106bdd86880f8" + integrity sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -16758,7 +16964,7 @@ d3-zoom@^3.0.0: d3-selection "2 - 3" d3-transition "2 - 3" -d3@3.5.17, d3@^3.5.6: +d3@3.5.17: version "3.5.17" resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" integrity sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g= @@ -16862,6 +17068,11 @@ dayjs@^1.10.4: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -17027,6 +17238,19 @@ default-browser-id@^1.0.4: meow "^3.1.0" untildify "^2.0.0" +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + default-gateway@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" @@ -17067,6 +17291,11 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -17449,11 +17678,6 @@ discontinuous-range@1.0.0: resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - dns-packet@^5.2.2: version "5.4.0" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" @@ -17540,13 +17764,6 @@ domexception@^4.0.0: dependencies: webidl-conversions "^7.0.0" -domhandler@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" - integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== - dependencies: - domelementtype "^2.0.1" - domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" @@ -17566,7 +17783,7 @@ dompurify@^3.0.6: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.1.5.tgz#2c6a113fc728682a0f55684b1388c58ddb79dc38" integrity sha512-lwG+n5h8QNpxtyrJW/gJWckL+1/DQiYMX8f7t8Z2AZTPw1esVrqjI63i7Zc2Gz0aKzLVMYC1V1PL/ky+aY/NgA== -domutils@^2.0.0, domutils@^2.5.2, domutils@^2.8.0: +domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -17584,7 +17801,7 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.1" -dot-case@^3.0.3, dot-case@^3.0.4: +dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== @@ -18784,10 +19001,10 @@ exponential-backoff@^3.1.1: resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== -expose-loader@^0.7.5: - version "0.7.5" - resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.5.tgz#e29ea2d9aeeed3254a3faa1b35f502db9f9c3f6f" - integrity sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw== +expose-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-5.0.0.tgz#41368903eb1246b7c09fecf32c5cb3f67d0260e6" + integrity sha512-BtUqYRmvx1bEY5HN6eK2I9URUZgNmN0x5UANuocaNjXSgfoDlkXt+wyEMe7i5DzDNh2BKJHPc5F4rBwEdSQX6w== expr-eval@^2.0.2: version "2.0.2" @@ -19107,14 +19324,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-loader@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.2.0.tgz#5fb124d2369d7075d70a9a5abecd12e60a95215e" - integrity sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.0.0" - file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -19217,6 +19426,14 @@ find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== + dependencies: + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" + find-cypress-specs@^1.41.4: version "1.41.4" resolved "https://registry.yarnpkg.com/find-cypress-specs/-/find-cypress-specs-1.41.4.tgz#583595c502e785f7bb44dbb5a9ba2f09caf59e94" @@ -19295,6 +19512,14 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -19592,10 +19817,10 @@ fs-mkdirp-stream@^2.0.1: graceful-fs "^4.2.8" streamx "^2.12.0" -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== +fs-monkey@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.6.tgz#8ead082953e88d992cf3ff844faa907b26756da2" + integrity sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg== fs-readdir-recursive@^1.1.0: version "1.1.0" @@ -20682,27 +20907,25 @@ html-encoding-sniffer@^3.0.0: dependencies: whatwg-encoding "^2.0.0" -html-entities@^2.1.0, html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== +html-entities@^2.1.0, html-entities@^2.4.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.5.2.tgz#201a3cf95d3a15be7099521620d19dfb4f65359f" + integrity sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA== -html-escaper@^2.0.0: +html-escaper@^2.0.0, html-escaper@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-loader@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.2.tgz#5a72ebba420d337083497c9aba7866c9e1aee340" - integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA== +html-loader@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-5.1.0.tgz#85c13e0abc3b5f3aa6e7f664eee6e44d00718d95" + integrity sha512-Jb3xwDbsm0W3qlXrCZwcYqYGnYz55hb6aoKQTlzyZPXsPpi6tHXzAfqalecglMQgNvtEfxrCQPaKT90Irt5XDA== dependencies: - html-minifier-terser "^5.1.1" - htmlparser2 "^4.1.0" - loader-utils "^2.0.0" - schema-utils "^3.0.0" + html-minifier-terser "^7.2.0" + parse5 "^7.1.2" -html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: +html-minifier-terser@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== @@ -20715,6 +20938,32 @@ html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: relateurl "^0.2.7" terser "^4.6.3" +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-minifier-terser@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" + integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== + dependencies: + camel-case "^4.1.2" + clean-css "~5.3.2" + commander "^10.0.0" + entities "^4.4.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.15.1" + html-tags@^3.1.0, html-tags@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" @@ -20751,15 +21000,16 @@ html-webpack-plugin@^4.0.0: tapable "^1.1.3" util.promisify "1.0.0" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== +html-webpack-plugin@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz#50a8fa6709245608cb00e811eacecb8e0d7b7ea0" + integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" htmlparser2@^6.1.0: version "6.1.0" @@ -20944,6 +21194,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + hyphenate-style-name@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" @@ -20982,6 +21237,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ieee754@^1.1.12, ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -21260,10 +21520,10 @@ ipaddr.js@2.0.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.0.tgz#77ccccc8063ae71ab65c55f21b090698e763fc6e" integrity sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w== -ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== +ipaddr.js@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== irregular-plurals@^3.2.0: version "3.2.0" @@ -21437,6 +21697,11 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-dom@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" @@ -21522,6 +21787,13 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" integrity sha1-bghLvJIGH7sJcexYts5tQE4k2mk= +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-installed-globally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-1.0.0.tgz#08952c43758c33d815692392f7f8437b9e436d5a" @@ -21565,6 +21837,11 @@ is-negative-zero@^2.0.3: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== +is-network-error@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.1.0.tgz#d26a760e3770226d11c169052f266a4803d9c997" + integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g== + is-node-process@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" @@ -21851,6 +22128,13 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + is2@^2.0.6: version "2.0.9" resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.9.tgz#ff63b441f90de343fa8fac2125ee170da8e8240d" @@ -22576,6 +22860,11 @@ jest@^29.7.0: import-local "^3.0.2" jest-cli "^29.7.0" +jiti@^1.20.0: + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== + joi-to-json@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/joi-to-json/-/joi-to-json-4.3.0.tgz#c56131ecf8a772fce89fd98b7f81d7b0fac31dbc" @@ -23149,6 +23438,14 @@ language-tags@=1.0.5: dependencies: language-subtag-registry "~0.3.2" +launch-editor@^2.6.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.8.1.tgz#3bda72af213ec9b46b170e39661916ec66c2f463" + integrity sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + launchdarkly-eventsource@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/launchdarkly-eventsource/-/launchdarkly-eventsource-2.0.3.tgz#8a7b8da5538153f438f7d452b1c87643d900f984" @@ -23350,7 +23647,7 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== -loader-utils@^1.0.0, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.2.3: version "1.4.2" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== @@ -23390,6 +23687,13 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + lodash-es@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" @@ -23729,6 +24033,13 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -24030,12 +24341,30 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -memfs@^3.1.2, memfs@^3.4.3: - version "3.4.7" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" - integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== +mem@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" + integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== dependencies: - fs-monkey "^1.0.3" + map-age-cleaner "^0.1.3" + mimic-fn "^3.1.0" + +memfs@^3.1.2, memfs@^3.2.2: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== + dependencies: + fs-monkey "^1.0.4" + +memfs@^4.6.0: + version "4.11.1" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.11.1.tgz#9c9c8e65bf8ac72c0db8d0fbbbe29248cf51d56a" + integrity sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ== + dependencies: + "@jsonjoy.com/json-pack" "^1.0.3" + "@jsonjoy.com/util" "^1.3.0" + tree-dump "^1.0.1" + tslib "^2.0.0" "memoize-one@>=3.1.1 <6", memoize-one@^5.0.0: version "5.1.1" @@ -24248,22 +24577,22 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== "mime-db@>= 1.40.0 < 2", mime-db@^1.52.0: version "1.53.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.30, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.51.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" @@ -24280,6 +24609,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + mimic-function@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" @@ -24307,14 +24641,13 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY= -mini-css-extract-plugin@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.1.0.tgz#dcc2f0bfbec660c0bd1200ff7c8f82deec2cc8a6" - integrity sha512-0bTS+Fg2tGe3dFAgfiN7+YRO37oyQM7/vjFvZF1nXSCJ/sy0tGpeme8MbT4BCpUuUphKwTh9LH/uuTcWRr9DPA== +mini-css-extract-plugin@2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz#4d184f12ce90582e983ccef0f6f9db637b4be758" + integrity sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ== dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" + schema-utils "^4.0.0" + tapable "^2.2.1" minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" @@ -24728,10 +25061,10 @@ mri@1.1.4: resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== -mrmime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" - integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== +mrmime@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" + integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== ms-chromium-edge-driver@^0.5.1: version "0.5.1" @@ -24988,7 +25321,7 @@ nise@^1.5.2: lolex "^5.0.1" path-to-regexp "^1.7.0" -no-case@^3.0.3, no-case@^3.0.4: +no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== @@ -25265,14 +25598,6 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -null-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" - integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw== - dependencies: - loader-utils "^1.2.3" - schema-utils "^1.0.0" - num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" @@ -25561,7 +25886,7 @@ on-exit-leak-free@^2.1.0: resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -25601,6 +25926,16 @@ onetime@^7.0.0: dependencies: mimic-function "^5.0.0" +open@^10.0.3: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + open@^7.0.3: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -25609,7 +25944,7 @@ open@^7.0.3: is-docker "^2.0.0" is-wsl "^2.1.1" -open@^8.0.9, open@^8.4.0, open@~8.4.0: +open@^8.4.0, open@~8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== @@ -25779,6 +26114,11 @@ p-cancelable@^2.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.0.0.tgz#4a3740f5bdaf5ed5d7c3e34882c6fb5d6b266a6e" integrity sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + p-event@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.1.0.tgz#e92bb866d7e8e5b732293b1c8269d38e9982bf8e" @@ -25812,6 +26152,13 @@ p-limit@^3.0.1, p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -25833,6 +26180,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -25865,7 +26219,7 @@ p-reflect@2.1.0, p-reflect@^2.1.0: resolved "https://registry.yarnpkg.com/p-reflect/-/p-reflect-2.1.0.tgz#5d67c7b3c577c4e780b9451fc9129675bd99fe67" integrity sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg== -p-retry@4, p-retry@^4.2.0, p-retry@^4.5.0: +p-retry@4, p-retry@^4.2.0: version "4.6.2" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== @@ -25873,6 +26227,15 @@ p-retry@4, p-retry@^4.2.0, p-retry@^4.5.0: "@types/retry" "0.12.0" retry "^0.13.1" +p-retry@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.0.tgz#8d6df01af298750009691ce2f9b3ad2d5968f3bd" + integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA== + dependencies: + "@types/retry" "0.12.2" + is-network-error "^1.0.0" + retry "^0.13.1" + p-settle@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/p-settle/-/p-settle-4.1.1.tgz#37fbceb2b02c9efc28658fc8d36949922266035f" @@ -25966,13 +26329,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" - integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== +param-case@^3.0.3, param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" + dot-case "^3.0.4" + tslib "^2.0.3" parent-module@^1.0.0: version "1.0.0" @@ -26044,10 +26407,10 @@ parse5@^6.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^7.0.0, parse5@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" - integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== +parse5@^7.0.0, parse5@^7.1.1, parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: entities "^4.4.0" @@ -26056,13 +26419,13 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" - integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" + no-case "^3.0.4" + tslib "^2.0.3" pascalcase@^0.1.1: version "0.1.1" @@ -26101,6 +26464,11 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -26352,6 +26720,13 @@ pkg-dir@^5.0.0: dependencies: find-up "^5.0.0" +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== + dependencies: + find-up "^6.3.0" + pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" @@ -26551,6 +26926,15 @@ postcss-loader@^4.2.0: schema-utils "^3.0.0" semver "^7.3.4" +postcss-loader@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-8.1.1.tgz#2822589e7522927344954acb55bbf26e8b195dfe" + integrity sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ== + dependencies: + cosmiconfig "^9.0.0" + jiti "^1.20.0" + semver "^7.5.4" + postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" @@ -26613,6 +26997,11 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" +postcss-modules-extract-imports@^3.0.0, postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + postcss-modules-local-by-default@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" @@ -26623,6 +27012,15 @@ postcss-modules-local-by-default@^3.0.2: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.0.0" +postcss-modules-local-by-default@^4.0.0, postcss-modules-local-by-default@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" + integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + postcss-modules-scope@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" @@ -26631,6 +27029,13 @@ postcss-modules-scope@^2.2.0: postcss "^7.0.6" postcss-selector-parser "^6.0.0" +postcss-modules-scope@^3.0.0, postcss-modules-scope@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" + integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== + dependencies: + postcss-selector-parser "^6.0.4" + postcss-modules-values@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" @@ -26639,6 +27044,13 @@ postcss-modules-values@^3.0.0: icss-utils "^4.0.0" postcss "^7.0.6" +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + postcss-normalize-charset@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" @@ -26799,7 +27211,7 @@ postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0 picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.4.19, postcss@^8.4.23, postcss@^8.4.31: +postcss@^8.2.15, postcss@^8.4.19, postcss@^8.4.23, postcss@^8.4.31, postcss@^8.4.33: version "8.4.49" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== @@ -26896,6 +27308,14 @@ pretty-error@^2.1.1: lodash "^4.17.20" renderkid "^2.0.4" +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + pretty-format@^26.0.0, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" @@ -27374,14 +27794,6 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== - dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" - raw-loader@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" @@ -27492,7 +27904,7 @@ react-docgen@^5.0.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-dom@^17.0.1, react-dom@^17.0.2: +react-dom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== @@ -27939,7 +28351,7 @@ react-window@^1.8.10: "@babel/runtime" "^7.0.0" memoize-one ">=3.1.1 <6" -react@^17.0.1, react@^17.0.2: +react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -28110,13 +28522,6 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -28550,6 +28955,17 @@ renderkid@^2.0.4: lodash "^4.17.21" strip-ansi "^3.0.1" +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -28711,7 +29127,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.3, resolve@^1.22.8, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.22.3, resolve@^1.22.8, resolve@^1.3.2: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -28846,6 +29262,11 @@ rtl-css-js@^1.9.0: dependencies: "@babel/runtime" "^7.1.2" +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + run-async@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" @@ -29128,10 +29549,10 @@ sass-embedded@^1.78.0: sass-embedded-win32-ia32 "1.78.0" sass-embedded-win32-x64 "1.78.0" -sass-loader@^10.5.1: - version "10.5.1" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.5.1.tgz#4cfb9cd17e09afc7d8787fdb57d665254c3aadcb" - integrity sha512-P8BGIW6OxYLJWaWG8DROibc98Uw/B90oHPYOjPQ5/tF572OTTwkhxSxpaQzD5lYam36zQd0cxjh24b4rcdNIZQ== +sass-loader@^10.5.2: + version "10.5.2" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.5.2.tgz#1ca30534fff296417b853c7597ca3b0bbe8c37d0" + integrity sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -29173,7 +29594,7 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@2.7.0, schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.7.0: +schema-utils@2.7.0, schema-utils@^2.6.5, schema-utils@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -29182,14 +29603,6 @@ schema-utils@2.7.0, schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.5. ajv "^6.12.2" ajv-keywords "^3.4.1" -schema-utils@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" - integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -29208,15 +29621,15 @@ schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== +schema-utils@^4.0.0, schema-utils@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" + ajv-keywords "^5.1.0" screenfull@^5.0.0: version "5.0.0" @@ -29253,11 +29666,12 @@ self-signed-cert@^1.0.1: resolved "https://registry.yarnpkg.com/self-signed-cert/-/self-signed-cert-1.0.1.tgz#9e2fae07503f84fb910f4a87c5c5c6becc207bf6" integrity sha512-86d1jYydqaRdUEyR9tj5nQ0d059RUWB9gdZrzDy2MJaUHii1h9EyzbAepkV1rOLO2AkSkQbXtUrqWRH4FDYWHA== -selfsigned@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.0.1.tgz#8b2df7fa56bf014d19b6007655fff209c0ef0a56" - integrity sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ== +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" semver-compare@^1.0.0: @@ -29506,6 +29920,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + shelljs@^0.8.5: version "0.8.5" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" @@ -29643,14 +30062,14 @@ sinon@^7.4.2: nise "^1.5.2" supports-color "^5.5.0" -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== +sirv@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" + integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" + "@polka/url" "^1.0.0-next.24" + mrmime "^2.0.0" + totalist "^3.0.0" sisteransi@^1.0.5: version "1.0.5" @@ -30301,13 +30720,13 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-replace-loader@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/string-replace-loader/-/string-replace-loader-2.2.0.tgz#0a0e6543fcec783d85c353a3e96a23872d45a94f" - integrity sha512-Ukt4ZC8+xVWdBRut3/iwnPJCNL1yV8AbVKXn8UcWdYrHgtuW4UDDAbBSi/J/CQDEWQBt824AJvPYahF23eJLRg== +string-replace-loader@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-replace-loader/-/string-replace-loader-3.1.0.tgz#11ac6ee76bab80316a86af358ab773193dd57a4f" + integrity sha512-5AOMUZeX5HE/ylKDnEa/KKBqvlnFmRZudSOjVJHxhoJg9QYTwl1rECx7SLR8BBH7tfxb4Rp7EM2XVfQFxIhsbQ== dependencies: - loader-utils "^1.2.3" - schema-utils "^1.0.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" @@ -30514,7 +30933,7 @@ strnum@^1.0.5: resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== -style-loader@^1.1.3, style-loader@^1.3.0: +style-loader@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== @@ -30522,6 +30941,19 @@ style-loader@^1.1.3, style-loader@^1.3.0: loader-utils "^2.0.0" schema-utils "^2.7.0" +style-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" + integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +style-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-4.0.0.tgz#0ea96e468f43c69600011e0589cb05c44f3b17a5" + integrity sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA== + style-search@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" @@ -30883,7 +31315,7 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== @@ -31065,7 +31497,7 @@ terser-webpack-plugin@^4.2.3: terser "^5.3.4" webpack-sources "^1.4.3" -terser-webpack-plugin@^5.3.10: +terser-webpack-plugin@^5.0.3, terser-webpack-plugin@^5.3.10: version "5.3.10" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== @@ -31085,7 +31517,7 @@ terser@^4.1.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.26.0, terser@^5.3.4, terser@^5.36.0, terser@^5.9.0: +terser@^5.10.0, terser@^5.15.1, terser@^5.26.0, terser@^5.3.4, terser@^5.36.0, terser@^5.9.0: version "5.36.0" resolved "https://registry.yarnpkg.com/terser/-/terser-5.36.0.tgz#8b0dbed459ac40ff7b4c9fd5a3a2029de105180e" integrity sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w== @@ -31124,6 +31556,11 @@ textarea-caret@^3.1.0: resolved "https://registry.yarnpkg.com/textarea-caret/-/textarea-caret-3.1.0.tgz#5d5a35bb035fd06b2ff0e25d5359e97f2655087f" integrity sha512-cXAvzO9pP5CGa6NKx0WYHl+8CHKZs8byMkt3PCJBCmq2a34YA9pO1NrQET5pzeqnBjBdToF5No4rrmkDUgQC2Q== +thingies@^1.20.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1" + integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== + thread-stream@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.3.0.tgz#4fc07fb39eff32ae7bad803cb7dd9598349fed33" @@ -31366,10 +31803,10 @@ topojson-client@^3.1.0: dependencies: commander "2" -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== +totalist@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" + integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== tough-cookie@^4.1.2, tough-cookie@^4.1.4: version "4.1.4" @@ -31419,6 +31856,11 @@ traverse@~0.6.6: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= +tree-dump@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac" + integrity sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ== + tree-kill@1.2.2, tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -31568,7 +32010,7 @@ tslib@2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -32120,15 +32562,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - url-loader@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" @@ -32306,13 +32739,10 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -val-loader@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/val-loader/-/val-loader-1.1.1.tgz#32ba8ed5c3607504134977251db2966499e15ef7" - integrity sha512-JLqLXJWCVLXTxbUeHhLpWkgl3+X3U8Bl0vY7rTFZgFSbLJaEtAxuD2ixy/cM8w/gzC7sS3NE5IDSzClDt332sw== - dependencies: - loader-utils "^1.0.0" - schema-utils "^0.4.5" +val-loader@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/val-loader/-/val-loader-6.0.0.tgz#88078512fdb66e04deab659fec05e281105e4d81" + integrity sha512-NHi81ow+/mVBRuFRNxp8tfTSnAIFsq/wzZGqxv/a82Y722GQSOQi9yP0GuenSBiuw4+zGjmW/H9sLTbP3bewrw== validate-npm-package-license@^3.0.1: version "3.0.1" @@ -32987,37 +33417,41 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -webpack-bundle-analyzer@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5" - integrity sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ== +webpack-bundle-analyzer@^4.10.2: + version "4.10.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" + integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== dependencies: + "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" acorn-walk "^8.0.0" - chalk "^4.1.0" commander "^7.2.0" + debounce "^1.2.1" + escape-string-regexp "^4.0.0" gzip-size "^6.0.0" - lodash "^4.17.20" + html-escaper "^2.0.2" opener "^1.5.2" - sirv "^1.0.7" + picocolors "^1.0.0" + sirv "^2.0.3" ws "^7.3.1" -webpack-cli@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== +webpack-cli@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== dependencies: "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" colorette "^2.0.14" - commander "^7.0.0" + commander "^10.0.1" cross-spawn "^7.0.3" + envinfo "^7.7.3" fastest-levenshtein "^1.0.12" import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" + interpret "^3.1.1" + rechoir "^0.8.0" webpack-merge "^5.7.3" webpack-dev-middleware@^3.7.3: @@ -33031,51 +33465,65 @@ webpack-dev-middleware@^3.7.3: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-middleware@^5.3.1: - version "5.3.4" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz#eb7b39281cbce10e104eb2b8bf2b63fce49a3517" - integrity sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q== +webpack-dev-middleware@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz#179cc40795882cae510b1aa7f3710cbe93c9333e" + integrity sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w== + dependencies: + colorette "^1.2.2" + mem "^8.1.1" + memfs "^3.2.2" + mime-types "^2.1.30" + range-parser "^1.2.1" + schema-utils "^3.0.0" + +webpack-dev-middleware@^7.1.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.1.tgz#5fafc609c44b0fcda27bb4444376eb1dc9fc1fe3" + integrity sha512-/t6KpZw/bnmCR0VKILjJT05mWecbf1aIM2VxCJUvBbg0iXqaQJFxbJ4PCrsY4iBH7PGwnccm4BYyoP1G+lGfAA== dependencies: colorette "^2.0.10" - memfs "^3.4.3" + memfs "^4.6.0" mime-types "^2.1.31" + on-finished "^2.4.1" range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" - integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" +webpack-dev-server@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz#cb6ea47ff796b9251ec49a94f24a425e12e3c9b8" + integrity sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" + bonjour-service "^1.2.1" + chokidar "^3.6.0" colorette "^2.0.10" compression "^1.7.4" connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" - html-entities "^2.3.2" + html-entities "^2.4.0" http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.0.1" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + rimraf "^5.0.5" + schema-utils "^4.2.0" + selfsigned "^2.4.1" serve-index "^1.9.1" sockjs "^0.3.24" spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.4.2" + webpack-dev-middleware "^7.1.0" + ws "^8.16.0" webpack-filter-warnings-plugin@^1.2.1: version "1.2.1" @@ -33100,13 +33548,6 @@ webpack-log@^2.0.0: ansi-colors "^3.0.0" uuid "^3.3.2" -webpack-merge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - webpack-merge@^5.7.3: version "5.8.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" @@ -33115,7 +33556,16 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-merge@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.1" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -33135,18 +33585,12 @@ webpack-virtual-modules@^0.2.2: dependencies: debug "^3.0.0" -webpack-visualizer-plugin2@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-visualizer-plugin2/-/webpack-visualizer-plugin2-1.1.0.tgz#247256978c12ee2a0ec22e5d170f7d0b1ef98146" - integrity sha512-pB2Z9a12m+LwjrfptyR4ReEPc0llOjsb2lXVLEJ4yOnRCBtLeWW+TZrZihUZhJDSW9tc60UXnj9/orgyagLOkg== - dependencies: - d3 "^3.5.6" - mkdirp "^0.5.1" - prop-types "^15.7.2" - react "^17.0.1" - react-dom "^17.0.1" +webpack-virtual-modules@^0.4.1: + version "0.4.6" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz#3e4008230731f1db078d9cb6f68baf8571182b45" + integrity sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA== -webpack@4, webpack@^4.41.5: +webpack@4: version "4.46.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== @@ -33175,7 +33619,7 @@ webpack@4, webpack@^4.41.5: watchpack "^1.7.4" webpack-sources "^1.4.1" -"webpack@>=4.43.0 <6.0.0", webpack@^5: +"webpack@>=4.43.0 <6.0.0", webpack@^5, webpack@^5.9.0, webpack@^5.95.0: version "5.96.1" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.96.1.tgz#3676d1626d8312b6b10d0c18cc049fba7ac01f0c" integrity sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA== @@ -33354,10 +33798,10 @@ widest-line@^3.1.0: dependencies: string-width "^4.0.0" -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== +wildcard@^2.0.0, wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== window-size@^0.1.4: version "0.1.4" @@ -33503,7 +33947,7 @@ ws@^7.3.1, ws@^7.4.2: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.18.0, ws@^8.2.3, ws@^8.4.2, ws@^8.9.0: +ws@^8.16.0, ws@^8.18.0, ws@^8.2.3, ws@^8.9.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== @@ -33801,6 +34245,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + yoctocolors-cjs@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242"