kibana/packages
Tiago Costa 203bc28478
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 <brad.white@elastic.co>
2025-02-14 03:01:36 +00:00
..
kbn-ambient-common-types Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-ambient-ftr-types Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-ambient-storybook-types Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-ambient-ui-types chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-apm-synthtrace [Synthtrace] Introducing teardown for scenarios (#209739) 2025-02-05 15:57:50 +01:00
kbn-apm-synthtrace-client [Synthtrace] Sanitize default value for error grouping key (#210010) 2025-02-07 18:13:11 +01:00
kbn-axe-config Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-babel-preset chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-babel-register Remove dependency date-fns !! (#209539) 2025-02-05 17:34:16 +01:00
kbn-babel-transform Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-bazel-runner Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-capture-oas-snapshot-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-check-mappings-update-cli [Fleet] Add sync integrations fields to remote ES output (#208516) 2025-02-03 12:27:34 +01:00
kbn-check-prod-native-modules-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-ci-stats-core Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-ci-stats-performance-metrics Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-ci-stats-reporter Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-ci-stats-shipper-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-cli-dev-mode Sustainable Kibana Architecture: Move modules owned by @elastic/kibana-presentation (#204843) 2024-12-23 12:32:11 -06:00
kbn-code-owners Fix CODEOWNERS (#205302) 2025-01-02 08:36:55 -06:00
kbn-cypress-config chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-dependency-ownership Add check to fail CI if any dependencies are unowned (#206679) 2025-01-16 09:59:04 -05:00
kbn-dependency-usage Sustainable Kibana Architecture: Move modules owned by @elastic/kibana-security (#202748) 2025-01-05 12:57:01 +01:00
kbn-dev-cli-errors Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-dev-cli-runner SKA: Update broken references and URLs (#206836) 2025-01-28 03:32:48 +00:00
kbn-dev-proc-runner Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-dev-utils Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-docs-utils Sustainable Kibana Architecture: Move modules owned by @elastic/kibana-visualizations (#202754) 2025-01-08 12:19:24 +01:00
kbn-es [Saved Queries] Rework saved query privileges (#202863) 2025-01-29 17:34:58 -04:00
kbn-es-archiver [ES body removal] @elastic/appex-qa (#204878) 2024-12-19 12:06:42 +01:00
kbn-eslint-config [Hardening] Kibana Feature API Privileges Names (#208067) 2025-02-03 15:22:29 +01:00
kbn-eslint-plugin-css Resolve false positives with eslint no color rule (#204848) 2024-12-19 10:26:48 +00:00
kbn-eslint-plugin-disable Add ESLINT constraints to detect inter-group dependencies (#194810) 2024-10-22 06:34:19 -05:00
kbn-eslint-plugin-eslint [Hardening] Kibana Feature API Privileges Names (#208067) 2025-02-03 15:22:29 +01:00
kbn-eslint-plugin-i18n Sustainable Kibana Architecture: Move modules owned by @elastic/kibana-visualizations (#202754) 2025-01-08 12:19:24 +01:00
kbn-eslint-plugin-imports chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-eslint-plugin-telemetry Sustainable Kibana Architecture: Move modules owned by @elastic/obs-ux-infra_services-team (#202830) 2024-12-29 09:58:37 +01:00
kbn-expect Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-failed-test-reporter-cli [kbn-scout-reporting] add failed test reporter (#205096) 2025-01-15 18:40:34 +00:00
kbn-find-used-node-modules Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-ftr-common-functional-services [FTR] Fixup Retry Logging (#205894) 2025-01-16 17:03:16 +00:00
kbn-ftr-common-functional-ui-services [Data Usage] functional tests (#203166) 2024-12-12 08:08:08 -05:00
kbn-ftr-screenshot-filename Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-gen-ai-functional-testing Add base FTR test coverage for inference APIs (#198000) 2024-12-04 06:39:45 -06:00
kbn-generate SKA: Cleanup and follow-up tasks (1 of many) (#206420) 2025-01-14 19:03:58 +01:00
kbn-generate-console-definitions SKA: Categorise remaining packages (#205875) 2025-01-08 22:20:14 +01:00
kbn-get-repo-files Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-import-locator Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-import-resolver chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-io-ts-utils [Perfomance] Track time range picker with onPageReady function (#202889) 2024-12-13 07:11:44 -06:00
kbn-jest-serializers Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-journeys [Journeys] Set traceparent for Playwright (#189800) 2025-02-05 18:53:34 +01:00
kbn-json-ast Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-kibana-manifest-schema Kibana Sustainable Architecture: Force visibility: 'private' for solutions in manifest (#199452) 2024-11-08 15:36:07 +01:00
kbn-lint-packages-cli [codeowners] Filter kibanamachine (#199404) 2024-11-12 12:39:17 -06:00
kbn-lint-ts-projects-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-managed-vscode-config Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-managed-vscode-config-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-management Sustainable Kibana Architecture: Move the rest of shared-ux modules (#205924) 2025-01-10 11:30:37 +00:00
kbn-manifest Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-mock-idp-plugin Preparation for High Contrast Mode, Security domains (#202609) 2024-12-09 13:03:23 -07:00
kbn-mock-idp-utils Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-node-libs-browser-webpack-plugin chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-openapi-bundler [OAS] Remove Elastic-Api-Version (#207071) 2025-01-30 16:59:45 +01:00
kbn-openapi-generator [Authz] Migrated routes with access tags to security config (#209756) 2025-02-11 21:36:38 +07:00
kbn-optimizer chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-optimizer-webpack-helpers chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-peggy Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-peggy-loader chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-performance-testing-dataset-extractor [ES body removal] @elastic/appex-qa (#204878) 2024-12-19 12:06:42 +01:00
kbn-picomatcher Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-plugin-check SKA: Categorise remaining packages (#205875) 2025-01-08 22:20:14 +01:00
kbn-plugin-generator Sustainable Kibana Architecture: Update tooling to take into account the new folders (#202327) 2024-12-02 04:04:35 -06:00
kbn-plugin-helpers chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-relocate SKA: Follow-up relocations (#209477) 2025-02-05 19:53:36 +01:00
kbn-repo-file-maps Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-repo-linter Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-repo-path Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-repo-source-classifier chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-repo-source-classifier-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-scout [scout] adding test helper @kbn/scout-oblt package and uptate onboarding tests (#209761) 2025-02-11 18:38:41 +01:00
kbn-scout-info [kbn-scout] add test config category to reporting (#210167) 2025-02-12 11:17:04 +01:00
kbn-scout-reporting [kbn-scout] add test config category to reporting (#210167) 2025-02-12 11:17:04 +01:00
kbn-set-map SKA: Categorise remaining packages (#205875) 2025-01-08 22:20:14 +01:00
kbn-some-dev-log Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-sort-package-json Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-stdio-dev-helpers Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-storybook chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-styled-components-mapping-cli Update styled_components_files.js to include all files that import styled-components (#205011) 2025-01-05 16:54:17 +01:00
kbn-telemetry-tools Fix telemetry CLI to write empty properties collection (#205746) 2025-01-07 09:46:43 -07:00
kbn-test chore(NA): upgrade to webpack 5 (#191106) 2025-02-14 03:01:36 +00:00
kbn-test-eui-helpers Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-test-jest-helpers Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-test-subj-selector [scout] migrate more Discover tests (#201842) 2024-12-02 20:57:29 +01:00
kbn-tooling-log Sustainable Kibana Architecture: Categorise straightforward packages (#199630) 2024-11-22 10:33:25 +01:00
kbn-ts-projects Dependency usage CLI (#198920) 2024-11-25 14:07:40 +01:00
kbn-ts-type-check-cli Remove references to old type check script (#202825) 2024-12-18 11:38:30 -08:00
kbn-validate-next-docs-cli [ci] Work around docosaurus errors (#206097) 2025-01-09 16:33:30 -06:00
kbn-web-worker-stub Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-whereis-pkg-cli Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
kbn-yarn-lock-validator Adds AGPL 3.0 license (#192025) 2024-09-06 19:02:41 -06:00
response-ops [ResponseOps][Alerts] Move the alerts table to a dedicated package (#207878) 2025-02-12 11:07:55 +01:00
serverless/storybook/config Sustainable Kibana Architecture: Move the rest of shared-ux modules (#205924) 2025-01-10 11:30:37 +00:00
README.md Sustainable Kibana Architecture: Move modules owned by @elastic/kibana-core (#201653) 2025-01-04 11:47:24 -07:00

Kibana-related packages

This folder contains packages that are intended for use in Kibana and Kibana plugins.

tl;dr:

  • Don't publish to npm registry
  • Always use the @kbn namespace
  • Always set "private": true in package.json

Using these packages

We no longer publish these packages to the npm registry. Now, instead of specifying a version when including these packages, we rely on yarn workspaces, which sets up a symlink to the package.

For example if you want to use the @kbn/i18n package in Kibana itself, you can specify the dependency like this:

"@kbn/i18n": "1.0.0"

However, if you want to use this from a Kibana plugin, you need to use a link: dependency and account for the relative location of the Kibana repo, so it would instead be:

"@kbn/i18n": "link:../../kibana/src/platform/packages/shared/kbn-i18n"

then run yarn kbn bootstrap from the plugin directory.

Creating a new package

Run the following command from the root of the Kibana repo:

node scripts/generate package @kbn/<PACKAGE_NAME> --web --owner @elastic/<TEAM_NAME>

Unit tests for a package

Currently there is only one tool being used in order to test packages which is Jest. Below we will explain how it should be done.

Jest

A package should follow the pattern of having .test.js files as siblings of the source code files, and these run by Jest.

A package using the .test.js naming convention will have those tests automatically picked up by Jest and run by the unit test runner, currently mapped to the Kibana test script in the root package.json.

  • yarn test runs all unit tests.
  • yarn jest runs all Jest tests in Kibana.

In order for the plugin or package to use Jest, a jest.config.js file must be present in it's root. However, there are safeguards for this in CI should a test file be added without a corresponding config file.


Each package can also specify its own test script in the package's package.json, for cases where you'd prefer to run the tests from the local package directory.