+
+
+ `;
+
+ fs.writeFileSync('index.html', html);
+
+ console.log('--- Uploading Storybooks');
+ exec(`
+ gsutil -q -m cp -r -z js,css,html,json,map,txt,svg '*' 'gs://${STORYBOOK_BUCKET}/${STORYBOOK_DIRECTORY}/${process.env.BUILDKITE_COMMIT}/'
+ gsutil -h "Cache-Control:no-cache, max-age=0, no-transform" cp -z html 'index.html' 'gs://${STORYBOOK_BUCKET}/${STORYBOOK_DIRECTORY}/latest/'
+ `);
+ } finally {
+ process.chdir(originalDirectory);
+ }
+};
+
+try {
+ ghStatus('pending', 'Building Storybooks');
+ build();
+ upload();
+ ghStatus('success', 'Storybooks built');
+} catch (error) {
+ ghStatus('error', 'Building Storybooks failed');
+ throw error;
+}
diff --git a/.buildkite/scripts/steps/storybooks/build_and_upload.sh b/.buildkite/scripts/steps/storybooks/build_and_upload.sh
new file mode 100755
index 0000000000000..9f8343da18a72
--- /dev/null
+++ b/.buildkite/scripts/steps/storybooks/build_and_upload.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+set -euo pipefail
+
+.buildkite/scripts/bootstrap.sh
+
+node .buildkite/scripts/steps/storybooks/build_and_upload.js
diff --git a/.buildkite/scripts/steps/test/api_integration.sh b/.buildkite/scripts/steps/test/api_integration.sh
index 4bf1ed1406ac5..f56e98903d226 100755
--- a/.buildkite/scripts/steps/test/api_integration.sh
+++ b/.buildkite/scripts/steps/test/api_integration.sh
@@ -2,10 +2,15 @@
set -euo pipefail
+source .buildkite/scripts/common/util.sh
+
+is_test_execution_step
+
.buildkite/scripts/bootstrap.sh
-echo '--- API Integration Tests'
-node scripts/functional_tests \
- --config test/api_integration/config.js \
- --bail \
- --debug
+echo --- API Integration Tests
+checks-reporter-with-killswitch "API Integration Tests" \
+ node scripts/functional_tests \
+ --config test/api_integration/config.js \
+ --bail \
+ --debug
diff --git a/.buildkite/scripts/steps/test/jest.sh b/.buildkite/scripts/steps/test/jest.sh
index ab9be759b43a5..2c4e3fe21902d 100755
--- a/.buildkite/scripts/steps/test/jest.sh
+++ b/.buildkite/scripts/steps/test/jest.sh
@@ -2,7 +2,12 @@
set -euo pipefail
+source .buildkite/scripts/common/util.sh
+
+is_test_execution_step
+
.buildkite/scripts/bootstrap.sh
echo '--- Jest'
-node scripts/jest --ci --verbose --maxWorkers=13
+checks-reporter-with-killswitch "Jest Unit Tests" \
+ node scripts/jest --ci --verbose --maxWorkers=10
diff --git a/.buildkite/scripts/steps/test/jest_integration.sh b/.buildkite/scripts/steps/test/jest_integration.sh
index eb243e55670e3..9f0228fd910bf 100755
--- a/.buildkite/scripts/steps/test/jest_integration.sh
+++ b/.buildkite/scripts/steps/test/jest_integration.sh
@@ -2,7 +2,12 @@
set -euo pipefail
+source .buildkite/scripts/common/util.sh
+
+is_test_execution_step
+
.buildkite/scripts/bootstrap.sh
echo '--- Jest Integration Tests'
-node scripts/jest_integration --ci --verbose
+checks-reporter-with-killswitch "Jest Integration Tests" \
+ node scripts/jest_integration --ci --verbose
diff --git a/.ci/ci_groups.yml b/.ci/ci_groups.yml
index 6d1fb2234406c..9c3a039f51166 100644
--- a/.ci/ci_groups.yml
+++ b/.ci/ci_groups.yml
@@ -10,7 +10,6 @@ root:
- ciGroup9
- ciGroup10
- ciGroup11
- - ciGroup12
xpack:
- ciGroup1
diff --git a/.eslintignore b/.eslintignore
index 4c6618779bbda..040662604358f 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -34,7 +34,7 @@ snapshots.js
/packages/kbn-test/src/functional_test_runner/__tests__/fixtures/
/packages/kbn-test/src/functional_test_runner/lib/config/__tests__/fixtures/
/packages/kbn-ui-framework/dist
-/packages/kbn-ui-shared-deps/src/flot_charts
+/packages/kbn-ui-shared-deps-src/src/flot_charts
/packages/kbn-monaco/src/painless/antlr
# Bazel
diff --git a/.eslintrc.js b/.eslintrc.js
index 1696cef4c7219..83afc27263248 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1492,7 +1492,7 @@ module.exports = {
},
},
{
- files: ['packages/kbn-ui-shared-deps/src/flot_charts/**/*.js'],
+ files: ['packages/kbn-ui-shared-deps-src/src/flot_charts/**/*.js'],
env: {
jquery: true,
},
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index d94b5b19de444..6ae834b58fc89 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -198,7 +198,8 @@
/packages/kbn-optimizer/ @elastic/kibana-operations
/packages/kbn-pm/ @elastic/kibana-operations
/packages/kbn-test/ @elastic/kibana-operations
-/packages/kbn-ui-shared-deps/ @elastic/kibana-operations
+/packages/kbn-ui-shared-deps-npm/ @elastic/kibana-operations
+/packages/kbn-ui-shared-deps-src/ @elastic/kibana-operations
/packages/kbn-es-archiver/ @elastic/kibana-operations
/packages/kbn-utils/ @elastic/kibana-operations
/packages/kbn-cli-dev-mode/ @elastic/kibana-operations
diff --git a/.i18nrc.json b/.i18nrc.json
index 0ea18a3b7d210..4107772e421ca 100644
--- a/.i18nrc.json
+++ b/.i18nrc.json
@@ -15,7 +15,7 @@
"uiActionsExamples": "examples/ui_action_examples",
"share": "src/plugins/share",
"home": "src/plugins/home",
- "flot": "packages/kbn-ui-shared-deps/src/flot_charts",
+ "flot": "packages/kbn-ui-shared-deps-src/src/flot_charts",
"charts": "src/plugins/charts",
"esUi": "src/plugins/es_ui_shared",
"devTools": "src/plugins/dev_tools",
diff --git a/Gruntfile.js b/Gruntfile.js
deleted file mode 100644
index 57815ba727b05..0000000000000
--- a/Gruntfile.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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 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 or the Server
- * Side Public License, v 1.
- */
-
-require('./src/setup_node_env');
-
-module.exports = function (grunt) {
- // set the config once before calling load-grunt-config
- // and once during so that we have access to it via
- // grunt.config.get() within the config files
- const config = {
- root: __dirname,
- };
-
- grunt.config.merge(config);
-
- // load plugins
- require('load-grunt-config')(grunt, {
- configPath: __dirname + '/tasks/config',
- init: true,
- config: config,
- loadGruntTasks: {
- pattern: ['grunt-*', '@*/grunt-*', 'gruntify-*', '@*/gruntify-*'],
- },
- });
-
- // load task definitions
- grunt.task.loadTasks('tasks');
-};
diff --git a/dev_docs/contributing/how_we_use_github.mdx b/dev_docs/contributing/how_we_use_github.mdx
new file mode 100644
index 0000000000000..f18bcbcf556f5
--- /dev/null
+++ b/dev_docs/contributing/how_we_use_github.mdx
@@ -0,0 +1,155 @@
+---
+id: kibGitHub
+slug: /kibana-dev-docs/github
+title: How we use Github
+summary: Forking, branching, committing and using labels in the Kibana GitHub repo
+date: 2021-09-16
+tags: ['contributor', 'dev', 'github', 'getting started', 'onboarding', 'kibana']
+---
+
+## Forking
+
+We follow the [GitHub forking model](https://help.github.com/articles/fork-a-repo/) for collaborating on Kibana code. This model assumes that you have a remote called upstream which points to the official Kibana repo, which we’ll refer to in later code snippets.
+
+## Branching
+
+At Elastic, all products in the stack, including Kibana, are released at the same time with the same version number. Most of these projects have the following branching strategy:
+
+- master is the next major version.
+- `.x` is the next minor version.
+- `.` is the next release of a minor version, including patch releases.
+
+As an example, let’s assume that the 7.x branch is currently a not-yet-released 7.6.0. Once 7.6.0 has reached feature freeze, it will be branched to 7.6 and 7.x will be updated to reflect 7.7.0. The release of 7.6.0 and subsequent patch releases will be cut from the 7.6 branch. At any time, you can verify the current version of a branch by inspecting the version attribute in the package.json file within the Kibana source.
+
+Pull requests are made into the master branch and then backported when it is safe and appropriate.
+
+- Breaking changes do not get backported and only go into master.
+- All non-breaking changes can be backported to the `.x` branch.
+- Features should not be backported to a `.` branch.
+- Bug fixes can be backported to a `.` branch if the changes are safe and appropriate. Safety is a judgment call you make based on factors like the bug’s severity, test coverage, confidence in the changes, etc. Your reasoning should be included in the pull request description.
+- Documentation changes can be backported to any branch at any time.
+
+## Commits and Merging
+
+- Feel free to make as many commits as you want, while working on a branch.
+- When submitting a PR for review, please perform an interactive rebase to present a logical history that’s easy for the reviewers to follow.
+- Please use your commit messages to include helpful information on your changes, e.g. changes to APIs, UX changes, bugs fixed, and an explanation of why you made the changes that you did.
+- Resolve merge conflicts by rebasing the target branch over your feature branch, and force-pushing (see below for instructions).
+- When merging, we’ll squash your commits into a single commit.
+
+### Rebasing and fixing merge conflicts
+
+Rebasing can be tricky, and fixing merge conflicts can be even trickier because it involves force pushing. This is all compounded by the fact that attempting to push a rebased branch remotely will be rejected by git, and you’ll be prompted to do a pull, which is not at all what you should do (this will really mess up your branch’s history).
+
+Here’s how you should rebase master onto your branch, and how to fix merge conflicts when they arise.
+
+First, make sure master is up-to-date.
+
+```bash
+git checkout master
+git fetch upstream
+git rebase upstream/master
+```
+
+Then, check out your branch and rebase master on top of it, which will apply all of the new commits on master to your branch, and then apply all of your branch’s new commits after that.
+
+```bash
+git checkout name-of-your-branch
+git rebase master
+```
+
+You want to make sure there are no merge conflicts. If there are merge conflicts, git will pause the rebase and allow you to fix the conflicts before continuing.
+
+You can use git status to see which files contain conflicts. They’ll be the ones that aren’t staged for commit. Open those files, and look for where git has marked the conflicts. Resolve the conflicts so that the changes you want to make to the code have been incorporated in a way that doesn’t destroy work that’s been done in master. Refer to master’s commit history on GitHub if you need to gain a better understanding of how code is conflicting and how best to resolve it.
+
+Once you’ve resolved all of the merge conflicts, use git add -A to stage them to be committed, and then use git rebase --continue to tell git to continue the rebase.
+
+When the rebase has completed, you will need to force push your branch because the history is now completely different than what’s on the remote. This is potentially dangerous because it will completely overwrite what you have on the remote, so you need to be sure that you haven’t lost any work when resolving merge conflicts. (If there weren’t any merge conflicts, then you can force push without having to worry about this.)
+
+```bash
+git push origin name-of-your-branch --force
+```
+
+This will overwrite the remote branch with what you have locally. You’re done!
+
+**Note that you should not run git pull**, for example in response to a push rejection like this:
+
+```bash
+! [rejected] name-of-your-branch -> name-of-your-branch (non-fast-forward)
+error: failed to push some refs to 'https://github.com/YourGitHubHandle/kibana.git'
+hint: Updates were rejected because the tip of your current branch is behind
+hint: its remote counterpart. Integrate the remote changes (e.g.
+hint: 'git pull ...') before pushing again.
+hint: See the 'Note about fast-forwards' in 'git push --help' for details.
+```
+
+Assuming you’ve successfully rebased and you’re happy with the code, you should force push instead.
+
+## Creating a pull request
+
+See [Submitting a pull request](https://www.elastic.co/guide/en/kibana/master/development-pull-request.html) for the next steps on getting your code changes merged into Kibana.
+
+## Labels
+
+The following information notes how we use GitHub labels in Kibana. Note that only internal Elasticians are able to create and assign labels to issues, but for searching purposes, the information is likely useful for external developers as well.
+
+Many of our labels follow the pattern of `{key}:{value}`.
+
+
+Use PascalCase when creating new labels.
+
+Teams can create labels at their own discretion, but we have over 600 labels at the time of this writing.
+Consider using an existing convention before creating a new one. If you think a new label or convention
+would be useful to all teams, talk to your team or tech lead about getting it added here.
+
+
+
+### Team labels
+
+Examples: `Team:Security`, `Team:Operations`.
+
+These labels map the issue to the team that owns the particular area. Part of the responsibilities of
+(todo) is to ensure every issue has at least a team or a project
+label.
+
+
+ View our org chart [here](https://wiki.elastic.co/display/DEV/Kibana+Team+Organization) to view
+ all our teams and appropriate contacts.
+
+
+### Feature labels
+
+Examples: `Feature:Lens`, `Feature:TSVB`, `Feature:Vega`.
+
+Feature labels break down architectural domains that are owned by a given team.
+
+### Project labels
+
+Examples: `Project:RuntimeFields`, `Project:MakeItSlow`.
+
+Sometimes issues span multiple teams, that is often when Project labels are more appropriate. To avoid too much noise,
+these should be used for high visibility projects. Try not to use project labels for small, single team projects, where a team
+and feature label would be applicable. Use your best judgement when determining whether to add a new project label.
+
+### Needed For labels (`NeededFor:{Team}`)
+
+Examples: `NeededFor:APM`, `NeededFor:AppServices`.
+
+We use these labels to help us organize internal dependencies. An issue with the labels
+`NeededFor:APM` and `Team:AppServices` means APM has a dependency on the App services team. The owning team
+can filter on these labels during roadmap prioritization, and the dependent team can use these labels to
+search and view the status of its dependencies. To avoid noise, use these labels for high priority requests that
+need to be taken into account in roadmap planning. A low priority item that can be prioritized along with
+other community requests does not need this label, as part of its usefulness is helping teams wade through the noise
+of external feature requests.
+
+### Version labels
+
+Examples: `v7.9.2`, `v8.0`
+
+We use version labels on PRs to indicate which versions a PR will be merged into. For issues,
+teams use these labels inconsistently. On a bug, it might mean the version the bug was found in, or
+it might mean the version the team is tentatively planning to merge a fix.
+
+Consult the owning team if you have a question about how a version label is meant
+to be used on an issue.
diff --git a/dev_docs/key_concepts/performance.mdx b/dev_docs/key_concepts/performance.mdx
index f7b71b0258914..2870262825e4a 100644
--- a/dev_docs/key_concepts/performance.mdx
+++ b/dev_docs/key_concepts/performance.mdx
@@ -66,9 +66,10 @@ longer necessary for us to include the `optimizer` in the
distributable version of Kibana Every plugin artifact contains all
plugin dependencies required to run the plugin, except some
stateful dependencies shared across plugin bundles via
-`@kbn/ui-shared-deps`. This means that plugin artifacts _tend to
-be larger_ than they were in the legacy platform. To understand the
-current size of your plugin artifact, run `@kbn/optimizer` with:
+`@kbn/ui-shared-deps-npm` and `@kbn/ui-shared-deps-src`. This means
+that plugin artifacts _tend to be larger_ than they were in the
+legacy platform. To understand the current size of your plugin
+artifact, run `@kbn/optimizer` with:
```bash
node scripts/build_kibana_platform_plugins.js --dist --profile --focus=my_plugin
diff --git a/docs/CHANGELOG.asciidoc b/docs/CHANGELOG.asciidoc
index 3b783f795558d..6ac546b1e615b 100644
--- a/docs/CHANGELOG.asciidoc
+++ b/docs/CHANGELOG.asciidoc
@@ -18,8 +18,6 @@ Review important information about the {kib} 8.0.0 releases.
[[release-notes-8.0.0-alpha2]]
== {kib} 8.0.0-alpha2
-coming::[8.0.0-alpha2]
-
Review the {kib} 8.0.0-alpha2 changes, then use the <> to complete the upgrade.
[float]
diff --git a/docs/api/saved-objects.asciidoc b/docs/api/saved-objects.asciidoc
index ba4e5a7e656fc..0625beb793c31 100644
--- a/docs/api/saved-objects.asciidoc
+++ b/docs/api/saved-objects.asciidoc
@@ -16,6 +16,8 @@ The following saved objects APIs are available:
* <> to retrieve multiple {kib} saved objects by ID
+* <> to retrieve multiple {kib} saved objects by ID, using any legacy URL aliases if they exist
+
* <> to retrieve a paginated set of {kib} saved objects by various conditions
* <> to create {kib} saved objects
@@ -45,4 +47,5 @@ include::saved-objects/export.asciidoc[]
include::saved-objects/import.asciidoc[]
include::saved-objects/resolve_import_errors.asciidoc[]
include::saved-objects/resolve.asciidoc[]
+include::saved-objects/bulk_resolve.asciidoc[]
include::saved-objects/rotate_encryption_key.asciidoc[]
diff --git a/docs/api/saved-objects/bulk_resolve.asciidoc b/docs/api/saved-objects/bulk_resolve.asciidoc
new file mode 100644
index 0000000000000..98077ff11aa8c
--- /dev/null
+++ b/docs/api/saved-objects/bulk_resolve.asciidoc
@@ -0,0 +1,176 @@
+[[saved-objects-api-bulk-resolve]]
+=== Bulk resolve objects API
+++++
+Bulk resolve objects
+++++
+
+experimental[] Retrieve multiple {kib} saved objects by ID, using any legacy URL aliases if they exist.
+
+Under certain circumstances, when Kibana is upgraded, saved object migrations may necessitate regenerating some object IDs to enable new
+features. When an object's ID is regenerated, a legacy URL alias is created for that object, preserving its old ID. In such a scenario, that
+object can be retrieved via the Bulk Resolve API using either its new ID or its old ID.
+
+[[saved-objects-api-bulk-resolve-request]]
+==== Request
+
+`POST :/api/saved_objects/_bulk_resolve`
+
+`POST :/s//api/saved_objects/_bulk_resolve`
+
+[[saved-objects-api-bulk-resolve-path-params]]
+==== Path parameters
+
+`space_id`::
+ (Optional, string) An identifier for the space. If `space_id` is not provided in the URL, the default space is used.
+
+[[saved-objects-api-bulk-resolve-request-body]]
+==== Request Body
+
+`type`::
+ (Required, string) Valid options include `visualization`, `dashboard`, `search`, `index-pattern`, `config`.
+
+`id`::
+ (Required, string) ID of the retrieved object. The ID includes the {kib} unique identifier or a custom identifier.
+
+[[saved-objects-api-bulk-resolve-response-body]]
+==== Response body
+
+`resolved_objects`::
+ (array) Top-level property containing objects that represent the response for each of the requested objects. The order of the objects in the response is identical to the order of the objects in the request.
+
+Saved objects that {kib} fails to find are replaced with an error object and an "exactMatch" outcome. The rationale behind the outcome is
+that "exactMatch" is the default outcome, and the outcome only changes if an alias is found. This behavior is unique to `_bulk_resolve`; the
+<> will return only an HTTP error instead.
+
+[[saved-objects-api-bulk-resolve-body-codes]]
+==== Response code
+
+`200`::
+ Indicates a successful call.
+
+[[saved-objects-api-bulk-resolve-body-example]]
+==== Example
+
+Retrieve an index pattern with the `my-pattern` ID, and a dashboard with the `my-dashboard` ID:
+
+[source,sh]
+--------------------------------------------------
+$ curl -X POST api/saved_objects/_bulk_resolve
+[
+ {
+ "type": "index-pattern",
+ "id": "my-pattern"
+ },
+ {
+ "type": "dashboard",
+ "id": "be3733a0-9efe-11e7-acb3-3dab96693fab"
+ }
+]
+--------------------------------------------------
+// KIBANA
+
+The API returns the following:
+
+[source,sh]
+--------------------------------------------------
+{
+ "resolved_objects": [
+ {
+ "saved_object": {
+ "id": "my-pattern",
+ "type": "index-pattern",
+ "version": 1,
+ "attributes": {
+ "title": "my-pattern-*"
+ }
+ },
+ "outcome": "exactMatch"
+ },
+ {
+ "saved_object": {
+ "id": "my-dashboard",
+ "type": "dashboard",
+ "error": {
+ "statusCode": 404,
+ "message": "Not found"
+ }
+ },
+ "outcome": "exactMatch"
+ }
+ ]
+}
+--------------------------------------------------
+
+Only the index pattern exists, the dashboard was not found.
+
+The `outcome` field may be any of the following:
+
+* `"exactMatch"` -- One document exactly matched the given ID, *or* {kib} failed to find this object.
+* `"aliasMatch"` -- One document with a legacy URL alias matched the given ID; in this case the `saved_object.id` field is different than the given ID.
+* `"conflict"` -- Two documents matched the given ID, one was an exact match and another with a legacy URL alias; in this case the `saved_object` object is the exact match, and the `saved_object.id` field is the same as the given ID.
+
+If the outcome is `"aliasMatch"` or `"conflict"`, the response will also include an `alias_target_id` field. This means that an alias was found for another object, and it describes that other object's ID.
+
+Retrieve a dashboard object in the `testspace` by ID:
+
+[source,sh]
+--------------------------------------------------
+$ curl -X GET s/testspace/api/saved_objects/resolve/dashboard/7adfa750-4c81-11e8-b3d7-01146121b73d
+--------------------------------------------------
+// KIBANA
+
+The API returns the following:
+
+[source,sh]
+--------------------------------------------------
+{
+ "resolved_objects": [
+ {
+ "saved_object": {
+ "id": "7adfa750-4c81-11e8-b3d7-01146121b73d",
+ "type": "dashboard",
+ "updated_at": "2019-07-23T00:11:07.059Z",
+ "version": "WzQ0LDFd",
+ "attributes": {
+ "title": "[Flights] Global Flight Dashboard",
+ "hits": 0,
+ "description": "Analyze mock flight data for ES-Air, Logstash Airways, Kibana Airlines and JetBeats",
+ "panelsJSON": "[ . . . ]",
+ "optionsJSON": "{\"hidePanelTitles\":false,\"useMargins\":true}",
+ "version": 1,
+ "timeRestore": true,
+ "timeTo": "now",
+ "timeFrom": "now-24h",
+ "refreshInterval": {
+ "display": "15 minutes",
+ "pause": false,
+ "section": 2,
+ "value": 900000
+ },
+ "kibanaSavedObjectMeta": {
+ "searchSourceJSON": "{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[],\"highlightAll\":true,\"version\":true}"
+ }
+ },
+ "references": [
+ {
+ "name": "panel_0",
+ "type": "visualization",
+ "id": "aeb212e0-4c84-11e8-b3d7-01146121b73d"
+ },
+ . . .
+ {
+ "name": "panel_18",
+ "type": "visualization",
+ "id": "ed78a660-53a0-11e8-acbd-0be0ad9d822b"
+ }
+ ],
+ "migrationVersion": {
+ "dashboard": "7.0.0"
+ }
+ },
+ "outcome": "conflict",
+ "alias_target_id": "05becb88-e214-439a-a2ac-15fc783b5d01"
+ }
+ ]
+}
+--------------------------------------------------
diff --git a/docs/developer/advanced/sharing-saved-objects.asciidoc b/docs/developer/advanced/sharing-saved-objects.asciidoc
index 19c1b80657281..06019735188aa 100644
--- a/docs/developer/advanced/sharing-saved-objects.asciidoc
+++ b/docs/developer/advanced/sharing-saved-objects.asciidoc
@@ -412,7 +412,7 @@ deprecate and remove them.
[[sharing-saved-objects-faq-resolve-outcomes]]
==== 5. Why are there three different resolve outcomes?
-The `resolve()` function first checks if an object with the given ID exists, and then it checks if an object has an alias with the given ID.
+The `resolve()` function checks both if an object with the given ID exists, _and_ if an object has an alias with the given ID.
1. If only the former is true, the outcome is an `'exactMatch'` -- we found the exact object we were looking for.
2. If only the latter is true, the outcome is an `'aliasMatch'` -- we found an alias with this ID, that pointed us to an object with a
diff --git a/docs/developer/best-practices/performance.asciidoc b/docs/developer/best-practices/performance.asciidoc
index 70f27005db372..5d7bee2d58e6e 100644
--- a/docs/developer/best-practices/performance.asciidoc
+++ b/docs/developer/best-practices/performance.asciidoc
@@ -59,9 +59,10 @@ longer necessary for us to include the `optimizer` in the
distributable version of {kib}. Every plugin artifact contains all
plugin dependencies required to run the plugin, except some
stateful dependencies shared across plugin bundles via
-`@kbn/ui-shared-deps`. This means that plugin artifacts _tend to
-be larger_ than they were in the legacy platform. To understand the
-current size of your plugin artifact, run `@kbn/optimizer` with:
+`@kbn/ui-shared-deps-npm` and `@kbn/ui-shared-deps-src`. This means
+that plugin artifacts _tend to be larger_ than they were in the
+legacy platform. To understand the current size of your plugin
+artifact, run `@kbn/optimizer` with:
[source,bash]
----
diff --git a/docs/developer/getting-started/monorepo-packages.asciidoc b/docs/developer/getting-started/monorepo-packages.asciidoc
index 66e342d84b619..b42bc980c8758 100644
--- a/docs/developer/getting-started/monorepo-packages.asciidoc
+++ b/docs/developer/getting-started/monorepo-packages.asciidoc
@@ -103,6 +103,7 @@ yarn kbn watch
- @kbn/test-subj-selector
- @kbn/tinymath
- @kbn/ui-framework
-- @kbn/ui-shared-deps
+- @kbn/ui-shared-deps-npm
+- @kbn/ui-shared-deps-src
- @kbn/utility-types
- @kbn/utils
diff --git a/docs/development/core/public/kibana-plugin-core-public.md b/docs/development/core/public/kibana-plugin-core-public.md
index 59735b053adbc..08c3c376df4e8 100644
--- a/docs/development/core/public/kibana-plugin-core-public.md
+++ b/docs/development/core/public/kibana-plugin-core-public.md
@@ -107,6 +107,8 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [SavedObjectsBatchResponse](./kibana-plugin-core-public.savedobjectsbatchresponse.md) | |
| [SavedObjectsBulkCreateObject](./kibana-plugin-core-public.savedobjectsbulkcreateobject.md) | |
| [SavedObjectsBulkCreateOptions](./kibana-plugin-core-public.savedobjectsbulkcreateoptions.md) | |
+| [SavedObjectsBulkResolveObject](./kibana-plugin-core-public.savedobjectsbulkresolveobject.md) | |
+| [SavedObjectsBulkResolveResponse](./kibana-plugin-core-public.savedobjectsbulkresolveresponse.md) | |
| [SavedObjectsBulkUpdateObject](./kibana-plugin-core-public.savedobjectsbulkupdateobject.md) | |
| [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-public.savedobjectsbulkupdateoptions.md) | |
| [SavedObjectsCollectMultiNamespaceReferencesResponse](./kibana-plugin-core-public.savedobjectscollectmultinamespacereferencesresponse.md) | The response when object references are collected. |
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md
new file mode 100644
index 0000000000000..6a8fd52a4dc49
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkResolveObject](./kibana-plugin-core-public.savedobjectsbulkresolveobject.md) > [id](./kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md)
+
+## SavedObjectsBulkResolveObject.id property
+
+Signature:
+
+```typescript
+id: string;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.md
new file mode 100644
index 0000000000000..8ca5da9d7db4f
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkResolveObject](./kibana-plugin-core-public.savedobjectsbulkresolveobject.md)
+
+## SavedObjectsBulkResolveObject interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsBulkResolveObject
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [id](./kibana-plugin-core-public.savedobjectsbulkresolveobject.id.md) | string | |
+| [type](./kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md) | string | |
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md
new file mode 100644
index 0000000000000..09c7991012da8
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkResolveObject](./kibana-plugin-core-public.savedobjectsbulkresolveobject.md) > [type](./kibana-plugin-core-public.savedobjectsbulkresolveobject.type.md)
+
+## SavedObjectsBulkResolveObject.type property
+
+Signature:
+
+```typescript
+type: string;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.md
new file mode 100644
index 0000000000000..36a92d02b8aaa
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkResolveResponse](./kibana-plugin-core-public.savedobjectsbulkresolveresponse.md)
+
+## SavedObjectsBulkResolveResponse interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsBulkResolveResponse
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [resolved\_objects](./kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md) | Array<SavedObjectsResolveResponse<T>> | |
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md
new file mode 100644
index 0000000000000..3597a771efe08
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsBulkResolveResponse](./kibana-plugin-core-public.savedobjectsbulkresolveresponse.md) > [resolved\_objects](./kibana-plugin-core-public.savedobjectsbulkresolveresponse.resolved_objects.md)
+
+## SavedObjectsBulkResolveResponse.resolved\_objects property
+
+Signature:
+
+```typescript
+resolved_objects: Array>;
+```
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.bulkresolve.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.bulkresolve.md
new file mode 100644
index 0000000000000..8a03f0e38e0d9
--- /dev/null
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.bulkresolve.md
@@ -0,0 +1,25 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-public](./kibana-plugin-core-public.md) > [SavedObjectsClient](./kibana-plugin-core-public.savedobjectsclient.md) > [bulkResolve](./kibana-plugin-core-public.savedobjectsclient.bulkresolve.md)
+
+## SavedObjectsClient.bulkResolve property
+
+Resolves an array of objects by id, using any legacy URL aliases if they exist
+
+Signature:
+
+```typescript
+bulkResolve: (objects?: Array<{
+ id: string;
+ type: string;
+ }>) => Promise<{
+ resolved_objects: ResolvedSimpleSavedObject[];
+ }>;
+```
+
+## Example
+
+bulkResolve(\[ { id: 'one', type: 'config' }, { id: 'foo', type: 'index-pattern' } \])
+
+ Saved objects that Kibana fails to find are replaced with an error object and an "exactMatch" outcome. The rationale behind the outcome is that "exactMatch" is the default outcome, and the outcome only changes if an alias is found. The `resolve` method in the public client uses `bulkResolve` under the hood, so it behaves the same way.
+
diff --git a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.md b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.md
index aacda031003c6..1a630ebe8c9ae 100644
--- a/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.md
+++ b/docs/development/core/public/kibana-plugin-core-public.savedobjectsclient.md
@@ -22,6 +22,7 @@ The constructor for this class is marked as internal. Third-party code should no
| --- | --- | --- | --- |
| [bulkCreate](./kibana-plugin-core-public.savedobjectsclient.bulkcreate.md) | | (objects?: SavedObjectsBulkCreateObject[], options?: SavedObjectsBulkCreateOptions) => Promise<SavedObjectsBatchResponse<unknown>> | Creates multiple documents at once |
| [bulkGet](./kibana-plugin-core-public.savedobjectsclient.bulkget.md) | | (objects?: Array<{ id: string; type: string; }>) => Promise<SavedObjectsBatchResponse<unknown>> | Returns an array of objects by id |
+| [bulkResolve](./kibana-plugin-core-public.savedobjectsclient.bulkresolve.md) | | <T = unknown>(objects?: Array<{ id: string; type: string; }>) => Promise<{ resolved_objects: ResolvedSimpleSavedObject<T>[]; }> | Resolves an array of objects by id, using any legacy URL aliases if they exist |
| [create](./kibana-plugin-core-public.savedobjectsclient.create.md) | | <T = unknown>(type: string, attributes: T, options?: SavedObjectsCreateOptions) => Promise<SimpleSavedObject<T>> | Persists an object |
| [delete](./kibana-plugin-core-public.savedobjectsclient.delete.md) | | (type: string, id: string, options?: SavedObjectsDeleteOptions | undefined) => ReturnType<SavedObjectsApi['delete']> | Deletes an object |
| [find](./kibana-plugin-core-public.savedobjectsclient.find.md) | | <T = unknown, A = unknown>(options: SavedObjectsFindOptions) => Promise<SavedObjectsFindResponsePublic<T, unknown>> | Search for objects |
diff --git a/docs/development/core/server/kibana-plugin-core-server.md b/docs/development/core/server/kibana-plugin-core-server.md
index 66c0299669dc4..89203cb94d573 100644
--- a/docs/development/core/server/kibana-plugin-core-server.md
+++ b/docs/development/core/server/kibana-plugin-core-server.md
@@ -146,6 +146,8 @@ The plugin integrates with the core system via lifecycle events: `setup`
| [SavedObjectsBaseOptions](./kibana-plugin-core-server.savedobjectsbaseoptions.md) | |
| [SavedObjectsBulkCreateObject](./kibana-plugin-core-server.savedobjectsbulkcreateobject.md) | |
| [SavedObjectsBulkGetObject](./kibana-plugin-core-server.savedobjectsbulkgetobject.md) | |
+| [SavedObjectsBulkResolveObject](./kibana-plugin-core-server.savedobjectsbulkresolveobject.md) | |
+| [SavedObjectsBulkResolveResponse](./kibana-plugin-core-server.savedobjectsbulkresolveresponse.md) | |
| [SavedObjectsBulkResponse](./kibana-plugin-core-server.savedobjectsbulkresponse.md) | |
| [SavedObjectsBulkUpdateObject](./kibana-plugin-core-server.savedobjectsbulkupdateobject.md) | |
| [SavedObjectsBulkUpdateOptions](./kibana-plugin-core-server.savedobjectsbulkupdateoptions.md) | |
diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md
index 1572c1ae3131e..4774215cef071 100644
--- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md
+++ b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.md
@@ -19,7 +19,7 @@ export interface OpsMetrics
| [collected\_at](./kibana-plugin-core-server.opsmetrics.collected_at.md) | Date | Time metrics were recorded at. |
| [concurrent\_connections](./kibana-plugin-core-server.opsmetrics.concurrent_connections.md) | OpsServerMetrics['concurrent_connections'] | number of current concurrent connections to the server |
| [os](./kibana-plugin-core-server.opsmetrics.os.md) | OpsOsMetrics | OS related metrics |
-| [process](./kibana-plugin-core-server.opsmetrics.process.md) | OpsProcessMetrics | Process related metrics. Deprecated in favor of processes field. |
+| [process](./kibana-plugin-core-server.opsmetrics.process.md) | OpsProcessMetrics | Process related metrics. |
| [processes](./kibana-plugin-core-server.opsmetrics.processes.md) | OpsProcessMetrics[] | Process related metrics. Reports an array of objects for each kibana pid. |
| [requests](./kibana-plugin-core-server.opsmetrics.requests.md) | OpsServerMetrics['requests'] | server requests stats |
| [response\_times](./kibana-plugin-core-server.opsmetrics.response_times.md) | OpsServerMetrics['response_times'] | server response time stats |
diff --git a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.process.md b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.process.md
index 9da2c0644dc84..6e686f189aeea 100644
--- a/docs/development/core/server/kibana-plugin-core-server.opsmetrics.process.md
+++ b/docs/development/core/server/kibana-plugin-core-server.opsmetrics.process.md
@@ -6,9 +6,10 @@
> Warning: This API is now obsolete.
>
+> use the processes field instead.
>
-Process related metrics. Deprecated in favor of processes field.
+Process related metrics.
Signature:
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md
new file mode 100644
index 0000000000000..135848191cff7
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResolveObject](./kibana-plugin-core-server.savedobjectsbulkresolveobject.md) > [id](./kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md)
+
+## SavedObjectsBulkResolveObject.id property
+
+Signature:
+
+```typescript
+id: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.md
new file mode 100644
index 0000000000000..3960511b21434
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.md
@@ -0,0 +1,20 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResolveObject](./kibana-plugin-core-server.savedobjectsbulkresolveobject.md)
+
+## SavedObjectsBulkResolveObject interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsBulkResolveObject
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [id](./kibana-plugin-core-server.savedobjectsbulkresolveobject.id.md) | string | |
+| [type](./kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md) | string | |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md
new file mode 100644
index 0000000000000..790edde7fe079
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResolveObject](./kibana-plugin-core-server.savedobjectsbulkresolveobject.md) > [type](./kibana-plugin-core-server.savedobjectsbulkresolveobject.type.md)
+
+## SavedObjectsBulkResolveObject.type property
+
+Signature:
+
+```typescript
+type: string;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.md
new file mode 100644
index 0000000000000..8384ecc1861f4
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.md
@@ -0,0 +1,19 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResolveResponse](./kibana-plugin-core-server.savedobjectsbulkresolveresponse.md)
+
+## SavedObjectsBulkResolveResponse interface
+
+
+Signature:
+
+```typescript
+export interface SavedObjectsBulkResolveResponse
+```
+
+## Properties
+
+| Property | Type | Description |
+| --- | --- | --- |
+| [resolved\_objects](./kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md) | Array<SavedObjectsResolveResponse<T>> | |
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md
new file mode 100644
index 0000000000000..4d11b146fd848
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md
@@ -0,0 +1,11 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsBulkResolveResponse](./kibana-plugin-core-server.savedobjectsbulkresolveresponse.md) > [resolved\_objects](./kibana-plugin-core-server.savedobjectsbulkresolveresponse.resolved_objects.md)
+
+## SavedObjectsBulkResolveResponse.resolved\_objects property
+
+Signature:
+
+```typescript
+resolved_objects: Array>;
+```
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkresolve.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkresolve.md
new file mode 100644
index 0000000000000..0525b361ebecf
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.bulkresolve.md
@@ -0,0 +1,31 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsClient](./kibana-plugin-core-server.savedobjectsclient.md) > [bulkResolve](./kibana-plugin-core-server.savedobjectsclient.bulkresolve.md)
+
+## SavedObjectsClient.bulkResolve() method
+
+Resolves an array of objects by id, using any legacy URL aliases if they exist
+
+Signature:
+
+```typescript
+bulkResolve(objects: SavedObjectsBulkResolveObject[], options?: SavedObjectsBaseOptions): Promise>;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| objects | SavedObjectsBulkResolveObject[] | an array of objects containing id, type |
+| options | SavedObjectsBaseOptions | |
+
+Returns:
+
+`Promise>`
+
+## Example
+
+bulkResolve(\[ { id: 'one', type: 'config' }, { id: 'foo', type: 'index-pattern' } \])
+
+ Saved objects that Kibana fails to find are replaced with an error object and an "exactMatch" outcome. The rationale behind the outcome is that "exactMatch" is the default outcome, and the outcome only changes if an alias is found. This behavior is unique to `bulkResolve`; the regular `resolve` API will throw an error instead.
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md
index 2e293889b1794..e92b6d8e151b1 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsclient.md
@@ -27,6 +27,7 @@ The constructor for this class is marked as internal. Third-party code should no
| --- | --- | --- |
| [bulkCreate(objects, options)](./kibana-plugin-core-server.savedobjectsclient.bulkcreate.md) | | Persists multiple documents batched together as a single request |
| [bulkGet(objects, options)](./kibana-plugin-core-server.savedobjectsclient.bulkget.md) | | Returns an array of objects by id |
+| [bulkResolve(objects, options)](./kibana-plugin-core-server.savedobjectsclient.bulkresolve.md) | | Resolves an array of objects by id, using any legacy URL aliases if they exist |
| [bulkUpdate(objects, options)](./kibana-plugin-core-server.savedobjectsclient.bulkupdate.md) | | Bulk Updates multiple SavedObject at once |
| [checkConflicts(objects, options)](./kibana-plugin-core-server.savedobjectsclient.checkconflicts.md) | | Check what conflicts will result when creating a given array of saved objects. This includes "unresolvable conflicts", which are multi-namespace objects that exist in a different namespace; such conflicts cannot be resolved/overwritten. |
| [closePointInTime(id, options)](./kibana-plugin-core-server.savedobjectsclient.closepointintime.md) | | Closes a Point In Time (PIT) by ID. This simply proxies the request to ES via the Elasticsearch client, and is included in the Saved Objects Client as a convenience for consumers who are using [SavedObjectsClient.openPointInTimeForType()](./kibana-plugin-core-server.savedobjectsclient.openpointintimefortype.md).Only use this API if you have an advanced use case that's not solved by the [SavedObjectsClient.createPointInTimeFinder()](./kibana-plugin-core-server.savedobjectsclient.createpointintimefinder.md) method. |
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md
new file mode 100644
index 0000000000000..f489972207a61
--- /dev/null
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md
@@ -0,0 +1,31 @@
+
+
+[Home](./index.md) > [kibana-plugin-core-server](./kibana-plugin-core-server.md) > [SavedObjectsRepository](./kibana-plugin-core-server.savedobjectsrepository.md) > [bulkResolve](./kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md)
+
+## SavedObjectsRepository.bulkResolve() method
+
+Resolves an array of objects by id, using any legacy URL aliases if they exist
+
+Signature:
+
+```typescript
+bulkResolve(objects: SavedObjectsBulkResolveObject[], options?: SavedObjectsBaseOptions): Promise>;
+```
+
+## Parameters
+
+| Parameter | Type | Description |
+| --- | --- | --- |
+| objects | SavedObjectsBulkResolveObject[] | |
+| options | SavedObjectsBaseOptions | |
+
+Returns:
+
+`Promise>`
+
+{promise} - { resolved\_objects: \[{ saved\_object, outcome }\] }
+
+## Example
+
+bulkResolve(\[ { id: 'one', type: 'config' }, { id: 'foo', type: 'index-pattern' } \])
+
diff --git a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
index 191b125ef3f74..b1d65f5f6d3c3 100644
--- a/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
+++ b/docs/development/core/server/kibana-plugin-core-server.savedobjectsrepository.md
@@ -17,6 +17,7 @@ export declare class SavedObjectsRepository
| --- | --- | --- |
| [bulkCreate(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkcreate.md) | | Creates multiple documents at once |
| [bulkGet(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkget.md) | | Returns an array of objects by id |
+| [bulkResolve(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkresolve.md) | | Resolves an array of objects by id, using any legacy URL aliases if they exist |
| [bulkUpdate(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.bulkupdate.md) | | Updates multiple objects in bulk |
| [checkConflicts(objects, options)](./kibana-plugin-core-server.savedobjectsrepository.checkconflicts.md) | | Check what conflicts will result when creating a given array of saved objects. This includes "unresolvable conflicts", which are multi-namespace objects that exist in a different namespace; such conflicts cannot be resolved/overwritten. |
| [closePointInTime(id, options)](./kibana-plugin-core-server.savedobjectsrepository.closepointintime.md) | | Closes a Point In Time (PIT) by ID. This simply proxies the request to ES via the Elasticsearch client, and is included in the Saved Objects Client as a convenience for consumers who are using openPointInTimeForType.Only use this API if you have an advanced use case that's not solved by the [SavedObjectsRepository.createPointInTimeFinder()](./kibana-plugin-core-server.savedobjectsrepository.createpointintimefinder.md) method. |
diff --git a/docs/getting-started/images/add-sample-data.png b/docs/getting-started/images/add-sample-data.png
deleted file mode 100644
index 07a536b19d7d0..0000000000000
Binary files a/docs/getting-started/images/add-sample-data.png and /dev/null differ
diff --git a/docs/getting-started/images/addData_sampleDataCards_7.15.0.png b/docs/getting-started/images/addData_sampleDataCards_7.15.0.png
new file mode 100644
index 0000000000000..27e10b98b9670
Binary files /dev/null and b/docs/getting-started/images/addData_sampleDataCards_7.15.0.png differ
diff --git a/docs/getting-started/images/dashboard_ecommerceRevenueDashboard_7.15.0.png b/docs/getting-started/images/dashboard_ecommerceRevenueDashboard_7.15.0.png
new file mode 100644
index 0000000000000..5b62832b1d093
Binary files /dev/null and b/docs/getting-started/images/dashboard_ecommerceRevenueDashboard_7.15.0.png differ
diff --git a/docs/getting-started/images/dashboard_sampleDataAddFilter_7.15.0.png b/docs/getting-started/images/dashboard_sampleDataAddFilter_7.15.0.png
new file mode 100644
index 0000000000000..804fd83de57be
Binary files /dev/null and b/docs/getting-started/images/dashboard_sampleDataAddFilter_7.15.0.png differ
diff --git a/docs/getting-started/images/dashboard_sampleDataFilter_7.15.0.png b/docs/getting-started/images/dashboard_sampleDataFilter_7.15.0.png
new file mode 100644
index 0000000000000..f1f46ab42371a
Binary files /dev/null and b/docs/getting-started/images/dashboard_sampleDataFilter_7.15.0.png differ
diff --git a/docs/getting-started/images/tutorial-sample-dashboard.png b/docs/getting-started/images/tutorial-sample-dashboard.png
deleted file mode 100644
index 5e06009d0824e..0000000000000
Binary files a/docs/getting-started/images/tutorial-sample-dashboard.png and /dev/null differ
diff --git a/docs/getting-started/images/tutorial-sample-filter.png b/docs/getting-started/images/tutorial-sample-filter.png
deleted file mode 100644
index 8823da311ebb5..0000000000000
Binary files a/docs/getting-started/images/tutorial-sample-filter.png and /dev/null differ
diff --git a/docs/getting-started/quick-start-guide.asciidoc b/docs/getting-started/quick-start-guide.asciidoc
index ed249008ac8de..d614aece5b425 100644
--- a/docs/getting-started/quick-start-guide.asciidoc
+++ b/docs/getting-started/quick-start-guide.asciidoc
@@ -31,7 +31,7 @@ Sample data sets come with sample visualizations, dashboards, and more to help y
. On the *Sample eCommerce orders* card, click *Add data*.
+
[role="screenshot"]
-image::images/add-sample-data.png[Add data UI for the sample data sets]
+image::images/addData_sampleDataCards_7.15.0.png[Add data UI for the sample data sets]
[float]
[[explore-the-data]]
@@ -70,7 +70,7 @@ A dashboard is a collection of panels that you can use to view and analyze the d
. Click *[eCommerce] Revenue Dashboard*.
+
[role="screenshot"]
-image::getting-started/images/tutorial-sample-dashboard.png[The [eCommerce] Revenue Dashboard that comes with the Sample eCommerce order data set]
+image::images/dashboard_ecommerceRevenueDashboard_7.15.0.png[The [eCommerce] Revenue Dashboard that comes with the Sample eCommerce order data set]
[float]
[[create-a-visualization]]
@@ -78,14 +78,16 @@ image::getting-started/images/tutorial-sample-dashboard.png[The [eCommerce] Reve
Create a treemap panel that shows the top sales regions and manufacturers, then add the panel to the dashboard.
-. From the toolbar, click *Edit*, then click *Create visualzation*.
+. In the toolbar, click *Edit*.
-. Open the *Chart type* menu, then select *Treemap*.
+. On the dashboard, click *Create visualization*.
+
+. In the drag-and-drop visualization editor, open the *Visualization type* dropdown, then select *Treemap*.
+
[role="screenshot"]
image::getting-started/images/tutorial-visualization-dropdown.png[Chart type menu with Treemap selected]
-. From the *Available fields* list, drag and drop the following fields onto the workspace:
+. From the *Available fields* list, drag the following fields to the workspace:
* *geoip.city_name*
@@ -97,9 +99,6 @@ image::getting-started/images/tutorial-visualization-treemap.png[Treemap that di
. Click *Save and return*.
+
The treemap appears as the last visualization panel on the dashboard.
-+
-[role="screenshot"]
-image::getting-started/images/tutorial-final-dashboard.gif[Final dashboard with new treemap visualization]
[float]
[[interact-with-the-data]]
@@ -114,7 +113,7 @@ You can interact with the dashboard data using controls that allow you to apply
. Click *Apply changes*.
+
[role="screenshot"]
-image::getting-started/images/tutorial-sample-filter.png[The [eCommerce] Revenue Dashboard that shows only the women's clothing data from the Gnomehouse manufacturer]
+image::images/dashboard_sampleDataFilter_7.15.0.png[The [eCommerce] Revenue Dashboard that shows only the women's clothing data from the Gnomehouse manufacturer]
[float]
[[filter-and-query-the-data]]
@@ -133,7 +132,7 @@ To view a subset of the data, you can apply filters to the dashboard panels. App
. Click *Save*.
+
[role="screenshot"]
-image::getting-started/images/tutorial-sample-filter2.png[The [eCommerce] Revenue Dashboard that shows only the women's clothing data generated on Wednesday from the Gnomehouse manufacturer]
+image::images/dashboard_sampleDataAddFilter_7.15.0.png[The [eCommerce] Revenue Dashboard that shows only the women's clothing data generated on Wednesday from the Gnomehouse manufacturer]
[float]
[[quick-start-whats-next]]
diff --git a/docs/maps/images/timeslider_toggle_icon.png b/docs/maps/images/timeslider_toggle_icon.png
new file mode 100644
index 0000000000000..00b09215782ec
Binary files /dev/null and b/docs/maps/images/timeslider_toggle_icon.png differ
diff --git a/docs/maps/index.asciidoc b/docs/maps/index.asciidoc
index cbc00e965e566..157eb0f044666 100644
--- a/docs/maps/index.asciidoc
+++ b/docs/maps/index.asciidoc
@@ -68,7 +68,7 @@ Customize each layer to highlight meaningful dimensions in your data. For exampl
[float]
=== Focus on only the data that’s important to you
-Search across the layers in your map to focus in on just the data you want. Combine free text search with field-based search using the <>. Set the time filter to restrict layers by time. Draw a polygon on the map or use the shape from features to create spatial filters. Filter individual layers to compares facets.
+Search across the layers in your map to focus on just the data you want. Combine free text search with field-based search using the <>. Set the time filter to restrict layers by time. Draw a polygon on the map or use the shape from features to create spatial filters. Filter individual layers to compares facets.
--
diff --git a/docs/maps/search.asciidoc b/docs/maps/search.asciidoc
index ada7551f3e57d..af6939eb8ae11 100644
--- a/docs/maps/search.asciidoc
+++ b/docs/maps/search.asciidoc
@@ -2,35 +2,72 @@
[[maps-search]]
== Search geographic data
-Search across the layers in your map to focus in on just the data you want.
+Search across the layers in your map to focus on just the data you want. Combine free text search with field-based search using the <>. Set the time filter to restrict layers by time.
-Layers that request data from {es} are narrowed when you submit a <>.
+This image shows an example of global search and global time narrowing results.
+
+[role="screenshot"]
+image::maps/images/global_search_bar.png[global search and global time narrowing results]
+
+Only layers requesting data from {es} are narrowed by global search and global time.
+To add a layer that requests data from {es} to your map, click *Add layer*, then select one of the following:
+
+* Documents
+
+* Choropleth
+
+* Clusters and grid
+
+* Heat map
+
+* Point to point
+
+* Top hits per entity
+
+* Tracks
+
+[float]
+[[maps-narrow-layer-by-global-search]]
+==== Narrow layers by global search
+
+Layers that request data from {es} are narrowed when you submit a <>.
Layers narrowed by semi-structured search and filters contain the filter icon image:maps/images/filter_icon.png[] next to the layer name in the legend.
-Layers that request data from {es} using an <> with a configured time field are narrowed by the <>.
-These layers contain the clock icon image:maps/images/clock_icon.png[clock icon] next to the layer name in the legend. Use the time slider to quickly select time slices within the global time filter range.
-Click previous and next buttons to advance the time slice backward or forward. Click play to animate your spatial temporal data.
+To prevent the global search from applying to a layer, configure the following:
+
+* In *Filtering*, clear the *Apply global search to layer data* checkbox to turn off global search for the layer source.
-You can create a layer that requests data from {es} from the following:
+* In *Term joins*, clear the *Apply global search to join* checkbox to turn off global search for the <>.
-* <> with:
+[float]
+[[maps-narrow-layer-by-global-time]]
+==== Narrow layers by global time
-** Documents
+Layers that request data from {es} using an <> with a configured time field are narrowed by the <>.
+These layers contain the clock icon image:maps/images/clock_icon.png[clock icon] next to the layer name in the legend.
-** Clusters and grid
+Use the time slider to quickly select time slices within the global time range:
-** Point to point
+. Click image:maps/images/timeslider_toggle_icon.png[timeslider icon] to open the time slider.
+. Click previous and next buttons to advance the time slice backward or forward.
+. Click play to animate your spatial temporal data.
-** <>
+To prevent the global time filter from applying to a layer, configure the following:
-** Top hits per entity
+* In *Filtering*, clear the *Apply global time to layer data* checkbox to turn off the global time for the layer source.
-** Tracks
+* In *Term joins*, clear the *Apply global time to join* checkbox to turn off the global time for the <>.
-* <>
+[float]
+[[maps-refresh-layer]]
+==== Refresh layer data
+
+Layers that request data from {es} re-fetch data when <> fires and when you click *Refresh*.
+
+To prevent refreshing layer data, configure the following:
+
+* In *Filtering*, clear the *Apply global refresh to layer data* checkbox to turn off refresh for the layer source.
-[role="screenshot"]
-image::maps/images/global_search_bar.png[]
[role="xpack"]
[[maps-create-filter-from-map]]
@@ -114,13 +151,9 @@ The most common cause for empty layers are searches for a field that exists in o
[float]
[[maps-disable-search-for-layer]]
-==== Disable search for a layer
-
-You can prevent the search bar from applying search context to a layer by configuring the following:
-
-* In *Filtering*, clear the *Apply global filter to layer data* checkbox to turn off the global search context for the layer source.
+==== Disable global search for a layer
-* In *Term joins*, clear the *Apply global filter to join* checkbox to turn off the global search context for the <>.
+One strategy for eliminating unintentional empty layers from a cross index search is to <>.
[float]
[[maps-add-index-search]]
diff --git a/docs/setup/connect-to-elasticsearch.asciidoc b/docs/setup/connect-to-elasticsearch.asciidoc
index 25af236845abe..c7f745648cbe9 100644
--- a/docs/setup/connect-to-elasticsearch.asciidoc
+++ b/docs/setup/connect-to-elasticsearch.asciidoc
@@ -1,21 +1,21 @@
[[connect-to-elasticsearch]]
-== Add data
+== Add your data
++++
Add data
++++
To start working with your data in {kib}, use one of the many ingest options,
available from the home page.
-You can collect data from an app or service
+You can collect data from an app or service,
or upload a file that contains your data. If you're not ready to use your own data,
add a sample data set and give {kib} a test drive.
[role="screenshot"]
-image::images/add-data-home.png[Built-in options for adding data to Kibana: Add data, Add Elastic Agent, Upload a file]
+image::images/addData_home_7.15.0.png[Built-in options for adding data to Kibana: Add data, Add Elastic Agent, Upload a file]
[float]
[[add-data-tutorial-kibana]]
-=== Add data
+=== Add data
Want to ingest logs, metrics, security, or application data?
Install and configure a Beats data shipper or other module to periodically collect the data
@@ -30,17 +30,24 @@ image::images/add-data-tutorials.png[Add Data tutorials]
*Elastic Agent* is the next generation of
data integration modules, offering
a centralized way to set up your integrations.
+
With *Fleet*, you can add
and manage integrations for popular services and platforms, providing
-an easy way to collect your data. The integrations
+an easy way to collect your data, and manage {elastic-agent} installations in standalone or {fleet} mode. The integrations
ship with dashboards and visualizations,
-so you can quickly get insights into your data.
+so you can quickly get insights into your data, and {fleet} mode offers several advantages:
-To get started, refer to
-{fleet-guide}/fleet-quick-start.html[Quick start: Get logs and metrics into the Elastic Stack].
+* A central place to configure and monitor your {agents}.
+
+* An overview of the data ingest in your {es} cluster.
+
+* Multiple integrations to collect and transform data.
[role="screenshot"]
-image::images/add-data-fleet.png[Add data using Fleet]
+image::images/addData_fleet_7.15.0.png[Add data using Fleet]
+
+To get started, refer to
+{fleet-guide}/fleet-quick-start.html[Quick start: Get logs and metrics into the Elastic Stack].
[discrete]
[[upload-data-kibana]]
diff --git a/docs/setup/images/add-data-fleet.png b/docs/setup/images/add-data-fleet.png
deleted file mode 100644
index 279c2f5436c73..0000000000000
Binary files a/docs/setup/images/add-data-fleet.png and /dev/null differ
diff --git a/docs/setup/images/add-data-home.png b/docs/setup/images/add-data-home.png
deleted file mode 100644
index b346ca190055a..0000000000000
Binary files a/docs/setup/images/add-data-home.png and /dev/null differ
diff --git a/docs/setup/images/addData_fleet_7.15.0.png b/docs/setup/images/addData_fleet_7.15.0.png
new file mode 100644
index 0000000000000..206a079a7f470
Binary files /dev/null and b/docs/setup/images/addData_fleet_7.15.0.png differ
diff --git a/docs/setup/images/addData_home_7.15.0.png b/docs/setup/images/addData_home_7.15.0.png
new file mode 100644
index 0000000000000..36ba6afc27c10
Binary files /dev/null and b/docs/setup/images/addData_home_7.15.0.png differ
diff --git a/docs/user/dashboard/dashboard.asciidoc b/docs/user/dashboard/dashboard.asciidoc
index 1a9a0087becda..a2e0eb6bf92e9 100644
--- a/docs/user/dashboard/dashboard.asciidoc
+++ b/docs/user/dashboard/dashboard.asciidoc
@@ -9,7 +9,7 @@ The best way to understand your data is to visualize it. With dashboards, you ca
that bring clarity to your data, tell a story about your data, and allow you to focus on only the data that's important to you.
[role="screenshot"]
-image:images/Dashboard_example.png[Example dashboard]
+image:images/dashboard_ecommerceRevenueDashboard_7.15.0.png[Example dashboard]
Panels display your data in charts, tables, maps, and more, which allow you to compare your data side-by-side to identify patterns and connections. Dashboards support several types of panels to display your data, and several options to create panels.
diff --git a/docs/user/dashboard/images/Dashboard_example.png b/docs/user/dashboard/images/Dashboard_example.png
deleted file mode 100644
index c2e338d0fd31b..0000000000000
Binary files a/docs/user/dashboard/images/Dashboard_example.png and /dev/null differ
diff --git a/docs/user/dashboard/images/dashboard_ecommerceRevenueDashboard_7.15.0.png b/docs/user/dashboard/images/dashboard_ecommerceRevenueDashboard_7.15.0.png
new file mode 100644
index 0000000000000..5b62832b1d093
Binary files /dev/null and b/docs/user/dashboard/images/dashboard_ecommerceRevenueDashboard_7.15.0.png differ
diff --git a/examples/bfetch_explorer/public/mount.tsx b/examples/bfetch_explorer/public/mount.tsx
index 58ab3a609ad5e..8c15405f2f6be 100644
--- a/examples/bfetch_explorer/public/mount.tsx
+++ b/examples/bfetch_explorer/public/mount.tsx
@@ -20,17 +20,16 @@ export interface BfetchDeps {
explorer: ExplorerService;
}
-export const mount = (
- coreSetup: CoreSetup,
- explorer: ExplorerService
-) => async ({ appBasePath, element }: AppMountParameters) => {
- const [core, plugins] = await coreSetup.getStartServices();
- const deps: BfetchDeps = { appBasePath, core, plugins, explorer };
- const reactElement = (
-
-
-
- );
- render(reactElement, element);
- return () => unmountComponentAtNode(element);
-};
+export const mount =
+ (coreSetup: CoreSetup, explorer: ExplorerService) =>
+ async ({ appBasePath, element }: AppMountParameters) => {
+ const [core, plugins] = await coreSetup.getStartServices();
+ const deps: BfetchDeps = { appBasePath, core, plugins, explorer };
+ const reactElement = (
+
+
+
+ );
+ render(reactElement, element);
+ return () => unmountComponentAtNode(element);
+ };
diff --git a/examples/dashboard_embeddable_examples/public/plugin.tsx b/examples/dashboard_embeddable_examples/public/plugin.tsx
index 57678f5a2a517..5fd3e01f2ca71 100644
--- a/examples/dashboard_embeddable_examples/public/plugin.tsx
+++ b/examples/dashboard_embeddable_examples/public/plugin.tsx
@@ -33,7 +33,8 @@ export class DashboardEmbeddableExamples implements Plugin
- implements ReferenceOrValueEmbeddable {
+ implements ReferenceOrValueEmbeddable
+{
public readonly type = BOOK_EMBEDDABLE;
private subscription: Subscription;
private node?: HTMLElement;
diff --git a/examples/embeddable_examples/public/book/book_embeddable_factory.tsx b/examples/embeddable_examples/public/book/book_embeddable_factory.tsx
index a16c50db8b105..727e0fd18a52d 100644
--- a/examples/embeddable_examples/public/book/book_embeddable_factory.tsx
+++ b/examples/embeddable_examples/public/book/book_embeddable_factory.tsx
@@ -52,7 +52,8 @@ export class BookEmbeddableFactoryDefinition
BookEmbeddableOutput,
BookEmbeddable,
BookSavedObjectAttributes
- > {
+ >
+{
public readonly type = BOOK_EMBEDDABLE;
public savedObjectMetaData = {
name: 'Book',
@@ -116,10 +117,8 @@ export class BookEmbeddableFactoryDefinition
private async unwrapMethod(savedObjectId: string): Promise {
const { savedObjectsClient } = await this.getStartServices();
- const savedObject: SimpleSavedObject = await savedObjectsClient.get(
- this.type,
- savedObjectId
- );
+ const savedObject: SimpleSavedObject =
+ await savedObjectsClient.get(this.type, savedObjectId);
return { ...savedObject.attributes };
}
diff --git a/examples/embeddable_examples/public/list_container/list_container_factory.ts b/examples/embeddable_examples/public/list_container/list_container_factory.ts
index d5b4e6712c6df..7dc85fa476dfa 100644
--- a/examples/embeddable_examples/public/list_container/list_container_factory.ts
+++ b/examples/embeddable_examples/public/list_container/list_container_factory.ts
@@ -22,7 +22,8 @@ interface StartServices {
export type ListContainerFactory = EmbeddableFactory;
export class ListContainerFactoryDefinition
- implements EmbeddableFactoryDefinition {
+ implements EmbeddableFactoryDefinition
+{
public readonly type = LIST_CONTAINER;
public readonly isContainerType = true;
diff --git a/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts b/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts
index 508ed780038c8..c1ceaaca3e466 100644
--- a/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts
+++ b/examples/embeddable_examples/public/migrations/migrations_embeddable_factory.ts
@@ -26,7 +26,8 @@ export type SimpleEmbeddableInput = EmbeddableInput & {
export type SimpleEmbeddableFactory = EmbeddableFactory;
export class SimpleEmbeddableFactoryDefinition
- implements EmbeddableFactoryDefinition {
+ implements EmbeddableFactoryDefinition
+{
public readonly type = SIMPLE_EMBEDDABLE;
// we need to provide migration function every time we change the interface of our state
diff --git a/examples/embeddable_examples/public/multi_task_todo/multi_task_todo_embeddable_factory.ts b/examples/embeddable_examples/public/multi_task_todo/multi_task_todo_embeddable_factory.ts
index 473e9dee87364..7364f336b722c 100644
--- a/examples/embeddable_examples/public/multi_task_todo/multi_task_todo_embeddable_factory.ts
+++ b/examples/embeddable_examples/public/multi_task_todo/multi_task_todo_embeddable_factory.ts
@@ -27,7 +27,8 @@ export type MultiTaskTodoEmbeddableFactory = EmbeddableFactory<
export class MultiTaskTodoEmbeddableFactoryDefinition
implements
- EmbeddableFactoryDefinition {
+ EmbeddableFactoryDefinition
+{
public readonly type = MULTI_TASK_TODO_EMBEDDABLE;
public async isEditable() {
diff --git a/examples/embeddable_examples/public/plugin.ts b/examples/embeddable_examples/public/plugin.ts
index 248072064e140..e59e7367e8af7 100644
--- a/examples/embeddable_examples/public/plugin.ts
+++ b/examples/embeddable_examples/public/plugin.ts
@@ -88,65 +88,74 @@ export class EmbeddableExamplesPlugin
EmbeddableExamplesStart,
EmbeddableExamplesSetupDependencies,
EmbeddableExamplesStartDependencies
- > {
+ >
+{
private exampleEmbeddableFactories: Partial = {};
public setup(
core: CoreSetup,
deps: EmbeddableExamplesSetupDependencies
) {
- this.exampleEmbeddableFactories.getHelloWorldEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- HELLO_WORLD_EMBEDDABLE,
- new HelloWorldEmbeddableFactoryDefinition()
- );
-
- this.exampleEmbeddableFactories.getMigrationsEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- SIMPLE_EMBEDDABLE,
- new SimpleEmbeddableFactoryDefinition()
- );
-
- this.exampleEmbeddableFactories.getMultiTaskTodoEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- MULTI_TASK_TODO_EMBEDDABLE,
- new MultiTaskTodoEmbeddableFactoryDefinition()
- );
-
- this.exampleEmbeddableFactories.getSearchableListContainerEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- SEARCHABLE_LIST_CONTAINER,
- new SearchableListContainerFactoryDefinition(async () => ({
- embeddableServices: (await core.getStartServices())[1].embeddable,
- }))
- );
-
- this.exampleEmbeddableFactories.getListContainerEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- LIST_CONTAINER,
- new ListContainerFactoryDefinition(async () => ({
- embeddableServices: (await core.getStartServices())[1].embeddable,
- }))
- );
-
- this.exampleEmbeddableFactories.getTodoEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- TODO_EMBEDDABLE,
- new TodoEmbeddableFactoryDefinition(async () => ({
- openModal: (await core.getStartServices())[0].overlays.openModal,
- }))
- );
-
- this.exampleEmbeddableFactories.getTodoRefEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- TODO_REF_EMBEDDABLE,
- new TodoRefEmbeddableFactoryDefinition(async () => ({
- savedObjectsClient: (await core.getStartServices())[0].savedObjects.client,
- getEmbeddableFactory: (await core.getStartServices())[1].embeddable.getEmbeddableFactory,
- }))
- );
- this.exampleEmbeddableFactories.getBookEmbeddableFactory = deps.embeddable.registerEmbeddableFactory(
- BOOK_EMBEDDABLE,
- new BookEmbeddableFactoryDefinition(async () => ({
- getAttributeService: (await core.getStartServices())[1].embeddable.getAttributeService,
- openModal: (await core.getStartServices())[0].overlays.openModal,
- savedObjectsClient: (await core.getStartServices())[0].savedObjects.client,
- overlays: (await core.getStartServices())[0].overlays,
- }))
- );
+ this.exampleEmbeddableFactories.getHelloWorldEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ HELLO_WORLD_EMBEDDABLE,
+ new HelloWorldEmbeddableFactoryDefinition()
+ );
+
+ this.exampleEmbeddableFactories.getMigrationsEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ SIMPLE_EMBEDDABLE,
+ new SimpleEmbeddableFactoryDefinition()
+ );
+
+ this.exampleEmbeddableFactories.getMultiTaskTodoEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ MULTI_TASK_TODO_EMBEDDABLE,
+ new MultiTaskTodoEmbeddableFactoryDefinition()
+ );
+
+ this.exampleEmbeddableFactories.getSearchableListContainerEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ SEARCHABLE_LIST_CONTAINER,
+ new SearchableListContainerFactoryDefinition(async () => ({
+ embeddableServices: (await core.getStartServices())[1].embeddable,
+ }))
+ );
+
+ this.exampleEmbeddableFactories.getListContainerEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ LIST_CONTAINER,
+ new ListContainerFactoryDefinition(async () => ({
+ embeddableServices: (await core.getStartServices())[1].embeddable,
+ }))
+ );
+
+ this.exampleEmbeddableFactories.getTodoEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ TODO_EMBEDDABLE,
+ new TodoEmbeddableFactoryDefinition(async () => ({
+ openModal: (await core.getStartServices())[0].overlays.openModal,
+ }))
+ );
+
+ this.exampleEmbeddableFactories.getTodoRefEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ TODO_REF_EMBEDDABLE,
+ new TodoRefEmbeddableFactoryDefinition(async () => ({
+ savedObjectsClient: (await core.getStartServices())[0].savedObjects.client,
+ getEmbeddableFactory: (await core.getStartServices())[1].embeddable.getEmbeddableFactory,
+ }))
+ );
+ this.exampleEmbeddableFactories.getBookEmbeddableFactory =
+ deps.embeddable.registerEmbeddableFactory(
+ BOOK_EMBEDDABLE,
+ new BookEmbeddableFactoryDefinition(async () => ({
+ getAttributeService: (await core.getStartServices())[1].embeddable.getAttributeService,
+ openModal: (await core.getStartServices())[0].overlays.openModal,
+ savedObjectsClient: (await core.getStartServices())[0].savedObjects.client,
+ overlays: (await core.getStartServices())[0].overlays,
+ }))
+ );
const editBookAction = createEditBookAction(async () => ({
getAttributeService: (await core.getStartServices())[1].embeddable.getAttributeService,
diff --git a/examples/embeddable_examples/public/searchable_list_container/searchable_list_container_factory.ts b/examples/embeddable_examples/public/searchable_list_container/searchable_list_container_factory.ts
index 0c7c42ef4d97f..5b09719f70b39 100644
--- a/examples/embeddable_examples/public/searchable_list_container/searchable_list_container_factory.ts
+++ b/examples/embeddable_examples/public/searchable_list_container/searchable_list_container_factory.ts
@@ -28,7 +28,8 @@ export type SearchableListContainerFactory = EmbeddableFactory<
ContainerOutput
>;
export class SearchableListContainerFactoryDefinition
- implements EmbeddableFactoryDefinition {
+ implements EmbeddableFactoryDefinition
+{
public readonly type = SEARCHABLE_LIST_CONTAINER;
public readonly isContainerType = true;
diff --git a/examples/embeddable_examples/public/todo/todo_embeddable_factory.tsx b/examples/embeddable_examples/public/todo/todo_embeddable_factory.tsx
index 2a55316e504d7..2c8b3083fd990 100644
--- a/examples/embeddable_examples/public/todo/todo_embeddable_factory.tsx
+++ b/examples/embeddable_examples/public/todo/todo_embeddable_factory.tsx
@@ -44,7 +44,8 @@ interface StartServices {
export type TodoEmbeddableFactory = EmbeddableFactory;
export class TodoEmbeddableFactoryDefinition
- implements EmbeddableFactoryDefinition {
+ implements EmbeddableFactoryDefinition
+{
public readonly type = TODO_EMBEDDABLE;
constructor(private getStartServices: () => Promise) {}
diff --git a/examples/embeddable_examples/public/todo/todo_ref_embeddable_factory.tsx b/examples/embeddable_examples/public/todo/todo_ref_embeddable_factory.tsx
index 73f34796cd91f..467318658da19 100644
--- a/examples/embeddable_examples/public/todo/todo_ref_embeddable_factory.tsx
+++ b/examples/embeddable_examples/public/todo/todo_ref_embeddable_factory.tsx
@@ -42,7 +42,8 @@ export class TodoRefEmbeddableFactoryDefinition
TodoRefOutput,
TodoRefEmbeddable,
TodoSavedObjectAttributes
- > {
+ >
+{
public readonly type = TODO_REF_EMBEDDABLE;
public readonly savedObjectMetaData = {
name: 'Todo',
diff --git a/examples/embeddable_examples/server/plugin.ts b/examples/embeddable_examples/server/plugin.ts
index a3c3d4b5284f7..469c463381d1c 100644
--- a/examples/embeddable_examples/server/plugin.ts
+++ b/examples/embeddable_examples/server/plugin.ts
@@ -17,7 +17,8 @@ export interface EmbeddableExamplesSetupDependencies {
}
export class EmbeddableExamplesPlugin
- implements Plugin {
+ implements Plugin
+{
public setup(core: CoreSetup, { embeddable }: EmbeddableExamplesSetupDependencies) {
core.savedObjects.registerType(todoSavedObject);
core.savedObjects.registerType(bookSavedObject);
diff --git a/examples/index_pattern_field_editor_example/public/plugin.tsx b/examples/index_pattern_field_editor_example/public/plugin.tsx
index ccbb93e3acf95..8ed158e9923eb 100644
--- a/examples/index_pattern_field_editor_example/public/plugin.tsx
+++ b/examples/index_pattern_field_editor_example/public/plugin.tsx
@@ -40,8 +40,7 @@ export class IndexPatternFieldEditorPlugin implements Plugin {
+ implements Plugin
+{
public setup(core: CoreSetup, plugins: SetupDeps) {
const locator = plugins.share.url.locators.create(new HelloLocatorDefinition());
diff --git a/examples/locator_explorer/public/app.tsx b/examples/locator_explorer/public/app.tsx
index 8e38c097a847e..923944833e9e0 100644
--- a/examples/locator_explorer/public/app.tsx
+++ b/examples/locator_explorer/public/app.tsx
@@ -19,7 +19,7 @@ import { EuiFieldText } from '@elastic/eui';
import { EuiPageHeader } from '@elastic/eui';
import { EuiLink } from '@elastic/eui';
import { AppMountParameters } from '../../../src/core/public';
-import { formatSearchParams, SharePluginSetup } from '../../../src/plugins/share/public';
+import { SharePluginSetup } from '../../../src/plugins/share/public';
import {
HelloLocatorV1Params,
HelloLocatorV2Params,
@@ -164,14 +164,7 @@ const ActionsExplorer = ({ share }: Props) => {
through redirect app
diff --git a/examples/locator_explorer/public/plugin.tsx b/examples/locator_explorer/public/plugin.tsx
index 3e8382f2a606f..45b1d2d7939ea 100644
--- a/examples/locator_explorer/public/plugin.tsx
+++ b/examples/locator_explorer/public/plugin.tsx
@@ -47,8 +47,7 @@ export class LocatorExplorerPlugin implements Plugin {
links: [
{
label: 'IRouter',
- href:
- 'https://github.com/elastic/kibana/blob/master/docs/development/core/server/kibana-plugin-core-server.irouter.md',
+ href: 'https://github.com/elastic/kibana/blob/master/docs/development/core/server/kibana-plugin-core-server.irouter.md',
iconType: 'logoGithub',
target: '_blank',
size: 's',
},
{
label: 'HttpHandler (core.http.fetch)',
- href:
- 'https://github.com/elastic/kibana/blob/master/docs/development/core/public/kibana-plugin-core-public.httphandler.md',
+ href: 'https://github.com/elastic/kibana/blob/master/docs/development/core/public/kibana-plugin-core-public.httphandler.md',
iconType: 'logoGithub',
target: '_blank',
size: 's',
diff --git a/examples/search_examples/public/plugin.ts b/examples/search_examples/public/plugin.ts
index 87992e5493f0e..b00362aef1f5e 100644
--- a/examples/search_examples/public/plugin.ts
+++ b/examples/search_examples/public/plugin.ts
@@ -30,7 +30,8 @@ export class SearchExamplesPlugin
SearchExamplesPluginStart,
AppPluginSetupDependencies,
AppPluginStartDependencies
- > {
+ >
+{
public setup(
core: CoreSetup,
{ developerExamples, share }: AppPluginSetupDependencies
diff --git a/examples/search_examples/public/search_sessions/app.tsx b/examples/search_examples/public/search_sessions/app.tsx
index 173cf91cd9c71..63ab706c945d5 100644
--- a/examples/search_examples/public/search_sessions/app.tsx
+++ b/examples/search_examples/public/search_sessions/app.tsx
@@ -542,14 +542,8 @@ function SearchInspector({
function useAppState({ data }: { data: DataPublicPluginStart }) {
const stateContainer = useMemo(() => {
- const {
- filters,
- time,
- searchSessionId,
- numericFieldName,
- indexPatternId,
- query,
- } = getInitialStateFromUrl();
+ const { filters, time, searchSessionId, numericFieldName, indexPatternId, query } =
+ getInitialStateFromUrl();
if (filters) {
data.query.filterManager.setFilters(filters);
diff --git a/examples/search_examples/server/fibonacci_strategy.ts b/examples/search_examples/server/fibonacci_strategy.ts
index a37438aba7055..93cb18d3e9e82 100644
--- a/examples/search_examples/server/fibonacci_strategy.ts
+++ b/examples/search_examples/server/fibonacci_strategy.ts
@@ -15,7 +15,7 @@ export const fibonacciStrategyProvider = (): ISearchStrategy<
FibonacciResponse
> => {
const responseMap = new Map();
- return ({
+ return {
search: (request: FibonacciRequest) => {
const id = request.id ?? uuid();
const [sequence, total, started] = responseMap.get(id) ?? [
@@ -48,5 +48,5 @@ export const fibonacciStrategyProvider = (): ISearchStrategy<
cancel: async (id: string) => {
responseMap.delete(id);
},
- } as unknown) as ISearchStrategy;
+ } as unknown as ISearchStrategy;
};
diff --git a/examples/search_examples/server/plugin.ts b/examples/search_examples/server/plugin.ts
index 984d3201220eb..992c260e25e9d 100644
--- a/examples/search_examples/server/plugin.ts
+++ b/examples/search_examples/server/plugin.ts
@@ -33,7 +33,8 @@ export class SearchExamplesPlugin
SearchExamplesPluginStart,
SearchExamplesPluginSetupDeps,
SearchExamplesPluginStartDeps
- > {
+ >
+{
private readonly logger: Logger;
constructor(initializerContext: PluginInitializerContext) {
diff --git a/examples/state_containers_examples/public/plugin.ts b/examples/state_containers_examples/public/plugin.ts
index df4d34ef1e1a7..ac65d42ae4050 100644
--- a/examples/state_containers_examples/public/plugin.ts
+++ b/examples/state_containers_examples/public/plugin.ts
@@ -88,16 +88,14 @@ export class StateContainersExamplesPlugin implements Plugin {
links: [
{
label: 'State containers README',
- href:
- 'https://github.com/elastic/kibana/tree/master/src/plugins/kibana_utils/docs/state_containers',
+ href: 'https://github.com/elastic/kibana/tree/master/src/plugins/kibana_utils/docs/state_containers',
iconType: 'logoGithub',
size: 's',
target: '_blank',
},
{
label: 'State sync utils README',
- href:
- 'https://github.com/elastic/kibana/tree/master/src/plugins/kibana_utils/docs/state_sync',
+ href: 'https://github.com/elastic/kibana/tree/master/src/plugins/kibana_utils/docs/state_sync',
iconType: 'logoGithub',
size: 's',
target: '_blank',
diff --git a/examples/ui_action_examples/public/plugin.ts b/examples/ui_action_examples/public/plugin.ts
index a3c2f3ea9f2c8..4845ebf683026 100644
--- a/examples/ui_action_examples/public/plugin.ts
+++ b/examples/ui_action_examples/public/plugin.ts
@@ -21,7 +21,8 @@ export interface UiActionExamplesStartDependencies {
export class UiActionExamplesPlugin
implements
- Plugin {
+ Plugin
+{
public setup(
core: CoreSetup,
{ uiActions }: UiActionExamplesSetupDependencies
diff --git a/package.json b/package.json
index 628fd320ea046..e6015c88f95a0 100644
--- a/package.json
+++ b/package.json
@@ -77,7 +77,6 @@
"**/hoist-non-react-statics": "^3.3.2",
"**/isomorphic-fetch/node-fetch": "^2.6.1",
"**/istanbul-instrumenter-loader/schema-utils": "1.0.0",
- "**/load-grunt-config/lodash": "^4.17.21",
"**/minimist": "^1.2.5",
"**/node-jose/node-forge": "^0.10.0",
"**/pdfkit/crypto-js": "4.0.0",
@@ -97,7 +96,7 @@
"@elastic/apm-rum-react": "^1.3.1",
"@elastic/charts": "34.2.1",
"@elastic/datemath": "link:bazel-bin/packages/elastic-datemath",
- "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@^8.0.0-canary.19",
+ "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@^8.0.0-canary.20",
"@elastic/ems-client": "7.15.0",
"@elastic/eui": "37.6.0",
"@elastic/filesaver": "1.1.2",
@@ -158,7 +157,8 @@
"@kbn/tinymath": "link:bazel-bin/packages/kbn-tinymath",
"@kbn/typed-react-router-config": "link:bazel-bin/packages/kbn-typed-react-router-config",
"@kbn/ui-framework": "link:bazel-bin/packages/kbn-ui-framework",
- "@kbn/ui-shared-deps": "link:bazel-bin/packages/kbn-ui-shared-deps",
+ "@kbn/ui-shared-deps-npm": "link:bazel-bin/packages/kbn-ui-shared-deps-npm",
+ "@kbn/ui-shared-deps-src": "link:bazel-bin/packages/kbn-ui-shared-deps-src",
"@kbn/utility-types": "link:bazel-bin/packages/kbn-utility-types",
"@kbn/utils": "link:bazel-bin/packages/kbn-utils",
"@loaders.gl/core": "^2.3.1",
@@ -195,7 +195,7 @@
"base64-js": "^1.3.1",
"bluebird": "3.5.5",
"brace": "0.11.1",
- "broadcast-channel": "^3.0.3",
+ "broadcast-channel": "^4.2.0",
"chalk": "^4.1.0",
"cheerio": "^1.0.0-rc.9",
"chokidar": "^3.4.3",
@@ -279,8 +279,8 @@
"lodash": "^4.17.21",
"lru-cache": "^4.1.5",
"lz-string": "^1.4.4",
- "maplibre-gl": "1.15.2",
"mapbox-gl-draw-rectangle-mode": "1.0.4",
+ "maplibre-gl": "1.15.2",
"markdown-it": "^10.0.0",
"md5": "^2.1.0",
"mdast-util-to-hast": "10.0.1",
@@ -310,7 +310,6 @@
"papaparse": "^5.2.0",
"pdfmake": "^0.1.65",
"peggy": "^1.2.0",
- "pegjs": "0.10.0",
"pluralize": "3.1.0",
"pngjs": "^3.4.0",
"polished": "^3.7.2",
@@ -368,7 +367,7 @@
"regenerator-runtime": "^0.13.3",
"remark-parse": "^8.0.3",
"remark-stringify": "^9.0.0",
- "require-in-the-middle": "^5.0.2",
+ "require-in-the-middle": "^5.1.0",
"reselect": "^4.0.0",
"resize-observer-polyfill": "^1.5.0",
"rison-node": "1.0.2",
@@ -552,7 +551,7 @@
"@types/jsdom": "^16.2.3",
"@types/json-stable-stringify": "^1.0.32",
"@types/json5": "^0.0.30",
- "@types/jsonwebtoken": "^7.2.8",
+ "@types/jsonwebtoken": "^8.5.5",
"@types/license-checker": "15.0.0",
"@types/listr": "^0.14.0",
"@types/loader-utils": "^1.1.3",
@@ -574,7 +573,7 @@
"@types/nock": "^10.0.3",
"@types/node": "14.14.44",
"@types/node-fetch": "^2.5.7",
- "@types/node-forge": "^0.9.5",
+ "@types/node-forge": "^0.10.4",
"@types/nodemailer": "^6.4.0",
"@types/normalize-path": "^3.0.0",
"@types/object-hash": "^1.3.0",
@@ -585,7 +584,7 @@
"@types/pdfmake": "^0.1.15",
"@types/pegjs": "^0.10.1",
"@types/pngjs": "^3.4.0",
- "@types/prettier": "^2.1.5",
+ "@types/prettier": "^2.3.2",
"@types/pretty-ms": "^5.0.0",
"@types/prop-types": "^15.7.3",
"@types/rbush": "^3.0.0",
@@ -635,13 +634,13 @@
"@types/webpack-merge": "^4.1.5",
"@types/webpack-sources": "^0.1.4",
"@types/write-pkg": "^3.1.0",
- "@types/xml-crypto": "^1.4.1",
+ "@types/xml-crypto": "^1.4.2",
"@types/xml2js": "^0.4.5",
"@types/yauzl": "^2.9.1",
"@types/zen-observable": "^0.8.0",
"@typescript-eslint/eslint-plugin": "^4.14.1",
- "@typescript-eslint/typescript-estree": "^4.14.1",
"@typescript-eslint/parser": "^4.14.1",
+ "@typescript-eslint/typescript-estree": "^4.14.1",
"@yarnpkg/lockfile": "^1.1.0",
"abab": "^2.0.4",
"aggregate-error": "^3.1.0",
@@ -706,7 +705,7 @@
"eslint-plugin-no-unsanitized": "^3.0.2",
"eslint-plugin-node": "^11.0.0",
"eslint-plugin-prefer-object-spread": "^1.2.1",
- "eslint-plugin-prettier": "^3.1.4",
+ "eslint-plugin-prettier": "^3.4.1",
"eslint-plugin-react": "^7.20.3",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-react-perf": "^3.2.3",
@@ -720,9 +719,6 @@
"form-data": "^4.0.0",
"geckodriver": "^2.0.4",
"glob-watcher": "5.0.3",
- "grunt": "1.3.0",
- "grunt-available-tasks": "^0.6.3",
- "grunt-peg": "^2.0.1",
"gulp": "4.0.2",
"gulp-babel": "^8.0.0",
"gulp-brotli": "^3.0.0",
@@ -760,7 +756,6 @@
"license-checker": "^16.0.0",
"listr": "^0.14.1",
"lmdb-store": "^1.6.6",
- "load-grunt-config": "^3.0.1",
"marge": "^1.0.1",
"micromatch": "3.1.10",
"minimist": "^1.2.5",
@@ -787,7 +782,7 @@
"postcss": "^7.0.32",
"postcss-loader": "^3.0.0",
"postcss-prefix-selector": "^1.7.2",
- "prettier": "^2.2.0",
+ "prettier": "^2.4.0",
"pretty-ms": "5.0.0",
"q": "^1.5.1",
"react-test-renderer": "^16.12.0",
@@ -833,7 +828,7 @@
"webpack-merge": "^4.2.2",
"webpack-sources": "^1.4.1",
"write-pkg": "^4.0.0",
- "xml-crypto": "^2.0.0",
+ "xml-crypto": "^2.1.3",
"xmlbuilder": "13.0.2",
"yargs": "^15.4.1",
"zlib": "^1.0.5"
diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel
index deec9d6bf5dc0..36bdee5303cb7 100644
--- a/packages/BUILD.bazel
+++ b/packages/BUILD.bazel
@@ -62,7 +62,8 @@ filegroup(
"//packages/kbn-tinymath:build",
"//packages/kbn-typed-react-router-config:build",
"//packages/kbn-ui-framework:build",
- "//packages/kbn-ui-shared-deps:build",
+ "//packages/kbn-ui-shared-deps-npm:build",
+ "//packages/kbn-ui-shared-deps-src:build",
"//packages/kbn-utility-types:build",
"//packages/kbn-utils:build",
],
diff --git a/packages/README.md b/packages/README.md
index a328fe70e201f..57c865aedf649 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -51,7 +51,7 @@ A package should follow the pattern of having `.test.js` files as siblings of th
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` or `yarn grunt test` runs all unit tests.
+* `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.
diff --git a/packages/kbn-analytics/src/application_usage_tracker.ts b/packages/kbn-analytics/src/application_usage_tracker.ts
index b1cc47334541a..751fb9203fe62 100644
--- a/packages/kbn-analytics/src/application_usage_tracker.ts
+++ b/packages/kbn-analytics/src/application_usage_tracker.ts
@@ -132,9 +132,9 @@ export class ApplicationUsageTracker {
}
public pauseTrackingAll() {
- this.currentApplicationKeys = Object.values(
- this.trackedApplicationViews
- ).map(({ appId, viewId }) => this.createKey(appId, viewId));
+ this.currentApplicationKeys = Object.values(this.trackedApplicationViews).map(
+ ({ appId, viewId }) => this.createKey(appId, viewId)
+ );
this.flushTrackedViews();
}
diff --git a/packages/kbn-babel-preset/styled_components_files.js b/packages/kbn-babel-preset/styled_components_files.js
index feff76605f457..2f48e39ac9456 100644
--- a/packages/kbn-babel-preset/styled_components_files.js
+++ b/packages/kbn-babel-preset/styled_components_files.js
@@ -12,7 +12,7 @@ module.exports = {
* Used by `kbn-babel-preset` and `elastic-eslint-config-kibana`.
*/
USES_STYLED_COMPONENTS: [
- /packages[\/\\]kbn-ui-shared-deps[\/\\]/,
+ /packages[\/\\]kbn-ui-shared-deps-(npm|src)[\/\\]/,
/src[\/\\]plugins[\/\\](data|kibana_react)[\/\\]/,
/x-pack[\/\\]plugins[\/\\](apm|beats_management|cases|fleet|infra|lists|observability|osquery|security_solution|timelines|uptime)[\/\\]/,
/x-pack[\/\\]test[\/\\]plugin_functional[\/\\]plugins[\/\\]resolver_test[\/\\]/,
diff --git a/packages/kbn-config-schema/src/types/object_type.ts b/packages/kbn-config-schema/src/types/object_type.ts
index 284ea6fddb35b..784b17a92c397 100644
--- a/packages/kbn-config-schema/src/types/object_type.ts
+++ b/packages/kbn-config-schema/src/types/object_type.ts
@@ -35,8 +35,9 @@ type RequiredProperties = Pick<
// Because of https://github.com/Microsoft/TypeScript/issues/14041
// this might not have perfect _rendering_ output, but it will be typed.
export type ObjectResultType