From 1f9df1ca5bf7c2a4a4fd1f3c8b139eb00216040a Mon Sep 17 00:00:00 2001 From: Tiago Costa Date: Fri, 14 Feb 2025 03:01:36 +0000 Subject: [PATCH] chore(NA): upgrade to webpack 5 (#191106) ### Summary - Closes #89741 This PR contains the resulting work of a massive effort that ports our on top bundler abstraction (called @kbn/optimizer) from Webpack v4 into Webpack v5. It's essential in terms of long term maintenance since v4 was not receiving updates any longer but will also unblock some new features that could be beneficial for our future DevEx endeavours. Next you can find a small list of all the accomplished tasks on this journey. ### Completed Tasks - [x] Upgrade dependencies to match the ones on webpack v5 - [x] Fix null-loader usages - [x] Fix raw-loader usages - [x] Fix file-loader usages - [x] Fix url-loader usages - [x] Fix `@kbn/optimizer-webpack-helpers` to support webpack v5 - [x] Adopt previous webpack v4 polyfill-all strategy with node-polyfill-webpack-plugin - [x] Fix theme-loader on @kbn/optimizer - [x] Migrate configurations and ad-hoc loader options on all webpack configs from v4 to v5 - [x] Fix @kbn/test jest resolver for file-loader cases - [x] Migrate public-path loader on UiSharedDeps - [x] Fix all usages of webpack-merge - [x] Migrate BundleRemoteModule - [x] Migrate BundleRemotesPlugin - [x] Correctly migrate PopulateBundleCachePlugin - [x] Correctly migrate BundleMetricsPlugin - [x] Check if the profiling plugins still work (--profile flag) - [x] Recover if possible the previous webpack v4 cacheGroup chunks rename to something like `data.plugin.chunk.0.js` - [x] Run `/ci` and make sure we get our first green CI, otherwise work on the errors until we do - [x] Profile and solve bottlenecks until we get a cold build performance similar to the one we had on webpack v4 (`node scripts/build_kibana_platform_plugins --no-cache`). - [x] OpenSSL Legacy Warnings: try to remove `--openssl-legacy-provider ` flags - [x] Add Webpack to Renovate config - [x] Explore removing `NodePolyfillPlugin` ([here](https://www.npmjs.com/package/node-polyfill-webpack-plugin)) and add each polyfill needed individually per each webpack config to check if we get smaller bundles. If we do it's better to go with the case by case need approach instead of deploying a bunch of polyfills with NodePolyfillPlugin. As another alternative, create a custom smaller plugin with only the union of all needed polyfills. - [x] Evaluate if we want to touch the resolutions on mainFields and conditionNames - [x] Understand why `@import 'src/core/public/mixins'` does not work anymore (not a problem, we should use relative paths anyway but we want to track why it changed from v4 to v5) - [x] BUG: Child compilers are having errors hidden and/or changed from error to warning - [x] Fix license check for [Artistic-2.0](https://spdx.org/licenses/Artistic-2.0.html) is the license for [domain-browser](https://github.com/bevry/domain-browser?tab=License-1-ov-file). This package is a dependency of [NodePolyfillPlugin](https://www.npmjs.com/package/node-polyfill-webpack-plugin). Artistic 2.0 license is [classified as yellow](https://github.com/elastic/open-source/blob/main/elastic-product-policy.md#yellow-list) and should only be used for dev dependencies. - [x] Make sure `resourceQuery: { not: /raw/ }` is not necessary on other webpack configs like storybook one - [x] Find what is being wrongly removed by usedExports optimization; hint: I believe it is identifying a lot of exports inside the sync entry of plugins as unused exports and removing them. Then `__kbnBootstrap__` can't be found - [x] Rebalance @kbn/optimizer pickMaxWorkerCount - [x] Re-open the issue to fix sass-warnings [#190345](https://github.com/elastic/kibana/issues/190345) or downgrade sass-loader to v10 - [x] Remove previous esm no parse rules - [x] Confirm esm support is working - [x] Confirm console override is needed - [x] Confirm react prod builds on ui shared deps for distributable - [x] Remove customization for [xyflow](https://github.com/xyflow/xyflow) from webpack configs - [x] Clean all the code - [x] Make sure collected metrics from stats are still aligned with what we were collecting before; also verify if the modules used for optimizer caches etc are well generated (@kbn/node-libs-browser) - [x] Fix watch performance --------- Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Brad White (cherry picked from commit 203bc284781cc830049b3f7948c8fcafa8b7d9a1) # Conflicts: # .github/CODEOWNERS # package.json # packages/kbn-eslint-plugin-imports/src/rules/no_group_crossing_imports.ts # packages/kbn-monaco/BUILD.bazel # packages/kbn-node-libs-browser-webpack-plugin/jest.config.js # packages/kbn-optimizer/limits.yml # packages/kbn-optimizer/src/worker/theme_loader.ts # packages/kbn-optimizer/src/worker/webpack.config.ts # packages/kbn-plugin-helpers/src/integration_tests/build.test.ts # packages/kbn-storybook/src/webpack.config.ts # packages/kbn-ui-shared-deps-npm/BUILD.bazel # packages/kbn-ui-shared-deps-npm/webpack.config.js # packages/kbn-ui-shared-deps-src/src/definitions.js # renovate.json # src/platform/packages/private/kbn-ui-shared-deps-src/BUILD.bazel # src/platform/plugins/shared/discover/.storybook/discover.webpack.ts # src/platform/plugins/shared/discover/.storybook/main.ts # src/plugins/discover/.storybook/discover.webpack.ts # src/plugins/discover/.storybook/main.js # src/plugins/discover/.storybook/main.ts # tsconfig.base.json # x-pack/platform/plugins/shared/fleet/package.json # x-pack/platform/plugins/shared/osquery/package.json # x-pack/plugins/canvas/shareable_runtime/webpack.config.js # x-pack/plugins/canvas/storybook/canvas_webpack.ts # x-pack/plugins/security_solution/package.json # x-pack/solutions/observability/plugins/apm/ftr_e2e/package.json # x-pack/solutions/observability/plugins/profiling/e2e/package.json # x-pack/solutions/security/packages/kbn-cloud-security-posture/graph/.storybook/main.ts # x-pack/test/security_solution_cypress/package.json # yarn.lock --- .../pull_request/webpack_bundle_analyzer.yml | 2 +- .../steps/functional/profiling_cypress.sh | 2 +- .../steps/storybooks/build_and_upload.ts | 6 +- .github/CODEOWNERS | 1 + .../public/app/overview.tsx | 2 +- .../public/app/register_embeddable.tsx | 8 +- examples/field_formats_example/public/app.tsx | 10 +- package.json | 58 +- .../src/styles/styles_service.test.ts | 2 +- .../src/styles/styles_service.ts | 2 +- packages/kbn-ambient-ui-types/index.d.ts | 12 + packages/kbn-babel-preset/BUILD.bazel | 1 + packages/kbn-babel-preset/webpack_preset.js | 19 +- packages/kbn-cypress-config/index.ts | 2 + packages/kbn-cypress-config/tsconfig.json | 4 +- .../src/rules/no_boundary_crossing.ts | 4 +- .../src/import_resolver.ts | 4 +- packages/kbn-mapbox-gl/index.ts | 6 +- packages/kbn-mapbox-gl/tsconfig.json | 2 +- packages/kbn-monaco/BUILD.bazel | 4 +- packages/kbn-monaco/webpack.config.js | 5 +- .../BUILD.bazel | 40 + .../README.md | 3 + .../index.js | 75 ++ .../jest.config.js | 14 + .../kibana.jsonc | 5 + .../package.json | 7 + .../tsconfig.json | 18 + .../kbn-optimizer-webpack-helpers/index.ts | 3 + .../src/webpack_helpers.ts | 54 +- packages/kbn-optimizer/limits.yml | 6 +- .../kbn-optimizer/src/common/bundle_cache.ts | 2 +- .../src/optimizer/observe_worker.ts | 9 +- .../src/optimizer/optimizer_config.test.ts | 30 + .../src/optimizer/optimizer_config.ts | 58 +- .../src/worker/bundle_metrics_plugin.ts | 150 ++- .../src/worker/bundle_remote_module.ts | 54 +- .../bundle_remote_used_exports_plugin.ts | 75 ++ .../src/worker/bundle_remotes_plugin.ts | 56 +- .../src/worker/emit_stats_plugin.ts | 4 +- .../worker/populate_bundle_cache_plugin.ts | 229 ++-- .../kbn-optimizer/src/worker/run_compilers.ts | 1 - .../kbn-optimizer/src/worker/theme_loader.ts | 17 +- .../src/worker/webpack.config.ts | 147 ++- packages/kbn-optimizer/tsconfig.json | 1 + packages/kbn-peggy-loader/BUILD.bazel | 1 + .../kbn-peggy-loader/{index.ts => index.js} | 6 +- packages/kbn-peggy-loader/tsconfig.json | 8 +- .../src/integration_tests/build.test.ts | 19 +- .../kbn-plugin-helpers/src/tasks/optimize.ts | 2 +- .../src/tasks/optimize_worker.ts | 4 +- .../kbn-repo-source-classifier/README.mdx | 2 +- .../src/ignore_not_found_export_plugin.ts | 23 +- .../kbn-storybook/src/lib/default_config.ts | 23 +- packages/kbn-storybook/src/webpack.config.ts | 64 +- packages/kbn-storybook/tsconfig.json | 1 + packages/kbn-test/src/jest/resolver.js | 26 +- packages/kbn-ui-shared-deps-npm/BUILD.bazel | 5 +- .../src/public_path_loader.js | 14 +- .../kbn-ui-shared-deps-npm/webpack.config.js | 19 +- packages/kbn-ui-shared-deps-src/BUILD.bazel | 3 - .../kbn-ui-shared-deps-src/src/definitions.js | 3 +- packages/kbn-ui-shared-deps-src/src/entry.js | 3 +- .../kbn-ui-shared-deps-src/webpack.config.js | 35 +- renovate.json | 9 + src/dev/storybook/run_storybook_cli.ts | 1 + .../.storybook/main.js | 2 +- .../expression_metric/.storybook/main.js | 2 +- .../expression_tagcloud/.storybook/main.js | 2 +- .../public/dashboard_app/_dashboard_app.scss | 2 +- .../discover/.storybook/discover.webpack.ts | 4 +- src/plugins/discover/.storybook/main.ts | 8 +- src/plugins/unified_search/.storybook/main.js | 2 +- .../vis_types/vega/public/default_spec.ts | 2 +- tsconfig.base.json | 2 + .../canvas/scripts/shareable_runtime.js | 2 - .../components/footer/scrubber.module.scss | 3 +- .../shareable_runtime/webpack.config.js | 64 +- .../webpack/ci_stats_plugin.ts | 2 +- .../canvas/storybook/canvas_webpack.ts | 19 +- x-pack/plugins/fleet/package.json | 4 +- .../sections/manage_processors/empty_list.tsx | 2 +- .../apm/scripts/test/e2e.js | 1 - .../scripts/test/e2e.js | 1 - .../profiling/scripts/test/e2e.js | 1 - x-pack/plugins/osquery/package.json | 6 +- x-pack/plugins/security_solution/package.json | 10 +- .../security_solution_cypress/package.json | 12 +- .../observability/cypress/package.json | 8 +- yarn.lock | 1164 ++++++++++++----- 90 files changed, 1913 insertions(+), 897 deletions(-) create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/BUILD.bazel create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/README.md create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/index.js create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/jest.config.js create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/kibana.jsonc create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/package.json create mode 100644 packages/kbn-node-libs-browser-webpack-plugin/tsconfig.json create mode 100644 packages/kbn-optimizer/src/worker/bundle_remote_used_exports_plugin.ts rename packages/kbn-peggy-loader/{index.ts => index.js} (90%) 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 4e5fb770a12b4..a26d61198389a 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 plugins/observability_solution/profiling/scripts/test/e2e.js \ +node plugins/observability_solution/profiling/scripts/test/e2e.js \ --kibana-install-dir "$KIBANA_BUILD_LOCATION" \ \ No newline at end of file diff --git a/.buildkite/scripts/steps/storybooks/build_and_upload.ts b/.buildkite/scripts/steps/storybooks/build_and_upload.ts index 8b83c0ab133ae..0349ba94a12e5 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 806e2bae9b7d0..51ac7042f3e66 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -643,6 +643,7 @@ src/plugins/navigation @elastic/appex-sharedux src/plugins/newsfeed @elastic/kibana-core test/common/plugins/newsfeed @elastic/kibana-core src/plugins/no_data_page @elastic/appex-sharedux +packages/kbn-node-libs-browser-webpack-plugin @elastic/kibana-operations x-pack/plugins/notifications @elastic/appex-sharedux packages/kbn-object-versioning @elastic/appex-sharedux packages/kbn-object-versioning-utils @elastic/appex-sharedux 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 0f3217824f943..10d17a9ec63f9 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 7eb3db6ba39a1..504ef7e501128 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,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", @@ -680,6 +680,7 @@ "@kbn/newsfeed-plugin": "link:src/plugins/newsfeed", "@kbn/newsfeed-test-plugin": "link:test/common/plugins/newsfeed", "@kbn/no-data-page-plugin": "link:src/plugins/no_data_page", + "@kbn/node-libs-browser-webpack-plugin": "link:packages/kbn-node-libs-browser-webpack-plugin", "@kbn/notifications-plugin": "link:x-pack/plugins/notifications", "@kbn/object-versioning": "link:packages/kbn-object-versioning", "@kbn/object-versioning-utils": "link:packages/kbn-object-versioning-utils", @@ -1313,7 +1314,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", @@ -1327,7 +1327,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", @@ -1511,11 +1511,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", @@ -1656,11 +1658,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", @@ -1676,12 +1677,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", @@ -1689,12 +1691,12 @@ "callsites": "^3.1.0", "chance": "1.0.18", "chromedriver": "^132.0.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", "csstype": "^3.0.2", @@ -1730,7 +1732,7 @@ "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", "faker": "^5.1.0", "fetch-mock": "^7.3.9", @@ -1743,7 +1745,7 @@ "gulp-terser": "^2.1.0", "has-ansi": "^3.0.0", "html": "1.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", @@ -1767,10 +1769,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", @@ -1784,7 +1785,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": "^15.1.0", "oboe": "^2.1.4", "openapi-types": "^12.1.3", @@ -1800,27 +1801,26 @@ "playwright-chromium": "1.49.0", "pngjs": "^3.4.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-test-renderer": "^17.0.2", "recast": "^0.23.9", "regenerate": "^1.4.0", "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.28.1", "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.9.1", "stylelint-scss": "^4.3.0", "superagent": "^9.0.2", @@ -1831,24 +1831,22 @@ "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", "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": "13.0.2", "yargs": "^15.4.1", diff --git a/packages/core/integrations/core-integrations-browser-internal/src/styles/styles_service.test.ts b/packages/core/integrations/core-integrations-browser-internal/src/styles/styles_service.test.ts index e3e49bfe8e7aa..0a7d6d9898d61 100644 --- a/packages/core/integrations/core-integrations-browser-internal/src/styles/styles_service.test.ts +++ b/packages/core/integrations/core-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/packages/core/integrations/core-integrations-browser-internal/src/styles/styles_service.ts b/packages/core/integrations/core-integrations-browser-internal/src/styles/styles_service.ts index 71132085ec1fa..7b04e0dd72191 100644 --- a/packages/core/integrations/core-integrations-browser-internal/src/styles/styles_service.ts +++ b/packages/core/integrations/core-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/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 59c73c1d0336c..e2226057b45dc 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 @@ -104,8 +104,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-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-mapbox-gl/index.ts b/packages/kbn-mapbox-gl/index.ts index dfc5a876ec262..7721b98cfa3b4 100644 --- a/packages/kbn-mapbox-gl/index.ts +++ b/packages/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/packages/kbn-mapbox-gl/tsconfig.json b/packages/kbn-mapbox-gl/tsconfig.json index 225d37d8136ea..295b6cb8147c8 100644 --- a/packages/kbn-mapbox-gl/tsconfig.json +++ b/packages/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/packages/kbn-monaco/BUILD.bazel b/packages/kbn-monaco/BUILD.bazel index 9a2e2b8f03243..b0ddb98c4eb5d 100644 --- a/packages/kbn-monaco/BUILD.bazel +++ b/packages/kbn-monaco/BUILD.bazel @@ -28,6 +28,7 @@ SHARED_DEPS = [ "//packages/kbn-ui-theme", "//packages/kbn-esql-validation-autocomplete", "//packages/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/packages/kbn-monaco/webpack.config.js b/packages/kbn-monaco/webpack.config.js index 4f558834d8059..ddd21c9c7e029 100644 --- a/packages/kbn-monaco/webpack.config.js +++ b/packages/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/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/packages/kbn-node-libs-browser-webpack-plugin/jest.config.js b/packages/kbn-node-libs-browser-webpack-plugin/jest.config.js new file mode 100644 index 0000000000000..839f7a449020f --- /dev/null +++ b/packages/kbn-node-libs-browser-webpack-plugin/jest.config.js @@ -0,0 +1,14 @@ +/* + * 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". + */ + +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 bd0234eaa87ec..0bb2ac35e0c3f 100644 --- a/packages/kbn-optimizer/limits.yml +++ b/packages/kbn-optimizer/limits.yml @@ -31,7 +31,7 @@ pageLoadAssetSize: dataUsage: 30000 dataViewEditor: 28082 dataViewFieldEditor: 42021 - dataViewManagement: 5300 + dataViewManagement: 6250 dataViews: 65000 dataVisualizer: 27530 devTools: 38637 @@ -122,8 +122,8 @@ pageLoadAssetSize: observabilityShared: 80000 osquery: 107090 painlessLab: 179748 - presentationPanel: 55463 - presentationUtil: 58834 + presentationPanel: 11550 + presentationUtil: 33905 profiling: 36694 remoteClusters: 51327 reporting: 58600 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 a3329dcc3d57f..dc25c1a1c06b5 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 b09650c0708da..42b5fd9e50755 100644 --- a/packages/kbn-optimizer/src/optimizer/optimizer_config.ts +++ b/packages/kbn-optimizer/src/optimizer/optimizer_config.ts @@ -33,15 +33,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..9f879e9d4c9e2 100644 --- a/packages/kbn-optimizer/src/worker/bundle_remote_module.ts +++ b/packages/kbn-optimizer/src/worker/bundle_remote_module.ts @@ -12,6 +12,7 @@ import { KbnImportReq } from '@kbn/repo-packages'; // @ts-ignore not typed by @types/webpack import Module from 'webpack/lib/Module'; +import { RawSource } from 'webpack-sources'; import { BundleRemote } from '../common'; export class BundleRemoteModule extends Module { @@ -27,8 +28,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 +40,56 @@ 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.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 +102,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..87800586ea45d --- /dev/null +++ b/packages/kbn-optimizer/src/worker/bundle_remote_used_exports_plugin.ts @@ -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". + */ + +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) + ) { + // Get all exports of the module + const exportsInfo = moduleGraph.getExportsInfo(module); + + // 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..f3e6db160fbb0 100644 --- a/packages/kbn-optimizer/src/worker/bundle_remotes_plugin.ts +++ b/packages/kbn-optimizer/src/worker/bundle_remotes_plugin.ts @@ -21,7 +21,6 @@ interface RequestData { } type Callback = (error?: any, result?: T) => void; -type ModuleFactory = (data: RequestData, callback: Callback) => void; export class BundleRemotesPlugin { private allowedBundleIds = new Set(); @@ -40,34 +39,33 @@ 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.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 +85,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 +94,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; @@ -108,7 +106,9 @@ export class BundleRemotesPlugin { } public resolve(request: string, cb: (error?: Error, bundle?: null | BundleRemoteModule) => void) { - if (request.endsWith('.json')) { + // NOTE: previously on webpack v4 ?raw files did not reach this phase and were excluded + // which is not the case anymore in webpack v5 so we need to do exclude them from being resolved + if (request.endsWith('.json') || request.endsWith('?raw')) { return cb(undefined, null); } diff --git a/packages/kbn-optimizer/src/worker/emit_stats_plugin.ts b/packages/kbn-optimizer/src/worker/emit_stats_plugin.ts index 69eeecdb2006f..fda5cc0fb666d 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 { @@ -27,7 +27,7 @@ export class EmitStatsPlugin { (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 92a728f17f5cb..0a33dcc4cbfb3 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 { parseThemeTags, ALL_THEMES, ThemeTag } from '../common'; @@ -16,11 +15,17 @@ const getIsDark = (tag: ThemeTag) => tag.includes('dark'); const compare = (a: ThemeTag, b: ThemeTag) => (getVersion(a) === getVersion(b) ? 1 : 0) + (getIsDark(a) === getIsDark(b) ? 1 : 0); +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); @@ -28,7 +33,7 @@ export default function (this: webpack.loader.LoaderContext) { if (themeTags.includes(tag)) { return ` case '${tag}': - return require(${stringifyRequest(this, `${this.resourcePath}?${tag}`)});`; + return require(${getStringifiedRequest(this, `${this.resourcePath}?${tag}`)});`; } const fallback = themeTags @@ -40,10 +45,10 @@ export default function (this: webpack.loader.LoaderContext) { return ` case '${tag}': console.error(new Error(${JSON.stringify(message)})); - return require(${stringifyRequest(this, `${this.resourcePath}?${fallback}`)})`; + return require(${getStringifiedRequest(this, `${this.resourcePath}?${fallback}`)})`; }).join('\n'); return ` switch (window.__kbnThemeTag__) {${cases} }`; -} +} \ No newline at end of file diff --git a/packages/kbn-optimizer/src/worker/webpack.config.ts b/packages/kbn-optimizer/src/worker/webpack.config.ts index 52a837724480d..5be5dfcd7996f 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,34 @@ 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', + hashFunction: 'xxhash64', 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 +80,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 +95,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 +206,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: { @@ -228,13 +238,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,38 +246,47 @@ 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: /\.peggy$/, + loader: require.resolve('@kbn/peggy-loader'), + }, + // emits a separate file and exports the URL. Previously achievable by using file-loader. + { + 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. + { + 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'], alias: { core_app_image_assets: Path.resolve( worker.repoRoot, @@ -290,16 +302,43 @@ export function getWebpackConfig( // and not for the webpack compilations performance itself hints: false, }, + + ignoreWarnings: [STATS_WARNINGS_FILTER], }; const nonDistributableConfig: webpack.Configuration = { mode: 'development', + + cache: { + type: 'memory', + cacheUnaffected: true, + }, + + experiments: { + cacheUnaffected: true, + backCompat: false, + }, + + optimization: { + sideEffects: false, + removeAvailableModules: false, + }, + + module: { + // This was default on webpack v4 + unsafeCache: true, + }, }; 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"`, @@ -310,8 +349,6 @@ export function getWebpackConfig( optimization: { minimizer: [ new TerserPlugin({ - cache: false, - sourceMap: false, extractComments: false, parallel: false, terserOptions: { diff --git a/packages/kbn-optimizer/tsconfig.json b/packages/kbn-optimizer/tsconfig.json index 62e191e3413d4..477a85dd83ce5 100644 --- a/packages/kbn-optimizer/tsconfig.json +++ b/packages/kbn-optimizer/tsconfig.json @@ -28,5 +28,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 82c6a35a088d9..3bc56e882f8de 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/8.16/production.html#openssl-legacy-provider - succ 🎉 + " succ 🎉 Your plugin has been created in plugins/foo_test_plugin " @@ -66,23 +62,20 @@ 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/8.16/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 - │ succ browser bundle created at plugins/foo_test_plugin/build/kibana/fooTestPlugin/target/public + │ERROR No current read transaction available/Users/tiagocosta/.backport/repositories/elastic/kibana/node_modules/@babel/core/lib/parser/index.js:74 │ info stopping @kbn/optimizer info compressing js and css bundles found at plugins/foo_test_plugin/build/kibana/fooTestPlugin/target/public to brotli + ERROR Error: ENOENT: no such file or directory, scandir '/Users/tiagocosta/.backport/repositories/elastic/kibana/plugins/foo_test_plugin/build/kibana/fooTestPlugin/target/public' info copying assets from \`public/assets\` to build info copying server source into the build and converting with babel info running yarn to install dependencies @@ -106,10 +99,6 @@ 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.plugin.js", - "kibana/fooTestPlugin/target/public/fooTestPlugin.plugin.js.br", "kibana/fooTestPlugin/translations/ja-JP.json", "kibana/fooTestPlugin/tsconfig.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..6ef9ace877702 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,17 @@ // 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/; + 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 32aaadbf22d3c..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,20 +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'], - }, - }, - }, ], }, - plugins: [new IgnoreNotFoundExportPlugin()], + plugins: [new NodeLibsBrowserPlugin(), new IgnoreNotFoundExportPlugin()], resolve: { extensions: ['.js', '.mjs', '.ts', '.tsx', '.json', '.mdx'], mainFields: ['browser', 'main'], @@ -156,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)) { @@ -218,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 8f985e9463962..05ad0b5b27dc3 100644 --- a/packages/kbn-test/src/jest/resolver.js +++ b/packages/kbn-test/src/jest/resolver.js @@ -30,6 +30,18 @@ const STATIC_FILE_EXT = .split('|') .map((e) => `.${e}`); +/** + * @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 @@ -57,25 +69,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/packages/kbn-ui-shared-deps-npm/BUILD.bazel b/packages/kbn-ui-shared-deps-npm/BUILD.bazel index ad3f3474f1b4e..84b3baf203acc 100644 --- a/packages/kbn-ui-shared-deps-npm/BUILD.bazel +++ b/packages/kbn-ui-shared-deps-npm/BUILD.bazel @@ -26,9 +26,9 @@ SRCS = glob( RUNTIME_DEPS = [ "@npm//babel-loader", "@npm//@babel/plugin-proposal-optional-chaining", - "@npm//loader-utils", "@npm//val-loader", "//packages/kbn-repo-info", + "//packages/kbn-node-libs-browser-webpack-plugin", # 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 # use the DLL version of a package until it has resolved to the same @@ -53,6 +53,7 @@ RUNTIME_DEPS = [ "@npm//jquery", "@npm//lodash", "@npm//moment-timezone", + "@npm//node-libs-browser", "@npm//react-dom", "@npm//react-router-dom", "@npm//react-router-dom-v5-compat", @@ -94,11 +95,9 @@ webpack_cli( env = select({ "//:dist": { "NODE_ENV": "production", - "NODE_OPTIONS": "--openssl-legacy-provider", }, "//conditions:default": { "NODE_ENV": "development", - "NODE_OPTIONS": "--openssl-legacy-provider", }, }) ) diff --git a/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js b/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js index bc0e90a8031f3..6e2f0d7e1ee94 100644 --- a/packages/kbn-ui-shared-deps-npm/src/public_path_loader.js +++ b/packages/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/packages/kbn-ui-shared-deps-npm/webpack.config.js b/packages/kbn-ui-shared-deps-npm/webpack.config.js index 926a041a72c3d..dd3f3188abd75 100644 --- a/packages/kbn-ui-shared-deps-npm/webpack.config.js +++ b/packages/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,8 +61,7 @@ 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_light.json', '@elastic/eui/dist/eui_theme_dark.json', '@elastic/numeral', @@ -103,6 +100,7 @@ module.exports = (_, argv) => { }, context: __dirname, devtool: 'cheap-source-map', + target: 'web', output: { path: outputPath, filename: '[name].dll.js', @@ -110,7 +108,6 @@ module.exports = (_, argv) => { devtoolModuleFilenameTemplate: (info) => `kbn-ui-shared-deps-npm/${Path.relative(REPO_ROOT, info.absoluteResourcePath)}`, library: '__kbnSharedDeps_npm__', - futureEmitAssets: true, }, module: { @@ -144,11 +141,15 @@ module.exports = (_, argv) => { 'scheduler/tracing': 'scheduler/tracing-profiling', }, extensions: ['.js', '.ts'], + mainFields: ['browser', 'module', 'main'], + conditionNames: ['browser', 'module', 'import', 'require', '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: { @@ -159,6 +160,7 @@ module.exports = (_, argv) => { }, plugins: [ + new NodeLibsBrowserPlugin(), new CleanWebpackPlugin({ protectWebpackAssets: false, cleanAfterEveryBuildPatterns: [ @@ -171,6 +173,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/packages/kbn-ui-shared-deps-src/BUILD.bazel b/packages/kbn-ui-shared-deps-src/BUILD.bazel index d2e67ccd14ac6..19bd33c8c9556 100644 --- a/packages/kbn-ui-shared-deps-src/BUILD.bazel +++ b/packages/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", "//packages/kbn-ui-shared-deps-npm", "//packages/kbn-babel-register", @@ -51,11 +50,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/packages/kbn-ui-shared-deps-src/src/definitions.js b/packages/kbn-ui-shared-deps-src/src/definitions.js index f56baf1731ac9..0cb8ad267d065 100644 --- a/packages/kbn-ui-shared-deps-src/src/definitions.js +++ b/packages/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', // transient dep of eui '@hello-pangea/dnd': '__kbnSharedDeps__.HelloPangeaDnd', diff --git a/packages/kbn-ui-shared-deps-src/src/entry.js b/packages/kbn-ui-shared-deps-src/src/entry.js index f87c2e7d75ead..caba7dbad128c 100644 --- a/packages/kbn-ui-shared-deps-src/src/entry.js +++ b/packages/kbn-ui-shared-deps-src/src/entry.js @@ -42,8 +42,7 @@ export const ElasticNumeral = require('@elastic/numeral'); export const ElasticCharts = require('@elastic/charts'); export const ElasticEui = require('@elastic/eui'); 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 KbnDatemath = require('@kbn/datemath'); export const HelloPangeaDnd = require('@hello-pangea/dnd/dist/dnd'); export const ReduxjsToolkit = require('@reduxjs/toolkit'); diff --git a/packages/kbn-ui-shared-deps-src/webpack.config.js b/packages/kbn-ui-shared-deps-src/webpack.config.js index c84c8928d0864..3f7c5575c1331 100644 --- a/packages/kbn-ui-shared-deps-src/webpack.config.js +++ b/packages/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,28 @@ 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'], 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 @@ -118,8 +124,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: { @@ -130,6 +138,7 @@ module.exports = { }, plugins: [ + new NodeLibsBrowserPlugin(), new MiniCssExtractPlugin({ filename: '[name].css', }), diff --git a/renovate.json b/renovate.json index 01023d69f47fe..6327ed76be1bf 100644 --- a/renovate.json +++ b/renovate.json @@ -20,6 +20,15 @@ "matchDepPatterns": [".*"], "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": ["team:kibana-operations"], 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/plugins/chart_expressions/expression_legacy_metric/.storybook/main.js b/src/plugins/chart_expressions/expression_legacy_metric/.storybook/main.js index e19737c87765a..362bc3abad266 100644 --- a/src/plugins/chart_expressions/expression_legacy_metric/.storybook/main.js +++ b/src/plugins/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/plugins/chart_expressions/expression_metric/.storybook/main.js b/src/plugins/chart_expressions/expression_metric/.storybook/main.js index ae80dc728682e..b01f3d0d33407 100644 --- a/src/plugins/chart_expressions/expression_metric/.storybook/main.js +++ b/src/plugins/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/plugins/chart_expressions/expression_tagcloud/.storybook/main.js b/src/plugins/chart_expressions/expression_tagcloud/.storybook/main.js index 65c802d71b989..206604f1ff758 100644 --- a/src/plugins/chart_expressions/expression_tagcloud/.storybook/main.js +++ b/src/plugins/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/plugins/dashboard/public/dashboard_app/_dashboard_app.scss b/src/plugins/dashboard/public/dashboard_app/_dashboard_app.scss index c89337d29e720..dfef1bf0c4ec9 100644 --- a/src/plugins/dashboard/public/dashboard_app/_dashboard_app.scss +++ b/src/plugins/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/plugins/discover/.storybook/discover.webpack.ts b/src/plugins/discover/.storybook/discover.webpack.ts index 91c2a37df3942..aa82846a1c085 100644 --- a/src/plugins/discover/.storybook/discover.webpack.ts +++ b/src/plugins/discover/.storybook/discover.webpack.ts @@ -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/plugins/discover/.storybook/main.ts b/src/plugins/discover/.storybook/main.ts index 6833e95dbd5a8..839f7a449020f 100644 --- a/src/plugins/discover/.storybook/main.ts +++ b/src/plugins/discover/.storybook/main.ts @@ -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/src/plugins/unified_search/.storybook/main.js b/src/plugins/unified_search/.storybook/main.js index 86528a888e70e..6eb26edfec43e 100644 --- a/src/plugins/unified_search/.storybook/main.js +++ b/src/plugins/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/src/plugins/vis_types/vega/public/default_spec.ts b/src/plugins/vis_types/vega/public/default_spec.ts index fd4d54a26eab7..fc68b8566b45f 100644 --- a/src/plugins/vis_types/vega/public/default_spec.ts +++ b/src/plugins/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/tsconfig.base.json b/tsconfig.base.json index dbd9b7b8b1e56..2e4f6b4262258 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1280,6 +1280,8 @@ "@kbn/newsfeed-test-plugin/*": ["test/common/plugins/newsfeed/*"], "@kbn/no-data-page-plugin": ["src/plugins/no_data_page"], "@kbn/no-data-page-plugin/*": ["src/plugins/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/plugins/notifications"], "@kbn/notifications-plugin/*": ["x-pack/plugins/notifications/*"], "@kbn/object-versioning": ["packages/kbn-object-versioning"], diff --git a/x-pack/plugins/canvas/scripts/shareable_runtime.js b/x-pack/plugins/canvas/scripts/shareable_runtime.js index f3e1e66c1744a..a0b8421f8da01 100644 --- a/x-pack/plugins/canvas/scripts/shareable_runtime.js +++ b/x-pack/plugins/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/plugins/canvas/shareable_runtime/components/footer/scrubber.module.scss b/x-pack/plugins/canvas/shareable_runtime/components/footer/scrubber.module.scss index 7599df7391295..d9529cc9e3e01 100644 --- a/x-pack/plugins/canvas/shareable_runtime/components/footer/scrubber.module.scss +++ b/x-pack/plugins/canvas/shareable_runtime/components/footer/scrubber.module.scss @@ -18,9 +18,10 @@ } :global .kbnCanvas :local .slideContainer { - @include euiScrollBar; display: flex; overflow-x: auto; overflow-y: hidden; width: 100%; + + @include euiScrollBar; } diff --git a/x-pack/plugins/canvas/shareable_runtime/webpack.config.js b/x-pack/plugins/canvas/shareable_runtime/webpack.config.js index a2ed32fe77573..d092fd5ad27f6 100644 --- a/x-pack/plugins/canvas/shareable_runtime/webpack.config.js +++ b/x-pack/plugins/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,23 +217,12 @@ module.exports = { loader: 'html-loader', exclude: /node_modules/, }, - { - test: [ - require.resolve('@elastic/eui/es/components/drag_and_drop'), - require.resolve('highlight.js'), - ], - 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/plugins/canvas/shareable_runtime/webpack/ci_stats_plugin.ts b/x-pack/plugins/canvas/shareable_runtime/webpack/ci_stats_plugin.ts index a0f6c8fe0e9bb..7bc0105ef13b9 100644 --- a/x-pack/plugins/canvas/shareable_runtime/webpack/ci_stats_plugin.ts +++ b/x-pack/plugins/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/plugins/canvas/storybook/canvas_webpack.ts b/x-pack/plugins/canvas/storybook/canvas_webpack.ts index c6ae4a9dbaa95..e7da29b33be24 100644 --- a/x-pack/plugins/canvas/storybook/canvas_webpack.ts +++ b/x-pack/plugins/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', @@ -39,23 +40,21 @@ export const canvasWebpack = { loader: 'sass-loader', options: { implementation: require('sass-embedded'), + sassOptions: { + quietDeps: true, + }, }, }, ], }, - // Exclude large-dependency, troublesome or irrelevant modules. - { - test: [ - resolve(KIBANA_ROOT, 'x-pack/plugins/canvas/public/components/embeddable_flyout'), - resolve(KIBANA_ROOT, 'x-pack/plugins/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/plugins/fleet/package.json b/x-pack/plugins/fleet/package.json index dc0bc6a6bcacb..83656010774f3 100644 --- a/x-pack/plugins/fleet/package.json +++ b/x-pack/plugins/fleet/package.json @@ -5,11 +5,11 @@ "private": true, "license": "Elastic License 2.0", "scripts": { - "cypress_space_awareness": "NODE_OPTIONS=--openssl-legacy-provider node ../security_solution/scripts/start_cypress_parallel --config-file ../fleet/cypress.config.space_awareness.ts --ftr-config-file ../../../x-pack/test/fleet_cypress/cli_config.space_awareness", + "cypress_space_awareness": "node ../security_solution/scripts/start_cypress_parallel --config-file ../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=../fleet/cypress/reporter_config.json", - "cypress": "NODE_OPTIONS=--openssl-legacy-provider node ../security_solution/scripts/start_cypress_parallel --config-file ../fleet/cypress.config.ts --ftr-config-file ../../../x-pack/test/fleet_cypress/cli_config", + "cypress": "node ../security_solution/scripts/start_cypress_parallel --config-file ../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=../fleet/cypress/reporter_config.json", diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx index f021055dd2934..566663a65bb76 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/sections/manage_processors/empty_list.tsx +++ b/x-pack/plugins/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/plugins/observability_solution/apm/scripts/test/e2e.js b/x-pack/plugins/observability_solution/apm/scripts/test/e2e.js index 02cba1343fd4e..a70d13b877159 100644 --- a/x-pack/plugins/observability_solution/apm/scripts/test/e2e.js +++ b/x-pack/plugins/observability_solution/apm/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/plugins/observability_solution/observability_onboarding/scripts/test/e2e.js b/x-pack/plugins/observability_solution/observability_onboarding/scripts/test/e2e.js index fd2da7b56fb68..e5c7901bb869e 100644 --- a/x-pack/plugins/observability_solution/observability_onboarding/scripts/test/e2e.js +++ b/x-pack/plugins/observability_solution/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/plugins/observability_solution/profiling/scripts/test/e2e.js b/x-pack/plugins/observability_solution/profiling/scripts/test/e2e.js index fd2da7b56fb68..e5c7901bb869e 100644 --- a/x-pack/plugins/observability_solution/profiling/scripts/test/e2e.js +++ b/x-pack/plugins/observability_solution/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/plugins/osquery/package.json b/x-pack/plugins/osquery/package.json index f6dac0fd15c02..4eb947030af9c 100644 --- a/x-pack/plugins/osquery/package.json +++ b/x-pack/plugins/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 ../security_solution/scripts/start_cypress_parallel --config-file ../osquery/cypress/cypress.config.ts --ftr-config-file ../../../x-pack/test/osquery_cypress/cli_config", + "cypress": "node ../security_solution/scripts/start_cypress_parallel --config-file ../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 ../security_solution/scripts/start_cypress_parallel --config-file ../osquery/cypress/serverless_cypress.config.ts --ftr-config-file ../../../x-pack/test/osquery_cypress/serverless_cli_config", + "cypress:serverless": "node ../security_solution/scripts/start_cypress_parallel --config-file ../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 ../security_solution/scripts/start_cypress_parallel_serverless --config-file ../osquery/cypress/serverless_cypress_qa.config.ts --onBeforeHook ../../test/osquery_cypress/runner_qa.ts", + "cypress:qa:serverless": "node ../security_solution/scripts/start_cypress_parallel_serverless --config-file ../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/", diff --git a/x-pack/plugins/security_solution/package.json b/x-pack/plugins/security_solution/package.json index 62a406960ceeb..1762b784891dc 100644 --- a/x-pack/plugins/security_solution/package.json +++ b/x-pack/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 ./public/management/cypress/cypress.config.ts --ftr-config-file ../../test/defend_workflows_cypress/cli_config", + "cypress:dw": "node ./scripts/start_cypress_parallel --config-file ./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 ./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 ./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 ./public/management/cypress/cypress_serverless_qa.config.ts", + "cypress:dw:qa:serverless": "node ./scripts/start_cypress_parallel_serverless --config-file ./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'", @@ -35,4 +35,4 @@ "openapi:bundle:entity-analytics": "node scripts/openapi/bundle_entity_analytics", "openapi:bundle:endpoint-management": "node scripts/openapi/bundle_endpoint_management" } -} +} \ No newline at end of file diff --git a/x-pack/test/security_solution_cypress/package.json b/x-pack/test/security_solution_cypress/package.json index c7bc7fe1d94a0..248f33190ae63 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 ../../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 ../../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 ../../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 ../../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 ../../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 ../../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 ../../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'", @@ -38,7 +38,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 ../../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 ../../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'", 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 33a83bd149805..ec6def03e5c85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1559,10 +1559,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" @@ -1605,7 +1605,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== @@ -3306,6 +3306,26 @@ resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== +"@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" @@ -5870,6 +5890,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/plugins/notifications": version "0.0.0" uid "" @@ -8404,10 +8428,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.5", "@popperjs/core@^2.11.8": version "2.11.8" @@ -9323,6 +9347,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" @@ -9640,6 +9708,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" @@ -10258,10 +10364,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" "*" @@ -10345,10 +10451,10 @@ dependencies: "@types/color-convert" "*" -"@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" "*" @@ -10571,7 +10677,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== @@ -10721,11 +10827,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" @@ -11054,7 +11170,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== @@ -11400,6 +11516,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/scheduler@^0.23.0": version "0.23.0" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" @@ -11436,14 +11557,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== @@ -11451,6 +11572,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" @@ -11471,10 +11601,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" "*" @@ -11660,19 +11790,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== @@ -11681,7 +11809,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== @@ -11693,7 +11830,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== @@ -11707,13 +11844,20 @@ resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== -"@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" @@ -12124,22 +12268,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" @@ -12427,7 +12569,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== @@ -12444,7 +12586,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.12.0, ajv@^8.6.3, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.12.0, ajv@^8.6.3, 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== @@ -12775,11 +12917,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" @@ -13121,7 +13258,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== @@ -13131,6 +13268,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" @@ -13211,6 +13356,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" @@ -13278,6 +13428,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" @@ -13593,13 +13748,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" @@ -13712,6 +13865,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" @@ -13870,6 +14028,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" @@ -14024,13 +14189,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" @@ -14265,7 +14430,7 @@ child-process-promise@^2.2.1: node-version "^1.0.0" promise-polyfill "^6.0.1" -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== @@ -14394,17 +14559,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: @@ -14724,17 +14895,17 @@ 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@8: +commander@8, commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -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== @@ -15242,7 +15413,7 @@ css-line-break@^2.1.0: dependencies: utrie "^1.0.2" -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== @@ -15261,6 +15432,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" @@ -15786,7 +15987,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= @@ -15882,6 +16083,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, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -16047,6 +16253,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" @@ -16087,6 +16306,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" @@ -16436,11 +16660,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" @@ -16527,13 +16746,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" @@ -16553,7 +16765,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== @@ -16571,7 +16783,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== @@ -17716,10 +17928,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" @@ -18147,6 +18359,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" @@ -18218,6 +18438,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" @@ -18520,10 +18748,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" @@ -19610,27 +19838,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== @@ -19643,6 +19869,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" @@ -19679,6 +19931,17 @@ html-webpack-plugin@^4.0.0: tapable "^1.1.3" util.promisify "1.0.0" +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: + "@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" + html2canvas@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" @@ -19694,16 +19957,6 @@ html@1.0.0: dependencies: concat-stream "^1.4.7" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - htmlparser2@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" @@ -19887,6 +20140,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" @@ -19925,6 +20183,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" @@ -20133,6 +20396,11 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + intl-messageformat@10.5.12: version "10.5.12" resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.12.tgz#a0c1a20da896b7a1f4ba1b59c8ba5d9943c29c3f" @@ -20193,10 +20461,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" @@ -20375,6 +20643,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" @@ -20460,6 +20733,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@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -20495,6 +20775,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" @@ -20781,6 +21066,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" @@ -21516,6 +21808,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" @@ -22036,6 +22333,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" @@ -22237,7 +22542,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== @@ -22277,6 +22582,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" @@ -22644,6 +22956,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" @@ -22945,12 +23264,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: + 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.3" + 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" @@ -23142,22 +23479,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" @@ -23174,6 +23511,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" @@ -23201,14 +23543,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" @@ -23658,10 +23999,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" @@ -23819,6 +24160,11 @@ nanoid@^3.3.1, nanoid@^3.3.6: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +nanoid@^3.3.7: + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== + nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" @@ -23925,7 +24271,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== @@ -24207,14 +24553,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" - num-sort@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b" @@ -24493,7 +24831,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== @@ -24533,6 +24871,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" @@ -24541,7 +24889,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== @@ -24719,6 +25067,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" @@ -24752,6 +25105,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" @@ -24773,6 +25133,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" @@ -24805,7 +25172,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== @@ -24813,6 +25180,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" @@ -24860,7 +25236,6 @@ pac-resolver@^7.0.1: integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== dependencies: degenerator "^5.0.0" - ip "^1.1.8" netmask "^2.0.2" package-hash@^4.0.0: @@ -24907,13 +25282,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" @@ -24985,10 +25360,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" @@ -24997,13 +25372,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" @@ -25042,6 +25417,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" @@ -25172,7 +25552,7 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picocolors@^1.0.0, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -25290,6 +25670,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" @@ -25487,6 +25874,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" @@ -25549,6 +25945,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" @@ -25559,6 +25960,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" @@ -25567,6 +25977,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" @@ -25575,6 +25992,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" @@ -25718,7 +26142,7 @@ postcss-values-parser@^6.0.2: is-url-superb "^4.0.0" quote-unquote "^1.0.0" -postcss@8.4.31, postcss@^8.4.14, postcss@^8.4.23, postcss@^8.4.31: +postcss@8.4.31, postcss@^8.4.14: version "8.4.31" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== @@ -25735,6 +26159,15 @@ 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.2.15, 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== + dependencies: + nanoid "^3.3.7" + picocolors "^1.1.1" + source-map-js "^1.2.1" + potpack@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/potpack/-/potpack-2.0.0.tgz#61f4dd2dc4b3d5e996e3698c0ec9426d0e169104" @@ -25818,6 +26251,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" @@ -26301,14 +26742,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" @@ -26410,7 +26843,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== @@ -26909,7 +27342,7 @@ react-window@^1.8.10: dependencies: loose-envify "^1.1.0" -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== @@ -27080,12 +27513,12 @@ 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== +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== dependencies: - resolve "^1.9.0" + resolve "^1.20.0" redent@^1.0.0: version "1.0.0" @@ -27503,6 +27936,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" @@ -27664,7 +28108,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== @@ -27799,6 +28243,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" @@ -28074,10 +28523,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" @@ -28119,7 +28568,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.0.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== @@ -28128,14 +28577,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" @@ -28154,15 +28595,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" @@ -28199,11 +28640,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: @@ -28452,6 +28894,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" @@ -28589,14 +29036,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" @@ -28804,6 +29251,11 @@ source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" @@ -29254,13 +29706,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" @@ -29462,7 +29914,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -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== @@ -29470,6 +29922,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" @@ -29834,7 +30299,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.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== @@ -30011,7 +30476,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== @@ -30031,10 +30496,10 @@ 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: - version "5.37.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" - integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== +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== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -30077,6 +30542,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" @@ -30306,10 +30776,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" @@ -30352,6 +30822,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" @@ -30491,7 +30966,7 @@ tslib@2.6.2, tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3. 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== @@ -31018,15 +31493,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" @@ -31206,13 +31672,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" @@ -31852,37 +32315,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: @@ -31896,51 +32363,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" @@ -31965,13 +32446,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" @@ -31980,7 +32454,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== @@ -32000,18 +32483,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== @@ -32040,7 +32517,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== @@ -32219,10 +32696,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" @@ -32363,7 +32840,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== @@ -32661,6 +33138,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== + z-schema@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-5.0.2.tgz#f410394b2c9fcb9edaf6a7511491c0bb4e89a504"